월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨스프링 핵심 원리 - 기본편
필드에 빨간색 오류가 뜨는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.[질문 내용]위의 코드에서 생성자를 설정해 주지 않으면 빨간색 오류가 뜨는데, memberRepository가 초기화되지 않아서라고 합니다. 여기서 궁금한 점이 필드만 있으면 생성자를 따로 코드로 쳐주지 않아도 자동으로 기본 생성자 설정을 해주지 않나요? 아래 사진에서는 example클래스에서 필드만 넣어줘도 빨간색 줄이 뜨지 않는데 ... 둘의 차이를 모르겠습니다.
- 미해결스프링 핵심 원리 - 기본편
xxxxxxxxImpl 네이밍 룰
[질문 내용]인터페이스를 구현한 구체 클래스가 하나인경우 xxxxxImpl이라는 네이밍을 관례적으로 사용한다고 하셨는데제가 생각했을때는 구현클래스가 하나일경우(기능확장이 필요없다고 판단될경우) 굳이 인터페이스를 만들 필요가 없을것같은데,1.인터페이스를 구현한 구체클래스가 하나인경우가 많은편인지? 혹은 어떤경우인지?2. 이 네이밍룰을 따른후 혹시 구현클래스가 하나더 생긴다면 네이밍을 수정하는지..?
- 해결됨스프링 핵심 원리 - 기본편
CannotLoadBeanClassException
스프링 빈 설정 메타 정보-BeanDefinition 강의 실습 중에 마지막에 xml 파일로 beanDefinition을 만들게 하니까 이런 오류가 뜨더군요그리고 이전에 만들었던xmlAppContext에서도 같은 오류가 발생했는데요 pdf파일의 예시 코드를 복붙해서 돌렸는데도 같은 오류가 나서질문 드립니다 org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [hello.core.member.MemberServiceImpl] for bean with name 'memberService' defined in class path resource [appConfig.xml]; nested exception is java.lang.ClassNotFoundException: hello.core.member.MemberServiceImplappConfig.xml<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="memberService" class="hello.core.member.MemberServiceImpl"> <constructor-arg name="memberRepository" ref="memberRepository"/> </bean> <bean id="memberRepository" class="hello.core.member.MemoryMemberRepository"/> <bean id="orderService" class="hello.core.order.OrderServiceImpl"> <constructor-arg name="memberRepository" ref="memberRepository"/> <constructor-arg name="discountPolicy" ref="discountPolicy"/> </bean> <bean id="discountPolicy" class="hello.core.discount.RateDiscountPolicy"/> </beans> MemberServiceImpl.java package member; public class MemberServiceImpl implements MemberService{ private final MemberRepository memberRepository; public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } @Override public void join(Member member) { memberRepository.save(member); } @Override public Member findMember(Long memberId) { return memberRepository.findById(memberId); } }
- 미해결스프링 핵심 원리 - 기본편
api vs 라이브러리 vs 프레임워크 제가 이해한게 맞을까요?
api: 사람과 컴퓨터 사이에 키보드라는 접점으로 소통하듯이 프로그램과 프로그램 사이는 api라는 접점,규약이 있어서 통신할 수 있고 api를 통해서 데이터나 라이브러리를 호출할 수 있다 라이브러리: 개발하면서 반복되는 코드들을 모아놓은 것 남이 만들어진 코드를 기반으로 개발을 할 수 있어서 생산성이 증가한다 라이브러리는 개발자가 능동적으로 호출할 수 있다프레임워크: 개발하면서 반복되는 코드들을 어떤 규칙에 맞게 쓸 수 있도록 환경을 구성해 놓은 것 라이브러리와 차이점은 개발자가 작성한 코드가 프레임워크에 의해 수동적으로 불려진다는 점이 차이점이다
- 미해결스프링 핵심 원리 - 기본편
RequestURL 이 로그에서 일부 생략됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]강의 내용중에 http://localhost:8080/log-demo 이런식으로 로그가 남는데저같은 경우는 http://localhost:8080 부분이 생략된 채로 나옵니다.이런식으로요. 다른분이 작성한 글에도 저와 같은 내용인 것을 보긴했는데그분은 인텔리제이를 재실행하니 고쳐졌다고 하시는데저는 재실행 + 재부팅도 해봤는데 안되네요. 작동에는 문제가없는데 이부분만 그러네요.제 MyLogger 부분에 출력부분을 긁어왔습니다.@Component @Scope(value = "request") public class MyLogger { private String uuid; private String requestURL; public void setRequestURL(String requestURL) { this.requestURL = requestURL; } public void log(String message) { System.out.println("[" + uuid + "][" + requestURL + "] " + message); } @PostConstruct public void init() { uuid = UUID.randomUUID().toString(); System.out.println("[" + uuid + "] request scope bean create : " + this); } @PreDestroy public void close() { System.out.println("[" + uuid + "] request scope bean close : " + this); } }
- 해결됨스프링 핵심 원리 - 기본편
hashmap동시성 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.[질문 내용]MemoryMemberRepository에 HashMap을 사용할 경우 동시성 문제가 발생할 수도 있다고 하셨는데, 여러 객체나 클래스에서 MemoryMemberRepository에 접근할 경우도 있으니까 그 문제를 언급해주셨던 걸까요? 어느 측면에서의 동시성 문제인지 궁금해서 질문남깁니다
- 미해결스프링 핵심 원리 - 기본편
DiscountPolicy 질문 있습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]Member, Order와 다르게 왜 Discount만 Service 라는 명칭이 없는데요. 이 때 MemberService, OrderService 와 같은 Service 역할이지만 단순히 할인정책 이라는 설계 이름때문에 Service가 아닌 Policy로 붙인 건가요? 아니면 Discount 부분은 MemberService, OrderService와는 개념적으로 다른 건가요?
- 미해결스프링 핵심 원리 - 기본편
안녕하세요
안녕하세요 calculatePrice가 Order 도메인안에 있는 이유를다른분들이 질문하신 글의 답변을 보았는데[이 때 calculatePrice 가 여러곳에서 사용된다면 그 메서드마다 calculatePrice를 구하는 코드를 작성해야 할텐데요, 이후에 calculatePrice를 구하는 공식이 바뀌거나 한다면 수정하기 번거롭겠지요.] OrderService에 calculatePrice을 생성하고 new Order (memberId, itemName, itemPrice, discountPrice, caculatePrice)를 해서 주문을 생성해도 되지않나요?
- 해결됨스프링 핵심 원리 - 기본편
프로토타입 @PreDestroy 관련 질문드립니다!
1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 수업 막바지를 달리고있는데 PrototypeTest하는데서 질문이 생겼습니다Prototype으로 테스트를할때 close를 해도 아무결과가 나오지않는거면 @Predestroy는 없어도 상관이없는걸까요? 그리고 관리는 클라이언트가 어떻게 하는건지도 궁금합니다!
- 미해결스프링 핵심 원리 - 기본편
final 키워드 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. MemberServiceImpl와 OrderServiceImpl에서 private final로 만들게 되는 것 같은데 final을 붙여야하는 이유가 궁금합니다. final을 붙일때와 붙이지 않았을때의 차이...?
- 미해결스프링 핵심 원리 - 기본편
ctrl+alt+m 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]ctrl+alt +m / ctrl+alt+m 누른 후 m / ctrl+alt+shift+t 누른 후 extract method 클릭 모든 방법으로 다 했는데도 불구하고 저렇게 뜨는데 어떻게 해결해야 할까요
- 미해결스프링 핵심 원리 - 기본편
request 빈 주입 시점질문입니다.
이미 logDemo() 메소드가 실행되는 시점에 request 스코프가 주입되는 것이 아닌 것인지 궁금합니다.request : 웹 요청이 들어오고 나갈 때 까지 유지되는 스코프프록시 모드를 테스트할 때 위와 같이 myLogger를 조회합니다.허나 이 때는 이미 request를 통해 http요청을 받았을 때입니다.제 생각에는 http 요청을 받았으니 이미 프록시 객체가 request 빈 스코프로 대체가 되어야한다고 생각이 드는데 출력에서 프록시 객체가 출력이 됩니다.이미 logDemo() 메소드가 실행되는 시점에 request 스코프가 주입되는 것이 아닌 것인지 궁금합니다.
- 해결됨스프링 핵심 원리 - 기본편
Order 객체 생성 위치 질문
안녕하세요 너무 이해가 안되서 질문 드립니다. 회원가입 처리시에는 맴버의 객체를 생성하고 데이터 베이스에 저장하는 것을 봤을땐 MemberApp MemberService memberService = new MemberServiceImpl(); Member member = new Member(1L, "memberA", Grade.BASIC); memberService.join(member); Member findMember = memberService.findMember(1L);MemberApp에서 Member라는 객체를 생성 후 memberService에서 join으로 회원가입 처리를 하는 흐름인데 주문 처리시에는OrderAppOrder order = orderService.createOrder(memberId, "첫 주문", 10000); OrderServiceImpl public Order createOrder(Long memberId, String itemName, int itemPrice) { Member member = memberRepository.findById(memberId); int discountPrice = discountPolicy.discount(member, itemPrice); return new Order(memberId, itemName, itemPrice, discountPrice); } orderService.createOrder 메서드에서 Order 에 관한 데이터를 모두 가공후 Order 객체를 생성하고 리턴을 해주는것으로 나오는데요.질문 1)회원가입때에는 MemberApp 에서 member 객체를 생성하고,주문할때는 OrderApp에서 안하고 OrderServiceImpl 에서 order 객체를 생성 하는 이유가 궁금합니다. 질문 2)OrderServiceImpl createOrder 메서드는 주문데이터를 가공하는 메서드 라고 생각이 드는데 모두 가공후 Order 객체를 생성하는게 더 좋다라고 한다면예로들어 회원가입때 날짜별로 등급(BASIC, VIP)을 주는 기능, 정책이 추가가 되었다라고 한다면 주문 할때 처럼MemberApp MemberService memberService = new MemberServiceImpl(); Member member = memberService.createMember(); // createMember 에서 가공 후 join으로 데이터베이스에 저장하는 식 memberService.join(member); Member findMember = memberService.findMember(1L);createMember (createOrder와 같은 개념) 메서드를 생성해 회원 정보를 가공(날짜별로 등급을 나눠지는 기능) 해서 return 값으로 member 객체를 생성해 리턴 해주면 된다 라고 생각하면 될까요?
- 미해결스프링 핵심 원리 - 기본편
OrderServiceImpl 오류
안녕하세요!OrderServiceImpl 에서 자꾸 오류가 나는데 이유를 모르겠어서요 ㅠㅠ OrderServiceImplAppConfigAppConfig의 return 부분에서 빨간 줄이 뜹니다 ..!! MemberRepository랑 DiscountPolicy가 분명 생성자로 있는데도 왜 적용될 수 없는 타입이라고 뜨는지 모르겠습니다 ㅠㅠ
- 미해결스프링 핵심 원리 - 기본편
ComponentSacn 의 디폴터 설정에 대한 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요? 컴포넌트 스캔에 대한 강의를 듣던 중 궁금해서 테스트를 해보던 중에 이해가 안가는 부분이 있어서 질문을 드립니다.@Configuration@ComponentScanpublic class AutoAppConfig {}강의에서 excludeFilters 설정한 것을 빼고 디폴트 @ComponentScan 을 적용해서 테스트를 해봤습니다....if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) {System.out.println("beanDefinitionName = " + beanDefinitionName + " value = " + beanDefinition);} 바로 위와 같이 전에 테스트했던 코드를 참고해서 내용을 찍어봤는데... beanDefinitionName = autoAppConfig value = Generic bean: class [hello.core.AutoAppConfig$$SpringCGLIB$$0]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=nullbeanDefinitionName = applicationContextExtendsFindTest.TestConfig value = Generic bean: class [hello.core.beanfind.ApplicationContextExtendsFindTest$TestConfig$$SpringCGLIB$$0]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null; defined in file [D:\400.Projects\01.SpringCore\core\out\test\classes\hello\core\beanfind\ApplicationContextExtendsFindTest$TestConfig.class]beanDefinitionName = applicationContextSameBeanFindTest.SameBeanConfig value = Generic bean: class [hello.core.beanfind.ApplicationContextSameBeanFindTest$SameBeanConfig$$SpringCGLIB$$0]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null; defined in file [D:\400.Projects\01.SpringCore\core\out\test\classes\hello\core\beanfind\ApplicationContextSameBeanFindTest$SameBeanConfig.class]beanDefinitionName = statefulServiceTest.TestConfig value = Generic bean: class [hello.core.singleton.StatefulServiceTest$TestConfig$$SpringCGLIB$$0]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null; defined in file [D:\400.Projects\01.SpringCore\core\out\test\classes\hello\core\singleton\StatefulServiceTest$TestConfig.class]beanDefinitionName = appConfig value = Generic bean: class [hello.core.AppConfig$$SpringCGLIB$$0]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null; defined in file [D:\400.Projects\01.SpringCore\core\out\production\classes\hello\core\AppConfig.class]beanDefinitionName = coreApplication value = Generic bean: class [hello.core.CoreApplication$$SpringCGLIB$$0]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null; defined in file [D:\400.Projects\01.SpringCore\core\out\production\classes\hello\core\CoreApplication.class]beanDefinitionName = rateDiscountPolicy value = Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=applicationContextExtendsFindTest.TestConfig; factoryMethodName=rateDiscountPolicy; initMethodNames=null; destroyMethodNames=[(inferred)]; defined in class path resource [hello/core/beanfind/ApplicationContextExtendsFindTest$TestConfig.class]...위와 같이 root 패키지 내의 모든 빈이 등록되는 것 같았습니다. 예상으로는 @Component, @Configuration 이 붙어 있는 빈들만 등록될 줄 알았는데 왜 이렇게 나오는 걸까요?
- 미해결스프링 핵심 원리 - 기본편
@Configuration 관련하여 질문 드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. public class BeanLifeCycleTest {@Test public void lifeCycleTest(){ConfigurableApplicationContext ac1 = new AnnotationConfigApplicationContext(LifeCycleConfig.class);// ConfigurableApplicationContext ac2 = new AnnotationConfigApplicationContext(LifeCycleConfig.class); NetworkClient client1 = ac1.getBean("networkClient",NetworkClient.class); NetworkClient client2 = ac1.getBean("networkClient",NetworkClient.class); System.out.println(client2); System.out.println(client1); Assertions.assertThat(client1).isSameAs(client2); ac1.close(); ac1.close(); }// @Configuration static class LifeCycleConfig{// @Bean @Bean(initMethod = "init" , destroyMethod = "close")public NetworkClient networkClient(){NetworkClient networkClient = new NetworkClient(); networkClient.setUrl("http:://hello-spring.dev"); me(); return networkClient; }public void me(){System.out.println("test"); }}}다음과 같이 @Configuration을 지웠다 넣었다 해보면서이전에 배운 싱글톤에 대한 테스트를 해보고 있는데요 제 생각에 @Configuration을 빼면 빈에 등록 한번 등록된 객체의 값을 참조해서 가져오기만 하는 싱글톤 방식과 다르게 객체를 계속 생성해서 테스트 코드도 통과하면 안되고 connect도 두번 일어야 한다고 생각했습니다. 하지만 계속 테스트 코드를 통과하는 상황입니다. 제가 왜 이런걸까요?
- 미해결스프링 핵심 원리 - 기본편
Assertions.assertThat() 오류
안녕하세요!Assertions.assertThat() 에서 오류가 나는데, 해결이 안되어 질문드립니다!< 오류 화면 > < 시도한 것 > import org.assertj.core.api.Assertions.*;import static org.assertj.core.api.Assertions.*;둘 다 해도 계속 오류가 뜨네요 ㅠㅠ 이렇게 뜨길래 라이브러리에 추가하고Reload 까지 해봤는데 여전히 import가 안됩니다 !! < 그 외 코드 첨부 > 뭐가 문제일까요 ??? ㅠㅠㅠㅠㅠ 어디를 수정해야될지 모르겠습니다..!!
- 미해결스프링 핵심 원리 - 기본편
gradle이 아닌 maven 프로젝트 open 방법
안녕하세요. 강의 중 프로젝트를 처음 열 때, 여는 방법에 대해 알려주셔서 관련하여 질문드립니다.프로젝트가 gradle인 경우, 해당 프로젝트 내의 build.gradle 파일을 선택해 open하는 것으로 알려주셨는데요. maven의 경우에는 어떤 방법으로 여는 것이 올바르게 여는 것인지 궁금합니다.기존에 gradle 프로젝트를 열었을 때에는 프로젝트 경로에 들어가 해당 프로젝트를 바로 여는 방식으로 했는데 이 방법이 올바르게 여는 방법이 아닌지도 함께 질문드립니다.감사합니다.
- 미해결스프링 핵심 원리 - 기본편
프로젝트 open 방법
안녕하세요. 강의 중 프로젝트를 처음 열 때, 여는 방법에 대해 알려주셔서 관련하여 질문드립니다. 프로젝트가 gradle인 경우, 해당 프로젝트 내의 build.gradle 파일을 선택해 open하는 것으로 알려주셨는데요. maven의 경우에는 어떤 방법으로 여는 것이 올바르게 여는 것인지 궁금합니다. 기존에 gradle 프로젝트를 열었을 때에는 프로젝트 경로에 들어가 해당 프로젝트를 바로 여는 방식으로 했는데 이 방법이 올바르게 여는 방법이 아닌지도 함께 질문드립니다.감사합니다.
- 해결됨스프링 핵심 원리 - 기본편
로그가 갑자기 안나옵니다 ㅠㅠㅠㅠ
강의들으면서 라이브 코딩 계속 진행했는데... 어느순간 부터 로그가 안나옵니다 ㅠㅠㅠㅠ위 그림처럼 로그가 나와야 하는데...아래처럼 실행해도 로그가 안나옵니다 ㅠㅠㅠ 도와주세요 ㅍ