JAVA/JPA

[JAVA / Spring / JPA] - SpringBoot(JPA) 구조 및 용어

nam_ji 2024. 7. 19. 17:20

SpringBoot 기본 구조 및 용어 설명

SpringBoot 기본 구조

  1. 클라이언트가 Controller에게 요청(Request)을 DTO 형식으로 보냅니다.
  2. Controller는 해당 Request에 맞는 Service를 호출하면서 DTO를 보냅니다.
  3. Service에서 핵심 비즈니스 로직을 구현합니다.
  4. DTO와 Entity 변환도 Service에서 처리합니다.
  5. Repository에 데이터를 요청합니다.
  6. Repository는 Database에 직접 접근하여 Domai(Entity) 객체를 저장하고 관리합니다.
  7. Repository에서 가져온 데이터를 Service에 반환합니다.
  8. Service의 수행 결과를 Controller에 반환합니다.
  9. 응답(Response)할 때 함께 보낼 데이터가 있다면 DTO로 변환하여 반환합니다.
  10. Controller의 수행 결과를 클라이언트에게 반환합니다.

SpringBoot 용어 설명

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