슈퍼코딩/주특기(JAVA)

2024.05.29(수) 슈퍼코딩 신입연수원 9주차 Day 3 후기 - Spring 프로젝트 구조, 코드 아키텍처

곰돌이볼 2024. 5. 29. 11:48
  • 강의
    • 92강(스프링 부트 코드 구조 둘러보기) ~ 94강(스프링 부트 Data Access Layer 좀 더 살펴보기)

Spring 프로젝트 구조


  • src 폴더 : 소스코드
  • Spring Main 클래스
    • 실행파일
    • spring 실행 X, 내장 tomcat 서버 실행 O
  • application.yml : spring 설정 파일
    • .properties vs YAML
      • yaml : 가독성과 profile 사용 용이
    • profile 사용
      • 개발단계에 따라서 여러 설정 파일 사용( application.yml, application-local.ym)
      • Active profiles 에서 설정 관리(local)
  • test 폴더 : test code 관리 폴더
  • build.gradle, settings.gradle, HELP.md, gradlew : Gradle 설정 파일들

코드 아키텍처


  • 코드를 효율적으로 관리하기 위한 소프트웨어 구조 및 구성 요소를 조직적으로 정리한 방식
  • 코드 아키텐처 사용이유
    • 유지 보수성
    • 가독성
    • 테스트 용이성
    • 코드 재사용성
  • 종류
    • Clean Architecture
    • Domain Driven Development
    • 3 layer Architecture

3 layer Architecture

  • 구조
    • Web Layer
      • = Presentation Layer
      • 외부 요청 및 응답
    • Service Layer
      • 비즈니스 로직 처리
    • Repository Layer
      • = Data Access Layer
      • 데이터베이스와 상호작용
  • 사용 이유
    • 비즈니스 로직, 외부 요청, DB 관련 요청 수정 시 다른 코드들의 수정을 최소화하기 위해서

Web Layer

  • 관련 클래스
    • Controller
    • DTO
    • Exception Handler
    • Filter
  • DTO
    • Data Transfer Object
    • 데이터들의 집합
    • 종류
      • 외부 통신 DTO
        • 직렬화와 역직렬화 가능
        • 빈 생성자와 Getter 필요
      • 내부 통신 DTO
  • Jackson 라이브러리
    • Json 과 DTO 객체를 직렬화, 역직렬화하는 라이브러리
    • DTO의 getter 메서드 이용

Data Access Layer

  • DAO
    • Entity(= Model)
    • Repository 인터페이스
    • Repository 구현체
  • Entity
    • 데이터베이스 테이블과 1:1 매핑되는 자바 객체
    • DTO와 다름
    • DTO와 분리하는 이유
      • 역할 분리 : DTO는 Client와 Java를 소통하는 클래스이고, DAO는 Java와 DB와 소통하는 클래스
      • 보안 및 노출 제어
      • 의존성 분리
  • JDBC Template
    • 간편하게 JDBC를 사용하여 DB와 상호작용할 수 있도록 스프링에서 제공하는 도구
    • DataSource : 스프링에서 데이터베이스와의 커넥션을 관리하고 제공하는 빈
  • Java의 결합
    • 강한 결합 : 다른 클래스를 바로 사용한 결합 관계
    • 느슨한 결헙 : 인터페이스와 결합 관계를 형성해서 구현 클래스의 변경이 용이