Layered 패턴

Eugenius1st·2026년 9월 15일

Spring

목록 보기
2/5

Layered 패턴

API동작 방식은 아래와 같다.

API /member=> 동작 기대: member테이블에서 member 정보를 받아온다.

  1. API정의 => /member
  2. Member 목록 조회
  3. /SELECT * FROM MEMBER
  4. DB 쿼리 실행
  5. MEMBER 데이터 습득
  6. 데이터 가공
  7. Response

Layered 패턴이란, 이 일련의 행위를 3개로 나누는 것이다.

  1. controller => API 정의(핸들러)
  2. service => API 요청 가공, 쿼리의 응답 가공, 에러처리, 트랜젝션 처리, 필터처리 등등..(로직)
  3. repository = > 쿼리를 정의, DB와 소통(자원 제공)

디렉토리 구조 예시

src
└── main
    ├── java
    │   └── com.example.demo
    │       ├── domain               # 📌 도메인별 패키지
    │       │   └── member
    │       │       ├── controller   # Member 관련 HTTP 요청 처리 (API 엔드포인트)
    │       │       ├── service      # Member 관련 비즈니스 로직 구현
    │       │       ├── dto          # Member 관련 데이터 전송 객체 (Request/Response)
    │       │       ├── entity       # Member 데이터베이스 테이블과 매핑되는 객체
    │       │       └── repository   # Member 데이터베이스 접근 로직 (JPA 인터페이스)
    │       │
    │       ├── common               # 📂 여러 도메인에서 공통으로 사용하는 코드
    │       │   └── util             # 유틸리티 클래스 (e.g., 날짜, 암호화 등)
    │       │
    │       └── global               # 🌍 애플리케이션 전역에 적용되는 코드
    │           └── config           # 각종 설정 클래스 (e.g., SecurityConfig)
    │
    └── resources
        ├── db/migration/            # DB 마이그레이션 스크립트 (Flyway, Liquibase)
        ├── application.yml          # 애플리케이션 주요 설정 파일
        └── static/                  # CSS, JS, 이미지 등 정적 리소스

yml 파일

들여쓰기가 중요하다, 이걸로 설정을 작성한다.

이상적인 개발 환경

회사가서 해야하는 부분

  • local => 개인 pc (local DB) => stage or dev 데이터를 개인pc 로컬로 덤프 / 편의상 DEV 보라는 회사도 있지만, 좋지 않음.
    프론트는 ? => 원칙상 local에 붙어야 한다. qa가 제대로 확인이 안되므로 개발 되기 전까진 로컬에 덤프뜨라고 해도 할 수 있지 못하기 때문에 안한다. 그래서 K8s(쿠버네티스 사용) 별도의 브랜치마다 서버 환경 설정
  • dev => dev 서버(spring) -> DEV DB
  • stage => stage 서버 + 운영 DB
  • prod => 운영 서버 + 운영 DB

build gradle

dependencies 는 외부 라이브러리를 뭘 쓸거다라는 설정이다.

  • implementation: import 하는 것(spring-boot-starter-web을 땡겨와야 spring boot프로젝트가 된다, starter-undertow, starter-data-jpa orm관련한 걸 땡겨온다, starter-security 로 인증인가 필터처리 라이브러리를 땡겨온다. starter-validation 은 api 특정 속성,패턴 들에 기인해서 정의하고 싶을 때 검증하기 위한 라이브러리, starter-acurator 은 어떤 부하가 오는지 헬스 체크다.이는 생각보다 중요하다. querydsl 데이터베이스 쿼리를 작성할 수 있게 도와주는 프레임워크, springdoc
    OPEN API사양을 바탕으로 API문서 자동 생성해주는 라이브러리, flyway 는 자동버전관리 프레임워크, mapstructure 추상화 라이브러리, jjwt는 json을 파싱해주는 것이다. lombok 은 어노테이션 패키지)
  • compileOnly: 컴파일 할때만 실행하는 라이브러리(lombok), 따라서 이 아래부터 순서가 중요하다. 정상 동작이 안된다. 라이브러리를 땡기는 작업들을 먼저 한다음에 진행해줘야 한다. 아래는 다 실행할 것을을 적재한다.
  • runtimeOnly:
  • annotationProcessor: 프로그램이 실행될때 특정 코드를 자동화해서 만들어준다.

@Configuration

@Configuration 어노테이션을 붙이면 설정 파일이 된다.

형상관리 파일


이게 파일명 규칙이다.

db.migration이라는건 yml파일 안에 있는 locations에 있는 Flyway설정 위치로 맞춰야 한다.

profile
자신만의 속도로

0개의 댓글