본문 바로가기
Spring

Entity, DTO, VO, Controller, Service, Repository, GET, POST 등

by KDW999 2023. 3. 9.

!! 처음 접하는 개념들이 많아 간략하게만 정의하였음, 자세한 개념은 따로 찾아볼 것

 

자바에서 객체 구현 방법은 대표적으로 Entity, DTO, VO 세가지가 있다.
Entity와 DTO를 분리해서 사용하는 이유는 DB와 View의 사이의 역할을 분리하기 위함이다.
DB layer = persistence, view layer = presentation
entity는 실제 DB의 테이블과 매핑 / 그렇기에 entity가 변경되면 entity와 관련되있는
클래스들에도 영향을 끼친다.
DTO는 View와 통신하여 자주 변경되기에 분리
DTO는 Entity를 그대로 복사

 

Entity : 실제 DB 테이블과 매핑
Entity에서 Setter를 자주 사용하면 객체의 값이 쉽게 변경될 수 있으므로, 객체의 일관성을
보장 X
객체의 일관성 유지 → 유지 보수성 ↑, Setter 메서드 사용은 자제
객체 생성자에 값들을 넣어 Setter 사용을 줄여줄 수 있다.
간단히 Entity는 DB의 영구적인 지속(Persistence)을 값은 변하지 않아야하며 그러므로 
Setter는 사용하지 않는게 좋다.

VO(Value Object) 값 객체
VO는 사용 이유는 여러가지지만 보통 값을 저장 / 비교를 위해 사용
VO의 메인 역할은 equals(), hashcode()를 오버라이딩 (부모의 메서드를 재정의)
VO 내부에 선언된 속성의 모든 값들이 VO 객체마다 값이 같아야, 똑같은 객체라 판별
흠.. 뭔 말?

 

DTO
DTO는 계층간 데이터 교환을 위한 객체로 DB의 데이터를 Service나 Controller 등으로 
보낼 때 사용
로직을 갖지 않는 순수 데이터 객체
ㅡ Request DTO : @NotBlank, @Length 등 어노테이션을 이용하여 입력값 검증 
ㅡ Response DTO : Setter를 사용하지 않고 생성자를 통해 값을 할당

*MVC
Model : 애플리케이션 할 일 정의, DB와 연동하여 사용자가 입력한 데이터, 사용자에게 출력해줄 데이터를 다룸
View : 사용자에게 보여지는 부분
Controller : Model에 데이터를 처리할 방법 제안, 모델 호출 전 적절한 가공을 거친 뒤 모델 호출
모델이 작업을 완료하면 그 결과를 View에게 전달
일종의 징검다리 역할?
사용자 화면, 데이터 처리, 중간에서 제어 역할로 일을 분할하여 애플리
케이션을 만들면 훨씬 효과적이라 MVC 패턴 사용

Spring에서의 
Controller
MVC의 C와 같은 역할을 하며 Controller는 사용자의 요청을 처리 후 지정된 뷰에 모델 객체를 넘겨줌
→ 사용자의 요청이 진입하는 지점, 요청에 따라 어떤 처리를 할지는 Service에게 맡김
Service가 처리한 내용을 View에게 넘겨준다.
@Controller → 주로 View 반환
@RestController → @Controller + @ResponseBody, 주로 JSON/XML형태의 객체 데이터 반환

Service
1. Client가 Request를 보냄 (Ajax, fetch 등)
2. Request URL에 맞는 Controller가 수신 (@RestController)
3. Controller는 받은 요청을 처리하기  위해 Service 호출
4. Service는 알맞게 정보를 가공하여 Controller에게 데이터 반환
5. Controller는 Service의 결과물을 Client에게 전달
Service의 정보 가공 과정을 비즈니스 로직 수행이라고 한다.

Repository
Entity에 의해 만들어진 DB에 접근하는 메서드들을 사용하기 위한 인터페이스
@Entity로 DB 구조를 만들었다면 CRUD 작성
Repository 인터페이스는 JpaRepository 상속
→ public interface Repository명 extends JpaRepositroy<Entity명, Entity PK의 자료형> 
이렇게 만들어주면 JPA가 제공해주는 기본 메서드들을 사용가능

DAO
Mysql 서버에 접근 후 SQL문을 실행할 수 있는 객체

JPA
Spring Data JPA는 매우 적은 코드로 DAO를 구현할 수 있게 해준다.
인터페이스를 만드는 것 만으로 Entity 클래스에 대한 Insert, Update, 
Delete, Select를 실행할 수 있게 해줌
인터페이스 메서드 선언만으로 라이트한 쿼리를 만드는 작업을 수행 가능
!단 매우 쉬운 쿼리를 대체하기 때문에 복잡도가 높아질수록 사용 난이도 ↑
복잡도 높아지면 DAO를 같이 사용한다고도 한다.

Http Method
GET
서버에서 데이터를 가져와서 보여줄 때 사용 / 값, 내용, 상태 등을 바꾸지 않는 경우에 사용

ㅡ 데이터를 보낼 때 url에 데이터를 담아서 보냄  /  길이제한있음  /  기록이 남음, 데이터 노출?

POST 
서버 상의 데이터 값, 상태를 바꾸기 위해 사용

ㅡ 데이터를 보낼 때 head, body에 담아서 보냄  /  길이 제한 없  /  기록이 남지 않음

ex) 게시판에서 글의 내용을 보여줄 땐 Get, 글의 내용을 저장, 수정할 때 Post

[참고했던 자료들]

https://thenicesj.tistory.com/301 

 

Entity, DTO, VO 차이

자바에서는 객체를 구현하는 다양한 방법이 있는데 대표적으로 Entity, DTO, VO 이렇게 세가지가 있다. 이들에 대해서 다뤄보려고 한다. 먼저 세가지를 분명하게 구분하는 이유는 다음과 같다. Entity

thenicesj.tistory.com

https://velog.io/@nomonday/Spring-API-%EA%B0%9C%EB%B0%9C-%EC%8B%9C-request%EB%8A%94-DTO%EC%97%90-%EB%B0%9B%EC%95%84%EC%98%A4%EC%9E%90

 

[Spring] API 개발 시 Request는 DTO에 받아오자

Entity 3개의 필드를 갖는 엔티티 Request를 엔티티에 받아오는 경우 => (BAD) Request Body를 그대로 Member 엔티티에 매핑하고, 그대로 로직이 실행된다 => 엔티티에 @NotEmpty와 같은 검증 로직 필요 같은 엔

velog.io

https://velog.io/@jybin96/Controller-Service-Repository-%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

 

Controller, Service, Repository 가 무엇일까?

찾아본 결과 Controller가 무엇인지 알기 전에 MVC 패턴에 대하여 먼저 아는 것이 중요합니다!MVC패턴은 Model-View-Controller의 약자로서 개발을 할 때 3가지 형태로 역학을 나누어 개발하는 방법론입니

velog.io

https://velog.io/@songyouhyun/Get%EA%B3%BC-Post%EC%9D%98-%EC%B0%A8%EC%9D%B4%EB%A5%BC-%EC%95%84%EC%8B%9C%EB%82%98%EC%9A%94

 

Get과 Post의 차이를 아시나요?

제 질문에 답을 하지 못하겠다면, 이 글을 읽어보시는 걸 적극적으로 추천합니다.

velog.io

 

'Spring' 카테고리의 다른 글

Spring 사용 시 어노테이션 정리 + JpaRepository 기본 메서드  (0) 2023.04.04
Repository  (1) 2023.03.06
JPA  (0) 2023.03.06
Service  (0) 2023.03.06
Controller / DTO  (0) 2023.03.05

댓글