JAVA/JPA
[JAVA / Spring / JPA] - SpringBoot(JPA) 구조 및 용어
nam_ji
2024. 7. 19. 17:20
SpringBoot 기본 구조 및 용어 설명
SpringBoot 기본 구조
- 클라이언트가 Controller에게 요청(Request)을 DTO 형식으로 보냅니다.
- Controller는 해당 Request에 맞는 Service를 호출하면서 DTO를 보냅니다.
- Service에서 핵심 비즈니스 로직을 구현합니다.
- DTO와 Entity 변환도 Service에서 처리합니다.
- Repository에 데이터를 요청합니다.
- Repository는 Database에 직접 접근하여 Domai(Entity) 객체를 저장하고 관리합니다.
- Repository에서 가져온 데이터를 Service에 반환합니다.
- Service의 수행 결과를 Controller에 반환합니다.
- 응답(Response)할 때 함께 보낼 데이터가 있다면 DTO로 변환하여 반환합니다.
- Controller의 수행 결과를 클라이언트에게 반환합니다.
SpringBoot 용어 설명
- Contoller
- 클라이언트 요청을 처리합니다
- Service의 비즈니스 로직을 호출합니다.
- Service에서 반환받은 값을 클라이언트에게 응답해줍니다.
- Service
- 핵심 비즈니스 로직을 구현합니다.
- Controller에서 받아온 DTO를 가공하여 Repository로 보내거나, Repository에서 받아온 데이터를 가공하여 DTO에 담아 Controller로 반환합니다.
- Repository
- 데이터베이스에 접근하기 때문에 DAO(Data Access Object) 영역이라고도 불립니다.
- 도메인 객체를 DB에 저장하고 관리합니다.
- Spring Data Jpa에서 제공하는 인터페이스입니다.
- 스프링 내부에서 자동으로 객체를 생성하고 실행합니다.
- (기존 Hibernate는 모든 코드를 직접 구현하고 트랜잭션 처리를 했지만, Spring Data Jpa는 자동으로 생성되는 코드를 이용하므로 단순 CRUD나 페이지 처리 등의 개발에 코드를 개발할 필요가 없습니다.)
- Entity
- 비즈니스 도메인 객체, 주로 데이터베이스에 저장하고 관리됩니다.
- DB와 가장 가까운 클래스입니다.
- 테이블과 1 : 1 매핑클래스의 필드는 테이블의 컬럼을 의미합니다.
- 비즈니스 로직을 처리합니다.
- DTO (Data Transfer Object)
- 데이터를 교환할 때 사용하는 객체입니다.
- 엔티티에 직접 접근하지 않습니다.
- Domain마다 DTO를 가집니다.
- SpringBoot
- 스프링 프레임워크의 서브 프로젝트입니다.
- 스프링 프레임워크를 쉽게 사용할 수 있도록 도와주는 도구입니다.
- 스프링처럼 많은 설정이 필요하지 않습니다. 스프링부트가 알아서 해줍니다.
- Gradle
- Groovy 기반의 빌드 도구입니다.
- Ant와 Maven의 단점을 보완했습니다.
- Java 문법과 유사합니다.
- Gradle 설치 없이도 Gradle Wrapper를 이용하여 빌드를 지원합니다.
- build.gradle : 빌드 구성 스크립트 -> 의존성, 플러그인 설정 등 빌드에 대한 모든 기능을 정의합니다.
- task : 작업의 최소 단위
- JPA
- Java Persistent API 약자입니다.
- Hibernate를 비롯한 모든 ORM 프레임워크의 표준입니다.
- Java 언어를 통해 데이터베이스와 같은 영속 계층을 처리하고자 하는 스펙입니다.
- ORM
- Object Relational Mapping
- 객체지향 패러다임을 관계형 패러다임으로 매핑해주는 개념입니다. (클래스를 테이블로)
- Thymeleaf
- View Template Engine입니다.
- JSP처럼 서버에서 결과를 만들어 브라우저로 전송합니다.
- JSP와 유사하게 ${}을 별도의 처리 없이 이용할 수 있습니다.
- Model에 담긴 객체를 화면에서 JS로 처리하기 편리합니다.
- 연산이나 포맷과 관련된 기능을 추가적인 개발 없이 지원합니다.
- 개발 도구를 이용할 때 .html 파일로 생성하는데 문제가 없고 별도의 확장자를 이용하지 않습니다.