묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
/hello 페이지 이동시 에러가 떠요!
.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
처음에 무한 Loop 을 돌게 되는 이유
안녕하세요~ 강의 중 처음에 order 들을 조회하는 api 가 무한 루프를 도는 이유가 궁금해서 질문을 올리게 되었습니다 (6분 30초 ~ 7분 부분)우선, Order > Member > Order 조회 의 순으로 일어나기 때문에 무한 루프가 발생한다고 설명해주셨습니다.이 때, Order 는 member 가 Lazy 설정이 되어 있고, Member 에도 List<Order> 를 가져오는 것이 Lazy 로 설정이 되어 있습니다 (@OneToMany 이기 때문) .[모든 order 를 조회하라] 라는 로직에 member 를 join 해서 가져오기 대문에, Order 가 Member 를 조회해서 가져오는 부분은 이해를 하였습니다. 쿼리도 다음과 같이 나가더라구요! 2023-01-15 18:08:52.603 DEBUG 74756 --- [nio-8080-exec-1] org.hibernate.SQL : select order0_.order_id as order_id1_6_, order0_.delivery_id as delivery4_6_, order0_.member_id as member_i5_6_, order0_.order_date as order_da2_6_, order0_.status as status3_6_ from orders order0_ inner join member member1_ on ( order0_.member_id=member1_.member_id ) 2023-01-15 18:08:52.713 DEBUG 74756 --- [nio-8080-exec-1] org.hibernate.SQL : select member0_.member_id as member_i1_4_0_, member0_.city as city2_4_0_, member0_.street as street3_4_0_, member0_.name as name4_4_0_ from member member0_ where member0_.member_id=? 2023-01-15 18:08:52.722 DEBUG 74756 --- [nio-8080-exec-1] org.hibernate.SQL : select orders0_.member_id as member_i5_6_0_, orders0_.order_id as order_id1_6_0_, orders0_.order_id as order_id1_6_1_, orders0_.delivery_id as delivery4_6_1_, orders0_.member_id as member_i5_6_1_, orders0_.order_date as order_da2_6_1_, orders0_.status as status3_6_1_ from orders orders0_ where orders0_.member_id=?첫번째 쿼리로 join 을 하는데, <이후 호출>에 의하여 두, 세번째 쿼리가 나가는 것 같습니다.이 때, 각각의 멤버의 정보를 불러오기 위하여 member 쿼리가 나가는 것은 이해가 되는데, orderItem 이 LAZY 임에도 쿼리가 또 나가는 이유가 궁금합니다. response 가 나가는 과정에서 Json 형성을 위해 ObjectMapper 가 getMember, getOrderItem 등을 수행하는 것으로 알고 있는데, 이 때 불러오기 때문일까요?? 2.ObjectMapper 가 무시할 수 있도록 다음과 같이 변경후 실행시켜 보았습니다. @JsonIgnore @OneToMany(mappedBy = "member") private List<Order> orders = new ArrayList<>(); 이렇게 될 시엔 다음과 같이 Serializable 관련 에러가 발생하는 것 같았습니다. 그랬더니 두번재 쿼리까지만 나가긴 하는데, 다음과 같은 에러가 발생합니다.com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]->com.example.actualjpa.domain.Order["member"]->com.example.actualjpa.domain.Member$HibernateProxy$jMkxupIu["hibernateLazyInitializer"])검색을 해보니 프록시 객체를 Serialize 하려고 했다는 에러가 발생하는 것 같은데, orders 에 프록시 값들이 들어있는게 맞을까요? 반대인 경우에는 DB 에 FK값이 있기 때문에 id 값만을 가지고 Proxy 객체를 형성한다는 점을 완전히 이해를 했었는데, 이와 같은 경우에는 각 ID 값이 DB에 없기 때문에, Member만 조회시 orders 내의 Order 들에 대한 프록시도 없고 아예 아무 정보도 없겠구나 라고 이해를 했었습니다.즉, 레이지일 경우 Member만 조회시 orders 에 대한 정보는 Member 객체에 없다 라고 이해를 했었습니다. @JsonIgnore를 해서 조회같은걸 할 수 없도록 했음에도, 위와 같은 에러가 발생하는 이유가 어떤건지 알 수 있을까요?? =========================위 질문에 대한 수정사항:제가 질문한 바로 뒷내용이 JsonIgnore 설정해주시고 같은 에러에 대해서 설명해주시는 부분 확인했습니다 ㅠㅠ 프록시 객체 때문에 발생하는 에러가 맞네요.그래도 같은 질문을 드리고 싶은데, 1:N 관계에서 Proxy 객체에 대해서 조금 이해가 안되었습니다(JPA 강의 완강했습니다). Apple 과 Tree 라는 N:1 관계에서 살펴보면 (양방향 모두LAZY 설정시) , Apple Entity 내의 private Tree tree가 있을 것이고, APPLE DB에는 외래키값으로 tree_id 가 들어가있을 것이기 때문에 그 값을 토대로 프록시 객체를 형성해 놓는다는 사실은 잘 이해하였습니다.하지만 그 반대일 경우 에 대해서 이해를 못한 것 같습니다 (JPA 강의에서도 반대에 대한 프록시 구성 설명은 없었던 것 같습니다 ㅠ). 반대의 경우 Tree DB 안에는 Apple 을 외래키값으로 가지고 있지 않은데, 어떻게 프록시 객체를 형성해 놓는 걸까요?? (프록시 객체를 형성해 놓기 때문에 위 2번과 같은 상황이 발생한 것으로 보입니다). 다음과 같은 예제를 설정해보았습니다.@Test @DisplayName("1:N에서 1이 N List를 조회시 :: LAZY LOADING 의 타입은 Proxy") void test2() { Tree findTree = em.find(Tree.class, tree.getId()); System.out.println("findTree.getApples().get(0).getClass() = " + findTree.getApples().get(0).getClass()); }이 때, em.find 만 해서 tree 를 조회하였을 경우 쿼리가 Tree 만을 조회하도록 나가는 것은 확인했습니다. 하지만, 그 아래 get(0) 를 수행하는 순간 "Apple 테이블에서 Tree_ID={tree_id} 인 값을 찾아와라" 라고 쿼리 문이 나가는 것을 확인했습니다. (getClass 를 통해 프록시가 맞는지 확인하려 했으나, get() 을 하는 순간 select 가 나가서 확인하지 못했습니다)즉,Apple 에서 Tree 프록시를 형성할 때는 Apple DB에 있는 외래키를 통해 Tree Proxy 에 PK 값을 넣어준 상태로 프록시를 형성하였는데, Tree 에서 Apple 들의 프록시를 형성할 때는 외래키가 없으므로, 그냥 자신의 PK 값을 통해 Apple 의 외래키 값을 넣어준 상태로 프록시를 형성해 둔다(??).이렇게 정리되는게 맞는 걸까요?질문이 너무 기네요.... 계속 붙이다 보니 .... 죄송합니다. 2번 질문은 그냥 아래 수정사항 이후 질문이라고 봐주시면 될 것 같습니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
클래스 - 상속 (후반전) 강의 질문
강의에서와 달리 SpeedCam.java의 public String name;을 지우지 않으니 실행 결과의 마지막 줄에서 "과속단속 카메라 : 사진을 촬영합니다" 가 아닌 "카메라 : 사진을 촬영합니다"가 나오는데, 왜 이런 결과가 나오는 것인지 궁금합니다.제 생각으로는, SpeedCam.java의 public SpeedCam()에서 this.name = "과속단속 카메라"를 적어 놨으니 public String name;을 지우든 지우지 않든 "과속단속 카메라 : 사진을 촬영합니다" 가 나와야 할 것 같은데, public String name;을 지우지 않고 남겨 놓으니 SpeedCam()에서의 this.name이 무시가 되는 것 같아 그 이유가 궁금하여 질문드립니다.감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 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, 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 성능에 크게 차이가 있을까요?혹시 현업에서는 어떻게 하고 있을까요? 팀마다 다를까요?
-
미해결실전! Querydsl
count query 질문입니다
[질문 내용]아래처럼 List<MemberTeamDto> 를 쿼리해올때, 최적화를 위해 count query 를 따로 작성하셨는데, 왜 result.size() 로 바로 total count 값을 가져오면 안되는건지 궁금합니다! 이유가 무엇인가요?List<MemberTeamDto> result = queryFactory .select(new QMemberTeamDto( member.id.as("memberId"), member.username, member.age, team.id.as("teamId"), team.name.as("teamName"))) .from(member) .leftJoin(member.team, team) .where( usernameEq(condition.getUsername()), teamNameEq(condition.getTeamName()), ageGoe(condition.getAgeGoe()), ageLoe(condition.getAgeLoe()) ) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch();
-
미해결실전! Querydsl
em.flush(),clear() 대신 @Modifying 어노테이션을 붙여도 되나요?
1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@Modifying 을 어노테이션으로 단다면, em.flush(),clear() 코드없이 동일한 동작을 수행하게 되나요?스프링 데이터 JPA에서는 Repository위에 달았는데요. 뒷 강의에서 Spring data JPA와 QueryDSL을 병행해서 사용하기 위해 custom Repository를 만든다고 배웠습니다. 이 custom Repository의 함수에 @Modifying을 달아도 동일하게 동작하는지 궁금합니다. 정리하자면 QueryDSL에서도 @Modifying이 적용되는지 궁금합니다.
-
해결됨스프링 시큐리티 OAuth2
강의에 매칭되는 git branch 찾기가 매우 힘듭니다.
안녕하세요 !git branch 마다 README 파일이 있는건 아니라서강의에 해당하는 git branch 를 찾기가 매우 힘듭니다.혹시 강의와 브렌치의 매핑이 정리된 자료가 있나요 ?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
item
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]item 을 추상 클래스로 만든 이유가 뭘까요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
no usages 이건 어떤 메세지 인가요?
결제해서 이제 시작해볼려고 하는데 no usages 라는 메세지가 많이 보입니다 처음 프로그램 깔며 어떤 설정을 잘못한걸까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값 타입 컬렉션 대안
값 타입 컬렉션 대안으로 entity에 감싼다고 했는데요예를 들어 @Embedable인 Address를 그냥 처음부터@Entity로 승격시켜버리면 되는데 굳이 왜 감싸나요?
-
미해결스프링 부트 개념과 활용
자동 설정 만들기 2부에서 질문 있습니다
자동 설정 만들기 2부:@ConfigurationProperies에서 진행하다가 에러가 발생했습니다spring boot getting started 프로젝트에서 빈을 등록하지 않으면spring boot starter의 HolomanConfiguration에서 @ConditionalOnMissingBean과 AutoConfiguration을 통해HolomanProperties의 값을 참조해서 application.properties에 있는 내용으로 빈을 만드는 것으로 이해했습니다따라서 Application 프로젝트에서 빈을 재정의할 필요없고 properties만 정의하면 되는 것으로 알고 강사님 코드를 다시 살펴봤는데 어디를 고쳐야 되는지 잘 모르겠습니다...아래는 HolomanProperties와 에러가 발생한 실행결과를 올렸습니다
-
미해결실전! Querydsl
정적쿼리와 동적쿼리의 개념의 차이점이 궁금합니다.
Querydsl 기술은 복잡한 쿼리를 작성할 때나 동적쿼리를 쉽게 작성할 때 큰 강점을 가진 것으로 알고 있습니다. 그런데 정적쿼리와 동적쿼리의 개념에 대한 차이점이 잘 와 닿지가 않아 질문을 드립니다.정적쿼리에 파라미터를 주고 파라미터에 따라 쿼리를 한 결과가 달라지는 것은 왜 정적쿼리인 것인지 조금 혼란스러워서요.정적쿼리와 동적쿼리를 확실히 구분하는 기준(?) 같은 것이 있는지 궁금합니다. 여기서부터는 제 생각입니다!혹시 정적쿼리에 파라미터를 넣어서 조회하는 것은 파라미터를 넣지 않으면 아예 SQL이 실행이 되지 않는 반면에 동적쿼리를 수업에서 예시를 들어서 설명하신 것처럼 이름은 들어가고 나이는 들어가지 않아도 쿼리가 실행은 되는 그런 차이일까요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
나도코딩님 객체부분에서 다형성의 의미를 알고싶습니다
메인 메소드에서부모클래스 객체이름 = new 부모클래스 이런식으로 메모리가 형성되었는데ex)Camera camera = new Camera();Camera factorycamera = new Camera();Camera speedcam = new Camera();다형성이기에 부모클래스 객체이름 = new 부모클래스or자식클래스 이런식으로 쓸수도있다ex)Camera camera = new Camera();Camera factorycamera = new Factorycamera();Camera speedcam = new Speedcam();라고 강의에서 말씀하셨는데요. 둘의 차이가 그냥 뒤에 자식클래스 이름을 쓸수있다는건데이게 무슨 변화가 있는건가요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
helloController 중 addAttribute
이 부분에서 문제가 발생하는데 어떻게 해결해야할까요?위에 Model에서 오류나는 부분은 다른분의 질문을 보고 해결했는데 이 부분은 질문을 찾지 못해 올립니다!
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 편의 메서드 질문 입니다.
연관관계 편의 메서드가 아래와 같은 상황에서 사용되는 것이 맞는지 궁금해서 질문드립니다. Project, Client 클래스가 서로1 대 다, 다 대 1 관계라고 했을 때 Project를 등록할 때 Client가 필요하기 때문에Project 쪽에이런 식으로 연관관계 편의 메서드를 작성해 주고 아래와 같이 Project의 createProject2 메서드를 이용하여 등록해준다고 하면 Project 쪽에서 작성해둔 연관관계 편의 메서드를 아래와 같이 사용하는 게 맞는 사용 방법인가요?
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
equals 말고 contains 를 써도 될까요?
안녕하세요. 강의 잘 듣고 있습니다.if (student.certification.equals("자바"))if (student.certification.contains("자바"))이렇게 해도 결과값은 같게 나오는데 보통 equals를 많이 사용할까요?!