본문 바로가기

Spring/SpringBoot

(12)
@SpringBoot- @NotNull VS @Column(nullable=false) 공통점 우선 @Column(nullable = false)을 사용할 때와 마찬가지로 @NotNull 역시 테이블 생성시 NOT NULL DDL이 입력된다. 이는 Hibernate가 @NotNull 어노테이션 역시 해석할 수 있기 때문이다. 차이점 본격적인 차이로, @Column(nullable = false)는 JPA가 만든 엔티티의 필드 값이 null로 채워진 상태에서도 정상적으로 수행되다가 데이터베이스 쪽으로 SQL 쿼리가 도착한 순간에 테이블 컬럼의 NOT NULL 옵션에 의해 예외가 발생된다. 그러나 @NotNull 어노테이션은 데이터베이스 쪽으로 SQL 쿼리가 보내지기 전에, 정확히는 JPA가 만든 엔티티의 필드 값이 null로 채워지는 순간에 예외가 던져진다. 즉 @NotNull 어노테이션이 ..
SpringBoot- @DeleteMapping @PostMapping과 @DeleteMapping의 차이점. 기본적으로 POST 메서드를 통해서 DELETE 메서드의 역할을 충분히 수행할 수 있다. 그렇다면 굳이 @DeleteMapping을 사용하는 이유는 뭘까? - 가독성 가장 근본적인 이유는 가독성에 있다. 어떠한 엔티티를 삭제하기 위한 컨트롤러 메서드를 생성했다면 어노테이션으로는 @PostMapping 또는 @DeleteMapping을 사용할 수 있을텐데 이때 DeleteMapping으로 설정하게 된다면, 코드를 보는 입장에서 이 메서드는 명확하게 DELETE 메서드를 수행하는 메서드이다란 것을 이해할 수 있게 된다. @DeleteMapping 사용법 @DeleteMapping을 사용하기 위해선 설정이 필요하다. form 태그의 method에 ..
SpringBoot-JPA에서 DTO로 바로 조회하기 package jpabook.jpashop.repository; import jpabook.jpashop.domain.Member; import jpabook.jpashop.domain.Order; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import org.springframework.util.StringUtils; import javax.persistence.EntityManager; import javax.persistence.TypedQuery; import javax.persistence.criteria.*; import java.util.ArrayList; import java..
SpringBoot- 패치 조인 최적화 연관된 엔티티를 가져오는 경우 Order에는 Member와 Delivery 엔티티가 연관되어있다고 할 때, 현재 저장 되어있는 Order 엔티티와 Member, Delivery의 정보를 함께 가져와보자. 1) 최적화가 되어있지 않는 경우 (1+N 문제 발생) Member와 Delivery 엔티티는 Order와 양방향 매핑 되어있다. 내가 만일 Order 엔티티를 단순 join문 만을 이용한 쿼리문으로 조회를 한다고 하면 다음과 같이 쿼리가 발생할 것이다. public List findAllByString(OrderSearch orderSearch) { //language=JPQL String jpql = "select o From Order o join o.member m"; boolean isFirst..
SpringBoot- API API Mapping 어노테이션 API는 기본적으로 통신을 위한 것이고, 다양한 매핑 어노테이션을 사용한다. 기존에 봐왔던 @RequestMapping, @GetMapping등이 존재한다. @RequestMapping @GetMapping: 데이터를 가져오는 경우에 사용한다. @PostMapping: 가입, 생성 시에 사용한다. @PutMapping: POST와 유사하나 멱등성을 가진다. 전체 update가 필요한 경우에는 @PutMapping을 사용한다. 만일 부분 update가 필요한 경우에는 PUT 대신 POST를 사용한다. @DeleteMapping: 삭제시에 사용한다. API 설계 (1) - GetMapping API를 설계하는데 있어서 중요한 점은 절대로 엔티티 그 자체를 노출시키지 않는다는 ..
SpringBoot- @Valid, @ResponseBody, @RequestBody 유효성 검증 어노테이션 @NotNull : 해당 필드에 null값을 불허한다. @NotEmpty : 해당 필드에 null, ""을 불허한다. @NotBlank : 해당 필드에 null, "", " " 을 불허한다. 즉 최소 1글자 @Min : 해당 필드의 최소값을 벗어나는지 검증한다. @Max : 해당 필드의 최대값을 벗어나는지 검증한다. @Pattern : 해당 필드가 특정 형태를 가지도록 검증한다. (정규표현식으로 표현함) @Email : 해당 필드가 이메일 형식을 가지도록 검증한다. @Size : 문자열의 최소, 최대 크기를 검증한다. @Size(min=10, max=100) 과 같이 사용할 수 있으며, 기본값은 min=0, max=정수형의 최대값 이다. @Valid, @ResponseBody, @..
SpringBoot- @GetMapping, @PostMapping @GetMapping @GetMapping 어노테이션은 @RequestMapping 어노테이션의 method = RequestedMethod.GET의 축약형이다. @GetMapping("/") @RequestMapping(value = "/", method = RequestedMethod.GET) //same 예를 들어 다음 코드를 보자 MemberForm.java @Getter @Setter public class MemberForm { // Member를 위한 DTO @NotEmpty(message = "회원 이름은 필수입니다.") // 값이 없는 경우 에러발생함 private String name; private String city; private String street; private Stri..
SpringBoot- Controller MVC 패턴 컨트롤러에서는 model에서 데이터를 가져와 이를 뷰에 전달한다. 이를 MVC 패턴이라고 한다. Controller 1) HomeController 예시 HomeController.java package jpabook.jpashop.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @Slf4j // logger 생성: Logger log = (Logger) LoggerFactory.getLogger(getClass()); public cla..