객체 지향 프로그래밍 언어를 사용하여 호환되지 않는 유형 시스템 간에 데이터를 변환하는 프로그래밍 기법
여기서 '객체 지향 프로그래밍'과 '관계형 데이터베이스'가 바로 이 호환되지 않는 시스템을 가리킨다.
자바에서 제공하는 ORM 표준
JPA는 인터페이스의 모음으로, 실제 동작은 JPA를 구현한 라이브러리가 담당한다.
대표적인 JPA 구현체로는 Hibernate, EclipseLink 등이 있다.
클라이언트와 서버 간에 데이터를 교환하는 방법을 정의한 것으로, 주로 HTTP 프로토콜을 사용하여 통신한다.
클라이언트가 API를 호출
HTTP 요청(request)의 형태로 서버에 전달된다.
이 요청에는 HTTP 메서드(GET, POST, PUT, DELETE 등), 헤더, URL, 쿼리 매개변수, 바디 등이 포함될 수 있다.
서버에서 이 요청을 받아서 적절한 로직을 수행
예) 데이터베이스에서 데이터를 검색하거나, 데이터를 생성, 수정, 삭제하는 등의 작업
작업을 완료하면, HTTP 응답(response)의 형태로 클라이언트에게 전달
이 응답에는 HTTP 상태 코드(200, 404, 500 등), 헤더, 바디 등이 포함될 수 있다.
바디에는 주로 JSON 형식의 데이터가 포함되며, 클라이언트가 필요로 하는 정보를 담고 있다.
클라이언트는 이 응답을 받아서 적절한 처리
예) 응답 데이터를 화면에 표시하거나, 다른 API를 호출하는 등의 작업을 수행할 수 있다.
Controller: 사용자의 요청을 받아 처리하는 역할
클라이언트로부터 들어온 HTTP 요청을 적절한 서비스 메서드에 매핑시키는 역할을 담당한다.
이때, 요청 데이터를 검증하거나 요청에 필요한 추가 정보를 취합하는 등의 역할을 수행하기도 한다.
Service: 실제 비즈니스 로직이 구현되는 곳
Controller가 필요로 하는 작업을 수행하기 위해 필요한 로직을 구현한다.
트랜잭션 처리, 도메인 간의 복잡한 흐름 제어, 여러 Repository를 활용한 쿼리 등의 작업이 이루어진다.
Repository: 데이터를 직접적으로 접근하는 계층
주로 데이터베이스에 직접 접근하여 CRUD(Create, Read, Update, Delete) 작업을 수행한다. Repository는 Service에게 필요한 데이터를 제공하거나, Service의 요청에 따라 데이터를 변경한다.
DB: 실제 데이터가 저장되는 곳
위의 모든 작업이 이루어진 결과가 최종적으로 저장되는 곳이며, 필요한 데이터를 제공하는 역할을 한다.
데이터를 전달하는 객체
Controller와 Service 계층 간에 데이터를 전달할 때 DTO를 사용하면, Service 계층이 필요로 하는 데이터만을 Controller로부터 받을 수 있다.
getter, setter 메서드를 가지고 있으며, 객체의 상태를 변경할 수 있는 메서드는 가지고 있지 않는다.
시스템 간에 데이터를 교환하거나 계층 간에 데이터를 전달하는 과정에서 발생할 수 있는 의존성 문제를 해결할 수 있고 코드의 유지보수성을 높일 수 있다.