묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결은종쌤과 자바로 디자인 패턴 쉽게 시작하기
수업내용을 개인 블로그에 정리하여 게시해도 될까요?
선생님 안녕하세요! 자바 강의부터 디자인패턴 강의까지 선생님의 수업으로 많은 것을 배우고 있는 수강생입니다. 선생님의 디자인패턴 강의를 복습차 정리하여 개인 블로그에 올려도 괜찮을지 문의드립니다. 허락하신다면, 강의에서 배운 디자인패턴 내용을 제가 이해한 부분 중심으로 정리하고, 예시코드 일부를 함께 게시하려고 합니다! (해당 강의 링크를 출처로 기재하겠습니다)혹시 강의 자료와 내용의 저작권과 관련된 문제가 생길 수 있다면 게시하지 않겠습니다!
-
미해결스프링 핵심 원리 - 고급편
newProxyInstance의 인자중 ClassLoader 질문
newProxyInstance(ClassLoader, Class<?>[] interfaces, InvocationHandler)newProxyInstance의 인자는 위와 같습니다.본 강의에서는 interfaces 배열에 하나의 interfaces만 들어있습니다. 그리고, interfaces배열에 딱 하나 들어있는 그 인터페이스 클래스에서 getClassLoader()로 클래스로더를 받아와서 이를 newProxyInstance를 호출할때 첫번째 인자로 사용하고 있습니다.Q1. 그렇다면 만약, interfaces에 하나가 아닌 여러개가 있다고 하면 클래스로더는 어디서 받아오나요? 임의의 인터페이스에서 골라서 받아오나요?Q2. 사실 클래스로더는 아무 클래스에서 받아와도 상관없는것이고. 관습적으로 interfaces 배열에 들어있는 임의의 인터페이스에서 받아오는것이다. 이런건가요?질문 읽어주셔서 감사합니다.
-
미해결스프링 핵심 원리 - 고급편
강의를 듣다 문득, ThreadLocal과 synchronized의 성능차이?가 궁금하여서 질문했습니다.
안녕하세요. 영한님!! ThreadLocal 쪽강의를 듣다가 궁금하게 생겨 질문하게 되었습니다.java에서 동시성을 해결할 수 있는 방법 중 하나인 synchronized가 있다고 알고 있습니다.ThreadLocal과 비교해볼 때 성능적으로 큰 차이가 있을까요??? 혹은 코드 취향에 따라 선택적으로 사용하면 될지 문득 궁금하여 질문을 남겼습니다.
-
미해결스프링 핵심 원리 - 고급편
강의에서 사실 의미없다고 모니터링툴을 쓰면 된다고 하는데
강의에서 사실 의미 없다고 모니터링 툴을 쓰면 된다고 하는데 어떤 툴을 써야하나요?진입 시점을 알려주는것보면 그냥 오류메시지를 전달하는 형태는 아닌 것 같고,센트리라는 것을 사용하면 저런형태로 커스터마이징 할 수 있는건가요?저번에 제가 도입해보려다가 무료기간이 1주일정도라서, 그냥 err메시지를 슬랙으로 전송해주는 모니터링만 구현했었거든요...말씀하시는 모니터링툴이 무엇인지 알고싶습니다 김영한 선생님!
-
미해결스프링 핵심 원리 - 고급편
RequestMapping 설정이 안됩니다
구체 클래스 기반 프록시를 강의와 동일하게 적용해 보았습니다. target에 RequestMapping을 설정했으나 실제로 적용이 되지 않았습니다. (혹시 몰라 proxy에도 설정했었지만 적용되지 않았습니다.)디버깅 해보면 /v2/request가 없는 거까진 확인했습니다.
-
미해결스프링 핵심 원리 - 고급편
test 메서드 snake case
영한님 안녕하세요. 테스트 케이스 작성하실 때, 메서드 이름을 camel 케이스가 아니라 snake case로 작성하시던데, db 강의 때도 그렇게 하셔서 궁금했는데 뭔가 이유가 있으신 건가요?
-
해결됨스프링 핵심 원리 - 고급편
Junit Test 에서 setDaemon(true) 를 안했어도 테스트 코드가 종료되는 이유가 뭘까요?
안녕하세요. "동시성 문제-예제코드" 강의 07:35 쯤에 나오는 설명과 실행결과가 이해가 안되서 질문드립니다. 제가 알기로는 메인 쓰레드가 종료가 되더라도, Thread thread = new Thread(); thread.setDaemon(true); 처럼 하지 않으면 프로그램이 끝나지 않는 걸로 알고 있습니다. 그런데 Junit Test 내에서는 thread.setDaemon(true)를 안 했음에도 그냥 테스트 코드가 종료되버립니다. 대체 이렇게 동작하는 원인이 뭘까요?
-
미해결스프링 핵심 원리 - 고급편
실행시간에 따른 log 레벨 적용
강사님께서 말씀주신 실행시간에 따른 log 레벨 적용해 보았습니다. 필요하신 부분 참고부탁 드립니다. (오류시에만 로그 남기는 부분은 @AfterThrowing을 사용하면 될것같습니다, - retry 에서 재시도 부분 제거) 1. 애노테이션 - 기본값 1000 @Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface CheckTime { int value() default 1000;} 2. Aspect @Around("@annotation(checkTime)")public void checkTimer(ProceedingJoinPoint joinPoint, CheckTime checkTime) throws Throwable { int mills = checkTime.value(); int maxMills = 4000; StopWatch stopWatch = new StopWatch(); stopWatch.start(); joinPoint.proceed(); stopWatch.stop(); long totalTimeMillis = stopWatch.getTotalTimeMillis(); Signature signature = joinPoint.getSignature(); String methodName = signature.getName(); if (totalTimeMillis <= mills) { log.info("methodName: {}, 실행시간 = {}ms", methodName, totalTimeMillis); } else if (totalTimeMillis <= maxMills) { log.warn("methodName: {}, 실행시간 = {}ms", methodName, totalTimeMillis); } else { log.error("methodName: {}, 실행시간 = {}ms", methodName, totalTimeMillis); }} 3. 애플리케이션 코드 - 랜덤으로 실행시간 적용 @CheckTime(value = 2000)public String save(String itemId) { seq++; if (seq % 5 == 0) { throw new IllegalStateException("예외 발생"); } sleep(); return "ok";}private void sleep() { int[] ints = {1000, 2000,3000,4000,5000}; double random= Math.random(); int num = (int) Math.round(random * (ints.length-1)); System.out.println(ints[num]); try { Thread.sleep(ints[num]); } catch (InterruptedException e) { e.printStackTrace(); }}
-
미해결코딩으로 학습하는 GoF의 디자인 패턴
싱글톤 생성 방법 중 enum 단점에 대해 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요~ 우선 이런 좋은 강의를 제공해주셔서 정말 감사합니다. 싱글톤 생성 방법 중 enum으로 생성했을 시에 단점 중에 lazy initialization이 안된다고 말씀하셨는데요, 이 부분에서 궁금증이 있어서 질문 남깁니다. 예제에서 보여주신 enum 내의 INSTANCE 또한 클래스로딩 시점에 JVM의 static 영역에 변수가 등록되고, SettingsHolder와 마찬가지로 호출시점에 힙영역이 할당되면서 그때, static 영역내 변수에 해당 힙주소가 참조되는것으로 알고 있습니다, 그렇다면 이 부분도 lazy initialization이라고 볼 수 있는것 아닌가요?혹시 제가 잘못알고 있는 부분이 있다면 알려주시면 감사하겠습니다 ㅜ
-
해결됨스프링 핵심 원리 - 고급편
이번 예제에서 Config 클래스에 @Configuration 을 적용하니, Proxy 래핑/등록이 안되는것 같습니다.
강사님 안녕하세요.저는 지금 예제 구현시 의도와 다르게 약간 틀린 설정으로 생긴예상밖의 결과로 약간 혼동을 겪고있습니다. 이유는 @Configuration 을 실수로 붙였더니, 아래와 같이Proxy 가 적용되지 않은 결과가 나옵니다. Config 클래스에 아래와 같이 @Configuration 선언시 @Configurationstatic class Config { ... ...} child.childMethod(); 실행 후 로그 메세지: child Proxy=class ...AtTargetAtWithinTest$Child(Proxy 적용이 안된 스프링 빈 출력) child.parentMethod(); Parent 는 프록시 처리가 되지 않아 출력되지 않음 관례처럼 사용해오던 @Configuration 을 지우니 강의 예제결과처럼 정상으로 나옵니다.(@Import 를 통해 Config 추가 상태) Aspect 를 빈으로 등록해도 Proxy 변환이 안되는 이 상황이 이해가 되지 않아 부득이하게 질문을 남기게 되었습니다. 질문입니다. 예전 강의에서 @Configuration 은 등록되는 빈 을 대상으로 싱글톤 후처리를 위해 선언되는 것이라 알고있었습니다.( CGLIB 을 통해 프록시 후처리), 그래서 Aspect 가 당연히 적용될 줄 알았는데 @Configuration 을 붙이니,Proxy 처리가 되지 않더라구요. 아래는 두가지 결과 입니다. @Configration Config @Import(Config.class) @Configuration 선언 시, Proxy 후처리가 되지 않는 기묘한 현상에 대한 이해가 잘 되지 않습니다.이런 이유로 Config 클래스에 @Configuration 을 쓰지않고, @Import 로 추가하신 이유가 궁금합니다. 읽어주셔서 감사드립니다.
-
미해결스프링 핵심 원리 - 고급편
Bean Scope 를 request 로 사용하면 ThreadLocal 의 문제를 해결할 수 있나요?
안녕하세요:) request scope 으로 사용하면 traceIdHolder 에 대한 동시성 이슈를 해결할 수 있을 것으로 보이고 직접해보니 동시성 문제가 발생하지 않았습니다. 혹시 해당 Section 과 관련하여 ThreadLocal 과 request scope 의 큰 차이점에 대해 말씀해주실 수 있으신가요? 답변 미리 감사의 말씀드립니다🙇♂️
-
미해결스프링 핵심 원리 - 고급편
자동 프록시 생성기 동작원리에대해 질문드립니다.
강의초반에 스프링은 객체를 생성하여 빈후 처리기를 거친 후에 스프링컨테이너에 빈객체를 등록한다고 알려주셨습니다. 그런데 위 이미지에서 스프링이 객체를 생성하고 빈후처리기에 전달한 후에 빈후처리기는 모든 Advisor 빈을 스프링 컨테이너에서 조회한다고 했습니다. 그런데, 스프링컨테이너에는 아직 빈들을 등록하기 전이라 Advisor 빈들이 등록이 되어있지 않는데, 어떻게 스프링컨테이너에서 모든 Advisor빈들을 조회를 할 수 있는지 이해가 안됩니다.
-
미해결스프링 핵심 원리 - 고급편
setter에 @Autowired 쓰는 문법은 이제 막힌건가요?
강의는 스프링 2.5버전대지만 현재 스프링 이니셜라이저에서 기본 지정 버전은 2.6버전입니다. 여기서는 CallServiceV1에서 사용한 setter에 @Autowired 붙이는 문법을 사용 할 시에는 생성자로 주입할 때랑 똑같이 순환참조냐고 묻는 오류가 발생하더라구요. 혹시나 싶어서 2.5.6으로 해보니 잘 되더랍니다...ㅠㅠ 갑자기 2.6.0버전부터 무슨 일이 생긴지는 모르겠지만 여기서는 안되네요 ㅠㅠ
-
미해결JSP WEB MVC Model2 Programming(중급 과정)
MVC패턴의 쇼핑몰 수업자료 관련
model1방식에서는 게시판과 쇼핑몰을 모두 진행 하였는데 model2 방식으로는 게시판밖에 강의가 올라오지 않아서 저도 아쉬워하고있었는데 댓글을 보니 수업자료로 올려주셨다고 하는 글을 보았습니다! 수업자료 다운받아봤는데 model2방식 쇼핑몰은 아직 업데이트가 안된건가요 아니면 추후 업데이트 될 예정인가요?