월 18,150원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 핵심 원리 - 고급편
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강의와 병행으로 시작합니다! 이렇게 좋은 강의를 만들어주신 김영한 강사님께 감사드립니다! 수강하시는 모든 분들도 화이팅하세요!
- 미해결스프링 핵심 원리 - 고급편
이렇게 이해하면 될까요?
뭔가 파편화돼있던 지식들이 맞아떨어지는 느낌이 나는 것 같은데 이게 맞나 모르겠네요. 느낌상 맞는 것 같긴한데...😅 ASM, CGLIB, ByteBuddy등을 사용해 컴파일 타임에 바이트코드를 생성 ex. AnnotationProcessor 라던가... QueryDSL의 QClass라던가... Mockito라던가... 자바 에이전트를 사용해 클래스로더에 클래스가 로드되는 시점에 바이트 코드를 생성. ex. 제니퍼소프트, 와탭같은 APM 솔루션들 조인 포인트 = 생성자를 제외한 모든 메서드는 조인 포인트라고 부를 수 있다?
- 미해결스프링 핵심 원리 - 고급편
7분 40초 쯤에 오타가 있는것 같습니다
영상하고 자료를 보면 MemberService 인터페이스 지정 이 항목에서 target 객체를 보고 판단한다. 뒤 쪽에 "'this'는 부모 타입을 허용하기 때문에 AOP가 적용된다." 에서 this가 아니고 target이 아닌가 해서 질문드립니다. 설명하실때도 저쪽이 target인거 같아서요
- 해결됨스프링 핵심 원리 - 고급편
traceIdHolder.remove()와 traceIdHolder.set(null)의 차이가 있나요?
안녕하세요 강의 잘 보고 있습니다. traceIdHolder.remove()와 traceIdHolder.set(null)의 차이점이 궁금합니다. 실험해보니까 set(null)로 해도 잘 동작합니다만 아무래도 remove()라는 함수가 따로 있는 이유가 있을 것 같아서요.
- 해결됨스프링 핵심 원리 - 고급편
스레드 로컬과 request 스코프
이번 강의도 잘 듣고 있습니다! 스레드 로컬 사용한 것과 Configuration에서 ThreadLocalLogTrace 을 request 스코프로 설정한 방법 모두 스레드 동시성 문제 해결한다는 점에서 같은 효과일 것 같은데 두 방식을 비교했을때 스레드 로컬의 장점이 무엇인지 궁금합니다!