Spring/JPA 17 7. 웹 계층 개발 1. 기본 디자인 resource.static 경로에 부트스트랩(css / js) 코드를 추가해준다. 2. @NotEmpty와 @Valid 어노테이션 1) @NotEmpty - 필드 값이 null과 "" 둘 다 허용하지 않게 한다. → 위 경우에 에러 발생 public class MemberForm { @NotEmpty(message = "회원 이름은 필수입니다.") private String name; } 2) @Valid - 데이터 바인딩 및 유효성 검증을 수행하는데 사용된다. @PostMapping("members/new") public String create(@Valid MemberForm memberForm, BindingResult result) { if (result.hasErrors()).. 2023. 11. 13. 6. 주문 도메인 개발 1. 도메인 모델 패턴 vs 트랜잭션 스크립트 패턴 도메인 모델 패턴 - Entity에 비즈니스 로직을 구현 - Service 계층은 주로 엔티티에 필요한 요청을 위임하는 역할 - Entity에 대한 테스트를, 데이터베이스나 JPA와 관계없이 쉽게 만들 수 있음. ex. (실무에서는) Item Entity에 대한 removeStock() 메서드의 단위테스트를 만들어주는 게 낫다. 트랜잭션 스크립트 패턴 (일반적인 SQL 패턴) - Service 계층에 비즈니스 로직을 구현 - Entity는 단순하게 데이터를 전달하는 역할 정리 - 프로젝트의 성격과 요구사항에 따라 선택할 수 있다. - 도메인 모델 패턴은 객체지향적이며 엔티티 중심의 설계를 지향, 엔티티의 비즈니스 로직을 명확하게 표현할 때 유용하다. -.. 2023. 11. 7. 5. 상품 도메인 개발 객체지향적 프로그래밍 [도메인 주도 설계] (ex. OrderService : 비즈니스 로직 ) - Service에서 엔티티를 가져와서 비즈니스 로직을 작성하기보다는, Entity의 핵심 비즈니스 로직을 해당 엔티티 내에 존재하게 코드를 작성한다. 즉, Service는 비즈니스 로직을 호출하는 역할만 한다. (ex. ItemService, MemberService : DB 로직) - Service는 Repository에 위임만 하는 형식이다. 간단한 경우에는, Controller에서 바로 Repo에 접근해서 Service(DB 로직)을 실행해도 되는지에 대해서, 잠깐 고민해보자! → Controller는 요청을 처리하고 적절한 Service를 호출하고, DB 로직을 실행하는 것이 객체지향적 Service.. 2023. 11. 6. 4. 회원 도메인 개발 1. SQL vs JPQL sql : 테이블을 대상으로 쿼리 jpql : 엔티티를 대상으로 쿼리 2. 트랜잭션, @Transactional(readOnly = "") 트랜잭션 : 데이터를 추가, 변경할 때 트랜잭션 안에서 실행되어야 한다. @Transactional javax : Java EE에서 제공하는 JTA를 사용하여 트랜잭션 관리 spring : DB 트랜잭션을 관리하는 데 사용 @Transactional(readOnly = true) defalut = "false" readOnly : 트랜잭션에 읽기 전용 모드 설정 → 성능 최적화, DB 변경 방지 *쓰기 작업에서 readOnly = true 로 설정 시, 데이터 수정이 안 된다. 3. 트랜잭션과 영속성 컨텍스트, @Transcational(r.. 2023. 11. 6. 3. 애플리케이션 구현 준비 애플리케이션 아키텍처 1) 계층형 구조 - controller : 웹 계층, 사용자의 웹 요청(request)을 받아들이고 응답(response)을 제공한다. - service : 비즈니스 로직을 처리하고 트랜잭션을 관리한다. 요구사항을 구현하며, 데이터를 가공하여 도매인 객체를 조작한다. - repository : 데이터베이스와 직접 상호작용 한다. 데이터베이스 연결, 쿼리 작성, 데이터 검색 및 업데이트를 처리한다. 데이터베이스 관련 작업을 추상화 한다. - domain : 엔티티 및 비즈니스 객체가 모여있는 계층이다. 애플리케이션의 핵심 도메인 객체를 정의하고 관리한다. 2) 패키지 구조 2023. 11. 6. 2. 도메인 분석 설계 1. 요구사항 분석 1) 회원 기능 - 회원 등록 - 회원 조회 2) 상품 기능 - 상품 등록 - 상품 수정 - 상품 조회 3) 주문 기능 - 상품 주문 - 주문 내역 조회 - 주문 취소 4) 기타 요구사항 - 상품은 재고 관리가 필요하다. - 상품의 종류는 도서, 음반, 영화가 있다. - 상품을 카테고리로 구분할 수 있다. - 상품 주문시 배송 정보를 입력할 수 있다. 2. 도메인 모델과 테이블 설계 - 다대다 관계는 관계형 데이터베이스는 물론, 엔티티에서도 거의 사용하지 않는다. 따라서 '주문상품'이라는 엔티티를 추가해서 일대다, 다대일 관계로 풀어냈다. 3. 회원 엔티티 분석 - 실무에서는 회원이 주문을 참조하지 않고, 주문이 회원을 참조하는 것으로 충분하다. ('多'에서 '一'을 참조한다.) → .. 2023. 8. 16. 이전 1 2 다음