묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JPA와 NoSQL의 관계에 대해 질문드립니다.
안녕하세요.JPA를 공부하면서 궁금한점이 생겨서 질문드립니다.JPA는 ORM이므로 RDMS와 연결되는거로 알고있습니다. 현재 제가 사이드 프로젝트를 진행하고 있는데.. NoSQL와 JPA를 동시에 경험해볼 수 있는 프로젝트를 만들고자하는데.. NoSQL은 JPA와 아예 연결지을 수가 없는지 궁금합니다.강의 잘 듣고있습니다.항상 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
build.gradle useJUnitPlatform인식 안됨
강의 9분쯤 나오는 build.gradle 설정과 제 gradle에서useJUnitPlatform 부분이 달라서 그런지 useJUnitPlatform이 회색글씨로 나오고 인식이 되지 않습니다 project와 SDKs에서 자바버전은 자바11로 동일하게 맞춰놓은 상태입니다 직접 코드를 수정해 reload 하는 방법밖에 없는 건가요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
스프링 부트 3.0 findAll() 쿼리
안녕하세요!!강의 너무 잘 보고 있는 수강생입니다! 스프링 부트 3.0.1 버전으로 프로젝트를 생성해 강의를 듣다가 단순 전체 조회 쿼리(/api/v2/orders)인 findAll()에서 쿼리가 강의와 다르게 나와 궁금증이 생겨 질문 드립니다.제가 이해하기로는 /api/v2/orders를 호출하면 다음과 같은 순서로 데이터를 가져온다고 생각했습니다.orders 조회하는 쿼리 호출OrderDto 를 만드는 과정에서 getMember()와 getDelivery() 를 호출할 때 Member와 Delivery를 가져오는 쿼리 호출getOrderItems() 를 통해 orderItems 조회하는 쿼리 호출OrderItemDto 를 만드는 과정에서 getItem()을 호출할 때 각각의 Item을 가져오는 쿼리 호출그래서 강의처럼 데이터를 초기화 한다면 총 11번의 쿼리가 발생해야 한다고 생각했고 강의에서도 11번의 쿼리가 생겼습니다.하지만 제 코드에서는 getDelivery() 를 호출하는 과정에서 이상하게 Delivery를 호출한 후, deliveryId 를 조건절로 Order를 조회하는 쿼리가 한 번 더 생겨 아래 로그처럼 총 13번의 쿼리가 발생했습니다. 2023-01-14T18:10:31.860+09:00 DEBUG 6590 --- [nio-8070-exec-2] org.hibernate.SQL : select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 2023-01-14T18:10:31.890+09:00 DEBUG 6590 --- [nio-8070-exec-2] org.hibernate.SQL : select m1_0.member_id, m1_0.city, m1_0.street, m1_0.zipcode, m1_0.name from member m1_0 where m1_0.member_id=? 2023-01-14T18:10:31.890+09:00 TRACE 6590 --- [nio-8070-exec-2] org.hibernate.orm.jdbc.bind : binding parameter [1] as [BIGINT] - [1] 2023-01-14T18:10:31.895+09:00 DEBUG 6590 --- [nio-8070-exec-2] org.hibernate.SQL : select d1_0.delivery_id, d1_0.city, d1_0.street, d1_0.zipcode, d1_0.status from delivery d1_0 where d1_0.delivery_id=? 2023-01-14T18:10:31.895+09:00 TRACE 6590 --- [nio-8070-exec-2] org.hibernate.orm.jdbc.bind : binding parameter [1] as [BIGINT] - [1] 2023-01-14T18:10:31.899+09:00 DEBUG 6590 --- [nio-8070-exec-2] org.hibernate.SQL : select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 where o1_0.delivery_id=? 2023-01-14T18:10:31.900+09:00 TRACE 6590 --- [nio-8070-exec-2] org.hibernate.orm.jdbc.bind : binding parameter [1] as [BIGINT] - [1] 2023-01-14T18:10:31.910+09:00 DEBUG 6590 --- [nio-8070-exec-2] org.hibernate.SQL : select o1_0.order_id, o1_0.order_item_id, o1_0.count, o1_0.item_id, o1_0.order_price from order_item o1_0 where o1_0.order_id=? 2023-01-14T18:10:31.910+09:00 TRACE 6590 --- [nio-8070-exec-2] org.hibernate.orm.jdbc.bind : binding parameter [1] as [BIGINT] - [1] 2023-01-14T18:10:31.914+09:00 DEBUG 6590 --- [nio-8070-exec-2] org.hibernate.SQL : select i1_0.item_id, i1_0.dtype, i1_0.name, i1_0.price, i1_0.stock_quantity, i1_0.author, i1_0.isbn from item i1_0 where i1_0.item_id=? 2023-01-14T18:10:31.915+09:00 TRACE 6590 --- [nio-8070-exec-2] org.hibernate.orm.jdbc.bind : binding parameter [1] as [BIGINT] - [1] 2023-01-14T18:10:31.916+09:00 DEBUG 6590 --- [nio-8070-exec-2] org.hibernate.SQL : select i1_0.item_id, i1_0.dtype, i1_0.name, i1_0.price, i1_0.stock_quantity, i1_0.author, i1_0.isbn from item i1_0 where i1_0.item_id=? 2023-01-14T18:10:31.917+09:00 TRACE 6590 --- [nio-8070-exec-2] org.hibernate.orm.jdbc.bind : binding parameter [1] as [BIGINT] - [2] ============================================== 2023-01-14T18:10:31.919+09:00 DEBUG 6590 --- [nio-8070-exec-2] org.hibernate.SQL : select m1_0.member_id, m1_0.city, m1_0.street, m1_0.zipcode, m1_0.name from member m1_0 where m1_0.member_id=? 2023-01-14T18:10:31.919+09:00 TRACE 6590 --- [nio-8070-exec-2] org.hibernate.orm.jdbc.bind : binding parameter [1] as [BIGINT] - [2] 2023-01-14T18:10:31.921+09:00 DEBUG 6590 --- [nio-8070-exec-2] org.hibernate.SQL : select d1_0.delivery_id, d1_0.city, d1_0.street, d1_0.zipcode, d1_0.status from delivery d1_0 where d1_0.delivery_id=? 2023-01-14T18:10:31.921+09:00 TRACE 6590 --- [nio-8070-exec-2] org.hibernate.orm.jdbc.bind : binding parameter [1] as [BIGINT] - [2] 2023-01-14T18:10:31.922+09:00 DEBUG 6590 --- [nio-8070-exec-2] org.hibernate.SQL : select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 where o1_0.delivery_id=? 2023-01-14T18:10:31.923+09:00 TRACE 6590 --- [nio-8070-exec-2] org.hibernate.orm.jdbc.bind : binding parameter [1] as [BIGINT] - [2] 2023-01-14T18:10:31.925+09:00 DEBUG 6590 --- [nio-8070-exec-2] org.hibernate.SQL : select o1_0.order_id, o1_0.order_item_id, o1_0.count, o1_0.item_id, o1_0.order_price from order_item o1_0 where o1_0.order_id=? 2023-01-14T18:10:31.926+09:00 TRACE 6590 --- [nio-8070-exec-2] org.hibernate.orm.jdbc.bind : binding parameter [1] as [BIGINT] - [2] 2023-01-14T18:10:31.927+09:00 DEBUG 6590 --- [nio-8070-exec-2] org.hibernate.SQL : select i1_0.item_id, i1_0.dtype, i1_0.name, i1_0.price, i1_0.stock_quantity, i1_0.author, i1_0.isbn from item i1_0 where i1_0.item_id=? 2023-01-14T18:10:31.927+09:00 TRACE 6590 --- [nio-8070-exec-2] org.hibernate.orm.jdbc.bind : binding parameter [1] as [BIGINT] - [3] 2023-01-14T18:10:31.928+09:00 DEBUG 6590 --- [nio-8070-exec-2] org.hibernate.SQL : select i1_0.item_id, i1_0.dtype, i1_0.name, i1_0.price, i1_0.stock_quantity, i1_0.author, i1_0.isbn from item i1_0 where i1_0.item_id=? 2023-01-14T18:10:31.928+09:00 TRACE 6590 --- [nio-8070-exec-2] org.hibernate.orm.jdbc.bind : binding parameter [1] as [BIGINT] - [4] ============================================== 혹시나 제가 코드를 잘못 작성했을까봐 강의 자료로 올라온 소스코드에서 default_batch_fetch_size 만 주석 처리하고 스프링 부트 3.0 환경에서 돌려봤는데 같은 결과가 나왔고, JpaRepository 를 통한 findAll 로 두 버전에서 모두 테스트를 해봤는데 같은 결과가 발생했습니다. 그래서 Delivery에 @OneToOne으로 걸려있는 order가 문제라 생각해 이 부분을 지우고 실행했더니 해당 쿼리가 사라졌습니다. 하지만 @OneToOne의 패치 전략을 Lazy로 하고 따로 Order를 조회하지 않았고, 맨 처음 orders를 조회하는 쿼리를 실행하는 과정에서 영속성 컨텍스트에 orders가 저장 되기도 했기 때문에 해당 쿼리가 생기면 안된다고 생각을 했는데 혹시 제가 잘못 이해하고 있는걸까요..? 스프링 부트 3.0으로 올라가는 과정에서 hibernate의 버전도 6으로 올라가 뭔가 변경이 생긴것인지, 아니면 제가 어떤 실수를 하고 있는건지 궁금해서 질문 드립니다..!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 - 서블릿 HTTP 세션2 - TrackingModes 관련 문의드립니다.
로그인 - 서블릿 HTTP 세션2에서 로그인을 처음 시도하면 URL이 jsessionid 를 포함하고 있는데 - 리다이렉트되는 페이지는 MVC2 강의 처음에 생성했던 static/index.html로 리다이렉트 됩니다.(MVC 강의 1부터 2까지 하나의 프로젝트에 설정하고 있어서 - 이전의 실습내용도 삭제하지 않은 상황입니다.)물론 application.yml에 server.servlet.session.tracking-modes=cookie 적용해주면 강의와 똑같이 정상적으로 동작하지만, 위에서처럼 index.html이 나오는 것은 무슨 이유 때문일까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 부트 메시지 소스 설정 설명
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 자료에서 설명할 때 application.properties 에 spring.messages.basename=messages,config.i18n.messages 로 설정 할 수 있다고 하셨는데저 표현식은 해석하면 message 관리 파일을 messages 디렉토리와 config.i18n.messages 디렉토리로 관리하도록 설정한다고 이해하면 될 까요? config.i18n.messages가 어떤 의미인지 그냥 경로를 표시한건지 잘 모르겠어서 질문 드립니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
inline variable 으로 합치는거랑 코드로 적는가랑 다른가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]강의 를 보다보면 inline variable 단축키누르셔서 코드 합치는거 좋아하신다면서 코드합치시는데예를들어 aop 적용 영상에 3분 40초 대쯤 보면Object result = joinPoint.proceed(); return result; 을 단축키로 return joinPoint.proceed();처럼 바꾸시는데저렇게 단축키로 하면 눈에안보여도 뭔가 연결이 생기는건가요?외관적으로는 Object result 를 지우고 return 에 추가한것과 같아보이는데 그냥 타이핑하는거랑 의미가 다른건가요?아니면 그냥 적어도 상관 없고 똑같은건가요?감사합니다!
-
해결됨Java/Spring 주니어 개발자를 위한 오답노트
JPA 양방향 연관관계 관련하여 질문 드립니다.
안녕하세요. 지식공유자님 강의 잘 듣고 있습니다. 순환참조 관련 설명을 해주시면서 외래키를 직접 들고 있는 편이 낫다고 하셨습니다. 실제로 최근에 최범균님의 JPA 강의를 들으면서 연관관계를 사용하지않고 저렇게 외래키를 들고 있는 코드를 보았는데요. 제가 여태껏 배운 것과는 많이 달라서 몇 가지 의문점이 듭니다. 외래키를 저렇게 직접적으로 들고있을 시엔 ORM을 사용함에도 불구하고 다시 데이터베이스에 가까운 엔티티 설계로 돌아간 것이 아닌가 하는 의문입니다.양방향 연관관계를 사용하지 않을 경우 그에 따라 orphanRemoval나 cascade 옵션을 사용하지 않음에 따라 추가적인 로직 작성이 필요하지 않나요?? 그에 따른 추가작업이 생길 수 있는데 혹시 제가 잘못 생각하고 있는 것인지 여쭙고 싶습니다양방향 연관관계를 걸었을때와 외래키를 직접 들고있는 것 중 CRUD 성능에 크게 차이가 있을까요?혹시 현업에서는 어떻게 하고 있을까요? 팀마다 다를까요?
-
해결됨스프링 핵심 원리 - 기본편
AppConfig에서 Bean 등록을 반드시 해야하는가?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.App에서는 application.getBean("OOO", OOO.class)와 같이 빈요소를 참조해서 쓰고 있지만MemberRepository나 DiscountPolicy의 경우 Bean을 등록하여도 이를 빈 저장소를 경유해서 사용하지 않고 직접적으로 바로 사용할 수 있을 것 같은데, 그렇다면 저 요소를 굳이 빈으로 등록할 필요가 있는지 의문입니다.
-
해결됨스프링 시큐리티 OAuth2
강의에 매칭되는 git branch 찾기가 매우 힘듭니다.
안녕하세요 !git branch 마다 README 파일이 있는건 아니라서강의에 해당하는 git branch 를 찾기가 매우 힘듭니다.혹시 강의와 브렌치의 매핑이 정리된 자료가 있나요 ?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
service에서 proxyservice를 주입받을 순 없을까요?
[질문 내용]@Transactional 적용시proxyservice -> service 이렇게 되는데.service에서 this.method()와 같이, proxyservice를 거치지 않고 호출된 메서드들이 문제가 된다면.service에서 proxyservice.method()로 호출하면 안될까요? 이와 같은 호출을 위해 service에서 proxyservice를 주입받구요. private final Proxy<service> proxyservice = proxyUtil.getInstance().get(); 뭐 이런거 없을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
item
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]item 을 추상 클래스로 만든 이유가 뭘까요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
질문 있습니다.
동시성 프로그래밍에서 발생할 수 있는 데이터 정합성이 깨지는 것을 방지하기 위해 DB에서는 락을 도입했다는 부분을 잘 이해했습니다. 수업 내용 중에 memberA의 계좌를 세션1과 세션2에서 각각 500원과 1000원으로 변경하려고 시도하는 부분에서, 세션1이 먼저 락을 획득하고 500원으로 커밋한 다음에 세션2가 1000원으로 수정하였습니다.제가 생각하기에 세션2가 계좌를 1000원으로 수정하려는 시도는, 계좌가 10000원인 상태에서 비즈니스 로직에 따라 데이터를 변경하려고 했다고 생각합니다. 따라서 세션2가 락을 획득했을 때 기존 계좌의 데이터가 변경되었다면, 이미 세션2의 트랜잭션이 시작되어 락을 요청한 상태여도, 획득한 락을 받아들여 그대로 트랜잭션을 실행하지 않고 다시 비즈니스 로직을 검토하는 과정이 필요할 것으로 생각 됩니다.이러한 문제점이 발생했을 때 개발자가 취할 수 있는 방법이 있을까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
쓰레드 컨텍스트 스위칭 관련 질문 드립니다.
먼저, 제가 컨텍스트 스위칭에 대해 알고 있던 내용은 프로세스 컨텍스트 스위칭인데, CPU 코어 하나당 하나의 프로세스만 점유를 할 수 있기에, 한 코어에서 여러 프로세스를 번갈아 가며 수행하기 위해 컨텍스트 스위칭이 일어난다고 알고 있습니다. 궁금증이 생긴 부분은 쓰레드 컨텍스트 스위칭의 구조와 스프링 웹플럭스에서 쓰레드의 개수를 CPU 코어의 개수에 따라 설정해두어 성능을 높인다는 부분입니다. 쓰레드는 프로세스에 종속적이라고 알고 있습니다. 한 프로세스 안에서 여러 쓰레드가 생성 될 수 있는 건 알지만, 그렇게 생성된 여러 쓰레드 간에 컨텍스트 스위칭이 일어난다는 것은, 무엇을 점유하기 위해 발생하는 것인지 궁금합니다. 프로세스는 CPU 코어를 점유하기 위해 컨텍스트 스위칭이 일어나기에, 쓰레드도 CPU 코어를 점유하기 위해 컨텍스트 스위칭이 일어난다 생각해보기는 조금 모순인 부분이 있어 질문 드립니다. 또한, 스프링 웹플럭스에 관련한 부분도, 한 프로세스는 하나의 CPU를 점유하기에 그 프로세스 안에서 생성된 쓰레드 또한 해당 프로세스가 점유한 CPU 코어에만 관련되어 수행된다고 생각했는데, 쓰레드 개수를 CPU 개수에 맞췄다는 말은 쓰레드를 생성한 프로세스가 점유한 CPU 코어 외 다른 코어도 쓰레드가 쓸 수 있다는 것인가 싶어 질문 드립니다. 감사합니다.
-
미해결스프링 부트 개념과 활용
자동 설정 만들기 2부에서 질문 있습니다
자동 설정 만들기 2부:@ConfigurationProperies에서 진행하다가 에러가 발생했습니다spring boot getting started 프로젝트에서 빈을 등록하지 않으면spring boot starter의 HolomanConfiguration에서 @ConditionalOnMissingBean과 AutoConfiguration을 통해HolomanProperties의 값을 참조해서 application.properties에 있는 내용으로 빈을 만드는 것으로 이해했습니다따라서 Application 프로젝트에서 빈을 재정의할 필요없고 properties만 정의하면 되는 것으로 알고 강사님 코드를 다시 살펴봤는데 어디를 고쳐야 되는지 잘 모르겠습니다...아래는 HolomanProperties와 에러가 발생한 실행결과를 올렸습니다
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]pathvariable 을 쓰는 경우와 requestparam 을 쓰는 경우가 나뉘어져 있나요? 아니면 둘의 역할이 달라 다르게 쓰는 건가요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
helloController 중 addAttribute
이 부분에서 문제가 발생하는데 어떻게 해결해야할까요?위에 Model에서 오류나는 부분은 다른분의 질문을 보고 해결했는데 이 부분은 질문을 찾지 못해 올립니다!
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 편의 메서드 질문 입니다.
연관관계 편의 메서드가 아래와 같은 상황에서 사용되는 것이 맞는지 궁금해서 질문드립니다. Project, Client 클래스가 서로1 대 다, 다 대 1 관계라고 했을 때 Project를 등록할 때 Client가 필요하기 때문에Project 쪽에이런 식으로 연관관계 편의 메서드를 작성해 주고 아래와 같이 Project의 createProject2 메서드를 이용하여 등록해준다고 하면 Project 쪽에서 작성해둔 연관관계 편의 메서드를 아래와 같이 사용하는 게 맞는 사용 방법인가요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
프록시 내부 호출 문제
프록시 내부 호출 강의를 들으면서 "그러면 클래스단에 @Transactional을 사용해서 모든 메서드에 트랜잭션을 적용하면 애초에 이런 문제가 발생 안하지 않나?" 라는 생각이 들었습니다.혹시 이런 방법은 좋지 않은 방법인가요?
-
미해결스프링 핵심 원리 - 기본편
ApplicationContext 통한 객체 추출의 단점
안녕하세요! 강의 잘 수강하고 있습니다. ApplicationContext 통해서 객체 추출하면 컴파일 타임에서 오류를 찾기 어려운 단점이 있는 것 같아서, 정말 단점이 맞는지 확인하고 싶어서 질문드립니다.Spring을 적용하기 전 AppConfig를 직접 사용하던 경우에는 method 호출로 객체를 생성하기 때문에 method 이름이 변경된다면 컴파일 에러로 발견할 수 있습니다.그런데 AnnotationConfigApplicationContext을 사용하고 나서는 등록된 Bean을 이름으로 검색해서 찾아오기 때문에 런타임 에러가 발생할 가능성이 생깁니다.만약 제가 AppConfig 내의 method 이름을 변경하면 아래 코드는 에러를 만들게 됩니다.ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); MemberService memberService = applicationContext.getBean("memberService", MemberService.class);@Configuration public class AppConfig { @Bean public MemberService emberService() { // 오타 발생 return new MemberServiceImpl(memberRepository()); } }이렇게 되면 정적 타입 언어의 장점을 상쇄시키는게 아닌지 의문이 들었습니다. 그리고 서버 운영중에 Bean을 찾지 못해서 장애가 발생하는 경우는 없는지도 궁금합니다! 제가 뭔가 이해를 잘못했거나 내용을 놓쳤을 수도 있을 것 같습니다. 답변 기다리겠습니다 🙏
-
미해결스프링부트 시큐리티 & JWT 강의
intelliJ jdk11 oauth로그인 에러 문제입니다.
안녕하세요 훌륭한 강의를 잘 듣고있는 학생입니다.다름이 아니라 제가 oauth로그인을 하면 오류가 발생하여 문의드립니다.우선 저는 jdk11과 Gradle을 사용하고있습니다.위와 같이 잘 작동하다가 아래와 같이 oauth로그인을 사용하면 에러가 발생합니다.Parameter 0 of method setFilterChains in org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration required a bean of type 'org.springframework.security.oauth2.client.registration.ClientRegistrationRepository' that could not be found.에러의 총 내용은 위와 같습니다.그래서 다른 질문들의 답변을 보니 라이브러리의 충돌 및 다운로드의 문제인거 같아 intelliJ에서 제공하는 invalidate cache기능을 사용하여 다시 재빌드를 하였지만 같은 에러가 발생하고 .\gradlew --refresh-dependencies를 사용하여 재빌드 또한 진행하였지만 같은 결과가 나왔습니다. 마지막으로 toolbox 및 인텔리제이를 다시 실행해도 같은 현상이 발생합니다. 혹시 방법을 알 수 있을까요??