@NoArgsConstructor

기본 생성자를 생성해준다.
이 경우 초기값 세팅이 필요한 final 변수가 있을 경우 컴파일 에러가 발생함으로 주의한다.
Board board = new Board();

@RequiredArgsConstructor

final 변수, Notnull 표시가 된 변수처럼 필수적인 정보를 세팅하는 생성자를 만들어준다.
Board board = new Board(2L);

@AllArgsConstructor

전체 변수를 생성하는 생성자를 만들어준다.

@RequestBody : POST부분

@RequestBody는 클라이언트가 전송하는 Json(application/json) 형태의 HTTP Body를 Java 객체로 변환시켜주는 역할을 한다. 
그렇기 때문에 Body가 존재하지 않는 HTTP Get 메소드에 @RequestBody를 활용하려고 한다면 에러가 발생한다. 
@RequestBody로 받는 데이터는 Spring에서 관리하는 MessageConverter들 중 하나인 MappingJackson2HttpMessageConverter를 통해 Java 객체로 변환되는데, 
이는 ObjectMapper 라는 클래스를 사용한다.

@PathVariable vs @RequestParam : GET부분

URl처리에 따라 사용하는 전달인자가 달리 사용된다.

@PathVariable: URI 경로의 일부를 파라미터로 사용할 때 이용(URI 경로에서 값을 가져온다)

@RequestMapping(value = "/comment/{postId}", method = RequestMethod.GET)
    public ResponseEntity<?> getAllComments(@PathVariable Long postId) {
      return commentService.getAllCommentsByPost(postId);
    }

@RequestParam:

1. 1개의 HTTP 요청 파라미터를 받기 위해서 사용한다. 
2. 필수 여부가 true이기 때문에 반드시 해당 파라미터가 전송되어야 하며, 파라미터가 전송되지 않으면 400 에러가 발생한다. 
3. 외부에서 API로 넘긴 파라미터를 가져오는 어노테이션입니다.
4. 여기서는 외부에서 name(@RequestParam("name"))이란 이름으로 넘긴 파라미터를 메소드 파라미터 name(String name)에 저장하게 됩니다.

	@GetMapping("/hello/dto")
    public HelloResponseDto helloDto(RequestParam("name") String name, @RequestParam("amount") int amount){
    return new HelloResponseDto(name, amount);
    }

HttpServletRequest :

JSP 기본 내장 객체 중 request 객체는 JSP에서 가장 많이 사용되는 객체입니다.
웹브라우저 사용자인 클라이언트로부터 서버로 요청이 들어오면
서버에서는 HttpServletRequest를 생성하며, 요청정보에 있는 패스로 매핑된 서블릿에게 전달합니다.
이렇게 전달받은 내용들을 파라미터로 Get과 Post 형식으로 클라이언트에게 전달하게 됩니다.

@Transactional

@Transactional 어노테이션을 사용하면, 비즈니스 로직에서 데이터베이스로 SQL 쿼리 처리 과정 중 java.lang.RuntimeException 에러가 발생하면 트랜잭션이 롤백이 되도록 만들어준다.

@Transactional은 클래스, 메소드, 인터페이스 위에 추가하여 사용하는 것으로, 해당 범위 내 메소드가 트랜잭션이 되도록 보장해준다. 
다시 말해 메소드를 하나의 트랜젝션(단위)로 간주하여 해당 메소드가 종료되기 전까지 어떠한 개입이나 다른 변화가 반영되지 않는 것을 말한다. 
이것을 선억적 트랜잭션이라고도 하는데, 직접 객체를 만들 필요 없이 선언만으로도 관리를 용이하게 해주기 때문이다.

Transactional 사용 이유 :

Mybatis 기준으로 Service에서 Mapper로 여러 SQL 쿼리를 처리할 때 그 중 하나가 오류가 난 경우 그 전에 실행되었던 SQL 쿼리들이 롤백이 되어야 데이터 베이스에 반영이 되지 않는다. 따라서 @Transactional 어노테이션을 사용하면, 비즈니스 로직에서 데이터베이스로 SQL 쿼리 처리 과정 중 java.lang.RuntimeException 에러가 발생하면 트랜잭션이 롤백이 되도록 만들어준다.

@Setter vs @Builder

참조 : https://goyunji.tistory.com/98

profile
돌덩이

0개의 댓글