[Spring] 3 Layer Architecture 개념 정리

2025. 10. 17. 10:20·Spring

JPA의 어노테이션과 엔티티 개념에 대해서 이전 글을 통해 정리하고 복습하는 과정을 거쳤다.

 

오늘은 CRUD 테스트 이전에 짚고 넘어가야만 했던 중요한 내용인 3 Layer Architecture의 개념을 추가 정리하고자 한다.

 

✅ 3 Layer Architecture

: 소프트웨어 시스템을 세 개의 논리적 계층으로 분리하는 아키텍처

세 개의 레이어로 분리

  1. Controller Layer (Persentation Layer라고도 함)
  2. Service Layer (Business Layer, Apllication Layer라고도 함)
  3. Repository Layer (Data Layer라고도 함)

📌 3 Layer Architecture의 목적

  • 관심사의 분리
    • 각 계층은 고유한 책임만 담당
    • 변경 사항의 영향 범위 최소화
  • 유지보수성 향상
    • 코드의 가독성과 이해도 증가
    • 독립적인 테스트 가능
  • 재사용성 증대
    • 각 계층을 독립적으로 재사용
    • 모듈화된 설계
  • 확장성 개선
    • 특정 계층만 변경하여 기능 확장
    • 새로운 기술 도입 용이

Controller Layer

 : 일반 사용자가 애플리케이션과 상호작용하는 사용자 인터페이스 및 커뮤니케이션 계층

🌱 스프링 코드 예시

@RestController
public class HelloController {
	//...
}

→ @RestController를 사용

 

✅ 해야할 일

  • HTTP 요청 매핑
  • 요청 파라미터 검증
  • 응답 데이터 변환
  • 예외 처리 및 에러 응답

❌ 하지 말아야 할 일

  • 비즈니스 로직 처리
  • 데이터베이스 직접 접근
  • 복잡한 데이터 변환

Service Layer

: 비즈니스 로직을 처리하는 역할을 함. 백엔드의 모든 핵심 로직이 운영되는 계층

🌱 스프링 코드 예시

@Service
public class HelloService {
	//...
}

 

✅ 해야 할 일

  • 비즈니스 규칙 구현
  • 데이터 유효성 검증
  • 여러 데이터 소스 조합
  • 트랜잭션 경계 설정

❌ 하지 말아야 할 일

  • HTTP 관련 처리
  • 데이터베이스 쿼리 작성
  • UI 관련 로직

Repositoy Layer

: 데이터베이스와의 상호작용을 담당. 실제 데이터베이스에서 데이터를 저장하거나 가져오는 계층

🌱 스프링 코드 예시

public interface UserRepository extends JpaRepository<User, Long> {
	//...
}

→ @Repository를 사용하지만, 이미 해당 기능을 갖고 있는 JpaRepository를 extends 하는 경우에는 추가로 @Repository를 붙이지 않아도 됨

 

✅ 해야 할 일

  • CRUD 연산 구현
  • 쿼리 최적화
  • 데이터 매핑

❌ 하지 말아야 할 일

  • 비즈니스 로직 처리
  • HTTP 응답 생성
  • 사용자 인터페이스 관련 작업

💡 레이어 간 통신 규칙

✅ 허용되는 통신

  • 상위 → 하위 : 상위 계층이 하위 계층을 호출
  • 같은 계층 : 동일 계층 내 컴포넌트 간 통신

❌ 금지되는 통신

  • 하위 → 상위 : 하위 계층이 상위 계층 직접 호출
  • 계층 건너뛰기
    • 잘못된 예) Controller가 Repository 직접 호출

DTO(Data Transfer Object)

: 데이터를 전달하기 위한 순수 데이터 객체

코드 예시

  • JSON 요청
{
	"title" : "범죄도시11"
}

JSON형식으로 위처럼 요청을 보냈다면, 이를 Controller에서는 데이터를 DTO(자바 코드)로 받게 됨

  • DTO
@Getter
public class CreateMovieRequest {
	
    private String title;
}

순수하게 데이터를 담기위한 DTOfmf todtjd

JSON의 상황에 맞춰 DTO 클래스에도 동일한 필드를 작성

 

  • Controller
@RestController
public class MovieController {

	@PostMapping("/movies")
    public void createMovie(@RequestBody CreateMovieRequest request) {
    	//...
    }
}

 

영속성 컨텍스트

: 영속성 컨텍스트를 쉽게 풀어 말하면 JPA가 엔티티를 관리하는 임시 저장소를 의미

 

📌 영속성 컨텍스트가 하는 일

  1. 엔티티를 임시로 보관
  2. 변경사항을 추적 (더티체킹)
  3. 데이터베이스와 동기화

✅ 엔티티의 생명주기

: 엔티티 객체가 생성되어 소멸하기까지 거치는 여러 상태의 변화 과정을 의미

비영속 : DB에 한번도 갔다오지 않은 상태, 영속 : DB를 갔다온 상태

 

✅ @Transactional 기본

: 여러 작업을 하나의 단위로 묶어서 모두 성공하거나 모두 실패하게 하는 것. 이 특성을 원자성이라고 함

 

영속성 컨텍스트의 동작을 위한 전제조건은 트랜잭션 경계 안에 있어야 한다는 것인데, 이를 풀어 말하면

 

트랜잭션 내에서 데이터베이스를 한 번이라도 갔다온 엔티티를 관리 하는 것

 

 

@Transactional

  • 여러 개의 작업을 하나의 단위로 묶어 실행. (원자성)
  • @Transactional의 속성
    • readOnly : true 설정 시, 읽기 전용으로 사용하여 성능을 최적화 (CUD 작업은 불가)
    • propagation : 트랜잭션 전파 규칙을 정의. (e.g. REQUIRED, REQUIRES_NEW)
    • isolation : 트랜잭션의 격리 수준을 설정하여 동시성 문제를 제어
    • rollbackFor : 특정 예외가 발생했을 때 강제로 롤백하도록 지정
      👉 readOnly를 제외한 나머지 속성은 후에 심화과정 학습 과정에서 상세하게 배울 예정

JpaRepository 활용

: JpaRepository를 사용하면 쿼리를 작성하지 않고도 쉽게 DB에 데이터를 CRUD 할 수 있음

  • Create : 데이터 새로 넣기 → save(entity)
  • Read : 데이터 읽기 → findById, findAll 등
  • Update : 값 바꾸기 → (트랜잭션 안에서) 엔티티의 필드만 변경 → 커밋 시 자동 UPDATE (더티체킹)
  • Delete : 삭제 → delete(entity), deleteById(id), deleteAll()

'Spring' 카테고리의 다른 글

[Spring] Spring Data JPA 개념 정리하기  (0) 2025.10.16
'Spring' 카테고리의 다른 글
  • [Spring] Spring Data JPA 개념 정리하기
stark77
stark77
하마의 IT 자기개발 이모저모, 백엔드 개발자로 거듭나기
  • stark77
    하마의 개발자 성장일기
    stark77
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 컴퓨터구조와 운영체제
        • 컴퓨터구조
        • 운영체제
      • SQL 기초
      • Spring
        • 백엔드 기초
        • Spring 실습
      • JAVA
        • Java 실습
      • HTML&CSS
        • HTML&CSS 실습
      • Git&GitHub
        • Git&GitHub 실습
      • 내배캠 끄적끄적
        • Today I Learned
      • 유용한 툴 및 사이트 정리
      • 취미
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    다형성
    JPA
    git
    백엔드 기초다지기
    for문
    jsp
    String.format
    Stomp
    Github
    Til
    BEAN
    백엔드 기초
    네트워크 기초
    thymleaf
    SpringSecurity
    객체지향프로그래밍
    웹소켓
    WebSocket
    프로세스와 쓰레드
    HTML&CSS
    Spring
    Java 문법기초
    Spriingboot
    algorithm
    객체지향
    경합조건과 교착상태
    java
    RestTemplate
    실시간 데이터 처리
    MVC
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
stark77
[Spring] 3 Layer Architecture 개념 정리
상단으로

티스토리툴바