Spring Boot & JPA

2.8. 프로젝트 구조

backend 따라쟁이 2025. 1. 3. 21:16

1. 프로젝트 구조 개요

Spring Boot 프로젝트는 명확한 계층 구조를 통해 애플리케이션의 유지보수성과 확장성을 높이는 데 초점이 맞춰져 있습니다. 이번 프로젝트에서는 Spring Boot와 JPA를 활용하여 RESTful API를 구현하며, Entity, Repository, Service, Controller 계층으로 나누어 개발했습니다.


2. 전체 디렉터리 구조

프로젝트의 디렉터리 구조는 다음과 같습니다:

 

 

3. 주요 클래스 설명

1) RestfulApiJpaApplication.java

  • 역할: Spring Boot 애플리케이션의 진입점.
  • 설명: @SpringBootApplication 어노테이션을 통해 Spring Boot 설정을 초기화하고, 애플리케이션 서버를 시작합니다.
  • 주요 기능:
    • API 요청을 처리하는 컨트롤러 역할을 겸함.
    • @RequestMapping과 HTTP 메서드 어노테이션을 통해 클라이언트 요청을 매핑합니다.

2) entity/SamTable.java

  • 역할: 데이터베이스 테이블과 매핑되는 JPA 엔티티.
  • 설명:
    • 데이터베이스 테이블 sam_table과 매핑.
    • @Entity, @Table, @Id 등의 어노테이션을 사용하여 테이블의 구조를 객체로 표현.
  • 구조

 

  • 주요 기능:
    • 데이터베이스의 keyno, value 컬럼을 자바 객체의 필드로 관리.
    • JPA를 통해 데이터를 삽입, 조회, 수정, 삭제할 때 사용.

3) repository/SamTableRepository.java

  • 역할: 데이터베이스와의 연동을 담당.
  • 설명:
    • JPA의 JpaRepository를 상속받아 기본 CRUD 연산을 자동으로 제공.
    • 필요 시 커스텀 쿼리를 정의하여 복잡한 데이터베이스 연산 처리 가능.
  • 구조:

  • 주요 기능:
    • findById, findAll, save, deleteById 등 기본 CRUD 메서드 제공.

4) service/SamTableService.java

  • 역할: 비즈니스 로직 계층.
  • 설명:
    • 데이터 처리 로직을 포함하여 Repository와 Controller 간의 중간 역할 수행.
    • 데이터 검증, 변환, 트랜잭션 관리 등의 기능을 추가로 처리.
  • 구조:
     

 

 

  • 주요 기능:
    • 클라이언트 요청에 맞는 데이터를 조회, 추가, 수정, 삭제하는 비즈니스 로직 처리.
    • Repository 호출을 통해 데이터베이스와 상호작용.

5) 컨트롤러 (RestfulApiJpaApplication.java)

  • 역할: 클라이언트 요청을 처리하고 적절한 응답을 반환.
  • 설명:
    • RESTful API 엔드포인트 정의.
    • 클라이언트의 HTTP 요청을 받아 Service 계층에 전달.
    • 비즈니스 로직 결과를 JSON 형식으로 반환.
  • 구조

  • 주요 기능:
    • RESTful API의 CRUD 엔드포인트 제공.
    • JSON 데이터를 요청/응답으로 처리.

4. 클래스 간 관계

계층 구조

  1. Controller: 클라이언트 요청을 처리.
  2. Service: 비즈니스 로직 처리.
  3. Repository: 데이터베이스와의 연동 담당.
  4. Entity: 데이터베이스 테이블과 객체 간 매핑.

데이터 흐름

  1. 클라이언트가 Controller로 요청 전송.
  2. Controller가 Service를 호출하여 비즈니스 로직 처리.
  3. Service가 Repository를 호출하여 데이터베이스와 상호작용.
  4. 처리 결과가 Controller를 통해 클라이언트로 반환.

5. 장점

  • 계층 분리: 각 계층이 독립적으로 동작하므로 유지보수성이 높아짐.
  • 가독성 향상: 각 클래스가 명확한 역할을 가지므로 코드가 더 읽기 쉬움.
  • 확장성: 새로운 기능 추가 시 각 계층에 필요한 변경만 적용 가능.

6. 결론

이번 프로젝트는 명확한 계층 구조를 기반으로 설계되었습니다. 각 클래스는 고유한 역할을 가지고 있으며, 이로 인해 코드의 가독성과 유지보수성이 크게 향상되었습니다. 이러한 구조는 실제 개발 환경에서도 널리 사용되며, 확장성과 재사용성을 보장합니다.

다음 섹션에서는 프로젝트에서 사용된 주요 기술 스택과 JPA의 장점에 대해 정리하겠습니다.