분류 전체보기
-
[스프링부트/웹 애플리케이션 개발]상품 엔티티 개발스프링&스프링부트 2023. 1. 4. 23:39
구현기능 : 상품등록, 상품 목록 조회, 상품 수정 순서 : 상품 엔티티 개발(비즈니스 로직 추가) > 상품 리포지토리 개발 > 상품 서비스 개발 > 상품 기능 개발 상품 엔티티 @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="dtype") @Getter @Setter public abstract class Item { private int stockQuantity; @ManyToMany(mappedBy = "items") private List categories = new ArrayList(); //비즈니스 로직 //재고수 증가 //도메인 주도 설계 > 엔티티 안에 비즈니스 로직 추가 (객체..
-
[스프링부트/웹 애플리케이션 개발]회원 기능 테스트스프링&스프링부트 2023. 1. 4. 22:49
테스트 요구사항 - 회원가입 성공 - 회원가입 할 때 같은 이름이 있으면 예외 발생 회원가입 test @RunWith(SpringRunner.class) @SpringBootTest @Transactional class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test public void 회원가입() throws Exception { //given Member member = new Member(); member.setName("kim"); //when Long saveId = memberService.join(member); //then assertEq..
-
[스프링부트/웹 애플리케이션 개발]회원 repository, 회원 service 개발, 인젝션 방법 3가지, @RequiredArgsConstructor스프링&스프링부트 2023. 1. 4. 17:33
- 구현 기능 : 회원 등록 / 회원 목록 조회 1. 회원 repository package jpabook.jpashop.repository; import jpabook.jpashop.domain.Member; import org.springframework.stereotype.Repository; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import java.util.List; @Repository public class MemberRepository { @PersistenceContext private EntityManager em; //스프링이 EntityManager를 만들어서 주입해 줌..
-
[스프링부트/웹 애플리케이션 개발]애플리케이션 아키텍처스프링&스프링부트 2023. 1. 4. 16:28
- 회원 기능 > 회원 등록 > 회원 조회 - 상품 기능 > 상품 등록 > 상품 수정 > 상품 조회 - 주문 기능 > 상품 주문 > 주문 내역 조회 > 주문 취소 - 예제를 단순화하기 위해 다음 기능은 구현X > 인강 끝나고 따로 구현해 보기 > 로그인과 권한 관리X > 파라미터 검증과 예외 처리X > 상품은 도서만 사용 > 카테고리는 사용X > 배송 정보는 사용X 계층형 구조 사용 - controller, web : 웹 계층 - service : 비즈니스 로직, 트랜잭션 처리 - repository : JPA를 직접 사용하는 계층, 엔티티 매니저 사용 - domain : 엔티티가 모여 있는 계층, 모든 계층에서 사용 개발 순서: 서비스, 리포지토리 계층을 개발하고, 테스트 케이스를 작성해서 검증, 마지..
-
[스프링부트/웹 애플리케이션 개발]엔티티 설계 주의 사항스프링&스프링부트 2023. 1. 4. 16:14
1) 엔티티에는 가급적 Setter 사용하지 말기 > Setter가 열려있으면 변경 포인트가 너무 많아서 유지보수가 어렵다. > Setter 없이 애플리케이션 충분히 개발할 수 있음 2) 모든 연관관계는 지연로딩(LAZY)으로 설정하기 > 즉시로딩(EAGER)은 예측이 어렵고 어떤 SQL이 실행된 지 추적하기 어려움 > 즉시로딩이란? 예를들어 Member를 조회하는데 연관된 Order도 한 번에 조회 (로딩 시점에 다른 것들도 같이 로딩) > 특히 JPQL을 실행할 때 N-1문제가 자주 발생 > 연관된 엔티티를 함께 DB에서 조회가 필요하다면 fetch join 또는 엔티티 그래프 기능 사용 > @XToOne(OneToOne, ManyToOne) 관계는 기본이 즉시로딩이므로 직접 지연 로딩으로 설정해야 ..
-
[스프링부트/웹 애플리케이션 개발]엔티티 클래스 개발 -2스프링&스프링부트 2023. 1. 4. 14:46
배송 엔티티 package jpabook.jpashop.domain; import lombok.Getter; import lombok.Setter; import javax.persistence.*; @Entity @Getter @Setter public class Delivery { @Id @GeneratedValue @Column(name="delivery_id") private Long id; @OneToOne(mappedBy = "delivery", fetch = FetchType.LAZY) private Order order; @Embedded private Address address; @Enumerated(EnumType.STRING) private DeliveryStatus status; /..
-
[스프링부트/웹 애플리케이션 개발]엔티티 클래스 개발 -1스프링&스프링부트 2023. 1. 4. 14:43
- 예제 > 쉽게 설명하기 위해 Getter, Setter 모두 열고 단순하게 설계 - 실무 > Getter는 열어두고 Setter는 꼭 필요한 경우에만 사용하는 것을 추천 >> 이론적으로 Getter, Setter 모두 제공하지 않고, 꼭 필요한 별도의 메서드를 제공하는 게 가장 이상적이다. 하지만 실무에서 엔티티의 데이터는 조회할 일이 너무 많으므로, Getter의 경우 모두 열어두는 것이 편리하다. Getter는 아무리 호출해도 호출하는 것 만으로 어떤 일이 발생하지는 않는다. 하지만 Setter는 문제가 다르다. Setter를 호출하면 데이터가 변한다. Setter를 막 열어두면 가까운 미래에 엔티티가 도대체 왜 변경되는지 추적하기 점점 힘들어진다. 그래서 엔티티를 변경할 때는 Setter 대신에..
-
[스프링부트/웹 애플리케이션 개발]기본 설계스프링&스프링부트 2023. 1. 3. 17:52
요구사항 분석 기능 목록 - 회원 기능 > 회원 등록 > 회원 조회 - 상품 기능 > 상품 등록 > 상품 수정 > 상품 조회 - 주문 기능 > 상품 주문 > 주문 내역 조회 > 주문 취소 - 기타 요구사항 > 상품은 재고 관리가 필요하다. > 상품의 종류는 도서, 음반, 영화가 있다. > 상품을 카테고리로 구분할 수 있다. > 상품 주문 시 배송 정보를 입력할 수 있다. 도메인 모델과 테이블 설계 - 다대다 관계 > 엔티티(주문상품)를 추가해 일대다, 다대일 관계로 풀어낸다 회원 엔티티 분석 - 회원 : 이름과 임베디드 타입(내장값 타입)인 주소, 주문 리스트를 갖는다 회원 테이블 분석 - item > single table 전략, 테이블 하나에 넣고 DTYPE으로 구분 > table 하나에 모든 정보가..