반응형

안녕하세요, 오늘은 스프링부트(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

+ Recent posts