[Spring 가이드 1.0] Backend 효과적인 패키지 구조를 만들기 위한 개념

김현수·2024년 4월 24일
0

spring

목록 보기
3/9


🖋️ Backend 효과적인 패키지 구조를 만들기

  • Domain, Service, Controller, Repository, DAO, DTO, VO 핵심 구성요소 이해


  • Spring Boot 애플리케이션을 구성하는 효과적인 방법은 기능과 계층별로 구성하는 것

  • 더 쉽게 탐색하고 관리

com.example.myapp
├── config                  # Configuration classes and beans
├── controller              # Classes that handle HTTP requests
├── service                 # Business logic and service layer
├── repository              # Interfaces for database access
├── domain                  # Domain models
├── dto                     # Data Transfer Objects
├── exception               # Custom exceptions and error handling
└── security                # Security configuration (JWT, sessions, etc.)


핵심 개념 및 디자인


  • Domain

    • 도메인 모델
    • DB 모델과 그 관계를 반영하는 비즈니스 로직의 기본 Entity

    • 설계 TIPS
      • 도메인 모델을 간결하게 유지
      • 도메인 클래스에서 비즈니스 로직 지양
      • 객체를 DB 에 매핑하는데 사용
      • (JPA 의 '@Entity' 같은 애노테이션 사용)

  • DTO

    • 데이터 전송 객체
    • 클라이언트에 필요할 수 있는 필수 데이터만 전송
    • 특별히 설계된 프로세스 간 데이터를 전송하는데 사용

    • 설계 TIPS
      • 데이터 캡슐화
      • 원격 메서드에 대한 다중 호출 방지

  • VO

    • 값 객체
    • 객체가 라이프사이클 전반에 걸쳐 항상 유효한 상태인지 확인
    • 불변이며 ID 없음

    • 설계 TIPS
      • 단일 단위로 취급하는 복합 값을 표현할 때 사용

  • DAO

    • 데이터 액세스 객체
    • 데이터 소스에 대한 모든 액세스를 추상화하고 캡슐화
    • 데이터 소스와의 연결을 관리
    • 데이터를 획득하고 저장

    • 설계 TIPS
      • Spring Boot에서 DAO 기능은 일반적으로 리포지토리에서 처리

  • Repostiory

    • 저장소
    • 데이터베이스의 데이터에 액세스하기 위해 정의하는 인터페이스
    • Spring Data JPA를 사용하면 JpaRepository를 확장하여 DAO 코드를 작성하지 않고도 CRUD 작업을 활용

    • 설계 TIPS
      • 저장소를 사용하여 데이터베이스 쿼리를 비즈니스 로직과 격리된 상태로 유지

  • Service

    • 서비스 계층은 애플리케이션의 비즈니스 로직을 처리
    • 컨트롤러와 저장소 계층 사이에서 작동

    • 설계 TIPS
      • 서비스를 인터페이스로 구현하고 별도의 구현 클래스 설계
        • 깔끔한 아키텍처와 더 쉬운 테스트를 촉진

  • Controller

    • 컨트롤러는 들어오는 HTTP 요청을 처리하고 응답을 반환
    • 그들은 서비스 계층과 View 사이의 다리 역할

    • 설계 TIPS
      • 컨트롤러를 가볍게 유지
      • 비즈니스 로직을 포함하지 않고 서비스에 위임

  • Exception

    • 사용자 정의 예외 및 오류 처리 메커니즘이 여기에 정의

    • 설계 TIPS
      • 전역적으로 예외를 처리하려면 @ControllerAdvice 또는 @RestControllerAdvice를 사용

  • Config

    • Swagger 구성, 모델 매퍼 또는 애플리케이션에 대해 구성된 기타 Bean과 같은 구성 클래스가 포함

    • 설계 TIPS
      • 이러한 클래스를 표시하려면 @Configuration을 사용하고 메서드 수준 주석에는 @Bean을 사용


설계 최적화 팁!


  • 관심사항 분리

    • MVC 패턴을 사용하여 책임을 명확하게 분리
    • 이는 종속성을 더 잘 관리하는 데 도움

  • 데이터베이스 상호 작용 효율성

    • 지연 로딩, 적절한 열망 가져오기, 쿼리 최적화와 같은 JPA 성능 사례를 사용

  • 보안

    • 일반적인 취약점으로부터 보호
    • Spring Security를 ​​사용하여 애플리케이션을 보호

  • 테스트

    • 서비스 계층에 대한 단위 테스트
    • 데이터베이스 및 Spring 컨텍스트를 포함하는 통합 테스트를 작성
profile
일단 한다

0개의 댓글