개발 기록/모르는 용어들

계층 구조, 계층 분리, 관심사 분리, 테스트 용이성, MOCKING

dev.jelee 2025. 11. 17. 13:40

※ 개인 프로젝트 문서 정리 중 모르거나 명확하게 알지 못하는 용어들이 있어서 정리해본다.


1. 계층 구조의 구분: 3-Tier과 Backend Layering

계층 구조(Tier Architecture)와 계층 분리(Layering)은 서로 다른 범주다.

구분 용어 대상  목적
물리적 계층 3-Tier (3계층 구조) 서로 다른 물리적/논리적 서버에 위치하는 주요 구성 요소 시스템 전체의 확장성, 분산, 네트워크 분리
논리적 계층 Backend Layering 단일 서버(Spring Boot) 내에서 논리적 역할에 따라 코드를 분류 유지보수, 관심사 분리, 테스트 용이성

 

예시:

  • 3-Tier: React(프레젠테이션/클라이언트 Tier) - Spring Boot (애플리케이션/비즈니스 Tier) - MySQL (데이터 Tier)로 구성되어 시스템 전체의 확장성을 확보했다.
  • Backend Layering: Spring Boot 내부에서 Controller-Service-Repository로 분리하여 코드를 조직화하고 논리적 역할을 명확히 했음을 강조한다.

2. 관심사 분리 (Separation of Concerns, SOC)

관심사 분리란 소프트웨어를 설계할 때 서로 다른 기능을 수행하는 코드를 명확하게 분리하는 원칙을 말한다.

계층별 관심사

계층/컴포넌트 주된 관심사
React (프론트엔드) 사용자 경험(UI/UX), 사용자 입력 처리, 데이터 표시
Controller HTTP 요청/응답 처리, 데이터 유효성 검사, Service 호출
Service 비즈니스 로직(핵심 기능), 여러 Repository 조합, 트랜잭션 관리
Repository (JPA) DB 접근 방식 (CRUD), 데이터 맵핑

 

관심사 분리가 중요한 이유:

  • 유지보수: UI를 수정하더라도 비즈니스 로직(Service)에는 영향을 주지 않으므로, 한 부분의 수정이 다른 부분의 오류를 일으키는 것을 방지한다.
  • 재사용성: Service 계층의 비즈니스 로직은 Controller가 아닌 다른 곳(예: 배치 작업)에서도 재사용될 수 있다.

3. 테스트 용이성 (Testability)

Conroller-Service-Repository가 테스트 용이한 이유는?

가장 큰 이유는 MOCKING이 가능하기 때문이다. (*MOCKING: 가짜 객체)

  • Service 계층 테스트: Service의 비즈니스 로직을 테스트할 때, 실제 DB에 접근할 필요가 없다. Repository 인터페이스를 Mocking(가짜 객체)하여 Service에 주입하면, Service는 가짜 Repository가 반환하는 데이터를 가지고 순수한 비즈니스 로직만 테스트할 수 있다.
  • Controller 계층 테스트: Controller를 테스트할 때, 복잡한 비즈니스 로직을 수행할 필요가 없다. Service를 Mocking하여 Controller가 HTTP 요청을 올바르게 처리하고 올바른 Service를 호출하는지만 확인하면 된다.