inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 핵심 원리 - 기본편

BeanFactory와 ApplicationContext

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

해결된 질문

393

ybjeon01

작성한 질문수 7

0

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

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

spring 객체지향

답변 1

0

y2gcoder

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

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

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

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

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

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

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

감사합니다.

1

ybjeon01

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

1

y2gcoder

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

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

1

ybjeon01

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

코드 자료

0

49

2

구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?

0

55

2

MemberService의 인터페이스를 왜 사용하는지 궁금합니다.

0

76

1

롬복 @Setter를 써야 하는 상황이 있는건가요?

0

91

1

빈 등록 메서드의 파라미터가 빈이 아니어도 되나요?

0

81

1

테스트 속도가 나중에 영향이 있을까요?

0

77

1

gradle 설정 안떠서 질문 남깁니다!

0

121

2

build.gradle로 프로젝트를 여는 이유

0

86

1

provider 사용하는 이유

0

90

1

다음 강의 뭘 들어야 할까요

0

126

2

프로토타입 빈, 직접 destroy 호출 안 할 경우

0

66

1

beanB

0

82

2

퀴즈다시풀기

0

68

1

Gradle로 바꿔도 오류가 똑같이 발생하네요 ㅠㅠ

0

92

2

"중복 등록과 충돌" 강의에서 강사님과 다른 에러가 발생합니다.

0

67

3

run 실행했는데 결과창이 이렇게 뜨네요 왜 그런건가요>

0

106

2

도메인의 정의?

0

59

1

ApplicationContext 질문입니다.

0

63

1

@Scope의 proxyMode를 사용할때 단위 테스트 방법

0

90

2

ai api 선정하기 관련 질문

0

118

2

생성자 자동주입 관련해서

0

65

1

생성자 직접 호출 vs 팩토리 메서드 패턴

0

97

2

Spring에서 SessionScope와 RequestScope는 함께 사용되나요?

1

66

1

12:25

0

79

2