Back-End/Spring Boot

스프링부트 레이어드 아키텍쳐

psy_er 2024. 3. 26. 01:21
728x90

스프링부트 레이어드 아키텍쳐

모델과 엔터티 차이

모델 : 비즈니스 데이터를 담는 역할

엔터티 : 데이터베이스의 테이블과 스키마를 표현하는 역할

 

 

롬복 어노테이션 설명

@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와, 퍼시스턴스는 데이터베이스와 관련이 있다.

 

728x90