묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 고급편
로그구분을 위한 traceId에 질문이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]제가 생각한 로그는 사용자 별로 어떤 행위를 하였는지 추적하기위해서 로그를 사용하는걸로 알고 있었습니다.현재 강의에서 설명해주신 로그는 사용자를 특정하지 않고 요청에대한 로그만 uuid로 구분하여서 어떤 행위를 하였고 어떤 예외가 발생하였는지 파악하기 위한 로그인거 같습니다. 만약 사용자의 행위를 추적하기 위한 로그를 남기려면 traceId를 uuid가 아닌 사용자의 ip나 pk를 id로 사용하여 로그를 남기게 하면 되는건가요? 그리고 로그는 따로 보관하여 관리해야 할거 같은데 그럴때는 데이터베이스를 사용하나요 아니면 파일입력을 통해 디렉터리에 보관하나요?
-
해결됨C개발자를 위한 최소한의 C++
쓸데없지만 질문드리고싶습니다
안녕하세요. 항상 양질의 강의 감사합니다.link 오류시, 컴파일러가 맹글링 해놓은 함수의 진짜 이름이 출력되고, 이러한 오류를 dll 을 사용함에 있어서 자주 볼 수 있다고 말씀하셨는데 리눅스에서 라이브러리든 실행파일이든 용량을 조금이나마 줄이기위해 stip??? 명령어를 사용해 디버깅 심볼을 없앨 수 있었던 것으로 기억합니다.근데, 디버깅 심볼에는 변수, 함수이름, 소스코드 줄 번호등 다양한 정보가 들어가 있다고 배웠었는데, 해당 명령어로 디버깅 심볼을 없애버린 라이브러리 파일을 사용하여 만든 소스파일을 빌드하는 경우에서, 링크 오류가 나게되면 어떠한 현상이 이뤄지는지 궁금합니다
-
미해결코딩으로 학습하는 GoF의 디자인 패턴
혹시 다음강의는 언제쯤..
이펙티브시리즈2탄까지나왔었죠?한1년기다린거같은데 아직 안나와서 한번 질문을 여기서..
-
미해결스프링 핵심 원리 - 고급편
Spring bean 등록방법
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용][필드 동기화 - 적용]부분에서 FieldLogTrace를 @Configuration 을 이용해서 spring bean에 등록한 이유가 있을까요?@Component로 등록해도 충분했을것같은데다른의도가 있을까 궁금합니다.
-
해결됨C개발자를 위한 최소한의 C++
복사 생성자 질문 드립니다.
21분37초의 코드와 결과를 보면 testFunc(10)에서 반환한 인스턴스가 블록을 벗어남과 동시에 소멸을 하게 되어서 ~TestData(10)이 먼저 나와야 할 것 같은데 결과는 ~TestData(100)이 먼저 프린트 되고 있습니다. 강의 중간 부분까지는 강사님이 "객체는 블록을 벗어나면서 소멸되고, 복사 생성자가 호출이 되어서..." 이런 방법으로 설명해주시다가 21분 37초의 코드는 결과만 보여주고 넘어가셔서. 정확히 어떤것 때문에 저런 결과가 나왔는지 궁금합니다!
-
미해결스프링 핵심 원리 - 고급편
private 프록시
[질문 내용]private가 aop에 적용되지 않는다 함은 생성되는 프록시 객체에 해당 메서드가 생성되지 않기 때문에 프록시 객체에서 실제 객체의 메서드를 호출하는 방법이 없는건가요 ?
-
해결됨C개발자를 위한 최소한의 C++
생성자 궁금한거 있습니다
#include <iostream>using namespace std;class MyClass {public:MyClass(int a) : m(a) {cout << "base" << endl;}MyClass(const MyClass& rhs) : m(rhs.m) {cout << "copy" << endl;}~MyClass() {cout << "delete:" << m << endl;}void print() {std::cout << m << std::endl;}private:int m;};MyClass test(MyClass rhs){return rhs;}int main() {MyClass a = 10;MyClass b = MyClass(50);MyClass c = a;return 0;}결과로 base, base, copy, delete: 10, delete: 50, delete: 10이 출력됐습니다.[질문]MyClass a = 10;MyClass b = MyClass(50);이 둘의 차이가 무엇인가요? 특히 MyClass b = MyClass(50);의 base만 출력은 이해가 되지 않습니다.일단 임시객체를 만들었으니 base, 그리고 임시객체를 const MyClass& rhs의 인자로 넘겨줘서 copy, 그리고 다음줄로 넘어가면 쓸모없어진 임시객체 MyClass(50)이 삭제되서 delete 이렇게 3개가 출력될줄 알았는데 base만 출력돼서 이해가 되지 않습니다.. (이 부분은 찾아보니까 복사 엘리전이라고 하는데 맞나요?? 그래서 복사 생성자를 안쓴다는데 헷갈리네요 ㅠㅠ)그리고MyClass b = MyClass(50);MyClass c = a; 이 둘의 차이도 알고싶습니다.b,c 둘다 객체를 인자로 받고있습니다. 근데 b는 base를 출력하고 c는 copy를 출력합니다. 왜 b가 base를 출력하나요? 이와같은 복잡함을 덜기위해 explicit를 사용하는건가요?
-
해결됨[유니티 게임 개발] 핵심 기술과 디자인 패턴
override, virtual 변수는 어떻게 하나요?
상속 강의에서 'override - 자식 클래스에서 부모 클래스의 virtual로 정의된 함수 혹은 변수를 변경을 진행하기 위해서 사용'라고 적혀 있던데요. 강의에선 함수만 예로 보여주고 변수는 안보여줘서 찾아보니까 잘 안나오네요.override, virtual 키워드로 검색하면 함수 내용만 나와요. 변수 예도 알려주시면 감사하겠습니다.
-
해결됨스프링 핵심 원리 - 고급편
createNextId()시 새로운 객체를 반환하는 이유가 있나요?
public TraceStatus beginSync(TraceId beforeTraceId, String message) { TraceId nextId = beforeTraceId.createNextId(); Long startTimeMs = System.currentTimeMillis(); log.info("[{}] {}{}", nextId.getId(), addSpace(START_PREFIX, nextId.getLevel()), message); return new TraceStatus(nextId, startTimeMs, message); }위 코드를 아래와 같이 사용하면 어떤 단점이 있나요?public TraceStatus beginSync(TraceId traceId, String message) { traceId.increaseId(); Long startTimeMs = System.currentTimeMillis(); log.info("[{}] {}{}", traceId.getId(), addSpace(START_PREFIX, traceId.getLevel()), message); return new TraceStatus(traceId, startTimeMs, message); }객체를 새로 만들어서 반환하지 않고 id만 증가시켜서 그대로 사용하는 것은 지양되어야 하나요?
-
해결됨[유니티 게임 개발] 핵심 기술과 디자인 패턴
CSV 강의 스크립트 파일
스크립트 파일은 어디서 받을 수 있을까요?
-
해결됨[유니티 게임 개발] 핵심 기술과 디자인 패턴
[3분 17초] 2차원 배열 구조 그림 예시
행과 열을 반대로 그리신 것 같아요.
-
미해결스프링 핵심 원리 - 고급편
CallServiceV1
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]강의와 자바 버전이 다르긴 합니다. 자바 버전이 다른 이슈로 다른 정상 작동 되는 테스트에서도 아래 경고가 발생하긴합니다.WARNING: A Java agent has been loaded dynamically (/Users/yunsang-won/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy-agent/1.14.17/e3c251a39dc90badaf71c83427ba46840f219d8d/byte-buddy-agent-1.14.17.jar)WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warningWARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more informationWARNING: Dynamic loading of agents will be disallowed by default in a future releaseCallserviceV1 생성 후 테스트 코드 실행해보면 아래와 같은 에러가 발생합니다 뭐가 문제일까요 ?ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [MergedContextConfiguration@6fc29daa testClass = hello.aop.internalcall.CallService0Test, locations = [], classes = [hello.aop.AopApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@65a15628, [ImportsContextCustomizer@2f66f0d0 key = [hello.aop.internalcall.CallService0]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@7d1cfb8b, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@39655d3e, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@6138e79a, org.springframework.boot.test.context.SpringBootTestAnnotation@373420a5], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
-
미해결스프링 핵심 원리 - 고급편
AOP 실전예제 질문
@ClassAop @Component public class MemberServiceImpl implements MemberService{ @Override @MethodAop("test value") public String hello(String param) { return "ok"; } public String internal(String param) { return "ok"; } }에서 @ClassAop와 @MethodAop annotation은 왜 만든건가요? 활용이 안된거 같은데요????
-
미해결스프링 핵심 원리 - 고급편
this와 target 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 선생님.덕분에 인강을 통해서 스프링에 대해서 깊은 이해와 함께 학습을 하고 있습니다. 매우 감사드립니다.영상 강의를 듣던 중에 this 와 target 의 차이를 공부하던 중에 이해가 되지 않는 부분이 있습니다.MemberServiceImpl 구체 클래스 지정**this(hello.aop.member.MemberServiceImpl) : proxy 객체를 보고 판단한다. JDK 동적 프록시로 만들어진 proxy 객체는 MemberService 인터페이스를 기반으로 구현된 새로운 클래스다. 따라서 MemberServiceImpl 를 전혀 알지 못하므로 AOP 적용 대상이 아니다. target(hello.aop.member.MemberServiceImpl) : target 객체를 보고 판단한다. target 객체가 MemberServiceImpl 타입이므로 AOP 적용 대상이다.이 분에서 이해가 되지 않는 것이 있습니다. 스프링 AOP는 프록시 기반의 AOP를 구현하고 있으며, 스프링 컨테이너의 관리 하에서 프록시 객체를 기반으로 AOP를 적용한다고 이해하고 있습니다. 더불어 프록시 생성 방법은 JDK 동적 프록시(인터페이스 기반 구현 프록시)와 CGLIB(구체 클래스 기반 상속 프록시) 를 통해 알고 있습니다. this 와 target 지시자를 사용하면,this 는 결국 런타임에서 동적으로 생성된 프록시를 대상으로 aop를 적용하는 것이며, 이때 프록시는 JDK 동적 프록시와 CGLIB 중에 생성된 것을 대상으로 한다고 이해하고 있습니다.target 은 실제 대상 객체를 호출하는데, 대상 객체는 프록시 아닌데 어떻게 aop를 적용하는지 이해가 안됩니다.
-
미해결스프링 핵심 원리 - 고급편
빈 후처리기-적용 관련 질문
AppV1Config.class, AppV2Config.class를 BeanPostProcessorConfig 에서 주석처리하고아래와 같이 ProxyApplication 에서 import를 해도 정상 실행됩니다.맞는건가요? @Import({BeanPostProcessorConfig.class,AppV1Config.class, AppV2Config.class}) @SpringBootApplication(scanBasePackages = "hello.proxy.app") public class ProxyApplication { public static void main(String[] args) { SpringApplication.run(ProxyApplication.class, args); }
-
미해결스프링 핵심 원리 - 고급편
Args vs Execution 테스트 설명 중 문의 드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@Test @DisplayName("파라메터 부모 타입으로 매치") void argsMatchDynamic() { // args pointcut.setExpression("args(String)"); Assertions.assertTrue(pointcut.getClassFilter().matches(MemberServiceImpl.class)); pointcut.setExpression("args(Object)"); Assertions.assertTrue(pointcut.getClassFilter().matches(MemberServiceImpl.class)); pointcut.setExpression("args(java.io.Serializable)"); Assertions.assertTrue(pointcut.getClassFilter().matches(MemberServiceImpl.class)); // execution pointcut.setExpression("execution(* *(String))"); Assertions.assertTrue(pointcut.getClassFilter().matches(MemberServiceImpl.class)); pointcut.setExpression("execution(* *(Object))"); Assertions.assertTrue(pointcut.getClassFilter().matches(MemberServiceImpl.class)); pointcut.setExpression("execution(* *(java.io.Serializable))"); Assertions.assertTrue(pointcut.getClassFilter().matches(MemberServiceImpl.class)); } args는 동적 검사라 검색 되어야 맞지만 excution은 정적 타입 검사라서 저게 안된다고 하셨지만 해당 테스트 결과 true로 반환이 됩니다. 혹시나 spring boot 버전 문제일까 싶어서 2.5.5, 3.3.0 두곳에서 테스트 했습니다
-
미해결스프링 핵심 원리 - 고급편
스프링에서 제공하는 애너테이션들은 AOP 가 어떻게 적용되나요?
강의를 보면 커스텀으로 만드는 애너테이션들은 @Aspect 설정으로 등록이 가능한데요,스프링이 제공하는 대표적으로 @Transactional 같은 애너테이션들은 라이브러리를 뒤져봐도 @Aspect 설정을 두는 곳이 없어서 어떻게 프록시를 생성하는지 궁금합니다!
-
미해결스프링 핵심 원리 - 고급편
싱글톤 빈에서의 필드 변수를 사용에도 불구하고 동시성 문제가 일어나지 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의를 보고 코딩을 해서 실행을 해보니깐 싱글톤 빈을 사용함에도 불구하고 로컬 쓰레드 환경처럼 서로 값에 영향이 가지 않는 예제와 다른 결과가 나왔습니다. 혹시나 제가 잘못 코딩을 하여 이런 결과가 나온 것인지 소스 코드를 이용해서 FieldLogTrace를 사용하여 예제를 실행해보았지만, 결과는 똑같이 서로 영향을 미치지 않는 결과가 나왔습니다. 스프링이 최신 버전(테스트 기준 3.3.0)으로 업데이트가 되면서 이와 관련해서 따로 바뀐 부분이 있는지 궁금합니다.
-
미해결스프링 핵심 원리 - 고급편
인터페이스기반 프록시 적용 오류 발생
로그를 보면 처리는 다 되는거 같은데 마지막에 오류 메세지를 출력하네요????https://blog.naver.com/jfk6725수고하세요
-
미해결스프링 핵심 원리 - 고급편
스프링 문의드립니다.
해결함 !