월 16,940원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 핵심 원리 - 고급편
전략패턴과 템플릿 콜백 패턴 차이 관련 질문드립니다.
안녕하세요! 이번에도 좋은 강의 감사합니다. 명쾌하게 설명해주셨는데, 제가 이해한 것이 맞는지 확인받고자 질문드립니다. 전략이란 의도를 동일하게 사용하기 때문에 템플릿 콜백 패턴도 전략패턴의 일종인데 차이를 생각해보자면 전략패턴은 context의 인스턴스 변수로 전략을 참조하고, 템플릿 콜백 패턴은 context의 관련 메서드로 callback 받는 차이가 있다고 이해하였습니다. 이런 차이로 아래 두가지를 생각해보았는데 제대로 이해한 것이 맞을지 궁금하여 질문드립니다. 1. 전략패턴은 템플릿 콜백 패턴보다 context와 전략간 의존성이 더 강하단 단점이 있고, 반면에 자주 사용되는 context라면 템플릿 콜백 패턴은 재사용성이 떨어진다는 단점이 있을 것 같습니다.(매번 callback을 정의해주어야하므로) 2. 전략패턴은 런타임시 객체가 생성될 때 전략이 정해지고, 템플릿 콜백 패턴은 context가 해당 전략을 실행할 시점에 전략이 정해진다고 정의하여도 괜찮을까요? 감사합니다.
- 미해결스프링 핵심 원리 - 고급편
강사님 사소하지만 궁금해서 질문남겼습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]스프링이 지원하는 프록시 섹터를 듣고 어느정도 프록시 팩토리에대해 이해를 한 상태입니다. 조금 더 깊은 이해를 하고싶어서 다른분들의 블로그를 검색해보았는데 프록시 팩토리빈이라는 단어를 선택하더라구요... 차이점을 찾아헤메던중 뭔가 사이다같이 원하는 답이 나오지 않아서 이렇게 질문을 남기게 되었습니다. 프록시 팩토리와 프록시 팩토리빈의 차이점이 정확히 뭔지 궁금합니다.!!
- 미해결스프링 핵심 원리 - 고급편
향후 강의 궁금해서 질문드려요
안녕하세요 김영한강사님 강의를 수강하고 있는 학생입니다 혹시 향후 Spring Security나 Spring Batch에 관해서 강의는 없는지 궁금합니다! 김영한님 강의를 듣고 프로젝트를 만들어보려고 하는데 저 두가지 기술이 있다고 들었습니다. 저 기술들은 실무에서 얼마나 자주 사용하고 중요도가 높은지도 궁금합니다
- 미해결스프링 핵심 원리 - 고급편
프록시의 생성시점, 빈등록 시점 질문입니다.
안녕하세요 김영한님. 이번 강의를 듣던중 프록시 생성시점에 대해 이해가 안가는 부분이 있어 질문 드립니다. 다이내믹 프록시는 런타임 시점에 동적으로 프록시를 생성한다고 하셔서, 저는 실제 메서드가 호출되는 시점까지 프록시의 생성을 미루다가 호출이 됐을 때 프록시가 생성이 되고 빈으로 등록 되는거라고 이해를 했었습니다. 하지만 이전 강의에서 어드바이저를 빈으로 등록하고 로그를 출력했을 때 처음 스프링이 실행되면서 모든 스프링 빈을 포인트 컷을 통해 확인하고 적용대상은 프록시로 빈을 등록했던 것 같습니다. 저는 동적이라는 개념 자체가 호출시점(런타임)에 생성되는 거라고 이해했는데, 스프링이 처음실행될 때 프록시가 자동으로 생성되는 것도 `동적` 이라고 표현하는 건가요?
- 미해결스프링 핵심 원리 - 고급편
Pointcut과 MethodMatcher에 관한 질문입니다.
안녕하세요. 좋은 강의 올려주셔서 감사합니다. 이번 강의를 보고 전반적인 프록시팩토리의 어드바이저 흐름은 이해가 됬지만, 직접 구현해본 MyMethodMatcher에서 로그로 targetClass와 methodName을 찍을 때 이 정보를 어디서 가져오는지 이해가 잘 안됐습니다. 처음 MethodMatcher 나 Pointcut을 생성할때 의존객체들에 대한 레퍼런스만 저장해두고, proxy.save() 나 .find()의 실제 동작 메서드들이 호출되면 내부적으로 targetClass나 method 정보를 포인트컷에 파라미터로 전달하는게 맞나요? (실력이 부족해서 질문을 적는것도 쉽지가 않네요ㅜㅜ)
- 미해결스프링 핵심 원리 - 고급편
안녕하세요! 질문이 있습니다.
안녕하세요! 영한님, 언제나 좋은 강의 감사드립니다. 해당 수업을 들으면서 궁금한 사항이 생겨 질문 드립니다. 제가 해당 수업을 듣기 이전에는 그냥 막연하게 스프링 AOP에서는 프록시 객체를 런타임 시점에 바이트 코드를 조작해서 만들어 준다라고 알고 있었는데요. 런타임 시점에 바이트코드를 조작한다는 말은 잘못된 표현이라고 생각할 수 있을까요?? 해당 수업을 듣고 나니, 바이트 코드 자체를 조작하는 위빙은 컴파일 타임 위빙이나 로드 타임 위빙에서 바이트 코드를 조작하는 것이지 런타임 시점에서는 바이트 코드를 조작하는 게 아니라는 생각이 들어서요.
- 미해결스프링 핵심 원리 - 고급편
안녕하세요. 간단한 인텔리제이 질문이 있습니다.
안녕하세요. 우선, 강의 매우 잘보고 있습니다. 다름이 아니라, 변수 추출 기능 (cmd + opt + v) 를 쓰면 final 키워드로 변수가 할당되는데 이거 해결방법이 없을까요..?
- 미해결스프링 핵심 원리 - 고급편
JDK 동적 프록시 적용시점에 대한 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]앞선 강의에서 동적 프록시는 컴파일 시점이 아닌 런타임 시점에 프록시 클래스를 만들어준다고 알려주셨습니다. 그런데 DynamicProxyBasicConfig에서 @Bean안에 Proxy.newProxyInstance를 선언한거는 런타임이 아닌 컴파일 시점에 프록시 클래스가 생성된건가요?? 만약 컴파일 시점에 프록시 클래스가 생성된게 맞다면, 동적 프록시는 런타임 시점에 만들어진다고 하신 말과 모순이 되는것 같아서요 ㅠㅠ 의문이 들어 질문남기게 되었습니다!!
- 미해결스프링 핵심 원리 - 고급편
aspectj expression 문법 체크하는 거는 어떻게 하나요?(execution() 등)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.ㅇㄹㅇㄹ
- 미해결스프링 핵심 원리 - 고급편
setter에 @Autowired 쓰는 문법은 이제 막힌건가요?
강의는 스프링 2.5버전대지만 현재 스프링 이니셜라이저에서 기본 지정 버전은 2.6버전입니다. 여기서는 CallServiceV1에서 사용한 setter에 @Autowired 붙이는 문법을 사용 할 시에는 생성자로 주입할 때랑 똑같이 순환참조냐고 묻는 오류가 발생하더라구요. 혹시나 싶어서 2.5.6으로 해보니 잘 되더랍니다...ㅠㅠ 갑자기 2.6.0버전부터 무슨 일이 생긴지는 모르겠지만 여기서는 안되네요 ㅠㅠ
- 미해결스프링 핵심 원리 - 고급편
레벨이 감소하는 이유.
beginSync() 안에 createNextLevel() 있어 레벨이 증가하는건 이해가 갑니다! 그런데 createPreviousLevel() 을 사용하지 않았는데 어떻게 레벨이 감소하는건가요? 로직 순서가 OrderControllerV2의 1.trace.begin() level:0 OrderServiceV2의 2.trace.beginSync() level:1 OrderRepositoryV2의 3.trace.beginSync() level:2 4.trace.end() level:2 OrderServiceV2의 5.trace.end() level: 1(?) OrderControllerV2의 6.trace.end() level:0(?) [7b341824] OrderController.request() :id = 7b341824 level = 0 [7b341824] |-->OrderService.orderItem() :id = 7b341824 level = 1 [7b341824] | |-->OrderRepository.save() :id = 7b341824 level = 2 [7b341824] | |<--OrderRepository.save() time=1012ms :id = 7b341824 level = 2 [7b341824] |<--OrderService.orderItem() time=1015ms :id = 7b341824 level = ? [7b341824] OrderController.request() time=1018ms :id = 7b341824 level = ?
- 미해결스프링 핵심 원리 - 고급편
혹시 스프링시큐리티 강의 계획이 있나요
1. 강의 내용과 관련된 질문인가요? (예/아니오) 아니요2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]안녕하세요. 영한님 강의 잘 정말 잘듣고있습니다. 아쉽게도 이번강의는 개인적인 일로 바빠서 결제만 해놓고 듣지는 못했지만요. 제가 개인프로젝트를 진행하다가, 스프링시큐리티를 도입할 일이 생겼는데, 정말 어렵더군요. 일단은 열심히 구글링해서 어찌어찌 잘 도입했는데, 너무 어려워서 한번 깊게 공부해야겠다는 생각이 들더군요. 본론으로 들어가서 혹시 스프링 시큐리티를 강의로 내실 계획이 있나요 계획이 있다면, 언제쯤 내실 계획인지 알 수 있을까요. 계획이 없다면, 다른 분의 스프링 시큐리티 강의를 수강하려고 문의 드립니다
- 미해결스프링 핵심 원리 - 고급편
@Import(AppV1Config.class)질문있습니다.
현재 강의에서 AppV1Config클래스를 스프링빈으로 등록하기 위해 @Import(AppV1Config.class)코드를 넣어줘야한다고 알려주셨습니다. 그런데 예전강의에서 @Configuration안에는 @Component가 선언되어 있어 해당 클래스는 자동으로 스프링빈으로 선언된다고 알려주셨는데요!! 그렇다면 @Import(AppV1Config.class)코드가 없이 @SpringBootApplication(scanBasePachages)가 지정되어 있지않다면 AppV1Config클래스는 자동으로 스프링빈으로 등록되는게 맞나요??
- 미해결스프링 핵심 원리 - 고급편
강사님 궁금한게 있습니다.
항상 좋은 강의 감사합니다! 덕분에 실력이 많이 오름을 느끼고 있습니다. 궁금한 것은 애초에 boot-starter-aop을 적용하기 전에, 스프링 컨테이너에 빈들을 등록할때 이들을 프록시 처리해서 등록하는 것으로 알고 있습니다. (싱글톤 처리를 위해서) 이때, boot-starter-aop 모듈을 적용하면 이러한 역학 과정(?)에 어떤 과정이 들어가는지 궁금합니다. 일단 포인트컷 대상이 되는 클래스는 한번 프록시에 감싸주고 이후 스프링에서 빈으로 등록할 때 싱글톤 처리를 위해 한번 더 프록시를 감싸주는 식으로 최종 빈 등록이 되는 것일까요?
- 해결됨스프링 핵심 원리 - 고급편
CGLIB
안녕하세요! https://www.inflearn.com/questions/343778 이 부분 질문과 답변 보고 궁금한 점이 생겼습니다. jdk 동적 프록시, CGLib 모두 런타임에 리플렉션을 통해 프록시 객체를 생성하는 걸로 알고 있었습니다. 그런데 CGLIB를 사용해서 컴파일 타임에 바이트 코드를 생성한다는 언급이 있습니다. CGLIB는 런타임과 컴파일타임 모두 바이트코드를 조작할 수 있는건가요??
- 해결됨스프링 핵심 원리 - 고급편
ThreadLocal 동시성 이슈 (ArrayList, HashMap, HashSet)
안녕하세요! 김영한님!!수업 너무 유익하게 잘 듣고있습니다~!! 동시성 이슈를 막기 위해 ThreadLocal을 사용하는 부분 중에서 궁금한 점이 생겨서 질문 드립니다. String, TraceId의 타입에 대해서는 ThreadLocal을 사용해서 동시성 이슈를 해결하였는데, 필드로 ArrayList, HashMap, HashSet을 사용하고 싶은 경우에는 동시성 이슈를 어떻게 해결하면 될까요 ? 구글링을 했었을 때에는 멀티쓰레드 환경에서는 HashMap 대신에 ConcurrentHashMap을 사용해라고 봤었고, ArrayList 대신에 CopyOnWirteArrayList를 사용해라고 봤었고, HashSet에 대해서는 제대로 찾지 못했습니다. 멀티쓰레드 환경에서 Thread-Safe하게 ArrayList, HashMap, HashSet을 사용하려면 어떻게 해야하나요 ?
- 미해결스프링 핵심 원리 - 고급편
고급편 듣기 전에..
MVC1, MVC2, HTTP기본지식 모두 들어야 될까요? 아니면 기본편만 충실히 들은 다음 들어도 될까요??
- 해결됨스프링 핵심 원리 - 고급편
TraceStatus status 초기화
안녕하세요. 강의를 듣다가 질문할께 있는데요. TraceStatus를 null로 선언하고 try 안에서 다시 값을 넣어주는 이유가 있나요? 선언할때 값을 할당해주면 안되는 이유가 있나요? @GetMapping("/v1/request")public String request(String itemId) { TraceStatus status = null; try { status = trace.begin("OrderController.request()"); orderService.orderItem(itemId); trace.end(status); return "ok"; } catch (Exception e) { trace.exception(status, e); throw e; }} @GetMapping("/v1/request")public String request(String itemId) { TraceStatus status = trace.begin("OrderController.request()"); try { orderService.orderItem(itemId); trace.end(status); return "ok"; } catch (Exception e) { trace.exception(status, e); throw e; }}
- 미해결스프링 핵심 원리 - 고급편
이번 장에서 작성했던 코드가 부모 클래스의 기능을 전혀 사용하지 않았다는 말의 의미가 정확이 무엇인가요?
AbastractTemplate 클래스의 책임은 변하지 않는 부분인 log 기능을 자식 클래스에게 제공해주고, 자식 클래스는 변하는 부분인 call 메서드를 구현하는 책임을 가지고 있습니다. 서로 책임을 나누어가지면서 두 객체의 기능이 상호작용 함으로서 템플릿 메서드 패턴이 작동하는 것이 아닌지요. 자식클래스는 부모 클래스가 제공하는 execute라는 기능과 추상화된 call 기능을 사용하는 것처럼 보이는데 강의에서 말하는 "부모 클래스의 기능을 전혀 사용하지 않았다"라는 말의 의미가 무엇인지 잘 모르겠습니다.
- 미해결스프링 핵심 원리 - 고급편
시작하기에 앞서..!
프로젝트를 빨리 시작해야될 것같아 시작하기에 앞서 깊이 있게 고급 개념들을 짚고 넘어가면 좋을 것같아 현재 수강중인 jpa강의와 병행으로 시작합니다! 이렇게 좋은 강의를 만들어주신 김영한 강사님께 감사드립니다! 수강하시는 모든 분들도 화이팅하세요!