실전! 스프링 데이터 JPA
실전! 스프링 데이터 JPA
수강정보
(71개의 수강평)
1225명의 수강생
5개월 할부시
월 17,600원88,000원
지식공유자 : 김영한
32회 수업 · 총 7시간 17분 수업
기간 : 평생 무제한 시청
수료증 : 발급 강의
수강 난이도 : 중급이상
kangsy763 프로필

modelMapper에 대해 질문하고 싶습니다! kangsy763 21시간 전
안녕하세요 영한님!!! 요즘 진행중인게 있어서 아직 새강의를 못들었어요 ㅜㅜ 요번 추석날때 외할머니집 가서 들으려고 하는데 기대가됩니다 ㅎㅎ! 이번 질문은 다름이 아니고 현재 modelMapper.map() 메서드를 이용해서 dto 에 있는 정보를 엔티티에 집어넣으려고 하는데, 해당 메서드가 엔티티에 setter 메서드 들이 존재할 때에만 작동을 하는 것 같더라구요 빌더패턴 또한 setter가 돌아가는데, setter사용을 지양해야하는데, 영한님의 경우에는 빌더패턴을 사용을 안하시나요? 그리고 modelMapper.map() 메서드도 지양하시는 편인가요?? 분명 해당 내용이 로드맵 강의 중 1개 강의에서 다뤘었고 현직자 분이 올린 질문글에도 빌더패턴과 관련해서 질문이 있었던걸로 기억해서 찾으려고하는데 안찾아지네요 ㅜ.ㅜ

5
E mergency 프로필

프록시 객체 확인시 사용되는 메소드 질문 E mergency 2일 전
안녕하세요 프록시 객체인지 아닌지를 테스트로 확인하고 싶다면 어떠한 메소드를 사용해야하나요?

2
Museop 프로필

스프링 데이터 JPA와 JPQL을 함께 사용할 경우 Repository에 대해 질문 드립니다. Museop 4일 전
김영한님 안녕하세요. 먼저 JPA를 사용함에 있어서 정말 중요한 지식들을 쉽고 좋은 강의를 통해 공유 해주심에 감사 드립니다. 개인적으로 작은 사이드 프로젝트를 진행 하면서 스프링 데이터 JPA를 공부하는 도중에 궁금한 점이 생겨서 이렇게 질문을 드리게 됐습니다. 현재 간단한 조회 쿼리는 스프링 Data JPA의 쿼리 메서드를 통해 해결하고 있고, 강의에서 언급 하셨던 And가 두 개 이상 붙는 조회 쿼리는 JPQL을 통해 해결하려 하고 있습니다. 이 때 JPQL, EntityManager를 직접 사용하는 Repository와 JpaRepository 인터페이스를 분리해서 사용하는 방법, 그리고 @Query 애노테이션을 활용하여 인터페이스 한 곳에서 JPQL을 함께 관리 하는 두 방법 중 어떤 방식이 더 컨벤션에 가까운지 궁금 합니다. 현재 제가 진행하는 사이드 프로젝트는 너무 작은 규모라 사실 한 인터페이스 안에 모든 로직이 다 들어가도 상관이 없겠지만 정말 규모가 큰 실무에서는 어떻게 하는지, 구체적으로는 JPQL도 객체지향 쿼리이기는 하나, 직접 SQL을 짜야 한다는 관점에 있어서는 Dao같은 것으로 따로 분리 해서 관리를 하는건 아닐까? 라는 의문이 들었습니다. 그리고 결국 JPA는 Spring Data JPA, JPQL, QueryDSL 세 가지 기술을 함께 사용 하게 된다는 말씀을 강의 중에 하셨는데요. 이 세 가지 기술을 모두 적용하는 경우에는 Repository가 어떤 구조로 관리가 되는지 알고 싶습니다. 실무 경험도 없고 아직 한창 공부하는 입장이다 보니 이런 질문이 조금은 낯설게 느껴지실 수도 있다는 생각이 드네요 :) 개발 공부가 쉽지 않아서 종종 지칠때도 있는데 영한님 강의 볼 때마다 긍정적인 에너지를 얻어가며 즐겁게 공부 하고 있습니다. QueryDSL강의와 이번에 내주신 스프링 강의까지 열심히 잘 듣겠습니다. 감사합니다.

2
E mergency 프로필

ddl-auto 관련해서 질문드립니다 E mergency 5일 전
강의를 다 듣고 oracle 11g로 테이블 자동 생성 테스트 중에 있습니다 h2데이터베이스 사용중일땐 ddl-auto를 create로 설정하면 DB에 테이블이 없을때도 'drop table ~ if exist'을 통해 테이블이 존재 하는 경우를 체크 한 뒤 삭제하고 재생성해주었습니다 근데 오라클로 설정하니 존재여부를 확인하지 않고 바로 'drop table clip cascade constraints ' 쿼리를 날립니다 당연히 초반에 테이블이 없기 때문에 table or view does not exist라는 에러가 발생하게 됩니다 오라클 DB와 연동할때도 h2처럼 if exist로 존재여부를 확인한 뒤 테이블을 생성하는 방법은 없을까요?

2
Chung A 프로필

Repository에서 엔티티 명시에 관하여 Chung A 6일 전
안녕하세요 강사님! 질 좋은 강의 항상 감사드립니다ㅎㅎ Repository제작할 때 작성하는 엔티티에 관한 질문인데요, 예를 들어 Entity_A 리포지토리 작성할 때 아래와 같이 하는데 public interface 리포지토리 명 extends JpaRepository<Entity_A,id> { } 이 리포지토리 안에서 아래와 같이 @Query("select b from Entity_B ...생략") List<Entity_B> selectEntity_BList(생략) Entity_B에 대한 쿼리를 짜도 일단 작동은 하는 것 같았습니다. 이런식으로  extends에 명시한 엔티티와 다른 쿼리를 짜도 문제는 없는건가요?  만약 별 문제가 없는 것이라면 extends측에 적어주는 엔티티명이나 id는  리포지토리 고유 기능인 save,findId 등을 위해서 적어주는 것이라 봐도 무방할까요? 아직 배우는 단계라 질문이 많네요ㅠㅠ 읽어주셔서 감사합니다:D

1
BeomJun Lee 프로필

jpql return타입에 관한 질문입니다! BeomJun Lee 12일 전
안녕하세요! jpa 기본편 강의부터 활용1,2를 거쳐서 스프링데이터 jpa를 듣고있는 학생입니다! jpql을 쓸때 반환타입이 명확할때는 타입쿼리 명확하지 않을때는 쿼리를 사용하고 이걸 줄여서 getResultList나 getSingleList를 사용해 List, 단일 객체로 반환받을수 있다고 알고있습니다. (또한 "select m from Member m", Member.class 이렇게 쿼리문 뒤에다가는 Member.class라는 반환값을 적어주는걸로 알고있었습니다) 활용1편에서는 jpql을 사용할때 getResultList와 함께 반환값인 Member.class를 적어주셨는데 @Query나 여기서는 Member.class를 적지않고 하셔서 메소드의 리턴값을 List<Member>로 적어줬기때문에 Member.class를 적어주나 안적어주나 상관이 없는건가? 아니면 스프링데이터JPA가 해주는건가? 라는 생각이 들었는데 제 생각일뿐이라서.. 명확한 이유를 알고싶어서 질문을 올렸습니다!(적으나 안적으나 테스트 결과는 같게 나왔습니다!)  그리고 질문올릴때 마다 항상 친절하게 답변해주셔서 감사합니다ㅎㅎ

2
Jean 프로필

@PreUpdate 시 @Transient 필드 null 로 대입되는 현상 관련 문의 Jean 13일 전
안녕하세요, 스프링 데이터 JPA 관련 강의들을 잘 듣고 있습니다. (다 보았지만 다시 볼 예정입니다 ㅎㅎ..) @PreUpdate 관련하여 기대한 바와 다른 동작이 확인되어 문의드립니다. Audit 관련 정보를 기록하려 하고, 이때 Listener 를 사용하지 않고 등록일/등록자 를 저장하고자 합니다. Board 게시판은 MyAudit 클래스를 상속하고 있으며, MyAudit은 userId라는 @Transient 가 적용된 필드를 가지고 있습니다. @PrePersist public void prePersist() { creator = userId; // userId는 preUpdate가 속해있는 class field 로써 @Transient 적용 createAt = LocalDateTime.now(); modifier = userId; // userId는 preUpdate가 속해있는 class field 로써 @Transient 적용 updateAt = LocalDateTime.now(); } @PreUpdate public void preUpdate() { modifier = userId; // userId는 preUpdate가 속해있는 class field 로써 @Transient 적용 updateAt = LocalDateTime.now(); } PrePersist는 의도한 바처럼 Transient 필드 값을 가지고 저장하나, preUpdate의 경우 modifier에 null이 대입이 됩니다. Listener를 쓴다면 해결이 되겠지만 @PreUpdate에서 Transient 필드가 왜 null이 되는지 궁금합니다. 그리고 의도한 바처럼 Transient 필드의 값을 PreUpdate 시점에 가져와서 대입이 가능할지 문의드립니다.

1
jettee 프로필

DDD 와 실무 jettee 16일 전
안녕하세요, 강사님 항상 유익한 강의 잘 듣고 있습니다. 최근 ddd를 공부하고 있는데 이 강의에서 말하는 실무적인 내용과 많이 다른점이 있어 질문을 하게 되었습니다. 1. 작은 에그리게잇으로 설계하라. 2. 에그리게잇은 주로 일관성 경계와 관련 있으며, 객체 그래프를 설계하려는 의도와 상관없다. 3. id로 다른 에그리게잇을 참조하라. 4. 하나의 요청은 한 에그리게잇 인스턴스만을 수정한다. 5.규칙밖에선 결과적 일관성을 사용하라.   강의를 듣다보면 도메인 모델 설계가 이런 규칙들과는 많이 다르다고 느껴지는데요.  실무에선 에그리게잇이라는 개념이 잘 사용되지 않는것인가요?

1
옥타비나 프로필

같은 테이블 fetch join 시 N+1 문의드립니다. 옥타비나 17일 전
안녕하세요. 게시판 연습중에 문의가 생겨서 질문드립니다. 게시판 글을 등록하고 해당 글을 여러명이 수정하거나 삭제(상태변경) 할수 있는 방향으로 진행중인데요 아래 그림과 같이 Article에서 Member를 ManyToOne으로 세개의 다대일 단방향을 만들었습니다. 단건 글조회 호출쿼리를 실행했을때 처음 creator 부분은 fetch join이 정상적으로 되지만 이후의 modifier와 deleter는 따로 두번 쿼리가 호출되는 증상이 있는데요 마지막 그림 쿼리의 경우 전부 fetch join을 해도 같은 증상이라 이와 같은 구성의 경우 처음 호출시에만 fetch join이 되는건지 궁금합니다 ㅠㅠ < BaseEntity > <글 Entity> < 호출 쿼리 >

7
남기석 프로필

안녕하세요 남기석 25일 전
안녕하세요. 강사님 2편. 활용편 까지 강의를 덕분에 정말 잘 들었습니다.  다음 강좌를 듣기전에 개인적으로 몇 번씩 복습해보고 배운내용을 바탕으로 혼자 주제를 정해서 만들어보는 연습을 하고 있습니다. 해당강의와 연관이 없는 질문이지만  연습을 하면서 코딩도 코딩이지만 설계하는 부분도 개인적으로 어렵고 중요하다고 느꼈습니다. 그래서 혹시나 스스로 공부하면서 간단한 웹 어플리케이션 도메인 - 테이블설계를 참고할 수 있는 방법을 여쭤보고 싶습니다. 소스코드는 찾기 쉬워도 테이블설계 예제는 어디서 찾아야할지 아직은 잘 모르겠네요.. 이제 막 공부를 하고 있는 단계여서 그런지 앞선 강의에서 쓰인 간단한 예제와 비슷하게 모델을 새로 만들어보는데도 완벽하게 설계하기가 어렵네요. 그래도 이전 강의들 덕분에 어찌어찌 구상한 내용을 코딩하는데는 전혀 지장없이 재밌게 하고있습니다. 감사합니다. 

1
jnj45 프로필

초기 어플리케이션 기동이 오래 걸립니다. jnj45 27일 전
오라클과 mssql을 동시에 테스트하고 있습니다. 근데, 오라클을 연동하여 어플리케이션 기동할 때 너무 오래 걸립니다. entity와 db 맵핑을 validation하는 과정에서 오래 거리는 듯합니다. 혹시 원인을 알 수 있을까요? (반면, mssql은 기동시간도 짧고, validation오류가 발생하더라도 빨리 발생합니다.) 오라클은 로컬에 18c express버전으로 설치되어 있고, jdbc jar파일은 오라클 홈에서 18버전에 맞는 걸로 다운 받았습니다.(ojdbc8.jar) 아래는 기동 시 오류로그 일부분입니다. ======================================================================================== INFO  20-09-02 17:33:12[restartedMain] [LogHelper:31] - HHH000204: Processing PersistenceUnitInfo [name: default] INFO  20-09-02 17:33:13[restartedMain] [Version:44] - HHH000412: Hibernate ORM core version 5.4.12.Final INFO  20-09-02 17:33:13[restartedMain] [Version:49] - HCANN000001: Hibernate Commons Annotations {5.1.0.Final} INFO  20-09-02 17:33:13[restartedMain] [HikariDataSource:110] - HikariPool-1 - Starting... INFO  20-09-02 17:33:13[restartedMain] [HikariDataSource:123] - HikariPool-1 - Start completed. INFO  20-09-02 17:33:14[restartedMain] [Dialect:172] - HHH000400: Using dialect: org.hibernate.dialect.Oracle12cDialect WARN  20-09-02 17:34:55[restartedMain] [AnnotationConfigServletWebServerApplicationContext:558] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [USE_YN] in table [EF_USER_VIEW]; found [char (Types#CHAR)], but expecting [varchar2(255 char) (Types#VARCHAR)] INFO  20-09-02 17:34:55[restartedMain] [HikariDataSource:350] - HikariPool-1 - Shutdown initiated... INFO  20-09-02 17:34:55[restartedMain] [HikariDataSource:352] - HikariPool-1 - Shutdown completed. INFO  20-09-02 17:34:55[restartedMain] [StandardService:173] - Stopping service [Tomcat] INFO  20-09-02 17:34:55[restartedMain] [ConditionEvaluationReportLoggingListener:136] -  Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. ERROR 20-09-02 17:34:55[restartedMain] [SpringApplication:826] - Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [USE_YN] in table [EF_USER_VIEW]; found [char (Types#CHAR)], but expecting [varchar2(255 char) (Types#VARCHAR)] ================================================================

1
Dev.Kim 프로필

성능 테스트 질문 Dev.Kim 1달 전
안녕하세요 영한님 강좌 잘 보고있습니다. 강좌중에 성능테스트에 대한 이야기를 많이 해주시는데, 혹시 성능 테스트는 어떤식으로 진행해야 할까요?!

2
NickNamEE 프로필

강의 보면서 프로젝트 진행 중에 오류가 발생했습니다.. NickNamEE 1달 전
Member가 있고 Dept 엔티티가 있습니다. Member 리파지토리에 다음과 같이 작성했구요. @Query(value = "select m from Member m left join fetch m.dept where m.dept.unit_code = :code")List<Member> findMembersByUnitCode(@Param("code") String code);멤버를 1명 추가 했을 때는 해당 Dept에 해당하는 멤버가 잘 나오다가.. 테스트로  Dept dept12 = new Dept("12", "***팀", "", ""); memberRepository.save(new Member("1",dept12,"","","","","","","","","")); memberRepository.save(new Member("2",dept12,"","","","","","","","","")); memberRepository.save(new Member("3",dept12,"","","","","","","","",""));이런식으로 멤버를 저장하고 위 findMembersByUnitCode를 실행 하면org.springframework.dao.IncorrectResultSizeDataAccessException: query did not return a unique result이런 에러가 납니다.. ㅠㅠh2데이터베이스에서 select 했을 때는 데이터가 정확히 잘 들어가 있는데, 왜 이런 에러를 보내는 걸까요?

3
jaqp7363 프로필

강의 감사합니다. 추후 강의 계획 문의 jaqp7363 1달 전
안녕하세요. JPA에 대하여 학습을 하고자 강의를 듣기 시작하여 1편,2편,dataJpa까지 듣고있는 수강생 입니다. 다음으로 dsl까지 학습할 계획이네요. ^^ 강의가 진짜 정말 많이 내용이 좋고 재미도 있어요.ㅋㅋㅋㅋ 문의드릴점은 혹시 jpa와 캐싱전략 관련 강의는 예정에 있는지 문의드립니다. REST API 의 캐싱전략, redis, guava등 유익한 강의가 될 것 같아서요. 감사합니다.

1
조원진 프로필

Repository 테스트 관련 질문입니다. 조원진 1달 전
안녕하세요 강사님. 항상 좋은 강의 잘 듣고 있습니다. 레파지토리 테스트코드를 작성하면서 의문점이 들어서 질문 올립니다. 1. 보통 레파지토리 기능을 테스트할 때는 인메모리 DB 환경에서 테스트를 진행하나요? 2. 인메모리 외 개발DB 환경(mysql, oracle 등)에서 테스트를 진행한다면 개발DB 데이터를 가져와서 테스트를 진행해도 되나요? 아니면 데이터를 생성하는 테스트 코드를 작성하고 테스트를 진행해야하는지 궁금합니다.

1
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스