• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

ApplicationContext가 여러 인터페이스를 상속받은 것이 어느곳에 활용되는지 잘 모르겠어요.

23.12.11 01:40 작성 조회수 211

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
안녕하세요. "BeanFactory와 ApplicationContext" 강의를 보던 도중 궁금한 것이 있어 질문을 드립니다. ApplicationContext가 단순히 BeanFactory를 넘어 여러 강력한 기능을 제공하기 위해 다른 인터페이스도 상속한다고 합니다. 그런데 EnvironmentCapable를 제외하고 다른 인터페이스들이 ApplicationContext에서 무엇을 위해 활용되는지 잘 모르겠습니다. MessageSource, ApplicationEventPublisher, ResourceLoader들이 ApplicationContext 인터페이스에서 실무에서 어떻게 응용되는지 알 수 있을까요?
Screenshot 2023-12-10 at 9.36.12 AM.png

답변 1

답변을 작성해보세요.

0

y2gcoder님의 프로필

y2gcoder

2023.12.11

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

밑의 내용과 연관지어서 설명을 드려보겠습니다!

  • MessageSource(메시지소스를 활용한 국제화 기능): 사용자에게 보여줘야 하는 에러 메시지, 정보 메시지 등을 다양한 언어로 보여줄 수 있습니다!

  • EnvironmentCapable(환경변수): 아시다시피 환경(로컬, 개발, 운영)에 따른 변수처리를 담당합니다!

  • ApplicationEventPublisher(애플리케이션 이벤트): 말그대로 애플리케이션 내에서 이벤트를 발행하고 처리하는 기능을 사용할 수 있습니다. 예를 들어 회원가입 후 가입한 유저에게 회원가입 축하 이메일을 보내야 한다면! 유저 데이터 저장한 후에 회원가입 이벤트를 발행하고, 이벤트를 구독하는 곳에서 받은 정보로 회원가입 축하 이메일을 보낼 수 있습니다! 저는 주로 로직 간의 결합도를 낮추고 싶을 때 고려하는 것 같습니다 :)

  • ResourceLoader(편리한 리소스 조회): 파일, 클래스패스 리소스, 외부 등의 각각 다른 위치에 있는 리소스들을 조회하는 방법은 원래 다양합니다! 이러한 방법을 일관된 방식으로 조회할 수 있게 해주는 기능을 담당합니다!

특히 MessageSource는 영한님의 스프링 MVC 2편 - 백엔드 웹 개발 활용기술섹션 3. 메시지, 국제화 를 참고해주시고, EnvironmentCapable 이나 ResourceLoader의 기능은 스프링 부트 - 핵심 원리와 활용 섹션 6. 섹션 7.에서 실제 기능을 사용하는 모습을 볼 수 있다고 생각합니다.

감사합니다.

ybjeon01님의 프로필

ybjeon01

질문자

2023.12.11

감사합니다.
ApplicationEventPublisher가 "ApplicationContext"에서 굳이 사용되는 이유가 있을까요? 제가 이해하기로는 ApplicationContext의 주 목적이 bean factory인 걸로 알고있습니다. Service관련 class에 ApplicationEventPublisher가 사용된다면 이해하겠는데 ApplicationContext에서는 무엇을 위한건지 잘 모르겠습니다.

y2gcoder님의 프로필

y2gcoder

2023.12.11

ApplicationContext가 단순히 빈을 관리하는 BeanFactory의 역할만 하는 것이 아니라 애플리케이션 전반의 실행 환경을 관리하기 때문이라고 생각합니다 :)

ApplicationContext가 ApplicationEventPublisher를 상속해서 애플리케이션 전반의 이벤트를 관리하고, 이를 통해 개발자는 애플리케이션 전반에서 이벤트 발행과 처리 기능을 별도로 구현할 필요 없이 발행과 구독을 쉽게 처리할 수 있는 것이라고 생각합니다! 그리고 ApplicationContext에서 이벤트 발행 및 구독 기능도 관리하면서 애플리케이션 전반의 관리 기능을 제공하게끔 통합해준다는 느낌도 드는 것 같습니다!

ybjeon01님의 프로필

ybjeon01

질문자

2023.12.11

감사합니다! 이벤트 또한 전반적으로 관리하고 싶고 동시에 로직 간의 결합도를 낮추고 싶을 때 고려한다고 하니 이해가 됩니다.