1. Controller / Service / Repository의 역할
1-1 Controller / Service / Repository 란?
Controller
- 클라이언트의 요청을 받아 처리
- 사용자의 입력을 받아 Service 계층에 전달
- Service 계층에서 반환된 결과를 클라이언트에게 응답
- 요청 매핑, 파라미터 바인딩, 예외 처리 등의 역할
Service
- 애플리케이션의 핵심 비즈니스 로직을 구현
- Controller에서 전달받은 데이터를 가공하고 처리
- 필요한 경우 Repository 계층을 호출하여 데이터를 조회, 생성, 수정, 삭제
- 트랜잭션 관리, 보안, 로깅 등의 부가 기능을 수행
Repository
- 데이터베이스와의 직접적인 통신을 담당
- CRUD(Create, Read, Update, Delete) 작업을 수행
- 엔티티 객체를 데이터베이스 테이블에 매핑
- Service 계층에서 호출되어 데이터를 조회, 저장, 수정, 삭제
2. Controller / Service / Repository 계층으로 나누는 이유
2-1 계층으로 나누는 이유
프로그래밍을 하다보면 지속적인 유지보수와 업데이트로 인해 처음에는 간단한 로직이 굉장히 복잡해지고, 어느순간 스파게티 코드가 될 수 있는 위험이 있다. 코드는 남이 이해하기 쉽고, 안전하게 작성하는 것이 매우 중요하다. 이를 방지하기 위해 개발자들은 하나의 서비스를 만들때 계층을 나누고 이 계층이 크게 Controller - Service - Repository로 나뉜다.
사실 기능 동작만을 생각한다면 굳이 계층을 나눌 필요가 없다. 오로지 Controller에 모든 기능을 다 넣어주면 된다.
하지만 위에서 말했듯이 서비스의 개발은 동작만 구현하고 끝나는 것이 아니라, 서비스의 지속적인 발전을 위해 끈임없는 유지보수와 업데이트를 거치게 된다. 이때 더욱 원활하고 안전한 유지보수와 업데이트를 위해 계층을 나누는것이다.
이는 우리 일상생활과도 똑같다. 회사에서 A라는 사람이 10개의 일을 하게 된다고 가정해보자. 신입사원이 3명이 들어왔을 때, 이들에게 인수인계를 해줄때 A라는 사람 혼자서 감당해야 하면, 어떻게 될까? 차라리 A B C라는 사람들로 각각 3~4개씩 업무 할당을 하게 하고, 이들에게 3명의 신입사원을 넘겨주게 되면 훨씬 수월하게 진행할 수 있을 것이다.
2-2 유지보수 뿐만 아니라, 안전성을 위해
계층을 나누는 궁극적인 이유중 다른 하나는 위에서 말했듯이 안정성 때문이다.
Controller에서 Repository를 직접 참조하는 것은 좋지 못한 행동인데, 그 이유는 정보를 직접 CRUD(생성, 읽기, 수정, 삭제)하고 가공하는 과정에서 데이터베이스에 저장된 원본 정보가 손상될 우려가 있다. 따라서 DTO(Data Transfer Object)와 Entity를 구분하여 계층 간 데이터를 교환하는 것이 중요하다.
이를 통해 정보 변동의 위험이 큰 로직은 Service 계층에서 진행된다. Service 계층에서는 데이터베이스에서 추출한 정보의 복사본인 DTO를 만들어 로직을 조작하고, 이러한 방식으로 데이터의 무결성을 유지하고 안정적인 데이터 처리를 보장할 수 있다.
'JAVASPRING > study' 카테고리의 다른 글
H2 database, 개념 잡기 (0) | 2024.06.27 |
---|---|
GlobalException (0) | 2024.06.21 |
JAVA SPRING / SMTP 이메일 인증하기 (0) | 2024.06.07 |