백엔드 28

검증2 - Validation

1. Bean Validaion - 소개 Bean Validation 이란 검증 애노테이션과 여러 인터페이스의 모음이다. 2. Bean Validation - 시작 implementation 'org.springframework.boot:spring-boot-starter-validation' 를 build.gradle에 추가해야한다. import lombok.Data; import org.hibernate.validator.constraints.Range; import javax.validation.constraints.Max; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @Data p..

검증1 - Validation

검증 타입, 필드 등 오류가 발생할 시 수행하는 로직을 뜻한다. 1. 검증 직접 처리 Map errors = new HashMap(); 을 사용하여 어떤 검증에서 오류가 발생했는지 정보를 담는다. 문제점: 만약 문자타입으로 입력이 들어오면 오류가 발생한다. 오류 발생시 입력 내용이 사라짐 2. BindingResult BindingResult 파라미터의 위치는 @ModelAttribute Item item 다음에 와야 한다. 필드에 오류가 발생하면 FieldError를 사용하고 글로벌 오류가 발생하면 ObjectError을 사용한다. FieldError , ObjectError 생성자 소개 objectName : @ModelAttribute 이름 field : 오류가 발생한 field 이름 default..

메시지, 국제화

1. 메시지 만약 변수명을 바꿔 달라는 요청이 온다면 어떻게 해야할까?? 해당하는 변수명을 다 찾아가면서 모두 변경하기에는 어려움이 있다. 그래서 메시지를 사용해야한다. 메시지는 다양한 메시지를 한 곳에서 관리하도록 하는 기능이다. 1.1 스프링 메시지 소스 설정 스프링 부트를 사용하면 스프링 부트가 MessageSource를 자동으로 스프링 빈으로 등록한다. spring.messages.basename=messages 이것을 스프링 빈에 등록하면 메시지 소스가 적용된다. 사용법: messages_en.properties, messages_ko.properties 등등 이렇게 등록하면 자동으로 인식한다. 1.2 스프링 메시지 소스 사용 이런식으로 사용하면 된다. code = 변수명 args = 파라메터 ..

타임리프 - 기본 기능

텍스트 - text, utext 1.1 기본적인 텍스트 출력 기능 //controller에서 model.addAttribute("data", "Hello World"); //으로 데이터를 보낸다 이런식으로 작성하면 된다. 1.2 escape 웹 브라우저에서는 th:utext [[...]] ㅡ> [(...)] 로 바꾸면 된다. 1.3 SpringEL 아래의 설명은 PDF파일을 참고했습니다. Object user.username : user의 username을 프로퍼티 접근 ㅡ> user.getUsername() user['username'] : 위와 같음 ㅡ> user.getUsername() user.getUsername() : user의 getUsername() 을 직접 호출 List users[0]...

실전! 스프링 부트와 JPA 활용1 - 상품, 주문 도메인 개발

데이터를 가지고 있는 쪽에 비즈니스 메서드가 있는 것이 좋다. 왜냐하면 응집력이 높아지기 때문이다. 생성로직을 변경할 때 setter를 사용하다보면 다양한 곳에서 값을 변경하게 되어 객체의 일관성이 떨어진다. 엔티티에서 setter를 사용하는 대신에 생성자를 통해 파라미터를 넘기는 것이 좋다. 그래서 protected OrderItem을 사용하면 방지할 수 있다. Lombok 어노테이션을 사용하여 protected 생성자를 생성할 수 있다. cascade (영속성 전이) 부모 엔티티가 영속화 될 때, 자식 엔티티도 같이 영속화 되고 부모 엔티티가 삭제 될 때, 자식 엔티티도 삭제가 되는 등 부모의 영속성 상태가 전이되는 것을 이야기한다. 도메인 모델 패턴 vs 트랜잭선 스크립트 패턴 도메인 모델 패턴: ..

실전! 스프링 부트와 JPA 활용1 - 웹 계층 개발

폼 객체 사용 vs 엔티티 객체 사용 만약 요구사항이 단순하다면 엔티티를 그대로 사용해도 된다. 하지만 실무에서는 요구사항이 단순한 경우가 없다. 요구사항이 복잡해진다면 화면을 처리하기 위한 기능이 증가하게 된다. 결국 엔티티는 유지보수성이 어려워질 것이다. 그래서 API에 맞는 DTO, 폼 객체를 사용하고 엔티티는 최대한 순수하게 유지해야한다. 엔티티를 변경할 때는 항상 원하는 데이터만 변경할 수 있도록 변경 감지 기능을 사용해야한다. 컨트롤러에서 엔티티를 생성하지 말자. 트랜잭션이 있는 서비스 계층에서 식별자 ID와 변결할 데이터를(파라미터 or DTO) 명확하게 전달한다. 트랜잭션이 있는 서비스 계층에서 영속 상태의 엔티티를 조회하고 직접 그곳에서 데이터를 변경한다.

실전! 스프링 부트와 JPA 활용1 - 회원 도메인 개발

package jpabook.jpashop.service; import jpabook.jpashop.Member; import jpabook.jpashop.repository.MemberRepository; import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service @R..

실전! 스프링 부트와 JPA 활용1 - 도메인 분석 설계

연관 관계 외래 키가 있는 곳을 연관관계의 주인으로 정해라. 엔티티 클래스 개발1 엔티티의 식별자 id를 사용하고 pk칼럼명을 member_id로 사용했다. id라고 작성해도 되지만 테이블의 타입을 구분하기 위해 테이블명 + id를 사용하였다. @Embeddable, @Embedded 중복되는 column들을 객체로 해결한다. @Embeddable 하나로 표현하고자 하는 개념에 해당하는 클래스를 생성한 뒤 클래스 상단에 @Embeddable을 입력한다. @Embedded 객체 필드를 생성하고, 필드 바로위에 @Embedded 어노테이션을 부여하면 된다. @Enumerated EnumType을 사용할 때 쓰는 어노테이션이다. 꼭 @Enumerated(EnumType.STRING)을 사용하도록 하자 defa..

1 2 3