묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결백엔드 프레임워크 만들기 (개정판)
인텔리제이 컴파일 에러
C:\public\code5\inflearn08\src_biz\com\biz\board\Board_test.java:3:17 java: package org.junit does not exist C:\public\code5\inflearn08\src_biz\com\biz\board\Board_test.java:17:6 java: cannot find symbol symbol: class Test location: class com.biz.board.Board_test 어떻게 해야되는 건가요?
-
해결됨스프링 핵심 원리 - 기본편
request 스코프 빈의 HTTP request 구분 질문
안녕하세요. 매번 좋은 강의 잘 듣고 있습니다. request 스코프의 "요청" 구분에 관한 질문이 있어 글 남깁니다. 1. HTTP request 요청이 다른지는 어떻게 판단하나요? 2. 같은 클라이언트가 같은 endpoint(URI)의 요청을 두 번 하였을 경우에도 각각 다른 요청으로 처리되나요?
-
해결됨스프링 핵심 원리 - 기본편
프로토타입 빈에 대한 질문
안녕하세요. 프로토타입 스코프 강의를 듣던 중 궁금점이 생겨 질문 드립니다. 1. 프로토타입 빈의 필요성에 대한 질문 프로토타입 빈은 스프링 컨테이너에서 요청 시마다 새롭게 생성되어 반환된다고 하였습니다. 그렇다면 굳이 스프링 컨테이너에서 관리할 필요가 있나요? 순수 자바코드로도 충분히 가능한 것 아닐까요? 2. 프로토타입 빈의 "관리"에 대한 질문 스프링 컨테이너에서 빈을 생성, 의존관계 주입만 처리하고 이후 관리하지 않는다고 하였는데, 여기서 말하는 '관리'에 해당하는 내용은 어떤 것들이 있는지(정확히는 빈 종료 외에도 다른 항목이 있는지) 궁금합니다. 또한 스프링 컨테이너가 종료될 때 싱글톤타입 빈과는 달리, 프로토타입 빈은 종료되지 않는 건가요?
-
해결됨스프링 핵심 원리 - 기본편
할인 정책을 동시에 적용하고 싶은 경우 AppConfig 설정 방법
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 안녕하세요 객체지향 개발에 관심이 생겨 공부중인 개발자 입니다. 좋은 강의 잘 듣고 있습니다. 한번에 하나의 할인 정책을 적용하는 경우는 AppConfig에서 지정을 해주면 되는데 만약 동시에 두 개 이상의 할인 정책을 적용하는 경우 어떤 방법으로 구현하면 좋을지 궁금해서 질문드립니다. 1. 현재 적용하고 있는 할인 정책이 하나인 경우 아래와 같이 AppConfig에서 제어흐름을 담당하면서 어떤 할인 정책을 적용할지 결정을 한다는 점은 이해했습니다. public DiscountPolicy discountPolicy() { // return new FixDiscountPolicy(); return new RateDiscountPolicy(); } 2. 할인 정책을 모두(정액, 정률) 사용하고 싶은 경우 예를 들어 할인 정책을 적용할 수 있는 쿠폰이 정액, 정률 두 개가 동시에 존재한다고 했을 때 클라이언트의 변경 없이(OCP) 할인정책을 적용하고 싶다면 AppConfig 에서 `discountPolicy()` 메소드를 호출할 때 정률 할인 쿠폰인 경우 `new RateDiscountPolicy()`를 리턴해야하고 정액 할인 쿠폰인 경우 `new FixDiscountPolicy()`를 리턴해줘야 합니다. 2-1. AppConfig 를 인터페이스로 변경하고 구현체를 별도로 생성 public class FixDiscountAppConfig implements AppConfig { … } public class RateDiscountAppConfig implements AppConfig { … } // OrderApp AppConfig appConfig; if (“정률할인 쿠폰”) { appConfig = new RateDiscountAppConfig(); } else If (“정액할인 쿠폰”) { appConfig = new FixDiscountAppConfig(); } AppConfig appConfig = new AppConfig(); MemberService memberService = appConfig.memberService(); OrderService orderService = appConfig.orderService(); 2.2 AppConfig 내 discountPolicy 메소드 호출 시 파라미터를 넘겨 구분 public DiscountPolicy discountPolicy(String 할인정책) { if (“정액”.equals(할인정책)) { return new FixDiscountPolicy(); } else { return new RateDiscountPolicy(); } } 한번에 하나의 정책을 적용하는 것보단 동시에 여러 정책을 적용하는 경우가 더 많을 것 같다고 생각이 들었습니다. 이 경우에는 어떤 방식으로 구현하는게 좋은 객체 지향원칙을 지키며 구현하는 것일지 조언을 구하고자 합니다.
-
미해결스프링 핵심 원리 - 기본편
IntelliJ 자동완성 관련
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? 네[질문 내용]스프링으로 전환하기 4:05 구간을 보시면 applicationContext.getBean(~)에 Bean 이름을 입력하십니다. 신기하게도 텍스트일 뿐인데 IntelliJ가 추정해서 Bean 이름을 제안해주네요. 제 IntelliJ는 자동완성이 안되는데 따로 설정법이 있나요? 구글링을 해봐도 해당 내용을 찾기 어렵군요. IntelliJ IDEA 최신 버전을 사용 중입니다.
-
미해결스프링 핵심 원리 - 기본편
@Qualifer 적용과 Annotation 상속, 생존주기에 관한 질문
안녕하세요!! 다른 분 질문의 답변을 보고 헷갈려서 질문드립니다. https://www.inflearn.com/questions/275260 위 질문의 답변에서 @Qualifier 만 사용해도 된다는 답변을 보고 그대로 실행해봤지만 여전히 컴포넌트스캔 과정에서 NoUnique ~ 예외가 나는것을 확인했습니다. 그래서 실험해본 결과 아래와 같이 @Retention 을 지정해야 컴포넌트 스캔에 성공하는 것을 확인했습니다. 조금 알아보니까 @Retention 을 지정하지 않을경우 생존주기가 CLASS로 설정된다는 것을 알았습니다. 그래서 @Retention 을 RUNTIME으로 지정해주지 않으면 컴포넌트 스캔은 런타임에 일어나기 때문에 @MainDiscountPolicy 어노테이션이 런타임에는 이미 누락되어 @Qualifier("mainDiscountPolicy") 에 도달 하지 못하는게 아닐까 하는 생각하게 되었습니다.(@Qualifier 에 Retention이RUNTIME으로 지정 되어있어도 애초에 도달하지 못함) 이 같은 제 생각에 틀린 부분이 있는지, 아니면 혹시 질문에 대한 답변을 잘못 이해한 것인지 궁금하여 질문드립니다!!
-
미해결스프링 핵심 원리 - 기본편
스프링 컨테이너?
스프링 컨테이너가 이전시간에 설명해 주신 DI컨테이너랑 같은 용어인가요? 즉 IoC 컨테이너 = DI 컨테이너 = 스프링 컨테이너 인가요?
-
미해결스프링 핵심 원리 - 기본편
로드맵에 관련해서 질문드립니다
강의를 수강하다가 시험이랑 겹쳐 내용을 많이 까먹은 것 같아서 처음부터 다시 보려고 합니다! 스프링 입문 - 코드로 배우는 스프링 부트 > 웹 MVC, DB 접근 기술 > 스프링 핵심 원리 - 기본편 > 모든 개발자를 위한 HTTP 웹 기본 지식 > 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 > 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 > 스프링 핵심 원리 - 고급편 순서로 수강한 후 김영한의 스프링 부트와 JPA 실무 완전 정복 로드맵의 야생편을 따라가면 될까요?
-
해결됨스프링 핵심 원리 - 기본편
DiscountPolicy 설계 관련 질문입니다.
안녕하세요. DiscountPolicy 설계 관련하여 질문드립니다. 해당 클래스 내 discount 메서드에서, 할인된 금액(= 할인 정책 적용 후 총 금액)이 아닌 할인 대상 금액(= 깎아준 금액)을 리턴하는 이유가 궁금합니다. 정액 할인 정책을 고려하고 있기 때문에 이를 쉽게 확인하기 위해 할인 대상 금액을 리턴한다고 보면 될까요? 할인 자체만 놓고 본다면 할인 후 총액을 사용하는 경우가 더 많지 않나, 해서 여쭤봅니다.
-
미해결스프링 핵심 원리 - 기본편
.class 가 정확히 뭔가요?
getBean 함수를 호출할때 name과 xxxService.class를 인자로 넘기는데 여기서 .class는 정확히 뭔지 알 수 있을까요? 객체 인스턴스인가요 아니면 클래스 타입인가요?
-
해결됨스프링 핵심 원리 - 기본편
생성자 주입에 관하여 질문드립니다!
좋은 강의 항상 감사드립니다! ^^다양한 의존관계 주입 방법 부분의 강의를 듣던 중 궁금한 점이 있어 질문 드립니다. OrderServiceImpl 객체를 생성하여 스프링 빈으로 등록하는 과정에서 궁금한 점이 있습니다. 우선 OrderServiceImpl을 스프링 빈으로 등록하기 전 OrderServiceImpl 객체를 생성하기 위해 아래와 같이 생성자를 호출하게 되고 -> new OrderServiceImpl(memberRepository, discountPolicy); 이 과정에서 생성자의 파라미터로 들어온 객체의 스프링 빈을 찾아와 OrderServiceImpl을 생성한다고 하셨습니다. 강의의 12:40 부분에서 memberRepository와 discountPolicy가 생성이 되어 있지 않다면 스프링이 생성을 한 후 가져온다고 하셨습니다. 저는 위 말씀을 생성자 주입 시 생성자의 파라미터로 들어온 객체가 스프링 빈으로 등록되어 있지 않다면 스프링이 그 객체도 자동으로 스프링 빈으로 등록한다고 이해를 하였습니다. 따라서 new OrderServiceImpl(memberRepository, discountPolicy); 코드 실행 시 만약 memberRepository와 discountPolicy가 스프링 빈으로 등록되어 있지 않아도 1. 먼저 스프링이 memberRepository와 discountPolicy를 스프링 빈으로 등록한 후2. OrderServiceImpl의 스프링 빈 등록과 의존 관계 주입이 동시에 일어난다고 이해하였습니다. 하지만 생성자 주입 사용 시 생성자의 파라미터로 들어오는 객체가 스프링 빈으로 등록되어 있지 않을 경우 NoSuchBeanDefinitionException 예외와 UnsatisfiedDependencyException 예외가 발생하였고, 제가 이해한 부분이 틀린 건지 헷갈려서 질문을 남기게 되었습니다. Q1. 12:40 부분에서 하신 말씀에서 memberRepository와 discountPolicy가 생성이 되어 있지 않다는 뜻이 '스프링 빈으로 등록되어 있지 않다'는 뜻이 아닌 건가요? Q2. memberRepository와 discountPolicy가 생성이 되어 있지 않아 스프링이 생성을 한 후 가져온다는 뜻이 '생성자의 파라미터로 들어온 객체를 스프링 빈으로 생성하여 가져온다'는 뜻이 아닌 건가요?
-
미해결모든 개발자의 실무를 위한 올인원 기본기 클래스
amend commit 질문
amend commit 실행하고 insert로 바꿨는데 수정모드 끄는건 어떻게하는건가요 나와지질않네요 insert랑 replace 상태여서 :wq를 입력못하고있습니다 ㅠ insert에서 못벗어나서 종료하고 reset하고 다시 했는데 아예 amend commit이 안되네요.. E325: ATTENTION Found a swap file by the name "C:/Users/user/PycharmProjects/git-tes/.git/.COMMIT_EDITMSG.swp" owned by: user dated: Thu Dec 30 09:41:32 2021 file name: ~user/PycharmProjects/git-tes/.git/COMMIT_EDITMSG modified: YES user name: user host name: DESKTOP-C2BR6PG process ID: 1916 While opening file "C:/Users/user/PycharmProjects/git-tes/.git/COMMIT_EDITMSG" dated: Thu Dec 30 10:00:55 2021 -- More --
-
미해결모든 개발자의 실무를 위한 올인원 기본기 클래스
revert 오류
이런 상태에서 git revert하면 아래처럼 오류가뜹니다. $ git revert 7a6a52c error: Your local changes to the following files would be overwritten by merge: a Please commit your changes or stash them before you merge. Aborting fatal: revert failed a가 merge가 되있어서 revert가 안된다는뜻인가요?
-
미해결스프링 핵심 원리 - 기본편
흐름이 이렇게 흘러가는게 맞나요?
1.컨테이너 생성 2.스프링 빈 생성 3.의존관계 주입 4.초기화 콜백 이렇게 완료가 되는걸로 알고있습니다. @Bean public NetworkClient networkClient() { NetworkClient networkClient = new NetworkClient(); networkClient.setUrl("http://hello-spring.dev"); return networkClient; } 이때 LifeCycleConfig.class에 있는 빈 정보들을 바탕으로 빈 생성하고 의존관계주입등을 하는걸로 알고있는데 여기서 질문이 스프링 컨테이너에 있는 빈은 return networkClient; 즉 리턴된 객체를 뜻하는건가요? 다음 질문은 NetworkClient networkClient = new NetworkClient(); 했을때 생성자가 호출이 되고 public NetworkClient() { System.out.println("생성자 호출, url = " + url); } 값주입?? 이 일어난후 networkClient.setUrl("http://hello-spring.dev"); 초기화 콜백이 일어나는거 같은데 맞나요?? @PostConstruct public void init() { System.out.println("NetworkClient.init"); connect(); call("초기화 연결 메시지"); }
-
미해결스프링 핵심 원리 - 기본편
취준생 방향 좀 한번 봐주시면 감사하겠습니다!
안녕하세요! 올려주신 강의 감사히 잘 듣고 있습니다. 현재 저는 HTTP -> MVC1 -> 스프링 입문 -> 스프링 핵심(기본) 까지 들은 상태입니다. 그리고 앞으로 제 계획은 MVC2 -> JPA활용1 -> 표준JPA -> JPA활용1 -> JPA활용2 -> 토이프로젝트 -> 스프링 핵심(고급) 순서로 인강을 듣고 스프링 데이터JPA, Querydsl은 여유가 된다면 추가적으로 학습하려하고 있습니다. 혹시 학습 순서를 바꾸면 좋겠다 싶은 부분이 있으시면 말씀해주시면 정말 감사하겠습니다! 추가적으로 다른 질문에 답변 해주신 글을 보니 기본적인 DB 지식이나 mysql 공부는 따로 해야 된다고 하셨는데 그럼 이 부분은 JPA를 들어가기 전에 공부를 하는 것이 좋을까요??
-
미해결스프링 핵심 원리 - 기본편
싱글톤과 멀티스레드 질문
안녕하세요. 질문드리겠습니다. 멀티스레딩 환경에서 싱글톤 객체를 사용해 요청들을 처리하기 위해서는 stateless한 설계를 해야한다는 내용 잘 이해됐습니다. 이 stateless와 직접 연관되는 부분은 아닌 것으로 보이지만.. 싱글톤 멀티스레딩 관련 궁금증이 생겨 질문을 남깁니다. 싱글톤으로 생성된 Controller, Service등의 객체에서도 객체를 생성하는 경우가 있을 것입니다. ex) PointAccmlParam (포인트 적립에 필요한 속성들을 전달할 객체) 이 또한 객체이기 때문에 heap 영역에 저장될 것이고 멀티스레딩 환경에서 heap은 공유 영역입니다. 물론 각 인스턴스의 참조값이 다르니 엉뚱한 객체의 값을 사용하게 될 경우는 없겠습니다만.. 이러한 경우에는 싱글톤의 객체 생성 제한이란 장점이 사라져버리게 되지 않을까? 하는 생각이 듭니다. 기껏 Controller, Service를 싱글톤으로 잘 설계해봤자.. 그녀석들이 저렇게 request별로 각각의 param객체를 생성해버린다면.. 앞서 Controller, Service를 굳이 싱글톤으로 설계한 의미가 없어지는 것 아닌가 싶습니다. 이 부분에 대한 해결책이 있을까요? Param 객체도 싱글톤을 적용시키면서 엉뚱한 참조가 일어나지 않게 하는 마법같은 방법이라던가 하는 것이요. 아니면.. 그냥 Param 객체는 어쩔 수 없는 부분이고, 객체 생성을 줄일 수 있는 곳에서라도 줄이기 위해서 Controller, Service만이라도 싱글톤으로 가져간다. 라고 생각하고 넘어가야 할까요?? 답변 부탁드립니다. 감사합니다!
-
미해결모든 개발자의 실무를 위한 올인원 기본기 클래스
8분 19초에 gst는 왜치는건가요?
gst 치는이유 알고싶습니다.
-
미해결모든 개발자의 실무를 위한 올인원 기본기 클래스
git init 오류
0 git init 부터 막혔는데 해결법 계속 찾고 있는데 뭐가 문제일까요..? git : 'git' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오. 위치 줄:1 문자:1 + git init + ~~~
-
미해결스프링 핵심 원리 - 기본편
MemberService를 인터페이스와 구현 클래스로 나눈 이유가 궁금합니다.
제목 그대로 MemberService를 인터페이스와 구현 클래스(MemberServiceImpl)로 나눈 이유가 궁금합니다. 실무에서 Service 객체를 여러 개 두고 바꿔 끼우는 경우가 있나요? 있다면 어떤 상황이 있는지 예를 들어 주시면 좋을 것 같습니다:)
-
미해결스프링 핵심 원리 - 기본편
싱글톤 방식의 주의점 강의의 질문입니다.
강의를 듣고 스프링 프레임워크에 의하여 생성되든 사용자가 Java 코드를 이용해 생성하든 Singleton 방식으로 구현된 객체는 1개의 객체가 여러 곳에서 재사용하기 때문에 무상태(stateless) 형태로 설계해야 한다는 것을 잘 알게 되었습니다. 강의에서도 예시를 들어주시면서 Class 내 Member 변수가 아닌 Method 내 지역 변수로만 값을 핸들링하며 return 시켜주시며 무상태(stateless)의 적절한 구현방법을 설명해주셨는데요. 한가지 의문이 들었습니다. 만약 Singleton 객체 내부에 선언된 공유 가능한 변수(강의 내에서는 Class의 Member 변수)에 상태값이 남을 수 있다면 함수도 Singleton 형태로 사용되는 것인가요? 만약 객체의 무상태(stateless)만 신경쓰고 개발하다가 아주 짧은 시간 내에 Singleton 객체 내부에 있는 A라는 함수에 동시다발적으로 호출이 몰리게 되면 A 함수 내부에 선언된 지역변수도 공유될 가능성이 존재하는 것인가요?