묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 고급편
ProxyFactory 는 어떻게 인터페이스와 클래스를 구분하나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 내용에서, 프록시로 만들어질 타겟이 인터페이스를 베이스로 하느냐 클래스를 베이스로 하느냐에 따라, InvocationHandler 를 사용할지, CBLIB를 사용할지 결정한다고 하셨습니다. ProxyFactory는 어떻게 인터페이스 베이스인지 클래스베이스인지 구분하는지 궁금합니다!instanceof 메서드같이 구분해주는 메서드가 존재하는 걸까요?
-
해결됨C개발자를 위한 최소한의 C++
차이점을 잘 모르겠습니다.
주신 프로그램 중 constructSelect.cpp 에서 디폴트 생성자를 지우면 에러가 발생하는데 virtualFunction 에서는 디폴트 생성자가 없어도 동작합니다. constructSelect.cpp 에서 선언 방식이 아닌 new 연산자를 사용해서 해봐도 에러가 발생하고객체 내에 멤버메서드가 없어서 그런가 해서 멤버를 만들어도 에러가 발생합니다VirtualFunction 내의 소멸자의 virtual 을 제거해도 이건 잘 작동합니다.눈으로 봐서는 도저히 차이점을 모르겠습니다.
-
해결됨C개발자를 위한 최소한의 C++
이동생성자 관련
안녕하세요. 선생님 이동 생성자 강의 내용 중 질문이 있습니다. (아래 코드 참고) delete pnData를 하면, 포인터 변수가 해제되어pnData = rhs.pnData;를 실행할 수 없는 것이 아닌지 궁금합니다. 실재로는 포인터 값은 그대로고, 가리키는 값(int 0)만 삭제되는 것인가요? 포인터 값은 놔두고 가리키는 값만 없애는 문법은 어떻게 되나요? delete를 안하고, pnData = nullptr; 로만 수정해도 됬을 것 같습니다. class TestData { public: TestData(){ pnData = new int(0); } ... TestData(TestData&& rhs) noexcept{ delete pnData; pnData = rhs.pnData; rhs.pnData = nullptr; } ... TestData& operator=(TestData&& rhs) noexcept{ delete pnData; pnData = rhs.pnData; rhs.pnData = nullptr; } }
-
미해결스프링 핵심 원리 - 고급편
쓰레드로컬이 제공하는 별도의 저장소와 싱글톤의 관계
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요, 쓰레드 로컬이 가지는 별도의 보관소 개념이 정확하게 이해가 되지 않아 질문을 남깁니다. 1. 쓰레드 로컬이 만드는 별도의 전용 보관소라는 것은 하나의 객체를 생성하여 그곳에 정보값을 저장해 두었다가 해당 쓰레드가 싱글톤으로된 객체의 정보값을 호출할 때마다 참고하게 되는 것인지, 아니면 다른 방식으로 설계된 것인지 궁금합니다. 2. 결국 특정 쓰레드마다 별도의 저장소를 통해 정보값을 보관하게 한다면, 그리고 그 보관하는 것이 객체를 생성하는 방식이라면, 동시성 문제를 발생시키는 싱글톤 대신 프로토타입을 사용하면 되는 것이 아닌가 생각이 드는데 프로토타입이 아닌 쓰레드 로컬로 해결해야하는 이유가 무엇인지 궁금합니다.
-
미해결스프링 핵심 원리 - 고급편
동적 프록시 질문 (jdk 동적 프록시 - 인터페이스가 있지만, 인터페이스에 없는 메서드)
안녕하세요, 동적 프록시 강의 듣는 중에 질문 드립니다 (~섹션 6수강 중)jdk 동적 프록시의 경우, 인터페이스가 있는 경우에만 사용할 수 있는 것으로 배웠는데요.구현 클래스에 인터페이스에 포함되지 않은 메서드가 추가로 구현되어 있다면, 해당 메서드에는 프록시를 통한 호출이 불가능한데요. 그래서 프록시를 원하는 target에 대해서 전부 proxy가 적용될 수 없다면, 인터페이스 유무에 관계없이, cglib을 사용하는 것이 좋지 않을까 의문이 들었습니다.질문을 요약하자면,1. 구현 클래스의 모든 메서드를 지원하지 못할 가능성이 있음에도 jdk 동적 프록시 기술을 사용하는 이유가 궁금합니다.2. (중복 같지만..) cglib을 사용하는 것이 jdk 동적 프록시에 비해 단점이 있어서, 1번 질문의 단점에도 불구하고 사용되는 걸까요?감사합니다
-
미해결스프링 핵심 원리 - 고급편
로그
[질문 내용]스프링 3.2대 사용중입니다.다름이 아니라 강의를 보고 따라하던 중 로그가 강의처럼 찍히지 않고 request만 찍히는 걸 발견했습니다.스프링 버전 차이인가요 ? 아니면 제가 뭘 놓치고 있는 걸 까요 ?
-
미해결스프링 핵심 원리 - 고급편
component 중복초기화 부분 추상클래스로 변경2
이렇게 구조를 바꾸었습니다이러면 프록시 체인이 되어서 잘 실행되던데 문제없는거겠죠?테스크 코드도 프록시 체인으로 똑같이 했습니다
-
미해결스프링 핵심 원리 - 고급편
쓰레드 로컬 vs 프로토타입 빈
결국 traceID가 서로 다른 쓰레드에서 같은 값을 가지게 되니쓰레드로컬을 이용해서 따로 traceId를 관리 하는거잖아요?그런데 그냥 애초에 Trace클래스 자체의 빈스코프를 프로토타입으로 해버리면각각의 쓰레드가 Trace클래스를 DI받을때마다 쓰레드마다 다른 Trace클래스가 생성되니따로 관리를 할 필요가 없지 않나요?이렇게되면 어떠한 오버헤드가 발생하나요?
-
미해결스프링 핵심 원리 - 고급편
쓰레드 로컬 데이터 저장위치 질문
ThreadLocalLogTrace는 싱글톤이잖아요?그러므로 A와 B에서 참고하는 ThreadLocalLogTrace 참조값은 같은 값을 가리킬꺼같은데,여기서 ThreadLocal<TraceId> 필드는각 A쓰레드 B쓰레드 각각의 공유하지 않는고유의 데이터영역에 저장되는것인가요?(JVM에서 STACK과 PC Register처럼)아니면 일종의 해시함수처럼 작용하여A쓰레드에서의 요청이면 알아서 A의 데이터B쓰레드에서의 요청이면 알아서 B의 데이터를 주는것인가요?만약 전자라면 이게 어떻게 가능한것인지?
-
해결됨스프링 핵심 원리 - 고급편
var 사용에 관한 김영한 선생님의 생각이 몹시 궁금합니다
[질문 내용]안녕하세요 스프링부트 프로젝트를 진행중입니다. 김영한님께서는 var를 자주 쓰는 편인지 궁금합니다. 사실 저는 매우 코드 리뷰할 때 불편하다고 생각하는데 회사에서는 어떤가요? 물론 Intellij 에서 setting 변경을 해주면 옆에 hint로 나오긴 하지만 기업에서는 이런 걸 허용하는지 궁금합니다 감사합니다
-
해결됨C개발자를 위한 최소한의 C++
new/ delete 질문
포인터 new 시, 주소값과 가리키는 Data 메모리도 동시 할당되나요?포인터 delete 시, 주소값과 가리키는 Data 도 메모리도 해제? 혹은 주소값만 해제되나요?
-
미해결스프링 핵심 원리 - 고급편
ContextV1 은 템플릿 콜백 패턴이 아닌가요?
ContextV2는 템플릿 콜백 패턴이라고 하셨는데ContextV1 은 템플릿 콜백 패턴이 아닌가요?
-
미해결스프링 핵심 원리 - 고급편
aop에서 DB 접근?
안녕하세요 영한님 강의를 토대로 개인프로젝트를 진행하다가 생긴 의문점입니다스프링 시큐리티의 @Preauthorize를 공부하다가 생긴 의문인데, 만일 여러 컨트롤러의 메서드에서 단순히 User의 ROLE_XXX 뿐만이 아니라, 현재 유저에게 이 리소스를 사용할 자격이 있는지? 를 검사하는 공통된 로직이 필요하다면 (리소스 단순 CRUD 뿐만이 아니라 더 세부적인 로직들이 있다면), 여기에 aop를 적용하는 의의가 있을까요?만일 의의가 있다면, 권한이 있는지를 알려면 DB에 다녀와야 하는데 AOP에서 데이터소스에 접근하는별로 좋은 방법이 아니라고 들었습니다.간단한 예시긴 하지만, 대충 이런 로직을 구현하려고 합니다@CheckOwner어노테이션이 붙어있고, postId를 인자로 받은 경우에선 post.Member.id가 현재 세션의 memberId와 같은 경우에만 이후 로직이 진행되게 하려는 의도입니다.@Around("@annotation(CheckOwner) && args(postId,..)") public Object checkPostOwner(ProceedingJoinPoint joinPoint, Long postId) throws Throwable { log.info("test"); //DefaultTransactionDefinition def = new DefaultTransactionDefinition(); //TransactionStatus status = tr.getTransaction(def) MockPrincipal principal = (MockPrincipal)SecurityContextHolder.getContext() .getAuthentication() .getPrincipal(); Post post = postRepository.findById(postId).orElseThrow(NoPostException::new); if (!post.getMember().getId().equals(principal.getId())) { throw new AccessDeniedException("권한이 없다고"); } Object result = joinPoint.proceed(); log.info("test"); //tr.commit(status); return result; }
-
해결됨C개발자를 위한 최소한의 C++
반환유형이 클래스형 참조
안녕하세요 강사님, 반환 유형이 클래스 참조일 때 질문이 있습니다.반환유형이 클래스형인 것보다는 메모리 효율을 위해서 클래스형 참조로 선언을 하는데, 반환하는 참조가 함수 내부에서 생성된 지역 인스턴스의 참조라면 함수 스코프를 벗어나면 해당 인스턴스는 소멸되므로 main함수에서는 참조를 못하게 되는 것 아닌가요?이런 경우에는 반환 유형을 클래스형 참조가 아닌 클래스형으로 선언하는게 적절할까요? 감사합니다!
-
해결됨C개발자를 위한 최소한의 C++
강사님 질문 드립니다.
만약 함수내에서 func(ClassA a) { // 여기서 a 는 클래스임 } 과 같이 작성하면 ClassA 의 생성자는 호출되지 않지만 소멸자는 호출됩니다.그 이유를 알고 싶습니다.
-
미해결스프링 핵심 원리 - 고급편
동기화와 동시성 차이
동시에 traceId의 공유변수에 접근하니까 문제가 생겨서그걸 동시성 문제라고 하는데동기화에 문제가 있다는건 무슨말일까요?
-
해결됨C개발자를 위한 최소한의 C++
virtual 함수와 관련하여 질문 있습니다.
만약 기본 메서드로 virtual a() 를 정의한 후 첫번째 파생 클래스에서는 a() 로 정의를 하였습니다.마지막 파생 클래스에서도 a() 로 정의했다면 어떻게 동작하는지 궁금해서 여쭤 봅니다. 제 생각에는 기본하고 첫번째 파생 사이에는 virtual 처럼 즉 기본을 호출해도 파생이 호출될 거 같은데두번째 파생시에는 virtual 의 성격이 사라질 거 같습니다. 확인 부탁드립니다. 강사님
-
해결됨C개발자를 위한 최소한의 C++
생성자와 소멸자의 호출
04_Constructor 테스트 중에 질문 드립니다.Test test01; 과 같이 선언하면 생성자와 소멸자가 모두 호출되는데Test test02 = new Test(); 와 같이 호출하게 되면 소멸자는 호출되지 않습니다. 그 이유가 뭔지 궁금합니다.친절한 강의 감사드립니다.
-
미해결스프링 핵심 원리 - 고급편
멋지지 않나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]우리의 멘토꽤 멋지심
-
미해결스프링 핵심 원리 - 고급편
질문은 아니고 후기는 강의를 다듣고 남길려고 하는데
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)영한님의 강의력에 정말 감탄이 나오는군요 한마리의 백조같은 유려하고 우아한 설명이에요