내 Spring Boot Controllers는 괜찮아 보였지만… Presentation Layer를 이해하기 전까지

발행: (2026년 1월 3일 오후 07:46 GMT+9)
6 min read
원문: Dev.to

Source: Dev.to

🧠 프레젠테이션 레이어란? (쉽게 말하면)

프레젠테이션 레이어는 Spring Boot 애플리케이션의 진입점입니다. 역할은 다음과 같습니다:

  • 클라이언트로부터 HTTP 요청을 받는다
  • 요청을 올바른 엔드포인트에 매핑한다
  • 입력 데이터를 받아 변환한다
  • JSON/XML 형태로 응답을 반환한다

비즈니스 로직을 포함해서는 안 됩니다.
데이터베이스와 직접 통신해서도 안 됩니다.

역할은 간단합니다:
요청 처리 → 작업 위임 → 응답 반환

🏗️ 큰 그림: Spring Boot 프로젝트 구조

깨끗한 Spring Boot 웹 애플리케이션은 보통 다음과 같이 구성됩니다:

client
controller
service
dto
repository
entity
database

핵심 규칙:

👉 컨트롤러는 서비스와 통신하고, 데이터베이스와는 직접 통신하지 않는다.

이 규칙을 따르면 코드가 하룻밤 사이에 깔끔해집니다.

🎮 컨트롤러: 프레젠테이션 레이어의 핵심

Spring MVC는 어노테이션 기반 프로그래밍 모델을 제공해 컨트롤러를 만들 수 있게 해줍니다.

중요한 어노테이션

  • @Controller – 뷰를 반환하는 전통적인 MVC 애플리케이션에서 사용합니다.
  • @RestController@Controller + @ResponseBody의 단축 형태입니다. @RestController 안의 모든 메서드는 클라이언트에 JSON/XML을 직접 반환합니다. REST API에서는 @RestController가 기본 선택입니다.

🔗 요청 매핑: 요청이 코드를 찾는 방법

Spring은 어떤 URL이 어떤 메서드에 매핑되는지 알아야 합니다. 여기서 요청 매핑이 사용됩니다.

@RequestMapping

다양한 매핑을 지원하는 일반적인 어노테이션:

  • URL 경로
  • HTTP 메서드
  • 헤더
  • 미디어 타입

실제 프로젝트에서는 더 깔끔한 대안을 주로 사용합니다.

🚦 HTTP 메서드‑별 매핑 (이것을 사용하세요)

Spring은 API를 읽기 쉽게 만들어 주는 단축 어노테이션을 제공합니다:

  • @GetMapping → 데이터 조회
  • @PostMapping → 데이터 생성
  • @PutMapping → 데이터 업데이트
  • @DeleteMapping → 데이터 삭제
  • @PatchMapping → 부분 업데이트

이를 적절히 사용하면 API가 자체 설명적이 됩니다.

🌍 동적 URL: @PathVariable vs @RequestParam

@PathVariable

/employees/123

값이 필수이며 리소스를 고유하게 식별할 때 사용합니다.

@RequestParam

/employees?id=123

파라미터가 선택적일 때, 예를 들어 필터링, 정렬, 페이지네이션 등에 사용합니다.

이 차이를 이해하면 API 설계가 즉시 개선됩니다.

📦 @RequestBody 로 입력 데이터 처리하기

클라이언트가 데이터를 (JSON/XML) 전송하면 Spring은 @RequestBody 를 통해 이를 Java 객체로 변환합니다. 주로 다음 경우에 사용됩니다:

  • POST
  • PUT
  • PATCH

Spring의 메시지 컨버터(예: Jackson)가 JSON을 자동으로 Java 객체로 변환합니다.

⚠️ 내가 저질렀던 실수

예전에는:

  • 컨트롤러 안에 로직을 넣었다
  • 데이터를 수동으로 검증했다
  • 레포지토리를 직접 호출했다

이렇게 하면 관심사의 분리가 깨집니다. 프레젠테이션 레이어는 비즈니스 로직을 위한 곳이 아니다. 이 경계를 지키면 API가:

  • 더 깔끔해지고
  • 테스트하기 쉬워지고
  • 유지보수가 쉬워진다

🚀 마무리 생각

프레젠테이션 레이어는 겉보기엔 단순하지만, 백엔드가 얼마나 깔끔해질지를 결정합니다.

컨트롤러가 깔끔하면:

  • 서비스가 빛을 발하고
  • 버그가 줄어들며
  • 확장이 쉬워진다

이 레이어를 이해한 것이 내 Spring Boot 여정의 전환점이었습니다.

이 글은 Spring Boot와 백엔드 개발을 탐구하면서 진행한 공개 학습 여정의 일부입니다.

Back to Blog

관련 글

더 보기 »

분리를 분리하자

소개 2025년 말 며칠 동안, 우리 팀 리더는 하루를 추가로 쉬면서 중요한 회의를 놓쳤습니다. 최근 구조조정 이후, 한 동료가 떠났습니다.