[Spring] Controller, Service, Repository, Domain, DTO가 뭐야

2025. 6. 22. 22:37·공부 기록/자프링

1. Controller – 사용자 요청 받기

웹에서 사용자가 로그인, 게시글 조회, 회원가입과 같은 행동을 할 때,

그 요청을 받는 곳이 Controller이다.

  • `@RestController`, `@RequestMapping`, `@GetMapping` 같은 어노테이션을 사용해 요청을 받음
  • 요청을 어떻게 처리할지 Service에 전달
  • 로직 처리는 하지 않고 연결 역할만 함
❓ 그럴 거면 Controller 없이 그냥 Service 호출하면 안 돼?
계층 역할 초점
Controller HTTP 요청/응답만 신경씀 요청 → 적절한 서비스에 전달
Service 비즈니스 로직 다룸 실제 로직 처리
Controller는 점원, Service는 주방이라고 생각하면 편함
역할을 나누면 테스트 편리, 재사용 가능, 코드 깔끔해짐

2. Service – 비즈니스 로직 처리

요청을 받은 후, 어떻게 처리할지 결정하는 핵심 계층

  • ex) 회원가입 : 이메일 중복 체크 → 비밀번호 암호화 → DB 저장
  • 필요한 정보를 Repository에서 꺼내 처리함

3. Repository – DB 접근

데이터베이스와 직접 통신하는 역할

  • 직접 쿼리를 쓰지 않아도 되도록 Spring Data JPA 제
  • `JpaRepository`를 상속하면 기본적인 CRUD (create, read, update, delete) 자동 제공
  • 메서드 이름만 지어도 쿼리 생성 → ex) `findByEmail()`
❓ 어떻게 이름만 지어도 쿼리가 자동으로 만들어짐?
Spring에 메서드 이름을 분석해서 알아서 SQL을 생성해주는 기능 존재(JPA 메서드 이름 규칙 기반)

4. Domain – DB에 저장되는 데이터 구조

`@Entity`를 붙이면 해당 클래스는 DB 테이블로 매핑됨

실제 DB에 저장되는 데이터의 틀

  • Repository는 이 객체를 저장하거나 조회
  • 외부로 직접 노출하지 않고, 내부 처리용으로만 사용

5. DTO – 데이터 전달 전용 객체

Data Transfer Object의 약자

계층 간 또는 클라이언트와의 통신에서 데이터를 안전하게 주고 받 포장지라고 생각하면 됨

  • Entity랑 분리 → 보안, 성능, 유지보수에 유리
  • 외부에서 받아오는 값 → Request DTO
  • 외부에 전달해줄 값 → Response DTO

🧭 전체 흐름 예시

사용자가 회원가입을 한다고 가정했을 때
[1] Controller → 요청을 받음 (Request DTO)
[2] Service → 로직 처리 (중복 체크, 비밀번호 암호화 등)
[3] Repository → DB에 저장
[4] Domain(Entity) → DB 테이블로 저장됨
[5] DTO → 응답 데이터로 포장 (Response DTO)

 

'공부 기록 > 자프링' 카테고리의 다른 글

[Java] String to int, int to String 변환하기  (2) 2025.05.11
[Java] LinkedList와 ListIterator에 대한 고찰  (1) 2025.05.01
[백엔드/Java] Stream vs for-loop 성능 비교  (1) 2025.04.21
'공부 기록/자프링' 카테고리의 다른 글
  • [Java] String to int, int to String 변환하기
  • [Java] LinkedList와 ListIterator에 대한 고찰
  • [백엔드/Java] Stream vs for-loop 성능 비교
lelezhong
lelezhong
흘러가듯이
  • lelezhong
    zhong
    lelezhong
  • 전체
    오늘
    어제
    • 전체보기 (10)
      • 개인 프로젝트 (1)
        • Hatchery (1)
      • SSAFY (3)
      • 공부 기록 (6)
        • 자프링 (4)
        • 알고리즘 (1)
        • 트러블슈팅 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스프링 계층 구조
    인라인 코드 공백
    티스토리 인라인
    dto란
    싸피
    백틱 공백
    위젯 기반 웹 게임
    백틱
    java
    싸피 14기
    ssafy
    티스토리 백틱
    싸피 에세이
    싸피 코테
    tostirng
    StreamAPI
    인라인 코드블럭
    자바
    싸피 14기 지원
    싸피14기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
lelezhong
[Spring] Controller, Service, Repository, Domain, DTO가 뭐야
상단으로

티스토리툴바