Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

컨트롤러 메소드에서 트랜잭션 어노테이션 직접 사용에 관해, #157

Open
extremecode716 opened this issue Feb 11, 2024 · 1 comment

Comments

@extremecode716
Copy link

컨트롤러 메소드에 @Transactional 어노테이션을 직접 사용하는 것에 대해 우려 표현, 일반적인 아키텍처 원칙과 스프링의 권장 사항에 따르면, 트랜잭션 관리는 서비스 계층에서 처리하는 것이 좋습니다. 이러한 접근 방식은 여러 가지 이유로 선호됩니다:

  1. 책임의 분리(Separation of Concerns): MVC(Model-View-Controller) 패턴에서 컨트롤러는 주로 HTTP 요청을 받아서 처리하고 응답을 반환하는 역할을 합니다. 비즈니스 로직과 트랜잭션 관리는 모델(여기서는 서비스 계층)의 책임입니다. 이를 통해 코드의 유지보수성과 가독성이 향상됩니다.

  2. 재사용성과 테스트 용이성: 서비스 계층에 트랜잭션 관리를 집중시키면, 해당 서비스를 다른 컨트롤러나 서비스에서 재사용하기 쉬워집니다. 또한, 비즈니스 로직이 서비스 계층에 집중되어 있으면 단위 테스트 및 통합 테스트가 용이해집니다.

  3. 트랜잭션 관리의 유연성: 서비스 계층에서 트랜잭션을 관리하면, 복잡한 비즈니스 로직에서 여러 메소드 호출을 하나의 트랜잭션으로 묶거나, 필요에 따라 다른 서비스와의 트랜잭션을 조정하기 용이합니다.

  4. 보안과 관심사의 분리: 컨트롤러에서는 보안 관련 처리(예: 인증 및 권한 검사)에 더 집중할 수 있으며, 서비스 계층에서는 비즈니스 로직과 트랜잭션 관리에 집중할 수 있습니다.

컨트롤러 메소드에 @Transactional을 직접 사용하는 대신, 이 로직을 서비스 계층으로 옮기고 해당 서비스 메소드에 @Transactional을 적용하는 것이 좋습니다. 필요한 경우, 복수의 서비스 메소드를 호출하는 또 다른 서비스 메소드를 만들어 이를 하나의 트랜잭션으로 묶을 수 있습니다. 이런 방식으로, 컨트롤러는 단순히 이 서비스 메소드를 호출만 하면 되므로, 코드의 책임이 명확히 분리되고, 트랜잭션 관리가 더 유연하고 효율적으로 이루어질 수 있습니다.

  • 컨트롤러에서 파라미터 검증용 벨리데이션까지는 괜찮다고 봅는데, 컨트롤러 메소드는 심플한게 좋습니다. 서비스들을 한번 더 묶은 Facade용 서비스를 하나 둬 두시지요.
@extremecode716
Copy link
Author

OSIV 도 확인

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant