55,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 프레임워크 핵심 기술
BeanFactory와 ApplicationContext 중 사용하고 싶은 컨테이너를 설정 할 수 있나요?
안녕하세요! 강의를 듣던 중 BeanFactory 와 ApplicationContext에 대해 조금 더 알아 보다가 BeanFactory는 lazy loading 방식을 사용하고 ApplicationContext는 pre loading 방식을 사용한다는것을 배웠습니다. 예제에는 직접 설정 파일을 읽는 예제가 나왔는데요, 아래 예를 들면 ApplicationContext context = new ClassPathXmlApplicationContext("aaa.xml"); A a = (A) context.getBean( "A" ); 이처럼 직접 코드에서 어떤 xml을 읽을 지와 어떤 컨테이너를 사용해서 빈을 불러올지를 지정하는 형태였는데요. 실제로 스프링 코드를 개발 하다보면 위와 같이 사용하는 것 보다 개발자는 단순히 어노테이션을 붙여서 사용하고 빈을 불러다가 주입하는 부분은 스프링에게 맡기잖아요 그러면 예시 코드의 ApplicationContext context = new ClassPathXmlApplicationContext("aaa.xml"); 이 부분은 저희가 생성하는 부분이 아닌데, 만약 개발자가 빈들의 특성에 맞춰서 로딩되는 시점에 차이를 두고자 어떤 빈들은 Bean Factory로 관리하고 싶고 어떤 빈들은 ApplicatonContext로 관리하고 싶을 때 명시적으로 지정해 주는 방법이 있을까요??
- 미해결스프링 프레임워크 핵심 기술
프로젝트 생성에 관련한 질문
이번 강의에서 사용되는 demospringioc 프로젝트를 생성할 때 Spring MVC + Maven 형태의 프로젝트로 생성해야하는 건지 궁금합니다.
- 미해결스프링 프레임워크 핵심 기술
안녕하세요 강의 내용을 듣다가 궁금점이 생겨 글을 남기게 되었습니다.
안녕하세요 백기선 강사님 강의 잘 보고있습니다. 스프링핵심프레임워크 ioc 컨테이너 5부 강의 마지막 부분에서 싱글톤 빈으로 객체를 Ioc 컨테이너에서 관리할 경우 프로퍼티가 공유되어서 멀티 스레드 환경에서 프로퍼티 값이 이상하게 될 수도 있다고 말씀하셨는데요, 그렇다면 이러한 경우에 해결 방법으로는 어떤게 있는지 궁금합니다. gof 강의에서 하신 synchronized 를 사용하면 해결할 수 있는 걸까요? 아니면 좀 더 효과적인 방법이 있다면 알려주셨으면 좋겠습니다. 감사합니다.
- 미해결스프링 프레임워크 핵심 기술
HttpServeltRequest 객체의 빈 스코프에 대해 질문 드립니다.
안녕하세요! 스프링에 대한 기초 지식이 부족한 개발자 입니다. 프로젝트 개발 중 해결은 하였지만 이해가 가지 않아 질문 드립니다. 너무 궁금해서 강의를 시작하기도 전에 질문 먼저 드리는 점 죄송합니다..ㅠ 기존에 돌아가던 프로젝트를 이관하는 중에 client로부터 page라는 parameter가 request에 중복으로 들어오는 경우가 생겼습니다. 가장 좋은 방법은 하나를 빼고 request를 보내도록 수정하는 것이겠지만, 다른 부분에서도 쓰이는 util쪽 코드라 쉽게 건들이지 못해서 RequestWrapper를 사용하게 되었습니다. public class RequestWrapper extends HttpServletRequestWrapper { Map<String, Object> hashMap ; public RequestWrapper ( HttpServletRequest req ) { .... hashMap = new HashMap<String, Object>( req.getParameterMap ); } 이런 식으로 request로 들어온 parameter들을 받아서 중복된 page를 제거하고 hashMap에 넣은 후, getParameterValues와 getParameter에서 저 hashMap에서 값을 꺼내오도록 변경하였습니다. 제가 이해가 안가는 부분은 아래와 같은 상황인데요.. 특정 request 를 받아 controller를 거쳐 xxx.jsp를 리턴 한 후 ( A과정 ) 해당 jsp안에서 jstl의 <c:import>와 <c:param>을 통해 다시 한번 임의의 다른 controller를 호출해서 값을 받아오는 ( B과정 ) 부분이 있었습니다. 그런데 wrapper를 적용하기 전에는 정상작동하던 것이 wrapper를 사용하기 시작하니까 <c:param>으로 넘겨주는 값들은 넘어가지가 않고 그 전에 호출되던 A과정의 request parameter들이 넘어가더라구요.. request객체는 scope가 request이니까 A과정에서 jsp를 return하고 나면 사라지고 B과정에서 jstl 태그를 이용해 다시 특정 컨트롤러를 호출하면 새로운 request 객체가 생성되서 <c:param>들이 넘어가야 맞는 것 아닌가요...? getParameter를 통해 <c:param>으로 보내준 값을들 찍어봐도 전부 null값으로 나왔습니다.. 제가 추측하는 이유는 1) jsp안에서 jstl로 다른 컨트롤러 호출 시 request의 scope이 종료되지 않은 경우 2) request는 A과정과 B과정 모두 각각 생성되고 사라지는데, wrapper의 생성자에서 hashMap을 세팅했기 떄문에 이후에는 wrapper 객체가 새로 생성되는 경우가 없어 hashMap 값이 바뀌지 않는 경우 2)번이 이유인 경우에 그럼 wrapper의 scope도 prototype이나 request로 변경해줘야 할까요..?? 상태값을 가지고 있는 class 의 경우 싱글톤으로 관리하면 안된다고 배우긴 했는데 ... requestWapper이니 request별로 뭔가 초기화 되거나 새로 만들어질 것이라고 생각을 했습니다..ㅠ 제가 스프링 지식이 부족해서 질문을 너무 복잡하게 작성한 것 같습니다.. 혹시 위 말고 다른 이유가 있는 걸까요??.. 답변 기다리고 있겠습니다...ㅠ 감사합니다!
- 미해결스프링 프레임워크 핵심 기술
PropertyEditor non thread-safe 한 이유
안녕하십니까 한가지만 여쭤봐도 될까요? 제가 기초가 부족해서 갑자기 이부분이 헷갈리더라고요 죄송합니다 강의를 보던중에 PropertyEditor는 non thread-safe라서 변수를 공유하기 때문에 값이 달라질수 있다고 하셔서(싱글톤이라 그런가요?) 궁금증이 생겼는데 스프링에서 단순 클래스에서 변수를 사용하는 것은 공유를 안하나요? ex) public class Test{ int i = 1; ... } 스프링에서 여러명이 동시에 클래스 또는 함수를 사용해서 i 값을 변경해도 해당 사용자는 독립적으로 i 값을 참고하나요?
- 미해결스프링 프레임워크 핵심 기술
빈의 초기화 시점이 궁금합니다.
안녕하세요 기선님, 아무도 알려주지 않는 내용의 좋은 강의를 해주셔서 감사합니다. 로직이 이해가 안되서 고민을 했는데... 제가 이해한게 맞는지 궁금해서 질문드립니다.@Autowired를 처리해주는 BeanPostProceesor의 구현체가(빈을 인스턴스화 해주는) InitailizingBean을 감싸고 있어서,postProcessBeforeInitialization 은 생성자에 붙은 @Autowired를 처리해서 생성을 도와주고postProcessAfterInitialization 은 setter나 member variable에 붙은 @Autowired를 처리해서 주입해주는게 아닐까?예상했습니다.그런데 수업에서는 postProcessBeforeInitialization 에서 Intialization 전에 주입을 해준다는 것을 듣고 잘 못 이해했구나 생각했습니다.다시 예상한 것은.. 빈 라이프사이클의 첫 번째 과정인 1. BeanNameAware's setBeanName 부터 이미 빈의 인스턴스는 생성이 되어 있고, 거기에 setBeanName, setBeanClassLoader 같은 설정들이 들어가서 빈을 구성해준다는 것입니다.그리고 11번째 과정인 postProcessBeforeInitialization 에서 @Autowired 주입을 해줘서 Initialization을 끝마칩니다.그리고 12번째 과정인 InitializingBean's afterPropertiesSet 에서 설정이 끝난 빈에 @PostConstruct를 통해 추가적인 코딩을 해줄 수 있는 것이라고 예상합니다.postProcessAfterInitialization이 하는 역할은 잘 모르겠습니다..제가 이해 한게 맞는지 궁금합니다.좋은 강의를 찍어주셔서 감사합니다. 2022년 새해 복 많이 받으세요!
- 미해결스프링 프레임워크 핵심 기술
이 강의 예제소스 없나요?
예제로 배우는 스프링 입문 (개정판) 이 강의는 예제 소스가 있었는데,,;; 본 강의는 예제 소스 제공 안하나요?
- 미해결스프링 프레임워크 핵심 기술
릴로딩 기능에 대해
MessageSource의 릴로딩 기능은 어느 때 사용하는지 궁금합니다.
- 해결됨스프링 프레임워크 핵심 기술
Bean 을 특정 Application...Event 발생 후, 등록하는 방법이 궁금합니다
`App 초기화 이후 App..Event 발생시점에 Bean 등록이 가능할까요?` 이런 방법이 필요한 배경은 이렇습니다.DB 데이터가 초기화 된 이후, S.Security 에서 URL 리소스를 불러들이는 클래스가 있는데, 이 클래스(Filter)가@Bean 으로 되어 있으면, DB 에 데이터가 INSERT 되기 전에Bean 등록과 동시에 Security 설정이 완료가 되버려 DB에 없는 URL 인가정보를 SELECT 해서 인가처리가 불가능 하더라구요. 그래서 사용한 방법이 Filter POJO화 입니다. Filter @Bean 등록 메서드에 @Bean 주석처리 후 POJO 화 시킨다음 초기화시 POJO 를 사용하고,러닝타임(ContextRefreshedEvent 발생이후) 부터 기존 POJO 를 Bean 으로 등록하여 사용하려는 목적 때문에이런 방법을 시도해보게 되었습니다. 강의영상에서 가능 할 듯한 내용을 확인한 부분은 context = new ApplicationConfigApplicationContext(Config.class) 즉, context 를 통해 Filter 가 빈으로 등록되는 Config 를 만들어 등록하려는데요, 질문입니다 @EventListener(ContextRefreshedEvent.class) public void onContextRefreshedEvent() { ... ... } 이렇게, 핸들러 안에서 AppConfigAppContext 를 생성하여 등록하는 방법이 가능한가요? 불가능하다면, 가능한 방법이 있을까요? 이런 부분에 대해 조언을 구합니다.읽어주셔서 감사해요
- 미해결스프링 프레임워크 핵심 기술
IoC/DI와 POJO의 관계
안녕하세요! 스프링 공부 하다가 스프링이 추구하는 철학에 대해 궁금한 부분이 생겨 질문드립니다. 스프링 3대 철학은 IoC/DI, AOP, PSA이고 이 세가지 철학을 통해 궁극적으로 POJO와 같은 특정 서비스에 의존하지 않는 클래스를 만들어내는 것을 추구한다고 이해하고 있습니다. 다시 말해 3가지 개념을 잘 적용하면서 따라가다보면, 그 결과로써 POJO 클래스를 얻을 수 있다고 생각됩니다. 여기서 질문은, AOP나 PSA의 경우에는 클래스로부터 부가로직을 걷어내고 특정 기술을 추상화함으로써 클래스에 비즈니스 로직만을 남겨두기 때문에, POJO를 만드는 것과의 연결성이 직관적으로 이해가 되는데 반해, IoC/DI는 어떠한 역할을 하기에 POJO를 생성하는데 도움이 되는 것인지 그 연결성이 잘 이해가 되지 않습니다. 스프링의 IoC 컨테이너를 통해 많은 객체들의 라이프사이클 및 의존관계를 용이하게 설정할 수 있다는 장점은 떠오르지만, 이것이 어째서 POJO를 만드는 것인지 아무리 생각하고 찾아봐도 잘 이해가 안 되는 것 같습니다. 어떠한 부분에서 IoC/DI라는 개념이 POJO로 연결된다고 생각할 수 있을까요?
- 미해결스프링 프레임워크 핵심 기술
ConverterRegistry
삭제된 글입니다
- 해결됨스프링 프레임워크 핵심 기술
기선님 RetentionPolicy에 대해서 질문이 있습니다.
어노테이션 적용할때 class까지만 하신 이유가 궁금합니다. aspectJ 가 바이트코드 자체를 변경하는 기술이기때문에 class까지만 가져가도 된다는 의미로 생각하면될까요? 추가적으로 Spring 기반의 aop를 적용한다면 reflection 기반이기 때문에 runtime으로 해야지 작동하는건가요?
- 미해결스프링 프레임워크 핵심 기술
안녕하세요 기선님!
스프링 부트 2.0.5 이상 버전을 사용할 때 LocalValidatorFactoryBean으로 자동 등록이 된다고 하셨는데 저 같은 경우에 validator의 클래스를 찍어보면 org.springframework.boot.autoconfigure.validation.ValidatorAdapter 가 찍힙니다. 혹시 부트의 버전이 낮아서 그런가 확인 해봤는데 부트의 버전은 2.4.4 버전이였습니다. 왜 이렇게 되는지 의문이 생겨서 질문을 남깁니다.
- 미해결스프링 프레임워크 핵심 기술
비동기적으로 실행할때
@Async 애노테이션을 사용해서 비동기적으로 실행하실 때 설명으로 각각의 쓰레드 '풀'에서 동작한다고 설명(10:11)해주셨는데 결과 값을 본 후에는 각각의 쓰레드에서 동작한다고 설명(11:19)하셨습니다. 쓰레드와 쓰레드 풀의 차이가 있다고 알고 있었는데 어느쪽이 정확한지 알고싶습니다.
- 해결됨스프링 프레임워크 핵심 기술
"Prototype/프록시"로 설정했는데 동일한 객체로 나옵니다
@Getter @Component @Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE, proxyMode = ScopedProxyMode.TARGET_CLASS) public class Prototype { private final UUID uuid = UUID.randomUUID(); } @Getter @Component @RequiredArgsConstructor public class Singleton { private final Prototype prototype; public void print() { System.out.println(prototype.getUuid()); System.out.println(prototype.getUuid()); System.out.println(prototype.getUuid()); } } Singleton singleton = context.getBean(Singleton.class); singleton.print(); Prototype p1 = singleton.getPrototype(); Prototype p2 = singleton.getPrototype(); System.out.println(p1); System.out.println(p2); System.out.println(p1.getUuid()); System.out.println(p2.getUuid()); System.out.println(p1 == p2); System.out.println(p1.equals(p2)); System.out.println(new Prototype().equals(new Prototype())); Singleton bean 안에 class를 target으로 하는 proxy로 prototype의 bean을 필드로 정의했습니다. 근데 singleton 객체에서 prototype 필드를 print하면 메모리 주소는 다르게 나오는데 ==, equals 등으로 비교하면 true가 나오는 기이한 현상을 겪고 있습니다. 제 자바 근간이 흔들리고 있어요; 왜 그런 걸까요..?
- 해결됨스프링 프레임워크 핵심 기술
@Autowired 로 가져오는 Bean은 ?
@Componentpublic class AppRunner implements ApplicationRunner {// @Autowired// ApplicationContext applicationContext; @Autowired MessageSource messageSource; @Override public void run(ApplicationArguments args) throws Exception {// System.out.println(applicationContext.getClass()); System.out.println(messageSource.getClass()); } Autowired 로 가져오는 Bean 이 햇갈려서 질문드립니다. 위 코드에서 @Autowired을 통해서 주입받는 빈은 MessageSource 가 구현된 클래스인걸로 아는데요.. AnnotationConfigServletWebServerApplicationContext , ResourceBundleMessageSource 두개 모두 문서를 찾아보니 MessageSource 를 구현한 클래스입니다~! 그런데 왜 "ResourceBundleMessageSource "가 빈으로 등록되는지 궁금합니다. 혹시 @Primary 같은 우선순위가 적용되서 그러는건가요 ?
- 해결됨스프링 프레임워크 핵심 기술
Type-Safety 의미
안녕하세요. 강의 잘 듣고 있습니다. 강의중, @Primary 를 이용하는 것이 @Qualifier 를 사용하는 것 보다 Type-Safety 하다고 하셨는데, Type-Safety하다는 의미가 무엇인지 궁금합니다.
- 미해결스프링 프레임워크 핵심 기술
Null Point
영상 18:28 까지 진행하다가 테스트해보니 Event{id=null, title='null'} 2021-02-07 22:23:41.674 ERROR 17899 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause 이러한 에러가 나왔는데 URL에 파라미터 값이 전혀 안넘어가고 있는거 같습니다. 왜이럴까용..
- 미해결스프링 프레임워크 핵심 기술
WebDataBinder를 특별히 쓰는 이유가 있나요?
예제에서 사용되 WebDataBinder 클래스의 registerCustomEditor() 메서드는 PropertyEditorRegistry 인터페이스의 구현 클래스인 DataBinder에서 정의가 되어있고, WebDataBinder에서는 별도의 오버라이딩을 하지 않았는데 이 클래스를 사용한 특별한 이유(?)가 있는지 알고싶습니다. 항상 좋은 강의 감사드립니다.
- 미해결스프링 프레임워크 핵심 기술
안녕하세요?
영상 5분50초 쯔음에 mockMvc.perform(get(...)) 에서 get을 찾을 수 없는데 필요한 디펜던시가 있나요? 감사합니다.