생성자 관련 annotation - OOOArgsConstructor
@RequiredArgsConstructor
final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만들어줌.
@AllArgsConstructor
모든 필드 값을 파라미터로 받는 생성자를 만들어줌. 파라미터를 다 받아야함. 근데 이렇게 하면 필요한 걸 빠뜨리지 않고 객체를 만들 수는 있겠지만 다 넣어야 해서 오히려 객체 만들기 자체가 어려울 수 있음.
@NoArgsConstructor
파라미터 아무것도 없는 기본 생성자. 이게 있어야 jpa가 테이블을 만들어줌. 객체화 하려면 생성자가 있어야하는데, 파라미터를 넘겨줘야만 객체를 만들 수 있는 상황이라면 객체를 쉽게 만들 수가 없고 그렇게 되면 테이블에 넣을 수 없기 때문에, 기본 생성자로 다루는 것임.
@Getter, @Setter
lombok 라이브러리 쓰면 게터 세터를 주입할 수 있다.
@Controller, @service, @Repository
다 컨테이너에 등록해서 빈객체 생성해주는건데 같은기능이지만 용도 구분을 위해 이름 다른것
@Transactional ★
db를 다룰 때 트랜잭션을 적용하면 데이터 추가, 갱신, 삭제 등을 하다가 오류가 발생했을 때 모든 작업들을 원상태로 되돌릴 수 있다. 또한 service 로직에서 하는 행동이 create가 아니라 이미 있는 걸 수정하는 update일 때 Transactional이 붙어있으면 DB를 안건들이고도 자동으로 업데이트가 되는데 controller 로직에서는 transactional없어서 직접 DB를 건들여줘야함. 즉 Service단에서 Transactional이 있으면 DB 건드는 로직이 필요 없고, Controller에는 이게 없어서 DB를 직접적으로 건들이는 코드가 필요하다는 것. 즉, DB 최적화에 도움이 되므로 적절한 때에 사용해주자.
ex. memberRepo.save / memberRepo.join
RestApi 관련 annotation
@OOOMapping
GET, POST, DELETE, PUT, PATCH 매핑이 있고, uri 설정할때 사용
@RequestBody
클라 → 서버로 json 보낼 때 서버에서 @RequestBody 써서 body에 담긴 값들을 자바 객체로 변환 시켜, 객체에 저장
@RequestMapping
들어온 요청을 특정 메서드와 매핑하기 위해 사용하는 것. value와 method를 사용. value는 요청받을 url을 설정하게 된다.
method는 어떤 요청으로 받을지 정의하게 된다.(GET, POST, PUT, DELETE 등)
@Valid
RequestBody로 객체 가져올 때 들어오는 값을 검사함.
@ResponseBody
서버 -> 클라로 응답할때 @ResponseBody를 써서 자바 객체를 HTTP 응답 본문의 객체로 변환하여 클라이언트로 전송
@Slf4j - simple logging facade for java
로그를 남겨줌. 로그가 필요한 부분에 log 변수로 로그를 생성
@RequestParam
스프링 프레임워크에서 HTTP 요청 파라미터를 컨트롤러의 메서드 파라미터에 바인딩할 때 사용되는 어노테이션. 이를 이용하여 컨트롤러 메서드의 파라미터로 전달된 HTTP 요청 파라미터를 읽어와서 해당 파라미터에 매핑한다. 예를 들어, @RequestParam("name") String name과 같이 사용하면, HTTP 요청 파라미터 중 "name" 파라미터의 값을 name 변수에 매핑한다. @RequestParam 어노테이션에는 다양한 속성이 있다. 그 중에서도 가장 자주 사용되는 것은 다음과 같다.
- value: HTTP 요청 파라미터 이름을 지정합니다.
- required: 해당 파라미터가 필수인지 여부를 지정합니다. 기본값은 true입니다.
- defaultValue: HTTP 요청 파라미터 값이 없을 때 사용할 기본값을 지정합니다.
@RequestParam 어노테이션을 이용하여 컨트롤러 메서드의 파라미터에 HTTP 요청 파라미터를 바인딩할 수 있으므로, 웹 애플리케이션에서 HTTP 요청 파라미터를 사용하여 데이터를 전달하는 경우에 매우 유용하다.
@NotBlank
반드시 값이 있고, 공백을 제외한 길이가 1 이상이다.
null이 아닌 값. 즉 공백이 아닌 문자를 하나 이상 포함한다
@NotEmpty
반드시 값이 있고, 길이 혹은 크기가 1 이상이다. null 이거나 empty(빈 문자열)가 아니어야 한다.
@NotNull
값이 반드시 있어야 한다. null 이 아닌 값이면 어떤 타입이든 가능
Domain 관련 annotation
@Builder
searchList.add(Post.builder()
.postId(post.getPostId())
.likeCount(post.getLikeCount())
.views(post.getViews())
.build()
@Getter , @Setter , @Entity
이걸 쓰면 DB에 넣어줌. 엔티티로서 다루겠다는 의미. entity와 dto는 비슷한 의미인데, dto는 다른 곳에서 쓰기가 힘들어서 범용성이 더 떨어진다.
@Where(clause = "deleted = false")
여기서 말하는게 소프트 딜리트이다.
- true : db에는 있는데 조회가 안되는거
- false : 삭제되지 않은 애들만
애당초 deleted의 디폴트를 false로 설정해놨기때문에 삭제되지 않았다면 ~~ 이라는 게 항상 true이다. 삭제한다면 이를 true로 바꿔주면 된다.
'Spring' 카테고리의 다른 글
스프링 느낀점 - 2023.03.07. 작성 (0) | 2024.05.09 |
---|---|
JPA N+1 문제 (0) | 2024.05.05 |
Controller vs RestController (0) | 2024.03.09 |
RequestBody, ResponseBody (0) | 2024.03.08 |
Bean에 대하여 (0) | 2024.03.08 |