묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 핵심 원리 - 기본편
ClienBean에 PrototypeBean 객체 생성에 관해 궁금한 것이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의를 듣다가 의문점이 생겨서 질문 드립니다.ClientBean에 이미 로직을 실행해서 prototypeBean을 생성하고 나중에 로직을 한번 더 실행할때Provider에서 prototypeBean으로 불러오는 것과 Logic() 메서드에서 getBean()으로 prototypeBean 불러오는것 둘다 ClientBean에 있는 기존의 prototypeBean을 스프링에서 새로운 prototypeBean을 생성해서 기존꺼를 덮어쓴다고 이해하면 맞을까요?? 제가 나름대로 테스트해본결과 로직을 실행 시킬때마다 ClientBean이 가지고 있던 prototypeBean의 객체 주소값이 달라져서 제가 이해 한 내용이 맞는지 궁금합니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
전달값(Parameter) 강의에서 for문 이해가 필요합니다
안녕하세요 나도코딩님 새해복 많이받으세요!전달값(Parameter) 강의 듣고있는데public static void powerByExp(int number, int exponent) { // 전달값을 2개 받는경우 int result = 1; for (int i = 0; i < exponent; i++) { result = result * number; } System.out.println(number + " 의 " + exponent + " 승은 " + result); powerByExp(3,3); // 3 * 3 * 3 = 8여기서 for문의 사용법이 이해가 안가는데 result = result * number;3의 3승을 한다고했을때3 * 1, 3 * 3, 9 * 3는 이렇게 3번 계산하는거잖아요?그러면 이걸 출력한다고하면System.out.println(number + " 의 " + exponent + " 승은 " + result); result는 27이 나오는데 마지막 9 * 3 만 result라고 해석하는건가요?3*1, 3*3 은 왜 result 라고 해석을 안하는건가요?매소드 너무 어렵습니다.. ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
외부라이브러리 호출
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 설정정보로 등록하면 외부라이브러리에도 초기화, 종료메서드를 적용할 수 있다는 것은 이해가 되었는데요. 그 외에는 외부라이브러리에 적용할수 없다는 말이 무슨 의미인지 잘 모르겠습니다. 질문을 여럿 찾아봤는데 질문이 조금 달라서..해결이 안됬네요DB커넥션 예를 들면, 초기화, 종료 메서드를 단순히 애노테이션(@PostConstruct, @PreDestroy)이 등록된 메서드안에서 호출하면, 그 안에서 호출된 여러 라이브러리 메서드처럼 결국엔, 굳이 설정정보사용안하고도 사용할수 있다(적용할수 있다)고 볼수 있는거 아닌가라고 생각이 듭니다.제가 지금 잘못 이해한거 같긴한데, 어디 부분을 잘못 이해해서 이런 생각을 하는건지 잘 모르겠습니다.
-
미해결스프링 핵심 원리 - 기본편
싱글톤 패턴 단점이 이해가 안 갑니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링을 사용하시기 전에 순수 자바 코드로 싱글톤 생성하신 다음에 싱글톤 패턴이 가질 수 있는 단점에 대해 설명해주셨습니다.싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다. 의존관계상 클라이언트가 구체 클래스에 의존한다. private 생성자로 자식 클래스를 만들기 어렵다.이 중 1번,3번은 스프링에서 개선됨이 확실하게 보이는데 2번은 크게 달라진 점을 모르겠습니다.자바로만 싱글톤 만들었을 때 활용(SingletonService가 MemberService를 상속받았다고 가정했을 때)public class AppConfig { public MemberService memberService(){ return SingletonService.getInstance(); } }public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); MemberService memberService1 = appConfig.memberService(); // 활용 } }이렇게 만들면 의존관계상 클라이언트가 구체 클래스에 의존하지 않는 것 아닌가요?물론 다른 단점들이 다 고쳐지니 스프링을 안 쓸 이유가 없지만 DIP, OCP 개선을 중요하게 언급하신 것 같아서 넘어가기 찝찝하네요. 자바로 만들 때 DIP가 위반되는 이유가 뭔가요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
강의 보면서 공부한 내용 블로그에 작성 가능할까요?
요즘 공부한 내용 블로그에 작성하면서 공부하고 있는데 혹시 저작권같은 문제가 있을까봐 여쭤봅니다..추가로 혹시 스프링 강의 올리실 계획은 있으신지도 궁금합니다
-
해결됨스프링 핵심 원리 - 기본편
MemberApp 실행시 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.현재 m1 맥북을 사용하며 강의를 따라가고 있는데 MemberApp 클래스에서 실행시 결과가new member 와 find Member 의 = 다음으로 저렇게 나옵니다.강의에서의 실행결과가 똑같이 나오게 하려면 어떻게 해야 할까요?
-
해결됨스프링 핵심 원리 - 기본편
테스트 코드 작성 질문입니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요! 백엔드 개발자를 꿈꾸는 대학생입니다.Spring 프로젝트를 진행하면서 테스트 코드를 작성하다가 궁금한 점이 생겨서 글을 작성하게 되었습니다.질문 1.querydsl을 사용해서 업데이트를 하고 정상적으로 변경되었는지 JPA를 사용해 엔티티를 가져와서 확인할 때 1차 캐시에 값을 가져와서 예상과 다른 결과가 발생했습니다.캐시에서 값을 가져오지 않게하기 위해서 테스트 코드 내에 entityManager.clear()를 사용하였는데 테스트 코드 내에서 clear() 메소드를 사용하는 것이 안 좋은 코드인지 궁금합니다.질문 2.위의 문제를 해결하기 위해서 JPA의 dirty checking을 이용하도록 코드를 수정했습니다.제가 공부하기로는 dirty checking은 변경된 부분만 변경하지 않고 모든 필드를 수정하기 때문에 많은 쿼리를 발생시켜 성능적으로 떨어질 수 있다고 알고 있습니다.그렇다면 필드가 적을 경우에는 dirty checking을 사용해도 무방한 지와만약에 dirty checking을 지양하는 다른 이유가 있다면 어떤 이유인지 궁금합니다.질문 3.김영한 개발자님이 생각하시는 잘 작성된 테스트 코드란 무엇인가?가 너무 궁금합니다! 강의 내용과 약간? 무관한 내용인 것 같아서 죄송합니다..!
-
미해결스프링 핵심 원리 - 기본편
DL (의존관계 조회)와 DI (의존관계 주입)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]다른 질문을 참고하면서 Provider를 통해서 싱글톤 빈을 DL 하는 경우에는 싱글톤 빈이 생성되는 것이 아니라 조회된다.프로토타입은 조회할 때마다 새로 생성되는 것으로 DL은 컨테이너를 통해서 빈을 찾아온다고 생각하면 된다.를 보고 싱글톤 빈을 DL 하는 경우에 대하여 의문이 생겼는데 이 과정이 DI (의존관계 주입)과 별 차이가 없다고 느껴졌는데 (프로토타입은 새로 생성되니까 차이가 있다고 생각했습니다.) 싱글톤 빈의 경우에도 의존관계 주입을 할 때 이름이 같은 빈을 찾아서 주입한다고 배워서 조회하는 것과 차이가 없다고 생각이 들었습니다. 둘의 차이가 있는 것인가요??
-
미해결스프링 핵심 원리 - 기본편
getid()를 찾을수 없다 나옵니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]같은 질문글의 import hello.core.member.Member; 부분은 추가해도 안먹힙니다.
-
해결됨스프링 핵심 원리 - 기본편
CoreApplication 생성이 안됐어요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)build.gradle까지 했는데 CoreApplication 없어서 강의보고 CoreApplication 생성해보니 에러 뜨더라구요https://drive.google.com/file/d/1VEjp2fk8EanR4O3tORA_nKa4wWMlasFv/view?usp=sharing
-
해결됨스프링 핵심 원리 - 기본편
16:50에서 객체의 생성과 초기화를 분리하자 고 하셨는데
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]우선 객체의 생성과 초기화를 분리하자는 글엔 완전 공감합니다. 근데 동시에 궁금한 점도 몇개 생겼습니다외부에서 접근가능한 setter를 계속 열어주어야 하는데 괜찮나요?생성하고자 하는 객체의 인스턴스 변수에 final 못 붙이지 않나요?@Component일 경우 final 못쓰니 @RequiredArgsConstructor 적용 못하는 문제도 있을 거 같아요
-
미해결스프링 핵심 원리 - 기본편
OrderApp 테스트
OrderApp 클래스 만들고 실행하면이렇게 뜨는데 뭐가 잘못된 걸까요?? MemberApp에선 잘 동작했는데 ㅠㅠ 코드 다 지우고 다시 따라쳤는데도 안되네요
-
미해결그림으로 배우는 자바, 파트2: 객체지향!
강의 정리 내용
안녕하세요 ! 쌤 덕분에 자바를 쉽게 이해하면서 공부하고 있습니다!다름이 아니라, 강의에서 중요한 부분을 블로그에 정리하고 싶은데 강의가 유료다보니 블로그에 공개 게시글로 올리는건 무리겠죠?
-
해결됨스프링 핵심 원리 - 기본편
싱글톤 컨테이너 자료 오타
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 강의를 시청하는 중 오타가 발견되어 게시판에 글 남깁니다.제공해주신 자료 '5.싱글톤 컨테이너' 3page 코드에 달린 주석 부분2. public으로 열어서 객체 인스터스 ~인스터스 -> 인스턴스가 맞다고 생각합니다.
-
미해결스프링 핵심 원리 - 기본편
복습방법 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요! 항상 친절한 답변 감사드립니다.스프링핵심원리 기본편을 수강완료 했는데요. 다음강의인 http강의를 바로 들어야할지 아니면 다시 기본편 복습을 해야할지 질문드립니다. 복습을 하게된다면 강의를 들으면서 코딩했던 코드들을 전부 날리고 다시 처음부터 코딩하는게 나을까요? 아니면 강의자료만 빠르게 훑고 http강의로 넘어가는게 나을까요?? 물론 사람마다 다르겠지만 어떻게 하는걸 추천하시는지 질문드립니다!
-
미해결스프링 핵심 원리 - 기본편
request scope bean 생성시점
안녕하세요!https://www.inflearn.com/questions/501975 비슷한 내용이 있지만 이해가 되지않아서 질문드립니다.앞서 request빈은 http요청이 오는시점에 생성되는것으로 알고있었는데요.그래서 " 코드에 Provider를 사용하게되면 DI가 일어나는 시점에 일단 의존관계주입으로 주입되는 구현체는 DependencyObjectProvider객체이다. Provider를 사용하게되면 http요청이 오는 시점에 스프링컨테이너에 MyLogger빈을 등록하고나서 나중에 getObject()로 request빈을 가져오는것이다. "이렇게 되는건줄 알았는데,강의에서는 ObjectProvider.getObject()를 호출하는 시점까지 request scope bean의 생성을 지연한다고 설명해주셨는데 그럼 Provider를 사용하면, http요청이 오는시점에 request scope bean이 생성되는것이 아니라, ObjectProvider.getObject()를 호출하는 시점에request scope bean이 스프링컨테이너에 생성되는건가요??
-
미해결스프링 핵심 원리 - 기본편
제가 이해한바가 맞을까요.. ?
이해가 안되서 강의를 돌려보다가 따로 정리해봤는데,1번. CoreApplication의 main메서드를 실행시키면 현재로서는 에러가 나는게 맞지만, 동작순서만 보자면 CoreApplication의 main메서드를 실행시키면 실행될때 스프링컨테이너가 생성되고 컴포넌트스캔이 되서 @Controller, @Service에 의해 각각LogDemoController, LogDemoService 빈 등록이 일어난다.그리고 또, main메서드가 실행되고있는동안(런타임동안=프로그램이 실행되고있는동안) DI가 일어난다. 그리고나서 고객이 localhost:8080/log-demo로 url을 입력하면 http요청이 들어온것이므로 이때 컴포넌트 스캔이되서 @Component에 의해 자동으로 MyLogger빈이 등록되고 초기화메소드가 실행된다. 그러고난후 @RequestMapping("log-demo")로 되어있으므로 logDemo()메소드를 실행하고, return "OK"로 응답을 준 후에 종료 메소드가 실행된다. 2번. 오류가 나는 이유를 3가지로 정리해봤는데 어떤게 더 적절한 이유일까요..?코드가 오류나는 이유는 런타임동안에 DI를 해야되는데 MyLogger가 request빈인데, 아직 http요청이 오지않아서, MyLogger빈이 생성되지않았고 그래서 의존관계주입이 안되니 오류나는것이다.요청이 들어오지않은 상태에서 DI를 하려니 오류가 발생하는거고, main메서드를 실행하고나서 요청이 오더라도 DI를하는시점에는 MyLogger빈이 스프링컨테이너에 없어서 오류나는것이다.스코프 리퀘스트를 붙이면 요청이 들어오는 시점에 빈이 생성되는데 요청이 들어오질않았으니 빈이없고, 없는 빈을 di하려해서 오류가 나는것이다. 이렇게 이해하면 될까요 ..?
-
미해결스프링 핵심 원리 - 기본편
필드주입이 되는 시점에 대해 질문드립니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의를 듣다가 필드주입이 언제 발생하는지에 대해 궁금한점이 있어서 질문드립니다.예를들면, 이 코드에서 필드주입이 있고, 디버깅을 해봤는데 필드주입을 통해 주입되는 구현체는 AnnotationConfigApplicationContext객체라는것을 확인했습니다. 근데 궁금한건 이 필드 주입이 되는 시점이 언제인지 궁금해서 질문드립니다. AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ClientBean.class, PrototypeBean.class); 코드에 의해 ClientBean이 스프링빈으로 등록되고나서 필드주입이 발생하는건지 아니면 스프링빈으로 등록되는과정속에서 필드주입이 발생하는건지 질문드립니다.
-
미해결스프링 핵심 원리 - 기본편
주입 이후 초기화 함수 호출
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 강의를 듣다가 앞에 배운 부분과 충돌하는 부분이 있는 것 같이 질문을 남깁니다![8. 빈 생명주기 콜백]의 강의에서 초기화 메서드는 주입 완료 후에 적절히 호출된다는 내용을 배웠습니다. 강의노트 8장 3페이지에도 나온 내용입니다.따라서 hello.core.lifecycle 패키지의 NetworkClient에서는 setUrl로 url이 주입된 이후에 init( ) 메서드가 호출되었습니다.하지만 9장에서 hello.core.common 패키지의 MyLogger에서 soutm으로 메서드 로그를 출력해보니 init( ) 메서드가 먼저 호출되고 이후 setRequestUrl 메서드로 url이 주입되었습니다.주입(set메서드) 이후에 초기화 함수가 호출되는게 아닌가요?강의에서는 그렇게 배운 것 같은데MyLogger에서는 그 반대가 되니 어떤게 맞는건지 모르겠습니다.긴 글 읽어주셔서 감사합니다 :)
-
해결됨스프링 핵심 원리 - 기본편
궁금한 게 있는데요.
후반부에 좀 이해가 안 가는 게 있어서 복습 겸 앞부분 보고 있습니다. 그런데 분명 멤버 리포지토리와 멤버 서비스의 저장요소는 결국 save와 join이 담당을 하게 되는 건데, 굳이 이름을 join이라고 한 이유가 있나요? 사실 save라고 해도 잘 동작을 하는데, 굳이 이름을 join으로 바꿔서 한 이유가 무엇인가요? 사실 초반에 그것때문에 굉장히 햇갈렸거든요. 이제 와서 궁금증이 생겨서 질문드립니다.