스프링부트 레이어드 아키텍쳐
모델과 엔터티 차이
모델 : 비즈니스 데이터를 담는 역할
엔터티 : 데이터베이스의 테이블과 스키마를 표현하는 역할
롬복 어노테이션 설명
@Builder : 빌더 클래스를 자동생성해서 객체 생성하기
TodoEntity todo = TodoEntity.builder().id("123").userId("SeY").title("psy").build();
@NoArgsConstructor : 매개변수가 없는 생성자를 자동으로 구현해 줌
@AllArgsConstructor : 클래서의 모든 멤버 변수를 매개변수로 받는 생성자를 자동으로 구현
@Data : 클래스 멤버 변수의 Getter/Setter 메소드를 자동으로 구현
@RestController : 이 클래스가 REST 컨트롤러임을 명시함
@RequestMapping("리소스") : 클라이언트가 리소스를 요청하면 컨트롤러가 불러옴
@GetMapping : URI 경로 지정 가능
@PathVariable : URI의 경로로 넘어오는 값을 변수로 받을 때 사용함
@RequestParam : 매개변수를 값으로 받을 때 사용함
@RequestBody : 객체같은 자료형을 통째로 전달 받을 때 사용함
@ResponseBody : 응답 시 객체를 리턴해야 하는 경우 JSON으로 리턴함, @RestController 어노테이션 사용 시 자동 선언
DTO 사용 이유
서비스가 요청을 처리하고 클라이언트로 반환시 데이터 전달 객체인 DTO를 사용한다. DTO를 사용하는 이유는 비즈니스 로직을 캡슐화할 수 있고, 클라이언트에 반환 시 부가적인 정보를 추가할 수 있기 때문이다.
DTO는 Entity를 받아 생성한다. HTTP 응답으로 사용할 DTO를 설계할 때 여러 DTO를 만들어 반환할 수 있다.
컨트롤러에서 매개변수를 전달하는 방법
1. Path Variable -> @PathVariable 어노테이션으로 받음
ex) /test/123
2. Request Parameter, Key Value 형태 -> @RequestParam 어노테이션으로 받음
ex) /test?id=123
3. 요청 시 객체 전달 -> @RequestBody 어노테이션으로 받음
ex) 객체를 전달한다
요청시 JSON을 DTO 객체로 변환해서 가지고 온다. 컨트롤러에서는 DTO를 받는다.
ResponserEntity 클래스
응답 시 객체 뿐만 아니라 여러 매개변수 (status나 header)를 보내고 싶을 때 사용하는 클래스
@GetMapping("/testResponseEntity")
public ResponseEntity<?> testControllerResponseEntity(){
List<String> list = new ArrayList<>();
list.add("I'm ResponseEntity. And you got 404!");
ResponseDTO<String> response = ResponseDTO.<String>builder().data(list).build();
return ResponseEntity.badRequest().body(response);
}
서비스 레이어
서비스 레이어는 컨트롤러와 퍼시스턴스 사이에 위치하여 비즈니스 로직을 수행한다.
컨트롤러는 HTTP와, 퍼시스턴스는 데이터베이스와 관련이 있다.
'Back-End > Spring Boot' 카테고리의 다른 글
롬복과 리팩터링 (0) | 2024.02.12 |
---|---|
게시판 만들고 새 글 작성하기 (5) | 2024.01.05 |
뷰 템플릿과 MVC 패턴 (0) | 2024.01.01 |
스프링부트 프로젝트 run 버튼 비활성화 되어있을 때 오류 해결방법 (0) | 2023.12.18 |
14) Spring Boot 테스트 코드 작성하기 (1) | 2023.11.29 |