전체 글 (32) 썸네일형 리스트형 [ JPA ] 상품 / 주문 도메인 개발 [ 상품 도메인 개발 ] 구현 기능 : 상품 등록, 상품 목록 조회, 상품 수정 순서 : 상품 엔티티 개발(비지니스 로직 추가) > 상품 리포지토리 개발 > 상품 서비스 개발 상품 엔티티 개발 상품 수량을 늘리고, 줄이는 기능을 개발할껀데, 엔티티 자체에 해결할 수 있는것은 엔티티 안에서 비지니스 로직을 만드는것이 응집도가 있다. /* stock 증가 */ public void addStock(int quantity){ this.stockQuantity += quantity; } /* stock 감소 */ public void removeStock(int quantity){ int restStock = this.stockQuantity - quantity; if(restStock < 0) { throw .. [ JPA ] 회원 도메인 개발 도메인 분석, 설계를 다 했다면, 본격 개발을 시작해 보자 개발순서 : 레포지토리 계층 > 서비스 > 테스트 케이스 검증 > 계층에 적용 회원 레포지토리 repository 패키지를 먼저 만들고, MemberRepository java파일을 생성 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 // 스프링 빈으로 등록, J.. [ JPA ] 영속성 컨텍스트 + 엔티티 매핑 JPA에서 가장 중요한 두가지 - 객체와 관계형 데이터 베이스 매핑하기 (설계,정적) - 영속성 컨텍스트 (실제 동작) 우선 영속성 컨텍스트에 대해 알아보자 "엔티티를 영구 저장하는 환경" 논리적인 개념으로 눈에 보이지 않는다. 엔티티 매니저를 통해 영속성 컨텍스트에 접근할 수 있다. >> persist 메서드는 DB에 저장하는것이 아니라 엔티티를 영속성 컨텍스트라는곳에 저장한다는것 [ 엔티티의 생명주기 ] · 비영속 ( new / transient ) Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); · 영속 ( managed ) // 객체를 생성한 상태(비영속) Member member = new Memb.. [ JPA ] 엔티티 클래스 개발 [ 엔티티 설계시 주의점 ] 엔티티에는 Setter를 사용하지 말자! setter가 모두 열려있다면, 변경포인트가 너무많아서 이후에 유지보수시에 어려워진다. 모든 연관관계는 지연로딩으로 설정! 즉시로딩( EAGER )은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1 문제 가 자주 발생한다. 실무에서 모든 연관관계는 지연로딩( LAZY )으로 설정해야 한다. 연관된 엔티티를 함께 DB에서 조회해야 하면, fetch join 또는 엔티티 그래프 기능을 사용한다. @OneToMany(mappedBy = "order" ,cascade = CascadeType.ALL) private List orderItems = new ArrayList(); @OneToOne(fet.. [ JPA ] 도메인 분석 설계 [ 요구사항 분석 ] - 기능 목록 ● 회원 기능 > 회원 등록 > 회원 조회 ● 상품 기능 > 상품 등록 > 상품 수정 > 상품 조회 ● 주문 기능 > 상품 주문 > 주문 내역 조회 > 주문 취소 ● 기타 요구사항 > 상품은 재고 관리가 필요하다 > 상품의 종류는 도서, 음반, 영화가 있다. > 상품을 카테고리로 구분할 수 있다. > 상품 주문시 배송 정보를 입력할 수 있다. 회원 : 주문 = 1 : 多 주문 : 배송 = 1 : 1 주문 : 주문상품 = 1 : 多 상품(물품) : 주문상품 = 1: 多 상품(물품) : 카테고리 = 多 : 多 * 상품 = 도서 / 음반 / 영화 * 카테고리는 부모/자식 관계가 있다. * order 와 delivery는 양방향 관계 * 다 : 다 관계는 실무에서 가지면 안된.. [ JPA ] View 환경설정 + DB 설정 [ View 환경설정 ] Spring에서 공식적으로 사용을 권장하는 thymeleaf 를 사용해서 View를 연동하도록 하자 프로젝트를 생성할때 이미 thymeleaf 를 추가해서 디펜덴시에 라이브러리가 추가되어있다. Thymeleaf 템플릿 엔진의 일종. html 태그에 속성을 추가해 페이지에 동적으로 값을 추가하거나 처리할 수 있다. 타임리프는 html태그를 기반으로 하여 th: 속성을 이용하여 동적인 View를 제공 장점 > Nature templates, 순수 HTML을 그대로 유지하면서도 뷰 템플릿을 사용할 수있다. 단점 > 2.x버전에서 태그사용시 열고 닫고를 무조건 해줘야한다. (3.x버전부터 열고 닫고안 해도 사용가능) 스프링 부트 thymeleaf viewName 매핑 resour.. [ JPA ] 프로젝트 생성 + 라이브러리 우선 JPA를 사용하는 이유 부터 생각해보자 어떤 프레임워크든 데이터베이스와의 연동이 필요하다. 예전 개발자들은 JDBC API로 직접 코딩을 한다던가, 여러모로 귀찮은 방법으로 하나하나 연동하고 값을 넣고, 받아오는 방식으로 개발을 진행했다. 한국에서 점유율이 높은 MyBatis도 mapper를 통해 직접 쿼리문을 작성해야 한다. 이런 과정을 좀더 간략하게 좀더 쉽게 할수있는 방법이 JPA이다 JPA를 사용하면 데이터중심의 설계에서 객체중심의 설계를 할 수있다. MyBatis를 계속해서 사용해왔던 내입장에서 생각해보면 내가 했던 개발이 정말 데이터중심이었다는걸 새삼 느꼈다. 그렇다고 무턱대고 JPA를 건들여서는 안된다. 간단하고 편리해보이는만큼 까다롭고 신중하게 사용해야 한다 그래서 강의를 들으면서 배.. [ intelliJ ] 윈도우 단축키 으아 답답해서 정리좀 해야겠다 일반 ctrl + alt + s : 설정(preference) ctrl + alt + shift + s : 프로젝트 구조 열기 ----------------------------------------------------------------------------------------------- 검색 shift + shift : 검색열기 ctrl + shift + f : 문자열 검색창 열기 ctrl + f : 현재 파일에서 검색 ctrl + r : 현재 파일에서 문자열 대체 ----------------------------------------------------------------------------------------------- 에디터 ctrl + space.. 이전 1 2 3 4 다음 목록 더보기