카고짱짱짱님의 면접 결과

40

총점

3

질문 수

1

좋아요

20

조회수

종합 평가

면접자는 스프링 AOP와 트랜잭션 관리에 대한 기본 개념을 잘 이해하고 있으며, 특히 @Transactional 어노테이션의 동작 방식과 프록시 객체의 생성 과정에 대해 명확하게 설명했습니다. 다만, 프록시 객체가 실제 메서드를 호출하는 과정에 대한 설명이 다소 간략하여, JDK 동적 프록시와 CGLIB의 차이점이나 AOP의 Advice, Pointcut, Aspect와 같은 핵심 개념에 대한 더 깊은 이해를 보여주었다면 좋았을 것입니다. 스프링 AOP의 기본 개념은 잘 파악하고 있으나, 내부 동작 원리와 구현 세부사항에 대해 더 깊이 학습하시고, 실제 프로젝트에서 발생할 수 있는 프록시 관련 문제(자가 호출 문제, 프록시 모드 설정 등)에 대한 이해를 넓히시길 권장합니다.

질문별 상세 분석

커뮤니티 공개
Q1A

@Transactional 의 동작 방식에 대해 설명해주세요.

응답 내용

@Transcational은 스프링 AOP 기술에 기반하는데요. 용어가 정확히 맞는지 헷갈리는데, TranscationSynchronizeManager라는 스프링 빈이 트랜잭션을 시작하고, 각종 쿼리를 수행하고, 트랜잭션을 커밋 또는 롤백시켜야 합니다. 이 때 트랜잭션을 시작하고 롤백시키는 것은 비즈니스 로직이라기보다는 부가로직에 가까우므로, 실제 비즈니스 로직에 섞이면 유지보수성이 떨어지게 됩니다. 따라서 @Transcational을 붙이면 스프링 AOP 기술에 기반해 트랜잭션을 관리해주는 프록시 빈이 스프링 빈으로 등록되고, 프록시 빈은 내부적으로 실제 빈을 들고 있게 됩니다. 따라서 프록시 빈은 트랜잭션을 시작하고, 실제 빈의 메서드를 invoke 시키고, 그것이 성공적으로 끝마쳤을 때 트랜잭션을 커밋하거나 롤백하는 식으로 동작합니다.

AI 피드백

스프링 AOP를 기반으로 한 프록시 패턴과 트랜잭션의 시작, 커밋, 롤백 과정을 논리적으로 잘 설명해주셨고, 비즈니스 로직과 부가 로직의 분리 필요성에 대한 이해도 훌륭합니다. 다만 TransactionSynchronizationManager는 트랜잭션을 직접 시작하고 관리하는 역할보다는 현재 스레드의 트랜잭션 상태와 리소스를 동기화하고 관리하는 역할을 하며, 실제 트랜잭션 관리는 PlatformTransactionManager가 담당합니다. 또한 @Transactional의 동작에서 중요한 부분인 프록시의 한계점(같은 클래스 내부 메서드 호출 시 트랜잭션이 적용되지 않는 점)이나 전파 속성(Propagation), 격리 수준(Isolation Level) 등의 개념도 함께 학습하시면 더욱 완성도 높은 답변이 될 것 같습니다. 전반적으로 핵심 동작 원리를 잘 이해하고 계시니, 세부적인 컴포넌트들의 역할과 다양한 설정 옵션들을 추가로 공부해보시기 바랍니다.

Q2B

스프링 AOP에서 프록시 객체는 어떤 방식으로 생성되나요?

응답 내용

특정 빈을 등록할 때, 해당 빈에 AOP가 적용되어 있다면, 그 클래스의 객체를 생성해서 곧바로 빈으로 등록하는 게 아니라, 프록시 객체를 생성해서 프록시 객체가 내부적으로 실제 target 객체를 들고 있게 됩니다. 따라서 빈을 관리하는 스프링컨테이너에 등록되는 건 사실 프록시 객체가 되구요.

AI 피드백

스프링 AOP에서 프록시 객체가 실제 target 객체를 내부적으로 보유하고, 스프링 컨테이너에는 프록시 객체가 등록된다는 핵심 개념을 정확하게 설명해주셨습니다. 다만 답변이 다소 간략해서 프록시 생성 방식에 대한 구체적인 내용이 부족합니다. JDK Dynamic Proxy와 CGLIB 프록시라는 두 가지 주요 방식이 있으며, 인터페이스 구현 여부에 따라 선택되는 메커니즘을 추가로 설명하시면 더욱 완성도 높은 답변이 될 것 같습니다. 또한 BeanPostProcessor가 빈 생성 과정에서 프록시 객체를 생성하는 역할을 한다는 점도 함께 학습해보시기 바랍니다.

사용자 메모

아 질문의 의도는 JDK Dynamic Proxy, CGLIB이었구나. 이거 예전에 분명 공부했었는데 다 까먹었다. 다시 공부해볼 것.

Q3B

프록시 객체가 실제 메서드를 호출하는 구체적인 과정을 설명해주실 수 있을까요?

응답 내용

실제 객체를 내부 필드로 들고 있게 되면서 부가 로직을 앞뒤로 수행하고, 가운데에는 필드로 들고 있는 target 객체의 메서드를 invoke 시키게 됩니다.

AI 피드백

프록시 객체가 실제 target 객체를 내부 필드로 보관하고, 부가 로직을 앞뒤로 수행한 후 target 객체의 메서드를 invoke하는 기본적인 동작 방식을 잘 설명해주셨습니다. 다만 답변이 다소 간략해서 구체적인 과정에 대한 설명이 부족합니다. 예를 들어 JDK Dynamic Proxy나 CGLIB 같은 프록시 생성 방식, Method.invoke()를 통한 리플렉션 호출, 그리고 @Transactional의 경우 트랜잭션 시작 → 실제 메서드 호출 → 성공시 커밋/예외시 롤백하는 구체적인 흐름을 추가로 설명하시면 더욱 완성도 높은 답변이 될 것 같습니다. 스프링 AOP의 내부 동작 원리와 리플렉션 API에 대해 더 깊이 학습해보시길 권합니다.

사용자 메모

어드바이저, 어드바이스와 같은 개념을 언급했으면 좋았겠구나.

커뮤니티 공유 안내

• 이 결과는 AI가 분석한 내용이며, 학습 목적으로 커뮤니티에 공유됩니다.

• 좋아요를 눌러 유용한 답변에 반응을 남겨보세요.

• 개인정보는 포함되지 않으며, 면접 연습 개선을 위한 참고 자료로 활용됩니다.