• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

프록시 관련 질문이 있습니다!

24.02.05 17:36 작성 24.02.05 17:43 수정 조회수 154

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
안녕하세요.
김영한 선생님. 선생님의 강의를 잘 듣고 있습니다.
현재 AOP 적용 부분에서 프록시 부분에 대한 설명을 듣고 있었는데요, 선생님께서는 프록시가 컨트롤러 내부에서 형성되어 그 프록시가 실질적인 서비스 부분으로 요청을 넘겨주고 처리해 줄 것이다. 이런 느낌으로 말씀해주셨던 것 같습니다.
여기서 조금 궁금했던 부분이 있습니다. 만약 다른 컨트롤러 파일 내부에서 같은 서비스에 대해서 AutoWired를 통해 의존성 주입을 받게 될 경우, 서비스를 연결하는 프록시가 컨트롤러마다 생길지에 대해서 궁금했었습니다.
제가 생각하기에는 다른 프록시가 서로 나올 거 같은데, 로그를 찍어보았을 때는 두 컨트롤러가 같은 프록시를 공유하였습니다.
혹시 프록시의 생성 기준은 서비스일까요 컨트롤러일까요?

또한 AOP를 사용하지 않는 경우 해당 파일은 프록시를 전혀 사용하지 않을까요?

그것이 궁금합니다.

답변 1

답변을 작성해보세요.

0

y2gcoder님의 프로필

y2gcoder

2024.02.06

안녕하세요. 서건혁님, 공식 서포터즈 y2gcoder입니다.

기본적으로 스프링은 애플리케이션 실행 시 스프링 빈을 등록하고 의존관계 주입을 해주게 됩니다. 이 때 @Autowired를 이용해 의존관계 주입을 해줄 때는 스프링이 같은 빈으로 등록하도록 기능해줍니다!

AController 빈, BController 빈이 있고 두 컨트롤러 모두 Service 빈을 주입받아야 한다고 하면 스프링이 알아서 스프링 빈으로 등록된 Servie 빈 인스턴스를 주입해준다는 뜻입니다! 그래서 엄밀히 말씀드리자면 애플리케이션 구동 시 스프링이 등록된 빈이 있으면 그 빈 인스턴스 하나를 사용하는 곳에 알아서 주입해주게 됩니다.

그리고 앞서 말씀드린 것과 연관지어 스프링은 애플리케이션 구동 시 스프링 빈 대상을 검색해 인스턴스를 생성해 빈으로 등록하게 됩니다. 이때 스프링 AOP 대상이 되는 빈은 해당 빈에 대한 프록시 객체를 만들어 대신 빈으로 등록하게 됩니다.

위의 내용을 종합해보면 여러 컨트롤러가 동일한 서비스 프록시 빈 인스턴스를 주입받은 이유에 대해서 어렴풋이 감 잡으셨을 거라 생각합니다. 이 부분에 대해 자세하게 학습하고 싶으시다면 영한님의 스프링 핵심 원리 - 기본편, 스프링 핵심원리 - 고급편 을 강력 추천합니다!

추가로 기본적으로 AOP 대상이 아니거나 AOP를 사용하지 않는다면 말씀하신 것처럼 프록시가 아닌 실제 객체를 빈으로 등록합니다 :)

감사합니다.

서건혁님의 프로필

서건혁

질문자

2024.02.06

궁금했던 내용이 해결됐습니다. 감사합니다!