inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

[hibernate 6] custom 함수 등록 방법 공유

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

Hibernate 6에서는 강의에서 처럼 Dialect를 통한 함수 등록이 불가능합니다. https://start.spring.io/ 로 Spring Boot 3버전으로 만드신 분들은 문제를 겪으실 거라고 생각합니다. 등록법 FunctionContributer 의 구현체를 만들어 준다. package custom; import org.hibernate.boot.model.FunctionContributions; import org.hibernate.boot.model.FunctionContributor; import org.hibernate.dialect.function.StandardSQLFunction; import org.hibernate.type.StandardBasicTypes; public class CustomFunctionContributor implements FunctionContributor { @Override public void contributeFunctions(FunctionContributions functionContributions) { functionContributions.getFunctionRegistry() .register("group_concat", new StandardSQLFunction("group_concat", StandardBasicTypes.STRING)); } } src/main/resources/META-INF/services/org.hibernate.boot.model.FunctionContributor 파일을 생성한다. 해당 파일에 직접 구현한 CustomFunctionContributor를 등록한다. 패키지명.컨트리뷰터이름 형태로 등록!! custom.CustomFunctionContributor 이렇게 하시면, 강의에서처럼 group_concat함수를 사용하실 수 있습니다. Dialect는 변경 안하셔도 됩니다. reference https://aregall.tech/hibernate-6-custom-functions

  • java
  • jpa
codingNoob12 댓글 5 좋아요 22 조회수 3553

@Bean 등록을 @SpringBootApplication 내부에서 해도 괜찮나요?

미해결

스프링 DB 2편 - 데이터 접근 활용 기술

@Bean 등록은 일반적으로 @Configuration 애노테이션이 있는 설정 클래스 내부에서 이뤄지는 걸로 이해하고 있습니다. 하지만 ItemServiceApplication 클래스를 보면 @Configuration 이 아닌데도 TestDataInit가 @Bean 으로 등록되고 있습니다. @Import(MemoryConfig.class) @SpringBootApplication(scanBasePackages = "hello.itemservice.web") public class ItemServiceApplication { public static void main(String[] args) { SpringApplication.run(ItemServiceApplication.class, args); } @Bean @Profile("local") public TestDataInit testDataInit(ItemRepository itemRepository) { return new TestDataInit(itemRepository); } } 찾아보니, @SpringBootApplication 애노테이션이 이미 암시적으로 @Configuration 애노테이션을 포함하고 있기 때문에 가능하다고 봤습니다. 실제 @SpringBootApplication 이 @Comfiguration 을 포함하고 있어서 위 코드가 가능한 게 맞나요? 그렇다고 해도 이미 @Configuration 이 붙은 MemoryConfig가 이미 있는데, 왜 굳이 @SpringBootApplication 에서 빈으로 등록하려는 건가요?

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
김동민 댓글 1 좋아요 1 조회수 548

[공유]Invalid value type for attribute 'factoryBeanObjectType': java.lang.String

미해결

스프링 DB 2편 - 데이터 접근 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 스프링 부트 버전 3.2.0 사용 하시는분들 mybatis 의존성 추가하실때 이렇게 추가하시면 돼요..!

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
박준일 댓글 3 좋아요 12 조회수 9589

private static method를 사용하는 이유를 알고 싶습니다.

해결됨

김영한의 실전 자바 - 기본편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] private static method 를 사용하는 이유를 알고 싶습니다. [질문 배경] 영한님의 다른 강의(스프링 강의로 기억합니다.) 중에 아주 단순한 기능을 private static method를 사용하셔서 만드신 걸 본적이 있었습니다. 왜 private 접근제어자를 사용하셨는데, 인스턴스 메서드가 아닌 static 메서드를 사용하셨을까? 궁금하여 여러 검색과 이리 저리 혼자서 생각도 많이 해보고 나름대로 정리했습니다만 뇌내 망상 수준이라.. 영한님의 답변만큼 확실한건 없을 것 같아 질문드립니다. [검색 등을 통해 제가 정리한 내용] 속도 : 인스턴스 메서드의 경우에는 메서드 영역의 virtual table을 거쳐서 이 인스턴스에 매핑되는 메서드를 조회 후 메서드에 접근해야 하지만, static 메서드의 경우에는 그럴 필요가 없어 인스턴스 메서드에 비해 빠르다. -> 이 부분은 제가 여러 정보를 조합한 내용이라 신빙성이 떨어지고, 과연 속도 측면에서 유의미한 차이가 있을까 의문입니다. 객체지향기반의 커뮤니케이션 : private 접근제어자를 명시하여 캡슐화를 하였으나 static 까지 붙여 이 메서드는 내부에서만 쓸 뿐더러 객체지향적으로 대화할 의도가 없으니 거들떠도 보지 말아라 라는 의미를 담고 있는 것이 아니었을까 추측해봅니다.

  • java
  • 객체지향
  • static
김경민 댓글 1 좋아요 1 조회수 2269

JpaRepositoryV2 도입 이유

해결됨

스프링 DB 2편 - 데이터 접근 활용 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 제가 이해한 내용을 설명하고, 이해가지 않은 내용을 질문하려 합니다. Spring Data JPA 기술을 이용하여 SpringDataJpaItemRepository를 구성했고, 해당 interface를 바로 ItemServiceV1에서 의존관계 주입하여 사용하고 싶다. 하지만, 이미 ItemServiceV1은 ItemRepository interface를 주입받아 사용하고 있기 때문에 SpringDataJpaItemRepository interface를 사용하려면 ItemServiceV1에서 코드레벨에서의 수정이 필연적으로 일어나게 된다.(문제점 1) 또한, SpringDataJpaItemRepository는 ItemRepository를 extends한 것이 아닌 JpaRepository를 extends한 것임.(문제점 2) 따라서 이런 문제점들 때문에 JpaItemRepostioryV2 class를 도입하여 ItemRepository와 SpringDataJpaItemRepository 사이를 맞추려 한다. 위 내용처럼 서술했을 때 올바르게 서술한 것인지 궁금하고, 2가지 이해가지 않는 부분에 대해서 질문하고 싶습니다. 첫번째: 문제점2가 왜 문제인건지 잘 모르겠습니다. 두번째: “ItemRepository와 SpringDataJpaItemRepository 사이를 맞추려 한다”에서 맞춘다가 정확히 어떤 것을 맞추는 것이라고 해야 표현 상 올바른 것인지 잘 모르겠습니다.

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
WOOKI 댓글 2 좋아요 0 조회수 450

JpaRepository - 기본적인 CRUD 기능

해결됨

스프링 DB 2편 - 데이터 접근 활용 기술

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] -> 강의 pdf 캡처본입니다. 해당 캡처본에서 JpaRepository를 인터페이스 상속받으면 기본적인 CRUD 기능을 사용할 수 있다고 하는데, '기본적인 CRUD 기능'이 의미하는 것이 'CrudRepository가 가지고 있는 CRUD 메서드'(save, delete 등등)를 의미하는 것인가요?

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
WOOKI 댓글 1 좋아요 0 조회수 340

mapper.xml 에서 dtd 를 못찾습니다.

미해결

스프링 DB 2편 - 데이터 접근 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] mapper.xml 제일 윗줄인 DOCTYPE 부분 제일 뒤쪽 dtd 주소에 빨간줄이 그어지면서 cannot find dtd file 또는 해당 dtd 파일을 받는중에 오류가 났다고 나오는데요, 덕분에 <mapper>, <select>등 전부 빨간줄이 그어집니다 ㅠ 모든 dtd 파일을 못가져오나 싶었는데, mybatis-context.xml의 config dtd는 또 잘 가져오구요... 어떤것 때문에 mapper dtd를 못가져오는건지 모르겠습니다

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
kwanjungkim 댓글 1 좋아요 1 조회수 2045

배열에 대한 질문

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

안녕하세요 강사님 배열에 대해서 정말 이해하기 쉽게 알려주셔서 정말 감사드립니다! students[0] = 90; students[1] = 80; students[2] = 70; students[3] = 60; students[4] = 50; 이 선언문을 for문을 활용해서 students[i]가 이전의 값을 계속 참조해서 10씩 증가 즉, students[0] = 60; students[1] = 70; students[2] = 80; students[3] = 90; students[4] = 100; 이렇게 응용한 코드를 작성해보려고 했는데 해당코드가 리펙토링이 잘 된 코드인지 컨펌을 받고 싶습니다.

  • java
  • 객체지향
옙버디 댓글 2 좋아요 0 조회수 477

11:50초 질문 입니다.

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] @OneToMany 어노테이션 사용시 new ArrayList<>(); 를 관례상 쓰는 이유 외에도 다양한 장점들에 대해 자세히 알 수 있을까요? 감사합니다.

  • java
  • jpa
홋메 댓글 1 좋아요 0 조회수 281

[gradle build error] gradle clear build를 할때 모두 자바 17을 사용하고 있음에도 오류가 발생하고 있습니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요. 다름이 아니고 다음과 같이 gradle은 8.4 버전이고 자바는 17버전을 사용하고 있습니다. 자바 17은 gradle 실행, complie할때 등등 모든 부분해서 11이 아닌 17을 사용하고 있음에도 불구하고 지속적으로 저런 에러가 발생해서 질문드렸습니다. intellij를 껏다 켜보기도 하였구요

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
kim hyunbin 댓글 2 좋아요 1 조회수 1401

main 메서드

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

main 역시 메서드인데, 앞전 메서드에서 받는 변수는 매개변수인데 main 메서드 안에는 인자를 뜻하는 args가 존재하는 건가요?? 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.

  • java
  • 객체지향
호롤로로롱 댓글 1 좋아요 0 조회수 547

controller의 dto를 repository에서 사용할 수 없는 이유

미해결

스프링 DB 2편 - 데이터 접근 활용 기술

보통 흐름이 controller -> service -> repository 로 흐르기 때문에 service에서 repository를 의존하는 것은 상관이 없지만 반대로 repository에서 service를 의존하는 것은 문제가 됩니다.(예를들면 service단의 dto를 참조한다던지 등) 이렇게 순환 관계가 생길때의 문제가 무엇일까요?

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
정지호 댓글 1 좋아요 0 조회수 745

12. 다형성과 설계 NewCar에서 pressBrake() 기능을 추가한다면..

해결됨

김영한의 실전 자바 - 기본편

안녕하세요 영한님! 궁금한 점은 OCP 원칙까지 보고나서 생겨난 질문입니다. Car 인터페이스를 구현하는 K3Car, Model3Car, NewCar의 클래스, Driver는 Car인터페이스를 의존하고 있는데요.,,. 강의 내용과 같이 Car 인터페이스에 있는 추상메소드들만 구현한 클래스끼리 있을 때는 크게 어려운 점이 없는 것 같지만.,., 위와 같이 NewCar에서 이 때까지 없었던 pressBrake()라는 기능을 새로 추가하여 Driver에게 해당 메소드를 사용하게 하고싶다면! 어떻게 코드를 짜야하는지 가 저의 궁금증입니다! 먼저 코드를 짜보면서 혼자 해결해보려고 했으나,.., 자바와 아직 완벽히 친해지지 못했는지 더 좋은 방법이 있지 않을까 하며 만족스러운 해법을 찾지 못 하고 있습니다.. 1. Driver 클래스의 drive() 메서드 블록 안에서 instanceof를 사용하여 car변수가 NewCar 클래스일 때 pressBrake()를 사용한다면? 강의에서 배웠던 OCP원칙 중 Closed for modification에 모순이 생겨버리고.. 2. Car 인터페이스에 pressBrake() 메서드를 넣는다면? OCP 원칙에 모순이 생길 뿐더러 오히려 대대적인 코드 수정도 생겨버립니다.. 해당 사항에 대해서는 어떻게 대처를 해야 잘했다고 소문이 날지 궁금하여 질문을 올리게 되었습니다!

  • java
  • 객체지향
박정현 댓글 1 좋아요 4 조회수 553

JPA 순환참조 질문 드립니다.

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. EventGroupInformation.java @NotFound(action = NotFoundAction. IGNORE ) @JsonBackReference @ManyToOne(cascade = CascadeType. PERSIST , fetch = FetchType. LAZY ) @JoinColumn(name="CATEGORY_ID", insertable = false, updatable = false) private CategoryInformation categoryInformation; @BatchSize(size = 1000) @JsonManagedReference @OneToMany(mappedBy = "eventGroupInformation", cascade = CascadeType. PERSIST , fetch = FetchType. LAZY ) @Where(clause = "DBSTS = 'O' AND FEED_DISPLAY_YN = 'Y' AND START_DATE <= SYSDATE AND END_DATE >= SYSDATE ") @Column(insertable = false, updatable = false) private List<EventInformation> eventInformations; CategoryInformation.java @BatchSize(size = 1000) @JsonManagedReference @OneToMany(mappedBy = "categoryInformation", fetch = FetchType. LAZY ) @Where(clause = "DBSTS = 'O' AND START_DATE <= SYSDATE AND END_DATE >= SYSDATE ") @Column(insertable = false, updatable = false) //@Access(val ue = AccessType.PRO PERTY) public List<EventGroupInformation> eventGroupInformations; 여러개의 oneToMany가 걸려 있는 entitiy들을 강의 V5예제를 참고하여 개선중에 있습니다. CategoryInformation(Order) ㄴ EventGroupInformation(OrderItem) ㄴ EventInformation(Item) 이런 식에 구조인데요, 각각 oneToMany 입니다. EventGroupInformation과 EventInformation을 fetchJoin을 통해 쿼리를 @Query(value = "SELECT distinct eg FROM EventGroupInformation eg " + "LEFT JOIN FETCH eg.eventInformations e " + "WHERE eg.dbsts = :dbsts " + "AND eg.categoryId IN :categoryIds" ) 호출하면 해당 fetchjoin 쿼리 하나만 나갈꺼라고 생각을했는데, 갑자기 상위 entity인 CategoryInformation 테이블에 category_id(PK)로 category_id 개수만큼의 N+1 이슈가 발생 하였습니다. JsonBackReference, JsonManagedReference 해당 옵션을 주면 역참조가 안되어야 하는게 맞지 않나요?? 추가로 ManyToOne 쪽에 @JsonIgnore 도 추가 해보았으나 마찬가지입니다 ㅠ 제가 놓치고 있는게 있을까요? 김영한 선생님 강의 에서는 OrderItem-Item 관계에서 IN쿼리를 호출했을때 IN절에 포함되는 orderId기준의 상위 엔티티인 Order 테이블에 역으로 쿼리가 나가는건 못봤는데 말이죠.. (물론, 양방향 관계를 끊고 단방향 설정시 N+1 쿼리는 나가지 않습니다.)

  • java
  • spring
  • spring-boot
  • jpa
김정훈 댓글 2 좋아요 1 조회수 607

상태 변화 리스너 중 switch-case문 오류 문제

미해결

윤재성의 자바 기반 안드로이드 앱개발 Part 1 - UI Programming

강의 22분 35초 경 switch-case 문을 통해 체크박스의 id로 분기를 하려고 할 때 // id로 분기함 switch (checkboxId) { case R.id.checkBox: break; case 문의 R.id .checkBox 부분에서 "Constant expression required" 에러가 발생합니다. 구글링을 해보니 switch-case 문의 상수가 final로 선언되지 않아 발생하는 문제라고 하는데 어떻게 해결할 수 있을까요?

  • java
  • android
bumseok123 댓글 1 좋아요 0 조회수 3725

[static 메서드3] 강의 보고 질문드립니다.

미해결

김영한의 실전 자바 - 기본편

[static 메서드3] 강의 보고 질문드립니다. import static 으로 특정 클래스의 메서드 적용해서 메서드 사용하는 것과 클래스 .(dot) 찍고 메서드 사용하는 것 중 실무에서는 어떻게 사용하는 편이 좋은지 궁금합니다.

  • java
  • 객체지향
카드캡터솔쨩 댓글 2 좋아요 0 조회수 458

어떻게 생성자 없이 number1과 number2에 값이 할당된건지 모르겠습니다.(DTO관련)

해결됨

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

안녕하세요 강사님먼저 첫번째 질문은 DTO (CalculatorMultiplyRequest request)를 매개변수로 받는 데, 자동으로 request 인스턴스가 생성되는 것이 이해가 가지 않습니다. 클래스는 생성자를 호출하기 위해서는 new키워드로 생성해야 하는 것으로 알고있는데, 이해가 잘 되지 않습니다.두번째 질문은 GET요청과는 다르게 POST요청은 Request 클래스 내부에 생성자 없이도 number1과 number2에 값이 할당되는 점입니다.어떻게 이게 가능할 수 있죠..?

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
mayo3610 댓글 1 좋아요 6 조회수 632

<property name="hibernate.hbm2ddl.auto" value="update"/>

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. <property name="hibernate.hbm2ddl.auto" value="update"/> create / create-drop 은 잘 됩니다. 하지만 update는 이상한점을 발견을 했습니다. 이유를 알고 싶어서 이런 질문 드립니다. update를 value에 작성을 한뒤에 Member class 에서 A - private int age x B - private Integer o 위 와 같이 작성을 하고 나서 실행을 해보면 A는 오류가 발생하지만 B는 정상적으로 작동이 됩니다. 이유를 알려주세요.

  • java
  • jpa
chewjob99 댓글 1 좋아요 0 조회수 323

의존성주입 대해 질문드립니다.

미해결

스프링 DB 2편 - 데이터 접근 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요, 해당 수업과는 관계가 없는 내용이긴 한데..의존성 주입 관련해서 조금 헷갈리는 부분이 있어 질문드립니다. 먼저, ItemServiceApplication 클래스에서 보면 스캔 범위가 hello.itemservice.web 이하의 경로로 지정되어 있습니다. 아래는 SpringDataJpaConfig 클래스입니다. SpringDataJpaItemRepository 를 주입받는 과정에서, 빨간 에러 표시가 뜨고 'Could not autowire. No beans of 'SpringDataJpaItemRepository' type found.' 라는 빈을 찾을 수 없다는 메시지가 표시됩니다. 어찌보면 당연한 것 같습니다. 해당 레포지토리가 속해있는 경로는 스캔 대상이 아니거든요. 게다가 SpringDataJpaItemRepository 에는 해당 인터페이스를 빈으로 등록할만한 요소를 가지고 있지는 않습니다. 따로 component 로 등록될만한 애노테이션이 붙은것도 아니고요. 그런데 생각해보면 JpaRepository 인터페이스를 상속받고 있어서, 해당 인터페이스에 스프링 빈으로 등록될만한 요인이 있다면 가능한 것일까 싶은 생각은 드는데..이 부분에 대한 확신이 들지 않아 질문드립니다. 실제로 ItemServiceApplication 에서 스캔 범위를 "hello.itemservice.web" -> "hello.itemservice" 으로 변경해보면 위에서 본 빨간 에러는 사라집니다. 그런데 만약 빨간 에러가 나오는게 맞는 상황이라면, 저희가 지금까지 작성한 로직들이 동작하지 않아야 할 것 같아서요. 특히 SpringDataJpaItemRepository 를 주입받는 ItemServiceV1 클래스에서 주입이 안되는게 맞지 않나 싶습니다. 물론 서비스는 추상화된 레포지토리의 의존하고 있긴 하지만, 의존성이 주입되는 시점에는 구체 클래스인 SpringDataJpaItemRepository 클래스가 주입될텐데 이게 정상적으로 동작하는게 이해가 조금 안됩니다. 글이 너무 길었는데..정리해서 말씀드리면 SpringDataConfig.java 에서 SpringDataJpaItemRepository 를 주입받을 때 'Could not autowire. No beans of 'SpringDataJpaItemRepository' type found.' 라는 메시지가 IDE에 표시된다. 실제로 SpringDataJpaItemRepository 클래스는 컴포넌트 스캔 대상 범위에 속하지 않는다. 그런데도 애플리케이션 로직 및 테스트 로직이 정상적으로 수행된다. 해당 상황이 이해가 되지 않는다. 입니다.

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
댓글 1 좋아요 0 조회수 442

인기 태그

인프런 TOP Writers

주간 인기글