반응형
안녕하세요, 오늘은 스프링부트(Spring Boot) 3에서 가장 기본이자 핵심!
바로 Repository → Service → Controller 구조에 대해
재미있고 직관적으로 설명해보겠습니다 😎
🧭 흐름 먼저 보고 가자
Controller (API 입구)
↓
Service (비즈니스 로직)
↓
Repository (DB 연결)
- Controller: "누가 요청했어? 무슨 데이터가 필요해?" → API 요청을 받는 문지기
- Service: "오케이, 이 요청 처리해줄게!" → 핵심 로직 처리 담당
- Repository: "데이터 줘! 저장도 해줘!" → DB와 소통하는 영업사원
🧱 각각 뭐하는 앤데?
1. 🎮 Controller — API의 입구이자 전면 배너
@RestController
@RequestMapping("/api/users")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/{id}")
public UserDto getUser(@PathVariable Long id) {
return userService.getUserById(id);
}
}
- 클라이언트가 /api/users/1 호출하면 여기로 들어옴.
- 요청 파라미터 확인하고, 서비스에 “요거 처리 좀” 요청함.
✅ Tip: @RestController = JSON 응답을 반환하는 컨트롤러
2. 🧠 Service — 진짜 ‘일’하는 핵심 로직 덩어리
@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public UserDto getUserById(Long id) {
User user = userRepository.findById(id)
.orElseThrow(() -> new RuntimeException("유저 없음!"));
return new UserDto(user);
}
}
- DB에 직접 접근은 안 해요! Repository한테 시켜요~
- 예외 처리, 데이터 가공, 트랜잭션 처리 등 실질적인 비즈니스 로직 담당!
✅ Tip: @Service 붙이면 스프링이 빈으로 관리해줌 (IoC/DI)
3. 🗃️ Repository — 진짜 DB랑 통신하는 데이터 엔지니어
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
// 커스텀 쿼리도 만들 수 있어요
Optional<User> findByEmail(String email);
}
- JPA를 통해 CRUD 메서드를 자동으로 제공받음
- DB에게 “user 테이블에서 이거 가져와!”라고 요청하는 역할
✅ Tip: JpaRepository 덕분에 findAll(), save(), delete() 같은 메서드는 이미 다 있음.
스프링부트는 복잡한 설정 없이도 효율적인 구조로 개발할 수 있게 도와줘요.
하지만 구조의 의도를 정확히 이해하고 써야 실무에서도 "개발자 맛집" 되는 거죠 🍜
반응형
'Spring Boot' 카테고리의 다른 글
JPA 제대로 이해하기 — 객체 지향 개발자의 데이터 접근 전략 (4) | 2025.07.19 |
---|---|
JWT (0) | 2024.01.26 |
스프링 시큐리티 (0) | 2024.01.26 |
front + backend 게시판 CRUD 구현 (1) (0) | 2023.10.19 |