참고
스프링부트 서비스 구조

클라이언트
DTO (Data Transfer Object)
- DTO는 VO(Value Object)로도 불림
- 계층간 데이터 교환을 위한 객체를 의미
- VO의 경우 Read Only라는 성격 보유
DTO는 백엔드에서 사용하기 위한 변수라고 생각하면 편함
컨트롤러
- 스프링 부트 플젝에서 구현
- CRUD 메서드를 사용하는 부분
- MVC 패턴 참고시 이해에 도움
서비스
- Service, serviceImpl
- service의 경우 인터페이스로 작성하여 스케치 -> serviceImple에서 인터페이스의 기능을 구현
- 주로 서비스에서는 컨트롤러로부터 받아온 DTO를 엔티티로 바꾸어 전달하는 역할
엔티티
- 엔티티는 데이터베이스에 쓰일 컬럼과 여러 엔티티간의 연관관계를 정의함
- 데이터베이스의 테이블을 하나의 엔티티라고 생각해해도 무방
- 실제 데이터베이스의 테이블과 1:1로 매핑됨
- 이 클래스의 필드는 각 테이블 내부의 컬럼을 의미
왜 DTO와 엔티티를 구분하는가?
- DTO는 개념상 프론트엔드와
- 엔티티는 DB와 관계를 각각 갖고 있음
- DTO 혹은 엔티티 하나만 쓰게 된다면 불필요한 정보의 전달 혹은 보안이 필요한 정보의 유출이 생길 수 있음
- 이를 방지하기 위해 DTO와 엔티티의 역할을 분리하게 된 것
DataHandler
- 서비스에서 DAO로 값을 전달하는 과정을 위해 추가적으로 데이터핸들러를 구현
- DTO로 받아온 값들을 엔티티로 생성을 해주고 DAO에서 엔티티를 인지하는 것을 도와주는 형식으로 코드를 생성
DAO (Data Acesa Object)
- 데이터베이스에 직접적으로 접근하는 객체를 의미 (Persistence Layer)
- DAO의 경우 서비스가 DB에 연결할 수 있게 해주는 역할
- DAO는 DB를 사용하여 데이터를 조회하거나 조작하는 기능을 전담
- DAO의 경우 DAO와 DAOImpl로 구성되어 있는데 service의 case와 마찬가지로 DAO file에서는 인터페이스로 만들어 메서드를 선언하고 DAOImpl에서는 메서드가 선언되어 있는 인터페이스를 실제화하는 작업을 수행
- DAO 파일을 구현하는데 있어서 실질적으로 인터페이스와 Impl에서 필요한 엔티티 값을 반환하는 메서드 생성
- 그리고 이러한 엔티티 값을 DB에 저장하기 위해 컨트롤러에서는 DAO에서 구성한 메서드를 필요에 맞게 사용
레포지토리
- DAO 아래 (Repository) 라고 써있는 부분을 확인 가능
- 레포지토리란 엔티티에 의해 생성된 데이터베이스에 접근하는 메서드를 사용하기 위한 인터페이스
- 레포지토리의 경우 서비스와 디비를 연결하는 고리의 역할을 수행
- 레포지토리에서는 JPA를 이용하여 데이터베이스에 적용하고자 하는 CRUD를 정의하는 영역
DB
- DataBase!
- 클라이언트가 원하는 요청을 컨트롤러에서 인지하여 디비로부터 데이터를 읽어오거나 저장하는 등 CRUD를 진행