You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
컨트롤러 메소드에 @Transactional 어노테이션을 직접 사용하는 것에 대해 우려 표현, 일반적인 아키텍처 원칙과 스프링의 권장 사항에 따르면, 트랜잭션 관리는 서비스 계층에서 처리하는 것이 좋습니다. 이러한 접근 방식은 여러 가지 이유로 선호됩니다:
책임의 분리(Separation of Concerns): MVC(Model-View-Controller) 패턴에서 컨트롤러는 주로 HTTP 요청을 받아서 처리하고 응답을 반환하는 역할을 합니다. 비즈니스 로직과 트랜잭션 관리는 모델(여기서는 서비스 계층)의 책임입니다. 이를 통해 코드의 유지보수성과 가독성이 향상됩니다.
재사용성과 테스트 용이성: 서비스 계층에 트랜잭션 관리를 집중시키면, 해당 서비스를 다른 컨트롤러나 서비스에서 재사용하기 쉬워집니다. 또한, 비즈니스 로직이 서비스 계층에 집중되어 있으면 단위 테스트 및 통합 테스트가 용이해집니다.
트랜잭션 관리의 유연성: 서비스 계층에서 트랜잭션을 관리하면, 복잡한 비즈니스 로직에서 여러 메소드 호출을 하나의 트랜잭션으로 묶거나, 필요에 따라 다른 서비스와의 트랜잭션을 조정하기 용이합니다.
보안과 관심사의 분리: 컨트롤러에서는 보안 관련 처리(예: 인증 및 권한 검사)에 더 집중할 수 있으며, 서비스 계층에서는 비즈니스 로직과 트랜잭션 관리에 집중할 수 있습니다.
컨트롤러 메소드에 @Transactional을 직접 사용하는 대신, 이 로직을 서비스 계층으로 옮기고 해당 서비스 메소드에 @Transactional을 적용하는 것이 좋습니다. 필요한 경우, 복수의 서비스 메소드를 호출하는 또 다른 서비스 메소드를 만들어 이를 하나의 트랜잭션으로 묶을 수 있습니다. 이런 방식으로, 컨트롤러는 단순히 이 서비스 메소드를 호출만 하면 되므로, 코드의 책임이 명확히 분리되고, 트랜잭션 관리가 더 유연하고 효율적으로 이루어질 수 있습니다.
컨트롤러에서 파라미터 검증용 벨리데이션까지는 괜찮다고 봅는데, 컨트롤러 메소드는 심플한게 좋습니다. 서비스들을 한번 더 묶은 Facade용 서비스를 하나 둬 두시지요.
The text was updated successfully, but these errors were encountered:
14th-team5-BE/member/src/main/java/com/oing/controller/MemberController.java
Line 59 in 5850a3a
컨트롤러 메소드에
@Transactional
어노테이션을 직접 사용하는 것에 대해 우려 표현, 일반적인 아키텍처 원칙과 스프링의 권장 사항에 따르면, 트랜잭션 관리는 서비스 계층에서 처리하는 것이 좋습니다. 이러한 접근 방식은 여러 가지 이유로 선호됩니다:책임의 분리(Separation of Concerns): MVC(Model-View-Controller) 패턴에서 컨트롤러는 주로 HTTP 요청을 받아서 처리하고 응답을 반환하는 역할을 합니다. 비즈니스 로직과 트랜잭션 관리는 모델(여기서는 서비스 계층)의 책임입니다. 이를 통해 코드의 유지보수성과 가독성이 향상됩니다.
재사용성과 테스트 용이성: 서비스 계층에 트랜잭션 관리를 집중시키면, 해당 서비스를 다른 컨트롤러나 서비스에서 재사용하기 쉬워집니다. 또한, 비즈니스 로직이 서비스 계층에 집중되어 있으면 단위 테스트 및 통합 테스트가 용이해집니다.
트랜잭션 관리의 유연성: 서비스 계층에서 트랜잭션을 관리하면, 복잡한 비즈니스 로직에서 여러 메소드 호출을 하나의 트랜잭션으로 묶거나, 필요에 따라 다른 서비스와의 트랜잭션을 조정하기 용이합니다.
보안과 관심사의 분리: 컨트롤러에서는 보안 관련 처리(예: 인증 및 권한 검사)에 더 집중할 수 있으며, 서비스 계층에서는 비즈니스 로직과 트랜잭션 관리에 집중할 수 있습니다.
컨트롤러 메소드에
@Transactional
을 직접 사용하는 대신, 이 로직을 서비스 계층으로 옮기고 해당 서비스 메소드에@Transactional
을 적용하는 것이 좋습니다. 필요한 경우, 복수의 서비스 메소드를 호출하는 또 다른 서비스 메소드를 만들어 이를 하나의 트랜잭션으로 묶을 수 있습니다. 이런 방식으로, 컨트롤러는 단순히 이 서비스 메소드를 호출만 하면 되므로, 코드의 책임이 명확히 분리되고, 트랜잭션 관리가 더 유연하고 효율적으로 이루어질 수 있습니다.The text was updated successfully, but these errors were encountered: