Controller-Service-Repository 패턴
- Spring Framework에서 가장 일반적인 아키텍처는 Controller-Service-Repository 패턴이다.
- 이 패턴은 애플리케이션의 논리적인 계층을 분리해 유지보수성과 확장성을 향상시키는데 도움을 준다.
- Controller
: Controller는 웹 요청을 받아서 해당 요청을 처리할 Service를 호출하고, 그 결과를 다시 View에 전달하는 역할을 한다. Controller는 클라이언트로부터의 입력을 처리하며, Http 요청에 대한 응답을 생성한다.
@Controller
@RequestMapping("/example")
public class ExampleController {
private final ExampleService exampleService;
@Autowired
public ExampleController(ExampleService exampleService) {
this.exampleService = exampleService;
}
@GetMapping("/hello")
public String hello(Model model) {
String message = exampleService.getMessage();
model.addAttribute("message", message);
return "helloView";
}
}
→ 위 코드에서 Controller 역할을 하는 ExampleController 클래스가 있다.
- Controller에서는 ExampleService 객체를 생성자를 통해 주입받아서, Service를 호출한다.
- 이후 View에서 사용할 데이터를 Model에 저장하고, View의 이름을 반환해 해당 View로 이동한다.
2. Service
: Service는 비즈니스 로직을 수행하는 역할을 한다. Service는 Repository를 사용해 데이터에 접근하고, 그 결과를 다시 Controller에 전달한다. Service는 보통 여러 개의 Repository를 사용해 데이터를 처리한다.
@Service
public class ExampleService {
private final ExampleRepository exampleRepository;
@Autowired
public ExampleService(ExampleRepository exampleRepository) {
this.exampleRepository = exampleRepository;
}
public String getMessage() {
String message = exampleRepository.getMessage();
return "Hello " + message + "!";
}
}
→ 위 코드에서는 Service 역할을 하는 ExampleService 클래스가 있다. Service에서는 ExampleRepository 객체를 생성자를 통해 주입받아서, Repository를 사용해 데이터를 처리한다.
이후 Controller에 반환할 데이터를 생성해 반환한다.
3.Repository
: Repository 는 데이터에 접근하는 역할을 한다. Repository는 데이터베이스나 파일, 메모리 등 다양한 데이터 저장소에 접근하는 기능을 제공한다. Repository는 보통 DAO(Data Access Object)로 불리기도 한다.
@Repository
public class ExampleRepository {
public String getMessage() {
return "World";
}
}
→ 위 코드에서 Repository 역할을 하는 ExampleRepository 클래스가 있다.
Repository에서는 데이터에 대한 접근 메서드를 제공한다.→ 위의 예제에서는 getMessage() 메서드
위와 같이 Controller-Service-Repository 패턴을 사용하면, 각 계층의 역할이 분리되므로 유지 보수성과 확장성이 높아진다.
[ 정리 ]
Controller → Service → Repository
- controller는 사용자의 요청을 처리하는 로직을 수행한다.
- Service는 사용자의 요청과 Repository의 간극을 해결하는 로직을 수행한다.
- ex) 사용자의 요청이 글 삭제일 때, 레포지토리에서는 글 삭제와 댓글 삭제 두가지를 수행해야 한다.
- Repository에서는 데이터에 접근하는 역할을 한다.
'SPRING' 카테고리의 다른 글
| HTTP 요청 메서드 ( GET / POST ) (0) | 2024.02.08 |
|---|---|
| Artillery를 활용한 부하 테스트 (0) | 2024.02.02 |