묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
생성자 주입 방법과 setter 주입 방법에 대한 질문
생성자 주입 방법은 필수, 변경 가능성이 없는 경우에 사용된다고 하셨고, setter 주입 방법은 선택, 변경 가능성이 있는 경우에 사용된다고 하셨습니다. 여기에서 '필수/선택'과 '변경 가능성'이 무슨 뜻인지 잘 모르겠습니다. 좀 더 상세한 설명 부탁드립니다.
-
미해결스프링 핵심 원리 - 기본편
getBean() 파라미터 값 질문
파라미터 값으로 (빈 이름, 타입)이나 (타입)을 받는다고 설명하셨는데, 예제에서는 getBean(beanDefinitionName)으로 빈 이름만 들어온 거 같습니다. 파라미터 값으로 (빈 이름)만 올 수 있는 건가요?
-
미해결스프링 핵심 원리 - 기본편
핵심원리까지 완강 후 방향에 대해 의견 여쭙니다
안녕하세요 강사님! 학원에서는 스프링 원리에 대해서는 안알려주고 무작정 이렇게 코드 짜는거다라고 알려줘서 너무 답답했었는데 강사님 강의를 듣고 속이 뻥~! 뚫렸습니다! 이론강의를 정말 안좋아하는데 강사님 수업은 너무 재밌고 다음 내용이 궁금해서 밤새가면서 봤네요 :D (입문 강의 때는 완전히 이해가 안가더라도 일단 입문을 학습하는게 좋다는 강사님 말만 믿고 따라했더니 정말 되더라구요) 핵심원리 수업을 듣고나서 스프링이 이런거구나 이래서 이 코드를 작성했던거구나 하고 이해는 가는데 다른 사람에게 설명하라고 하면 그정도 실력은 안되는 것 같아 고민입니다. 이걸 어떻게 활용을 해야할지도 문제구요. 사실 제가 학원에서 배웠던 스프링이랑 비슷하면서도 굉장히 다르다는 생각을 합니다. 현재 상황에서 HTTP와 MVC를 듣고 JPA 로드맵으로 넘어갈 지, 핵심원리를 한번 더 복습하고 핵심원리에 대해 완전히 익히고 넘어가야할 지 정말 고민이 됩니다. 이후 강의를 듣다보면 이번 강의에서 놓친 부분들까지 체계를 잡게 될지가 의문스러운 것 같습니다. 어떻게 해야할까요?
-
미해결스프링 핵심 원리 - 기본편
자동등록과 수동 등록의 공존
안녕하십니까 강사님!! 수업 너무 재밌게 잘 듣고있습니다! 수업을 듣다 궁금한점이 생겨 질문 남깁니다. 요번 강의에서 예시코드로 DiscountPolicyConfig 클래스를 만들고 수동으로 Bean에 주입이 되었는데요, 이때 자동 등록하는 Configuration가 discountPolicyConfig의 Configuration까지 bean으로 주입해버릴 것 같은데, 이 부분은 어떻게 해결할 수 있을까요? 이전에 배운 excludeFilters를 사용하면 Configuration이 있는 모든 클래스의 의존성 주입을 막게돼서 discountPolicyConfig에서 수동으로 주입하는 메서드들이 작동하지 않을것 같네요... 배웠던 것 같기도한데, 헷갈리는 부분이 있어 질문 드립니다!! 항상 좋은 강의 감사합니다 :)
-
미해결홍정모의 게임 만들기 연습 문제 패키지
랜덤값 질문입니다.
글 작성이 제대로 안되서, 코드에 대한 설명이 미흡할 수 있는 점 미리 양해구합니다.ㅠㅠ 저는 집 색깔을 랜덤으로 정할 때, 기본값이 미리 정해져 있는 상태에서 사용자가 특정 부분만 색깔을 랜덤으로 돌릴 수 있도록 함수를 작성했습니다. 아래와 같은 두가지 함수를 실험삼아 해봤는데요. 첫번째 함수는 랜덤값을 불러오는 헤더를 외부에서 매개변수로 가져오고 두번째는 함수 안에다가 선언했습니다. 그런데, 두번째 함수는 랜덤값이 다 같게 적용이 되더군요. 분명 랜덤값은 _rnd.getInt(0,6);에서 가져올텐데 왜 두개의 함수의 결과가 다른지 이해가 가지 않습니다.ㅠㅠ 제가 분명 기본이 부족한 거일 수도 있겠지만, 인터넷 검색으로도 썩 답변이 안되어 질문글 올립니다. 감사합니다.
-
해결됨스프링 핵심 원리 - 기본편
MemberService 인터페이스 구현 이유
영한선생님 궁금한게 있습니다. MemberRepository는 메모리에도 저장할 수 있고, 디비에도 저장할 수 있기에 인터페이스로 구현 후에 구체화 하여 클래스를 구현하는 것 까지는 이해가 되는데 MemberService는 왜 따로 인터페이스를 구현했고 , MemberserviceImpl이라는 구현 클래스를 만들었는지 알려 주시면 감사하겠습니다.
-
해결됨스프링 핵심 원리 - 기본편
ApplicationContext 질문드립니다
안녕하세요 MVC 강의를 보다가 복습하러 왔는데 오늘 하루종일 검색하고 찾아봐도 이해가 가지 않아서 질문드립니다 핵심원리 강의에서 ApplicationContext가 스프링 컨테이너라고 설명을 해 주셨고 이후 강의에서 ApplicationContext ac =new AnnotationConfigApplicationContext(클래스명); 이 문장을 사용해 스프링 컨테이너 생성 후 매개변수값의 클래스에 있는 에노테이션 기반의 빈을 등록하면 싱글톤이나 의존관계 주입 관리를 할 수 있는것으로 이해하였는데요, 앞선 입문 강의나 이후 mvc강의에서는 해당 스프링 컨테이너 생성문장 없이 @Component나 Controller등의 에노테이션만 붙이면 스프링 컨테이너 없이 빈이 등록되는데 여기서 이해가 되지 않습니다. 톰캣 서버의 서블릿 컨테이너가 해당 역할을 하는것인가요..? 어디서 잘못 이해한것인지 모르겠습니다 ㅠㅠ..
-
미해결스프링 핵심 원리 - 기본편
다이어그램 어떤 툴로 그리시나요
안녕하세요 영한님! 공부와는 상관없는 내용이긴 하나 궁금해서 여쭤봅니다. 다이어그램은 어떤 툴을 사용해서 그리시나요??
-
미해결스프링 핵심 원리 - 기본편
안녕하세요 여쭤볼게있어 질문드려요
안녕하세요 Jpa부터 시작해서 강의 잘보고있습니당! 좋은 강의 항상 감사드려요! 다름이아니라 우리나라 si기업에서는 대부분 spring 부트를 사용하지 않고 spring legacy 프로젝트로 일을 한다고 하더라고요... 저는 spring boot 가 너무 좋고 spring 의 다양한 기능들을 사용하기 위해서는 spring boot 가 최적이란 것또한 이해 하였는데 왜 우리나라 많은 si 에서는 왜 서버띄우기도 느린 외장 톰캣을 쓰며, 복잡한 xml 설정들을 다 잡아줘야하는 spring legacy를 사용하는지 이해가 안되더라고요.. 혹시 spring boot 가 spring legacy 에 비해 단점이 존재할까요? 예를 들면 혹시 성능상 어떤것이 안돌아간다던가... 큰 규모의 프로젝트에서는 한계가 있다거나...혹시 spring boot 의 단점이 있나요?
-
해결됨스프링 핵심 원리 - 기본편
컨테이너를 통한 싱글톤에 대한 의문
아랫분들도 비슷한 질문을 해주셨는데, 그에 대한 답변이 제대로 이해가 안가서 다시한번 질문드립니다. ==============>질문을 드리는 과정에서 제가 이해한 내용이 있는데 이해한 내용이 맞는지 확인부탁드립니다! 제가 지금까지 수강들은 내용을 적자면 @Configuration 을 통해 컨테이너에 저장되면 같은 클래스에 대해 싱글톤이 유지 된다고 이해하였습니다. 그런데 제가 예제를 다시 돌아보면서 의문이 생겨 질문 기존 AppConfig에서 @Configuration을 주석을 하였습니다. //@Configurationpublic class AppConfig { @Bean public MemberService memberService() { System.out.println("call AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { System.out.println("call AppConfig.orderService"); return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean public MemberRepository memberRepository() { System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy() { return new RateDiscountPolicy(); }} 이후 테스트 코드에서 두개의 객체를 생성해 값을 확인해보았습니다. #1번테스트 @Test void springContainer(){ ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); //1. 조회 : 호출할 때 마다 객체 생성 MemberServiceImpl memberService1 = ac.getBean("memberService", MemberServiceImpl.class); //2. 조회 : 호출할 때 마다 객체 생성 MemberServiceImpl memberService2 = ac.getBean("memberService",MemberServiceImpl.class); //참조값이 같은 것 확인 System.out.println("memberService1 = " + memberService1); System.out.println("memberService2 = " + memberService2);// assertThat(memberService1).isSameAs(memberService2); } 테스트 결과 두 개의 객체 memberService1과 memberService2의 참조값이 같다는걸 확인했습니다. 저는 이 결과를 보고 @Configuration이 없이 싱글톤이 유지되어 의문이 생겼습니다. @Configuration을 여전히 주석한 상태로 다른 테스트인 #2번테스트 @Test void configurationTest(){ ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); MemberServiceImpl memberService = ac.getBean("memberService", MemberServiceImpl.class); OrderServiceImpl orderService = ac.getBean("orderService", OrderServiceImpl.class); MemberRepository memberRepository = ac.getBean("memberRepository", MemberRepository.class); MemberRepository memberRepository1 = memberService.getMemberRepository(); MemberRepository memberRepository2 = orderService.getMemberRepository(); System.out.println("memberService -> memberRepository1 = " + memberRepository1); System.out.println("orderService -> memberRepository2 = " + memberRepository2); System.out.println("memberRepository = " + memberRepository);// assertThat(memberService.getMemberRepository()).isSameAs(memberRepository);// assertThat(orderService.getMemberRepository()).isSameAs(memberRepository); } 이 코드의 결과를 확인해보니 세개의 객체 memberRepository가 모두 다른 참조값을 가지고 있음을 확인했습니다. 그리고 다시 AppConfig.class에 @Configuration의 주석을 해제 후 같은 참조값을 가진것을 확인했습니다. 질문을 드리면서 제가 깨달은 내용은 #1번테스트와 #2번테스트 의 차이는 1번 테스트는 스프링컨테이너에 MemberService가 하나만 등록되었기 때문에 여러개를 생성해서 같은 참조값을 가지게 된거고 2번 테스트는 스프링컨테이너에 MemberRepository가 3가지의 객체로 저장되었기 때문에 3가지의 객체 모두 다른 참조값을 가지게 된거다. 따라서 @Configuration을 통해 스프링컨테이너에 MemberRepository를 싱글톤형태로 하나만 남게 된 것. 제가 이해한 내용이 맞나요? 제가 이해한 내용이 맞다면 제가 지금껏 잘못 생각한 내용은 @Configuration 이 없이 스프링컨테이너에 등록하게 되면 싱글톤 유지를 하지 못하는것은 맞는데 싱글톤의 범위(?)를 제가 잘못 이해하고 있었던 것 같습니다. 그냥 혼자 이해하고 말까라고 생각했다가 확인을 받고, 저랑 비슷하게 이해하셨던 분들이 있으신거 같아서 글 올립니다! 감사합니다!
-
해결됨스프링 핵심 원리 - 기본편
BeanB.class 는 애초에 스캔 안되는거 아닌가요?
안녕하세요. 질문드립니다. 강의를 내용의 예제를 확인해보면 @Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface MyExcludeCompnent {} 형태로 어노테이션 MyExcludeComponent를 생성하고 @MyExcludeComponentpublic class BeanB {} class BeanB가 어노테이션을 받았는데 @ComponentScan( includeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class), excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class)) MyExcludeComponent 를 exclude하고 ComponentScan을 하였는데 애초에 ComponentScan 대상에 @MyExcludeComponent 는 없지 않나요? 단순히 사용방법을 위해서 저렇게 진행하신건지 궁금합니다!
-
미해결자바스크립트 비기너: 튼튼한 기본 만들기
lastIndexOf 코드 2번째 parameter 질문
lastIndexOf 2번째 parameter의 값이 0보다 작을 경우 무조건 -1을 반환한다는 것처럼 기술이 되어있어서 그런줄 알았는데 lastIndexOf도 indexOf처럼 두번째 parameter 값이 음수가 되면 0부터 검색한다는 개념으로 만약 value[0]에 1번째 parameter에 입력한 값이 존재 한다면 0으로 출력이 되는 부분이 있는 것 같습니다 이게 맞나요?
-
미해결스프링 핵심 원리 - 기본편
질문이 있어요
Client 에서 prototypeBean을 생성하고 의존관계를 주입하면, client 구현체가 prototypeBean의 메모리 주소를 가지고 있는 것으로 이해했는데, 그럼 ac.close()로 컨테이너를 내리면, client 가 가리키던 prototypeBean 까지 메모리가 해제되나요? 아니면 링크만 끊겨서 메모리 어딘가에 떠다니나요..?
-
미해결스프링 핵심 원리 - 기본편
생성자를 만드는 이유가 먼가요?
public class Order { private Long memberId; private String itemName; private int itemPrice; private int discountPrice; public Order(Long memberId, String itemName, int itemPrice, int discountPrice) { this.memberId = memberId; this.itemName = itemName; this.itemPrice = itemPrice; this.discountPrice = discountPrice;} 위에 private Long memberId; 이렇게 정의 하는데 굳이 생성자를 만들 필요가 왜 있는 건가요??
-
미해결스프링 핵심 원리 - 기본편
필터 강의 부분 질문
안녕하십니까 선생님 필터 부분 강의를 들으면서 궁금한 점이 생겨 질문드립니다. BeanA와 BeanB는 따로 @Component가 붙어있지 않습니다. 그래서 저는 혹시 만드신 MyExcludeComponent와 MyIncludeComponent에 붙어 있는 어노테이션 중에 @Component가 있을까해서 찾아보았는데 없었습니다. ComponentScan에서 사용하는 includeFilters에도 있나 했는데 없었습니다. 그렇다면 클래스에 따로 Component가 붙어있지 않을 때도(물론 붙어있으면 빈으로 등록되는 것은 알고 있습니다!), includeFilter를 사용하게 되면 스프링 빈으로 등록이 되는건가요?
-
미해결스프링 핵심 원리 - 기본편
@Configuration과 @ComponentScan 같이 사용
안녕하세요. 강의 너무 잘 보고 있습니다. 감사합니다.@Configuration과 @ComponentScan과 관련해서 질문이 있습니다. 1. AutoAppConfig class에 @ComponentScan이 정의돼 있으면, 추가적으로 Bean정의를 해주는 게 아니라면@Configuration은 필요 없지 않나요? 2. AppConfig에 @Configuration 어노테이션이 살아있으면 CoreApplication을 시작할 때, 이번에 새로 작성한 AutoAppConfig에서 빈을 등록하고 AppConfig에서 다시 한 번 Bean을 등록하면 Bean을 중복 등록하지 않나요? 3. @Configuration의 기능이 @Configuration이 사용된 클래스에 정의된 Bean 전부를 Spring Container에 등록하는 걸로 이해했습니다. @Configuration만 사용하면 프로젝트 전 범위의 파일을 스캔하지만 여기서 @ComponentScan의 Fiter 기능을 추가하면 탐색 범위를 축소시킬 수 있는 건가요?
-
미해결스프링 핵심 원리 - 기본편
@Component 사용이 OCP를 위배하지는 않는가요?
앞서 강의에서 AppConfig파일을 만들고 의존성을 주입했던 이유는 - 기존의 자바 코드가 DIP를 위반 했고, - 또한 OCP 역시 만족하지 못했기 때문이었습니다. 따라서 AppConfig파일은 기존의 코드를 전혀 건들지 않고도 새로운 구현체를 역활에 맞게 끼워넣을 수 있었습니다. 하지만 @ComponentScan과 @Component를 통해 자동으로 스프링빈을 등록하는 방식은 역활에 따른 구현을 갈아 끼울 때 또다시 코드를 '수정'해야합니다. 저의 생각으로는 이는 앞서 말했던 OCP를 위반하는 방식 같은데, 이러한 방식은 OCP를 위반해서라도 더 편하게 Bean을 관리하기 위함입니까? 아니면 뒷쪽 강의에서 이에대한 이야기가 추가적으로 언급이 되나요?
-
미해결스프링 핵심 원리 - 기본편
Qualifier 빈 생성 질문합니다.
/**1. Qualifier 의 속성을 복사한다. */@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documented@Qualifier("mainDiscountPolicy")public @interface MainDiscountPolicy {} 안녕하세요 선생님 수업질문이 있습니다! @Qualifier 타입체크 문제를 해결하기 위해 위 코드처럼 빈을 따로 생성하면서 Qualifier 위에 @Target @Retention,, 등등의 속성을 가져왔는데 그럴필요 없이 @Qualifier만 명시해도 그 안에 속성을 자동으로 데려오는게 아닌지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
공부방법 질문있습니다.
안녕하세요. 강의 열심히 잘 듣고있습니다. 스프링입문편 다 듣고 스프링기본 반정도 수강했는데 처음 들어서는 이해가 잘 안되다보니 한강의 듣고 강의 내용 복기하고 또 다음 강의듣고 내용 복기하고 이런 식으로 반복이 되니 강의 듣는 시간이 2~3배 길어지게 되었습니다. 그래서 새롭게 계획을 세워봤는데 일단 강의를 들으며 모르는 부분은 체크하고 넘어간 후 완강을 한 다음에 모르는 부분을 공부하고 책을 읽고 다시 강의를 들어보는거로 계획을 세웠습니다 혹시 영한님께서 추천해주시는 다른 공부 방법이 있을까요? 사람마다 맞는 방식이 다르다고 하지만 그래도 저보다 선배님으로써 가장 효율적인 방법을 알고싶습니다! 책은 토비의 스프링3.1 , 이것이 자바다, 이펙티브 자바 이렇게 3권 읽고있습니다.
-
미해결스프링 핵심 원리 - 기본편
주문 서비스의 역할/구현체 분리
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 회원 저장소와 할인 정책은 바뀔 수 있기 때문에 역할과 구현체로 나뉘는게 이해가 되었는데 주문 서비스는 바뀔 일이 없어서(구현체가 하나라) 그냥 나누지 않고 하나로 구현해도 되지 않나요?