728x90
반응형
- 스프링에서 가장 권장하는 방법

- clienct → external()
- client → internal()
- 클라이언트에서 둘 다 호출하는 것
- 물론 external()에서 internal을 내부 호출하지 않도록 코드를 변경해야 한다.
- 클라이언트가 모두 호출하도록 구조를 변경 하면 된다. (가능한 경우에)
💡 참고) aop는 주요 트랜잭션 적용이나 주요 컴포넌트의 로그 출력 기능에 사용된다. 인터페이스에 메서드가 나올 정도의 규모에 aop 적용하느 것이 적당하다. aop는 public 메서드만 적용한다. private 메서드처럼 작은 단위에는 AOP를 적용하지 않는다. AOP 적용을 위해 private 메서드를 외부 클래스로 변경하고 public 으로 변경하는 일은 거의 없다. 그러나 위 예제와 같이 public 메서드에서 public 메서드를 내부 호출하는 경우에는 문제가 발생한다. 실무에서 꼭 한번은 만나는 문제이기에 이번 강의에서 다루었다. AOP가 잘 적용되지 않으면 내부 호출을 의심해보자.
예제 코드
/**
* 구조 변경 (분리)
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class CallServiceV3 {
private final InternalService internalService;
public void external() {
log.info("call external");
internalService.internal(); // 외부 메서드 호출
}
}
@Slf4j
@Component
public class InternalService {
public void internal() {
log.info("call internal");
}
}
@SpringBootTest
class CallServiceV3Test {
@Autowired
CallServiceV3 callServiceV3;
@Test
void external() {
callServiceV3.external();
}
}
728x90
반응형
댓글