학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. pdf를 보면 이렇게 써있습니다. 필터 인터페이스를 구현하고 등록하면 서블릿 컨테이너가 필터를 싱글톤 객체로 생성하고, 관리한다. LogInterceptor 도 싱글톤 처럼 사용되기 때문에 맴버변수를 사용하면 위험하다. Q1. 필터의 경우 싱글톤 객체로 생성되고 관리되는 이유가 WebConfig 클래스에 @Configuration 애노테이션을 적용했기 때문이 맞는지 궁금합니다. 즉, WebConfig 클래스에서 @Bean이 붙은 메소드가 반환하는 객체(해당 필터)가 빈으로 등록되는데, @Configuration 애노테이션으로 인해 싱글톤 객체로 관리되기 때문인가요? Q2. 인터셉터의 경우는 어떤 이유로 인해 싱글톤처럼 사용되는 것인가요?
안녕하세요 frontcontroller를 배우고 한번 만들어 봤는데 제가 만든 adapter에는 원래는 똑같이 만들어볼라 했는데 어쩌다 보니 adapter에 viewresolver를 달아서 myView객체를 반환하는 adapter를 만들었습니다. 여기서 의문이 생겼는데 adapter에 viewresolver를 다는 것이나 frontcontroller에 viewresolver를 다는 것이나 myView를 통한 기능은 동일했는데 제가 만든 컨트롤러 버전에서는 adapter가 좀 더 많은 기능을 담당하게 되었습니다. 객체 지향 설계를 할 때 객체마다 각자의 역할을 부여해서 조립식으로 만든다 했는데 어느 정도까지 역할을 분해하는 것이 좋은 것인가요? 혼자 생각해 보려고 했는데 피드백을 좀 받고 싶어서 질문드렸습니다. 감사합니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요! Window, Eclipse 사용하고 있습니다. testcase용 db 만들어서 testcase.mv .db 파일 생성된 것도 확인하고 jdbc:h2:tcp:// localhost/~/testcase 로 접속도 잘 됩니다. test하위에 있는 application.properties도 강의에 말씀하신대로 바꾸어놓았습니다. 그런데 자꾸 findItems() 테스트가 이전 강의에서 나왔던 에러가 발생합니다. testcase h2 db들어가서 select 해보면 아무것도 안나오구요,, 콘솔 창은 아래와 같습니다. 2022-10-07 10:04:43.159 INFO 16288 --- [ main] h.itemservice.domain.ItemRepositoryTest : The following 1 profile is active: "local" 2022-10-07 10:04:45.130 INFO 16288 --- [ main] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page: class path resource [static/index.html] 2022-10-07 10:04:45.787 INFO 16288 --- [ main] h.itemservice.domain.ItemRepositoryTest : Started ItemRepositoryTest in 2.961 seconds (JVM running for 4.344) 2022-10-07 10:04:45.791 INFO 16288 --- [ main] hello.itemservice.TestDataInit : test data init 2022-10-07 10:04:45.793 DEBUG 16288 --- [ main] o.s.jdbc.core.simple.SimpleJdbcInsert : JdbcInsert not compiled before execution - invoking compile 2022-10-07 10:04:45.803 DEBUG 16288 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource 2022-10-07 10:04:45.803 INFO 16288 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2022-10-07 10:04:45.945 INFO 16288 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. local로 가길래 테스트 클래스에서 다음과 같은 애노테이션도 추가해서 해보았는데도 위 콘솔창과 동일하게 나타납니다. @TestPropertySource(locations = "/application.properties") @SpringBootTest //@SpringBootTest(properties = "classpath:application.properties") class ItemRepositoryTest {... } 혹시 몰라서 test/resources/application.properties도 삭제했다가 다시 만들어보고 이클립스도 껏다 다시 해보는데도 실패합니다.. ++ 집에 있는 맥북이랑 회사에서 사용하는 노트북이랑 깃으로 연동해서 사용하는데, 집에 와서 맥북으로 테스트해보니 잘 됩니다. 소스는 분명히 동일할탠데 맥북에서 잘 되는 것을 보니 h2 생성에 문제가 있는 것 같습니다(아마도). 화요일에 다시 회사 노트북(윈도우)로 시도해보고자 하는데 그 전에 혹시 제가 실수한 부분이나 참고할만한 부분을 답변으로 달아주신다면 참고하겠습니다,,!
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] <html xmlns:th=" http://www.thymeleaf.org "> 을 인식하지 못한다고 나옵니다! 어떤식으로 해결해야 할까요?
16:06 질문입니다. void AopCheck() { log.info("memberService class={}", memberService.getClass()); 이 부분은 프록시가 나오는걸 이해했는데 빈으로등록한 이부분 @Bean MemberServiceV3_3 memberServiceV3_3(){ return new MemberServiceV3_3(memberRepositoryV3()); } 이것은 왜 프록시가 아닌 본 객체가 출력되나요 ?
안녕하세요:) 강의 잘 듣고있습니다. 수강 중 궁금한 점이 생겨 질문드립니다! NetworkClient 클래스와 BeanLifeCycleTest 클래스에서 의존관계 주입과 초기화에 관한 질문입니다. 제가 생각하는 게 맞나 의문이 들어 제 생각을 적어봤습니다. <BeanLifeCycleTest 클래스, lifeCycleTest() 테스트> ConfigurableApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class) 1. 테스트 코드에서 ac라는 스프링 컨테이너를 생성한다. 스프링컨테이너를 생성할 때 구성정보로 LifeCycleConfig.class를 지정해줬다. @Configuration static class LifeCycleConfig { @Bean public NetworkClient networkClient() { NetworkClient networkClient = new NetworkClient(); networkClient.setUrl(" http://hello-spring.dev "); return networkClient; } } 2. LifeCycleConfig.class에 있는 @Bean이 붙은 메서드들을 스프링 컨테이너에 빈으로 저장한다. networkClient라는 이름을 가진 빈이 생성된다. 2-1. networkClient라는 빈에서 NetworkClient 타입의 객체networkClient 가 생성된다. 2-2. 객체가 생성됨과 동시에 NetworkClient() 생성자를 호출해 맨 처음 "생성자 호출, url = null이" 출력된다. 2-3 NetworkClient 타입인 networkClient에 setUrl("http://hello-spring.dev") 을 통해 url에 값을 저장한다. 3. https://www.inflearn.com/questions/653260 위 글을 살펴보면 답변에서 의존관계 주입이 setUrl() 다음에 이뤄진다고 하셨는데,,, setUrl() 호출 다음이면 위의 제 생각 중 2-3번 다음인가요,,,? 의존관계 주입 방법에 생성자를 통한 주입이 있으므로 생성자 호출 시 의존관계 주입이 이뤄지는 건가요,,,? 아님 스프링 컨테이너에 빈이 생성되면서 의존관계 주입이 일어난다. 크게 생각하면 되는건가요,,? 어디서 일어나는 건지 질문드립니다. 4. "스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다. 따라서 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출해야 한다." 의존관계 주입이 완료되면 초기화 작업이 이루어진다고 수업 자료에 나와있는데요, 초기화란 객체를 선언하고 값을 최초로 할당하는 것이라고 알고있습니다. 그럼 위의 코드에서는 객체 생성, 즉 생성자 호출 후 setUrl()로 값을 주입하는 게 초기화 작업이 맞을까요..? 만약 맞다면 결론적으로 NetworkClient networkClient = new NetworkClient(); -> 의존관계 주입 networkClient.setUrl(" http://hello-spring.dev "); -> 초기화 작업 이게 맞는건가요,,? 이렇게 되면 3번에 언급되었던 게시글 답변 중, 스프링 컨테이너 실행 -> 스프링 빈으로 등록 -> setUrl() 호출 -> 의존관계 주입 -> 초기화 이 순서에 의문이 생기게 되는데 어떤 순서가 정확한지 질문드립니다!!
엔티티를 조회해서 dto로 변환할 시에 강사님은 controller에 내부 클래스 방식을 이용하셨습니다. 그 이유가 어차피 dto가 화면에 의존적이기 때문에 controller에 내부클래스 방식으로 하신건지 아니면 원래는 따로 dto페키지를 만들어서 사용하는 게 맞으나 수업을 위해서 그러신건지 궁금합니다. 결론적으로는 dto의 위치를 어떻게 가져가는 것이 맞는 지 궁금합니다. controller의 내부 클래스 dto페키지생성 repository 그 외 4가지 중 어디에 두어야 할 지 궁금합니다.
안녕하세요. 강의 후반부 스프링 없는 순수한 DI 컨테이너로 메서도 호출을 한다면, 계속해서 객체를 새로 생성하는 예시를 보여주는 부분이 있습니다. 여기서 궁금한 것은 AppConfig에 @Configuration 과 해당 클래스 메서드들에 @Bean 설정이 되어있는데, 이것들은 순수한 DI 컨테이너에서 의미없는 어노테이션들이 맞을까요? 원래는 빼야하는데 그냥 안빼시고 설명하신 것 인지 궁금합니다.
안녕하세요 강사님! 혹시 테스트 코드는 제가 구현하는 모든 기능들을 바탕으로 만들어야 하는 걸까요? 아니면 뭔가를 검증하는 로그인, 회원가입 등에만 만들면 되는 걸까요? 강의를 듣다보니 테스트도 관심이 생기는데 정확히 어떤 액션일 때만 만들어야 좋을지 모르겠어서 이렇게 문의 남깁니다. 감사합니다!
강의 회차 : 트랜잭션 적용 확인 안녕하세요 강의를 보다가 궁금한게 생겨서 질문 드립니다. 일단 이번 강의에서 클래스 안에 @Transactional이 하나라도 있으면 트랜잭션 AOP가 프록시를 만들어서 basicService$$CGLIB를 스프링 컨테이너에 등록된다고 하였는데, 스프링 핵심 원리 강의에서도 스프링 빈에 객체를 등록하면 "빈 이름$$CGLIB"가 등록되었는데, 스프링 핵심 원리에서 보았던 스프링 컨테이너에 등록된 빈 하고 이번 강의에서 나온 프록시가 스프링 빈에 등록되는 것하고 같은 개념인지 궁금합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 제가 자바코드에 대한 이해가 깊지 않은 상태에서 수강 중입니다. 제 논리에 이해되지 않는 부분이 있어서 질문드립니다. 강의 중 코드 16줄에서 memberService 를 새로 만들었습니다. 그럼 memberService 안에 그 만의 memberRepository 가 생긴다고 생각했습니다. 그런데, clear를 위해 17줄에서 새로운 memberRepository를 만들고 있습니다. 이 memberRepository는 memberService 안의 memberRepository 와 다른 것이지 않나요?? 이 memberRepository를 clear하는 게 memberService 의 memberRepository 를 clear하는 행위가 아니라고 생각합니다. 제 부족함을 채워주시면 감사하겠습니다. 혹시 memberService 가 static이라 모두 같은 객체를 공유하는 건가요??
강사님 말씀대로 수정할 부분만 get/set기능이 잇는 dto를 만들어서 이용해봤습니다. 강사님이 계속 controller같은 곳에서는 setter의 이용을 제한하시라고 설명을 하셔서 저는 생성자를 만들어서 처리를 하였습니다. 근데 이부분에서 차라리 정정펙토리메서드를 이용해야하나 궁금증이 들었습니다. 제가 정적펙토리메서드를 질문란에서 공부한 결과로는 상속관계가 아니면 정적펙토리메서드를 사용하는 것이 장점이 많은 것으로 공부를 하였는데요 제가 한 코드처럼 이곳에 정적펙토리메서드를 적용하는 것이 괜찮은 방법인지 궁금합니다. 만약에 이 방법이 괜찮다면 앞으로 항상 수정코드시에 updateDto를 만들때는 정적펙토리메서드를 이용하여 수정해도 되나요??
강의에서는 수업을 위해 다운캐스팅을 사용하셨다고 하셨습니다. 그러면 상속관계에서는 book,Album,Movie관련 서비스를 만들고 BookForm, AlbumForm, MovieForm을 만들고 @Mapping도 book, album, movie에 대해서 다 만들고 대신에 repository만 itemrepository로 하나로 해서 관리하는 방식을 사용해야한다고 생각합니다. 제가 생각한 것이 괜찮은 방법이 맞는 지 궁금하고 아니라면 어떻게 해야하는 지 궁금합니다.
txTemplate.executeWithoutResult((status) -> { try { //비즈니스 로직 bizLogic(fromId, toId, money); } catch (SQLException e) { throw new IllegalStateException(e); } }); 위의 로직에서 파라미터로 status를 받는데 이 status는 어디에서 받아오는건가요? 이전 MemberServiceV3_1 에서는 //트랜잭션 시작 TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); 이렇게 status를 받아와서 커밋과 롤백에 status를 사용했는데 MemberServiceV3_2 에서는 여러번 반복해 돌려보아도 저 status 에 대한 설명이 없어서 답변 부탁드립니다.