묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 고급편
MDC vs AOP 중에 고민중입니다.
안녕하세요. 서비스 운영을 하는데 로그와 관련되어서 고민이 있어서 질문드립니다.강사님처럼 로그에 레벨을 두어 AOP방식으로 로그를 출려하는 방법과, MDC를 사용해서 로그를 출력하는 방법을 두고 어느 기술을 사용할 지 고민중입니다. AOP는 가독성이 좋고 MDC는 성능이 좋다고 알고 있는데 어떤 방식을 추천하시나요?
-
미해결얄코의 떠먹여주는 객체지향 디자인 패턴
파사드 패턴과 템플릿 메서드 패턴의 차이
파사드 패턴은 다수의 서브시스템을 하나로 묶는 패턴으로 이해했습니다. 클라이언트의 클래스의 함수에서 서브시스템에 해당하는 개체들의 함수를 호출하여 구현하는 거 같은데요, 어떻게 보면 템플릿 메서드 패턴과 사실상 똑같은거 아닌가요? 두 패턴의 뚜렷한 차이가 있는데 제가 이해를 잘 못한건지 질문드립니다.
-
미해결마이크로서비스 디자인 패턴 완벽 가이드
실습 환경 구축에 대한 질문
제공되는 예제 파일에 대한 실행에 관련 질문을 해 주실 때는, 자신이 사용하는 운영체제(OS), 운영체제 버전, JDK 버전, IDE와 같은 개발 도구의 버전 등을 상세알려 주시면, 답변을 드리는데 도움이 됩니다. 안녕하세요. 현재 "마이크로서비스 디자인 패턴 완벽 가이드" 수강 중인 수강생입니다. 기존에 진행하셨던 "Spring Cloud로 개발하는 마이크로서비스 애플리케이션"는 수강 하지 않은 상태로 현재 과정을 수강 중인데 실습 시 사용하는 환경 및 프레임워크 설정 방법 등을 설명한 가이드 및 자료가 따로 있는지 문의 드립니다!
-
미해결얄코의 떠먹여주는 객체지향 디자인 패턴
강의 전부 수강했는데 퀴즈 활성화가 안되는 것 같습니다.
올라온 강의들을 전부 수강한 상태에서, 퀴즈를 풀려고 하는데 수강하지 않은 수업이 있다는 화면이 나오네요. 이유를 알려주시면 감사하겠습니다.
-
해결됨스프링 핵심 원리 - 고급편
순환참조
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]스프링 부트 2.6이상 사용중이라 순환 참조를 기본적으로 금지하는 구조인데spring.main.allow-circular-references=true이 옵션을 넣으면 되긴 합니다.다만, ObjectProvider 를 사용하면 아래와 같이 문서가 작성되어위 옵션을 제거해서 다시 테스트 했는데 circular 예외가 발생하더라구요... 이 부분에서 순환이 안생겨서 옵션이 없어도 되어야 되는데 안되는 느낌이라 제가 잘 못 이해한거지... 답변 부탁드립니다.ㅜㅜ
-
미해결스프링 핵심 원리 - 고급편
this를 단독으로 사용할때랑 파라미터 바인딩 할때 차이
@Before("allMember() && this(obj)") public void thisArgs(JoinPoint joinPoint, MemberService obj) { log.info("[this]{}, obj={}", joinPoint.getSignature(), obj.getClass()); } @Before("allMember() && this(hello.aop.member.MemberService)") public void thisArgs(JoinPoint joinPoint, MemberService obj) { log.info("[this]{}, obj={}", joinPoint.getSignature(), obj.getClass()); } @Before("allMember() && this(MemberService)") public void thisArgs(JoinPoint joinPoint, MemberService obj) { log.info("[this]{}, obj={}", joinPoint.getSignature(), obj.getClass()); }this를 단독으로 사용할 때 에는 이해가 되는데, 파라미터 파인딩에서는 왜 obj만 허용이 되나요?allMember() 조건 이후에 MemberService타입만 받고 싶을 수도 있을거 같은데...즉 allMember()의 this가 반드시 MemberService일거란 보장이 없지 않나요?
-
미해결스프링 핵심 원리 - 고급편
빈 후처리에 등록 질문 있습니다.
//프록시 대상이면 프록시를 만들어서 반환 ProxyFactory proxyFactory = new ProxyFactory(bean); proxyFactory.addAdvisor(advisor); Object proxy = proxyFactory.getProxy();위 코드에서 반환 타입이 오브젝트인데, 컨트롤러나 서비스에서 빈 주입받을때 스프링에서 빈 타입을 기준으로 주입되는걸로 아는데, 어떻게 오브젝트 타입이 반환되어도 정상적으로 각각의 빈들을 주입받을 수 있나요?제 생각엔 결국엔 등록된 빈 프록시는 전부 오브젝트 타입이라는 결론인데, 제 생각이 틀렷을까요?
-
미해결스프링 핵심 원리 - 고급편
AppConfig 설정하는 설명중에 이해가 안되는게 있습니다.
```@Import(AppV1Config.class) : 클래스를 스프링 빈으로 등록한다. 여기서는 AppV1Config.class 를스프링 빈으로 등록한다. 일반적으로 @Configuration 같은 설정 파일을 등록할 때 사용하지만, 스프링 빈을등록할 때도 사용할 수 있다. 위 내용에서 AppConfig는 이미 @Configuration 인데, 클래스를 스프링 빈으로 등록한다는게 무슨말이에요?
-
미해결스프링 핵심 원리 - 고급편
ThreadLocal을 지역변수로 선언하면 remove가 필요할까요?
ThreadLocal사용시 remove가 필요한 이유가 was서버는 http요청이 끝나도 객체 생명주기가 끝나는게 아닌 쓰레드풀을 재사용하기 때문에 remove를 해야 해야 하는걸로 이해 했습니다. 물론 강의 예시에선 로그를 찍어야 하기 때문에 전역변수를 사용하는게 맞지만 만약에 ThreadLocal을 메서드 내에서 지역변수로 사용해도 되는 경우가 있다면 굳이 remove를 할 필요가 없을까요?
-
미해결마이크로서비스 디자인 패턴 완벽 가이드
k8s 를 고려한 개발은 어떻게 진행하나요?
안녕하세요. 강의 흥미있게 듣고있습니다.궁금한 점이 있는데, 스프링 클라우드에서 제공하는 api-gateway 나 config server, discovery 등 k8s 로 배포하게 되면 각각 대체할 수 있는 서비스 들이 존재하는데,실제 실무에서 개발할때는 어떤식으로 진행하는지 궁금합니다.스프링 클라우드로 개발한 후 k8s에 맞게 변경하나요? 아니면 처음부터 k8s 에 겨냥해서 개발을 진행하나요?
-
해결됨스프링 핵심 원리 - 고급편
@Aspect 어노테이션으로 생성된 Advisor의 Bean 저장 여부
AI가 만든 질문들을 풀던 도중 아래와 같은 문제가 나왔습니다.AI가 만든 질문 : 스프링의 자동 프록시 생성기는 @Aspect 어노테이션이 붙은 빈에 대해 어떤 역할을 수행할까요?참고로 정답은 : 빈을 어드바이저로 변환 이었습니다.@Bean fun advisor3(trace: LogTrace) : Advisor { // pointcut val pointcut = AspectJExpressionPointcut() // noLog라는 메서드에는 advice를 적용하지 않는다. pointcut.expression = ("execution(* com.example.demo.advanced.app..*(..)) && !execution(* com.example.demo.advanced.app..noLog(..))") // advice val advice = LogTraceAdvice(trace) return DefaultPointcutAdvisor(pointcut, advice) }강의중에 나온것 처럼 의도적으로 Advisor를 Bean에 등록하면 스프링 컨테이너에 Adivisor가 bean으로 등록되는건 알겠습니다.@Aspect class LogTraceAspect( private val trace: LogTrace ) { @Around(" execution(..something 이부분은 생략합니다 )") fun execute(joinPoint: ProceedingJoinPoint): Any? { .. } } 그런데 위 코드처럼@Aspect 어노테이션을 사용해도 advisor가 스프링 컨테이너에 bean으로 저장되는건가요?어드바이저 빌더 내부에 저장만 되는건지 혹은 bean으로 저장도 되는건지 궁금합니다.감사합니다.
-
미해결스프링 핵심 원리 - 고급편
ThreadLocal 사용시 부작용이 있을수 있을까요? (ThreadLocal.remove()를 잘한다고 해도..)
안녕하세요ThreadLocal 에 관련된 질문입니다.------- 가정 -------Component A가 ThreadLocal을 사용합니다. ( myThreadLocal = ThreadLocal<Long>)Component B가 ThreadLocal을 사용합니다. ( otherThreadLocal = ThreadLocal<Long>)질문1. JVM 내부에는 2개의 ThreadLocal 객체가 생성되는게 맞을까요?2. 그러면 톰켓에서 시동시 만드는 스레드풀에 있는 200개 스레드 모두에 말씀하신 "스레드 내부의 저장소" (ThreadLocalMap with 2개의 key)가 생성이 될 것 같은데 맞을까요?3. 만약 2번이 맞다면, 코드 이런 저런곳에서 LocalThread를 사용하게 되면 3.1 시동시에 좀 더 오래걸릴것 같은데, 혹시 시동시 부하가 걸리는가 3.2 시동시 부하가 걸리지 않는다고 해도, 부작용이 있을수 있는가?4. ProtoType의 Bean을 동적으로 만들고 그 Bean이 내부에서 ThreadLocal을 사용한다면 다른 Thread의 저장소(ThreadLocalMap)에서는 그 ThreadLocal의 저장공간이 없을것 같은데 맞을까요?감사합니다.
-
해결됨Python을 위한 디자인 패턴
노션링크
conceptual_singleton.py강사님 싱글톤패턴 드롭다운 코드예시 9:25 이부분 코드 예시가 펼쳐져 있지않아서 볼수가없네요.팩토리패턴 예시도 강의영상에서는 펼쳐져있지않네요.노션링크를 보면서 학습해야할 것같은데 어디있는지 모르겠습니다 ㅠ
-
미해결TS/JS 디자인 패턴 with Canvas: 제로초에게 제대로 배우기
커맨드 패턴 적용
디자인 패턴을 공부하면서 실제 구현중인 서비스에 적용해보려고 노력중인데(위 이미지는 예시 코드)예시 처럼 작성했을 때의 실효성이 invoker에서 audit log 같은 공통 코드 추출하는것 이외에 잘 느껴지지 않는데, 적절하지 않은 부분에 적용하려해서 그런것일까요?-> 단축키 예시처럼 해당 커맨드를 다른곳에서'도' 사용한다면 유용할것도 같네요!!추가로 ValidateLeadFieldCommand, CreateLeadCommand 이런식으로 여러 커맨드가 순차로 실행해야하는 경우에 invoker도 커맨드마다 만들어야할까?하는 고민도 듭니다!
-
미해결스프링 핵심 원리 - 고급편
빈으로 주입하지 않고 new로 객체 생성해도 되는데, 왜 ThreadLocal을 사용하나요?
[질문 내용]안녕하세요! 알기 쉽게 알려주셔서 항상 감사드립니다~! 스레드로컬은 언제 적용하는지 궁금합니다.아래와 같이 빈으로 주입받지 않고 new 로 객체를 생성해도 상관없지 않나요? 파라미터로 넘기지 않으려고 빈으로 등록한다음 스레드로컬 변수를 도입하는 것인가요~? @GetMapping("/v2/request") public String request(String itemId) { HelloTraceV2 trace = new HelloTraceV2();
-
미해결마이크로서비스 디자인 패턴 완벽 가이드
gPRC 와 서비스 디스커버리에 대해 질문드립니다.
안녕하세요.MSA 에서는 n 개의 같고 다른 여러 서비스들이 존재하고 이를 구분 하기 위해 discovery 서비스를 사용 하고 있는 것으로 알고 있습니다.spring cloud 를 통해 서비스 디스커버리를 사용하면 서비스와 서비스가 사용하는 (web 구성인 경우) 서비스 포트가 자동으로 등록되고 찾아지는 자동화된 구성이 지원되어 사용하기가 편리한데요.외부 web 과 내부 grpc 통신을 하는 서비스는 각각 통신을 위한 포트 바인딩이 필요한데 이때 서비스가 n 개가 될때 discovery 서비스를 보통 어떻게 사용해서 구성하는지 궁금해서 질문 드리게 되었습니다.플랫폼 기반 디스커버리가 된다면 크게 신경을 쓰지 않아도 될듯하나 어플리케이션 레이어에서 디스커버리를 사용할때는 보통 어떻게 구성이 될까요?
-
미해결스프링 핵심 원리 - 고급편
로그 추적기 V1 - 프로토타입 개발 소스 코드 관련 문의드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.[1]Long stopTimeMs = System.currentTimeMillis();-> Long 으로 받은 이유가 궁금합니다.[2]private static String addSpace(String prefix, int level) {-> private 라 외부에서 객체 생성없이 사용할 수가 없을 것 같은데요. static 이 의미가 있는지 문의드립니다. 감사합니다.
-
미해결TS/JS 디자인 패턴 with Canvas: 제로초에게 제대로 배우기
type/interface 정의 파일분리
강의 내용과는 무관하지만 평소에 고민하던 점이 있어 문의드려 봅니다 평소에 type/interface 정의를 어디 둘지 고민하는 경우가 많은데요d.ts를 만들어 타입끼리 묶어둠 각자 가장 관련도 높은 파일에 둠제로초님은 강의 예제 정도 규모의 프로젝트에서 어떻게 하시는지 궁금합니다 저는 타입이 먼게 싫어서 2번을 선호하는데 '관련도 높다'는 기준이 주관적이어서 위치를 명확히 잡기 어렵고, 개발이 진행되며 관련도가 바뀌는 경우도 생기더라고요
-
미해결마이크로서비스 디자인 패턴 완벽 가이드
일부 강의가 재생이 되지 않습니다
48강 , 57 강 65강 이 재생이 되지 않는것 같습니다.
-
미해결TS/JS 디자인 패턴 with Canvas: 제로초에게 제대로 배우기
팩토리 패턴
예제에서 팩토리 메서드를 굳이 왜 써야 하는지 이해를 하지 못했습니다 심플 팩토리 예제에서 grimpanFactory라는 함수의 존재 이유가 서로 다른 생성자들을 묶어주려는 요구사항이 있기 때문으로 이해했는데요 이 요구사항에 따르면 AbstractFactory들을 만들어주더라도 결국 이들을 묶어주는 로직이 필요하고 여전히 if else가 불가피한게 아닌가 생각됩니다정리하면애초에 grimpanFactory라는 함수를 만든게 type만으로 서로 다른 클래스 인스턴스를 편리하게 생성하는게 요구사항이 있어서가 아닌지(1번이 맞다면) AbstractFactory를 만들더라도 이 요구사항을 만족하려면 어딘가엔 if else가 와야할 것 같은데 잘못 이해한 것인지(1번이 틀리다면) 묶어주는게 요구사항이 아니라면 애초에 AbstractFactory 없이 생성자 바로 호출하면 되는게 아닌지