1. Controller – 사용자 요청 받기
웹에서 사용자가 로그인, 게시글 조회, 회원가입과 같은 행동을 할 때,
그 요청을 받는 곳이 Controller이다.
- `@RestController`, `@RequestMapping`, `@GetMapping` 같은 어노테이션을 사용해 요청을 받음
- 요청을 어떻게 처리할지 Service에 전달
- 로직 처리는 하지 않고 연결 역할만 함
❓ 그럴 거면 Controller 없이 그냥 Service 호출하면 안 돼?
Controller는 점원, Service는 주방이라고 생각하면 편함
계층 역할 초점 Controller HTTP 요청/응답만 신경씀 요청 → 적절한 서비스에 전달 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 |