inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

다대다 데이터 조회 질문입니다.

해결됨

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

강사님 강의를 보고 최근에 프로젝트를 하다 궁금한게 생겨 질문 남기게 되었습니다. Product <-> Category Entity 다대다 매핑을 위해 product(OneToMany) <-> product_category(ManyToOne) <-> category(OneToMany) 위와 같은 테이블로 매핑한 상태이고 join 상속 전략으로 district_category 테이블도 생성 하였습니다. district_category를 쿼리 파라미터로 받고 해당 district_category를 갖고 있는 상품들을 검색하고 페이징을 하는 로직을 짠다고 했을때 두가지 방법이 생각났는데 둘 중 어느게 더 적합한지 모르겠습니다 검색어를 바탕으로 product_category에서 Product를 EntityGraph로 같이 찾은 후에 찾은 ProductCategory.getproduct() 와 같은 방식 SearchService Category category = districtCategoryRepository.findByDistrictEnum(districtEnum) .orElseThrow(() -> new ProductException(ProductExceptionType.CATEGORY_NOT_FOUND)); return new ProductCategoryToProductPage(productCategoryRepository.findAllByCategory(pageable, category)); ProductCategoryRepository @EntityGraph(attributePaths = "product") Page<ProductCategory> findAllByCategory(Pageable pageable, Category category); ProductCategoryToProduct public ProductCategoryToProductPage(Page<ProductCategory> page) { this.content.addAll(page.getContent().stream() .map(ProductCategory::getProduct) .map(ProductListGetResponseDTO::new) .collect(toList())); this.totalPages = page.getTotalPages(); this.totalElements = page.getTotalElements(); this.pageNumber = page.getNumber() + 1; this.size = page.getSize(); } 발생 쿼리문 select districtca0_.category_id as category2_1_, districtca0_1_.parent_id as parent_i3_1_, districtca0_.district_enum as district1_2_ from district_category districtca0_ inner join category districtca0_1_ on districtca0_.category_id=districtca0_1_.category_id where districtca0_.district_enum=? select productcat0_.product_category_id as product_1_8_0_, product1_.product_id as product_1_7_1_, productcat0_.category_id as category2_8_0_, productcat0_.product_id as product_3_8_0_, product1_.created_date as created_2_7_1_, product1_.content_detail as content_3_7_1_, product1_.product_content as product_4_7_1_, product1_.product_name as product_5_7_1_, product1_.product_price as product_6_7_1_, product1_.product_status as product_7_7_1_, product1_.product_thumbnail as product_8_7_1_ from product_category productcat0_ left outer join product product1_ on productcat0_.product_id=product1_.product_id where productcat0_.category_id=? limit ? select count(productcat0_.product_category_id) as col_0_0_ from product_category productcat0_ where productcat0_.category_id=? 검색어를 바탕으로 product에서 직접 찾기 (데이터 뻥튀기의 문제는 쿼리dsl 이용 productId로 groupBy로 해결) 글 쓰고 생각해보니 A카테고리는 B라는 상품 안에서는 하나밖에 있을 수가 없으니 굳이 groupBy를 안써도 될거 같네요 SearchService Category category = districtCategoryRepository.findByDistrictEnum(districtEnum) .orElseThrow(() -> new ProductException(ProductExceptionType.CATEGORY_NOT_FOUND)); return productRepository.findAllByCategory(pageable, category); ProductRepository @Override public Page<Product> findAllByCategory(Pageable pageable, Category category) { List<Product> content = queryFactory.selectFrom(product) .join(product.productCategories, productCategory) .where(productCategory.category.categoryId.eq(category.getCategoryId())) .groupBy(product.productId) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); Long total = queryFactory .select(Wildcard.count) .from(product) .join(product.productCategories, productCategory) .where(productCategory.category.categoryId.eq(category.getCategoryId())) .fetchOne(); return new PageImpl<>(content, pageable, total); } 발생 쿼리문 select districtca0_.category_id as category2_1_, districtca0_1_.parent_id as parent_i3_1_, districtca0_.district_enum as district1_2_ from district_category districtca0_ inner join category districtca0_1_ on districtca0_.category_id=districtca0_1_.category_id where districtca0_.district_enum=? select product0_.product_id as product_1_7_, product0_.created_date as created_2_7_, product0_.content_detail as content_3_7_, product0_.product_content as product_4_7_, product0_.product_name as product_5_7_, product0_.product_price as product_6_7_, product0_.product_status as product_7_7_, product0_.product_thumbnail as product_8_7_ from product product0_ inner join product_category productcat1_ on product0_.product_id=productcat1_.product_id where productcat1_.category_id=? group by product0_.product_id limit ? select count(*) as col_0_0_ from product product0_ inner join product_category productcat1_ on product0_.product_id=productcat1_.product_id where productcat1_.category_id=?

  • java
  • jpa
말차 댓글 1 좋아요 0 조회수 376

실무에서는 스크립트를 다듬는다고 하셨는데 지금 예제에서는 어떤 점을 다듬어야 할까요?

해결됨

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요 영한님, 강의 잘 듣고 있습니다! 강의에서 JPA가 생성해준 테이블을 그대로 쓰면 안되고, JPA가 쓴 DDL을 다듬어서 쓴다고 하셨는데 생각해보니 저는 토이프로젝트에서 항상 JPA가 만들어주는 그대로 썼던 것 같습니다. 그렇다면 지금 예제에서는 어떤 점을 보완하는게 필요할까요? 감사합니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
MyCatIsRockstar 댓글 1 좋아요 2 조회수 508

안녕하세요 @Transactional 관련해서 질문이 있어요!

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. 좋은 강의 잘 보고 있습니다. 감사합니다 다름이 아니라 선생님 강의 jpa로드맵과 스프링 완전 정복을 완강하고 토이 프로젝트 전에 리마인드 할겸 다시 보고 있는데요~ 지금 선생님께서는 서비스단 클래스 영역에서 트랜잭션을 걸어주고 계시는데 그럼 그 하위에 있는 로직 전체가 같은 커넥션을 사용하고 반환하는데 지금 이 예제에서 그 이점이 있을까요!? 이유가 따로 있으시다면 궁금합니다. 저는 지금 서비스 클래스에서 로직 단위별로 트랜잭션을 걸어주고 있었는데 갑작스럽게 의문점이 생겨 질문드려요!~

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
dingding2 댓글 1 좋아요 0 조회수 554

도메인 모델과 테이블 설계 시 사용한 UML도구가 뭔지 궁금합니다!

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 강의 자료에서 도메인 모델, 엔티티 설계, 테이블 설계 다이어그램을 어떤 도구를 통해 작성하셨는지 궁금합니다!

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
박수환 댓글 1 좋아요 0 조회수 802

다대일 관계에서 일을 기준으로 페이징을 하려면 어떻게 해야하나요?

해결됨

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

일대다 컬렉션 페치조인과 페이징은 기본적으로 양방향을 전제하고, 일 을 기준으로 페이징을 하기 때문에 Batch Size 를 이용하는 것은 이해했습니다. Q. 그렇다면 컬렉션이 생기지 않는 다대일 단방향 매핑 구조에서 일 을 기준으로 페이징하려면 어떻게 해야할지 궁금합니다. 예를 들어 게시글(1) : 댓글 (N) 이고 댓글 -> 게시글 방향으로 다대일 단방향 매핑이라면, 게시글을 기준으로 페이징하고 싶을 때 어떻게 하면 될까요? 항상 영한님과 서포터님들께 감사드립니닷!!🙇‍♂️

  • java
  • spring
  • spring-boot
  • jpa
동해물과백두산이마르고닳도록 댓글 1 좋아요 1 조회수 642

변경감지 질문입니다.

미해결

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

변경감지가 되어 .persist없이 update문이 발생하는건 객체가 영속성 컨테이너에서 관리되고 있을때 만 변경감지가 일어아는건가요?

  • java
  • jpa
조소영 댓글 1 좋아요 0 조회수 409

교안의 병합사용 부분에서 merge 매개변수 item 질문

미해결

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

em.merge(item) 에서 item이 아니라 itemParam이어야 하는거 아닌가 생각이 드는데 교안이 잘못 작성된거 맞나요? 병합은 준영속 엔티티를 영속상태로 변경시키는거니까...

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
궁콘이 댓글 1 좋아요 0 조회수 556

jpa repository.save 메서드 구현 코드를 보고 싶습니다

미해결

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

강사님 안녕하세요~ 회사에서 jpa 사용하면서 깊이 생각 안하고 사용하다가 궁금한점이 생겼습니다 특정 리포지토리가 있다고 가정하겠습니다 @Repository public interface 리포지토리 extends JpaRepository<도메인, Long>, JpaSpecificationExecutor<도메인> { 리포지토리.save (); 하면 스프링프레임웍 하이버네이트 구현체가 실행해준다고 하는데 저는 실제 프레임웍 구현체 소스 코드를 보고 싶습니다 제가 IDE 이클립스를 사용중인데 어디라이브러리나 소스 코드를 보면 될까요 리포지토리.save () -> █이메서드를 클릭하면 org.springframework.data .repository.CrudRepository 다시 인터페이스이고 @NoRepositoryBean public interface CrudRepository<T, ID> extends Repository<T, ID> { <S extends T> S save(S entity); => █ CrudRepository 인터페이스의 save 메서드를 구현코드는 또 어느라이브러리에 어떤 메서드를 확인하면 될까요? *.스프링, 스프링부트 강의 수강하며 계속 반복되는 얘기가 유연하게 적용하기위해 많은 인터페이스를 사용하고 구현체가 있다고 계속 얘기되는데 그럼 그런 구현체를 최 하위의 클래스 메서드를 보는 방법이 어떻게 되는지 궁금하네요.. *.추가적으로 소스코드에는 리포지토리.save (); => 인터페이스.save (); 인터페이스.메서드 를 호출했는데 스프링 프레임웍에서 어떤 원리로 인터페이스.메서드 => 구현체클래스.메서드가 호출되는지 이해가 가지 않습니다 바쁘시겠지만 시간 나실때 답변 주시면 감사하겠습니다 수고하세요.. #JPA #구현체 #하이버네이트 #hibernate

  • java
  • jpa
주아아빠 댓글 1 좋아요 2 조회수 891

라이브러리 실행이 안돼요.

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기 자료에 나와있는대로 했는데도 라이브러리 작동이 안되네요ㅠㅠ 매개변수가 비어있는 sql만 찍혀요! 뭐가 문제일까요? build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.0.4' id 'io.spring.dependency-management' version '1.1.0' } group = 'jpabook' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-devtools' testImplementation 'junit:junit:4.13.1' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' } tasks.named('test') { useJUnitPlatform() } application.yml 콘솔창 select next value for member_seq findMember == member: true 2023-03-22T18:50:10.129+09:00 DEBUG 61227 --- [ main] org.hibernate.SQL : insert into member (username, id) values (?, ?) 2023-03-22T18:50:10.157+09:00 INFO 61227 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2023-03-22T18:50:10.157+09:00 TRACE 61227 --- [ionShutdownHook] o.h.type.spi.TypeConfiguration$Scope : Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@d3cce46] for TypeConfiguration 2023-03-22T18:50:10.158+09:00 DEBUG 61227 --- [ionShutdownHook] o.h.type.spi.TypeConfiguration$Scope : Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@4462a887] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@d3cce46] 2023-03-22T18:50:10.160+09:00 INFO 61227 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2023-03-22T18:50:10.178+09:00 INFO 61227 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. Process finished with exit code 0

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
YH 댓글 1 좋아요 0 조회수 594

Order Entity Cascade 관련 질문

해결됨

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "delivery_id") private Delivery delivery; Order Entity의 코드입니다. 현재 Order와 Delivery의 관계에서 연관관계의 주인은 Order입니다. 그렇다면 Order에서 delivery의 값을 변경하면 연관관계의 주인이기 때문에 반영이 된다고 알고 있습니다. 그래서 cascade를 굳이 써야하나 고민을 하고있었습니다. 제가 생각해낸 이유는 연관관계의 주인이여서 Order에서 delivery의 값을 변경이 가능한 것은 객체 관점(delivery에 값이 입력되기만 함 영속성 컨텍스트에 저장 X)이고 cascade는 db관점에서의 접근이므로 cascade를 작성해 줘야 묶여서 영속성 컨텍스트로 넘어간다(cascade를 작성하지 않으면 order를 persist했을 경우 delivery에 값은 있지만 영속성컨텍스트로 넘겨주지않음). 입니다. 제가 생각한 방법이 맞는지 궁금합니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
te___ho 댓글 1 좋아요 0 조회수 476

객체의 의존성 주입 할때 주인 테이블에 대한 궁금증

미해결

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

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/) [질문 내용] 안녕하세요. 제가 JPA 기본편을 들을 시간이 없이 실무에 바로 적용해보고자 JPA 활용을 먼저 듣게 되었습니다. 그래서 의존성 주입에 대한 기본편 내용을 숙지하지 못해서 질문을 드립니다. 강사님께서 테이블 간의 FK지정 시 다 대 1 관계에서 무조건 다의 테이블에 Joincolumn을 엮고 1의 테이블에는 mappedby를 통해서 이 둘을 엮는다고 말씀하셨습니다. 하지만, 무조건 적으로 다의 테이블에서만 이를 시행해야하나요? 그 반대로 할 수는 없는건가요???

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
장동재 댓글 1 좋아요 0 조회수 316

mappedBy 하실때 "" 따옴표 안에서 자동완성 방법

미해결

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

강사님처럼 mappedBy 따옴표 안에서 ctrl + space 눌러봐도 자동완성 제안이 안내려옵니다.. 인텔리제이는 아래 버전 사용하고 있습니다

  • java
  • jpa
gusehd520 댓글 2 좋아요 0 조회수 710

불변 클래스 정의와 관련된 질문

해결됨

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] 불변 클래스를 정의하기 위해서 세터 메서드를 빼거나 private로 둘 수 있다고 하셨는데, JPA 내부적으로 테이블에서 가져온 값을 객체로 주입하기 위해서 세터 메서드를 호출하기 때문에 저렇게 할 수 없지 않나요?

  • java
  • jpa
Yu Byung Suk 댓글 1 좋아요 0 조회수 387

프로젝트 만들 때 선택사항

해결됨

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

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. 스프링 부트 프로젝트 만들 때 Packaging은 jar, war 둘중 무엇을 선택해야 하나요? java 버전은 11버전으로 진행하면 될까요?

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
맥북유저 댓글 2 좋아요 0 조회수 521

from절 서브쿼리 예시

미해결

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

hibernate 6부터 from절 subquery가 지원된다고 하셨는데 혹시 예시를 볼수 있을까요?

  • java
  • jpa
김세원 댓글 1 좋아요 0 조회수 909

querydsl 동적쿼리 where문에 여러 메서드 사용 null처리 어떤식으로 하는게 좋을까요?

해결됨

실전! Querydsl

private List<Member> searchMember2(String usernameCond, Integer ageCond) { return queryFactory .selectFrom(member) .where(allEq(usernameCond,ageCond))//메서드를 만들어서 한번에 처리도 가능, 조립가능!! .fetch(); } private BooleanExpression usernameEq(String usernameCond) { return usernameCond != null ? member.username.eq(usernameCond) : null; } private BooleanExpression ageEq(Integer ageCond) { return ageCond != null ? member.age.eq(ageCond) : null; } private BooleanExpression allEq(String usernameCond, Integer ageCond){ return usernameEq(usernameCond).and(ageEq(ageCond)); } 강사의 내용에서 알려주신 코드중 usernameEq메서드의 return값이 null일 때 어떤식으로 처리하는 것이 좋을까요??? BooleanBuilder객체에 함수를 체이닝 할까 고민해봤지만 체이닝이 잘안되기도하고, BooleanBuilder를 사용할꺼면 usernameEq, ageEq와 같은 메서드를 만드는 의미가 없다고 생각아 합니다..... 좋은 방법있다면 알려주시면 감사하겠습니다.

  • java
  • jpa
백엔드 주니어 개발자 댓글 1 좋아요 0 조회수 3595

영속성 전이+고아 객체 질문

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 공부하다가 궁금한점이 생겨 질문 드립니다. CascadeType.ALL을 하면 굳이 orphanRemoval = true로 하지 않아도 em.remove(parent)나 parent.getChildList().remove()를 하는 경우 자식 엔티티가 제거된다고 이해를 하였습니다. 그러면은 CascadeType.ALL만 해줘도 부모 엔티티를 통해서 자식 엔티티의 persist, remove가 모두 가능하니 생명 주기를 관리할 수 있는 것 아닌가요? 굳이 orpahnRemoval = true를 해주어야 하는 이유가 궁금합니다. 제가 잘못 이해한 부분이 있는지 알려주시면 감사하겠습니다!

  • java
  • jpa
전민 댓글 1 좋아요 0 조회수 499

JWT Token SigningKey 관련 질문

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

안녕하세요. 강의를 수강하던 중 이해하기 힘든 현상을 발견되어 이렇게 질문드립니다. Jwt는 SigningKey로 복호화가 가능하다면, 유효한 토큰이다.(유효한 토큰이다란 기준이 여러 개 있습니다만) 라고 알고 있는데요. 아래와 같은 현상을 발견하게되서 질문하게 되었습니다. (현재 Gateway server - token.secret = A) (현재 User service - token.secret = A) 1.User-service 회원생성 2.User-service 로그인 (응답에서 jwt토큰 복사) 로그인 시 User-service의 token.secret을 SigningKey로 jwt 토큰 발급 3.Gateway의 AuthorizationHeaderFilter를 통과하는 user-service/actuator/health 호출 (response, 200) 여기까지는 정상입니다만 4.ecommerce.yml의 token.secret 변경 및 커밋 5.Gateway의 /refresh 호출 액츄에이터에 의한 token.secret 변경 (현재 Gateway server - token.secret = B) (현재 User service - token.secret = A) (현재 JWT 토큰의 SigningKey = A) 6.Gateway의 AuthorizationHeaderFilter를 통과하는 user-service/actuator/health 호출 ( response, 200 ) 여기가 질문 포인트입니다. AuthorizationHeaderFilter의 isJwtValid의 코드를 보면 subject = Jwts.parser().setSigningKey(env.getProperty("token.secret")) .parseClaimsJws(jwt).getBody() .getSubject(); 이런 구문이 있습니다. Jwt 생성 당시의 Siginingkey랑 다른 signingkey로 복호화하면 오류가 나면서 인가에 실패하는 것을 기대했습니다. 하지만 왜 정상적으로 200을 반환하는지 이해가 잘 되지 않습니다. (Gateway의 token.secret은 B로 변경됨을 로그로 확인했습니다. )

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
최학준 댓글 2 좋아요 0 조회수 1351

한 레포에서 여러 프로젝트를 구성 할때, DB 엔티티(entity) 공유 방법이 궁금합니다.

미해결

스프링 부트 - 핵심 원리와 활용

안녕하세요, 프로젝트 폴더&파일 구조에 대해 문의드리고자 글을 남기게 되었습니다. 1개 레포지토리에 2개(A, B) 프로젝트가 있습니다 각각 스프링부트 프로젝트 입니다 A 는 API Rest 서버 이고 B 는 크론 서비스로 구성된 서버 입니다 A와 B 간 통신은 없습니다 A 에서 요청을 받으면, DB 에 요청을 저장하고 B 가 주기적으로 DB 를 탐색하여 미 처리된 요청을 실제 수행하고자 합니다 예를 들어, 메일 발송 또는 영수증 (pdf) 생성 요청을 A 서버가 받아서 DB 에 저장하면, 해당 테이블을 B 가 주기적으로 확인하여 작업을 실제 수행하고자 합니다. B 서비스에서 db 엔티티를 어떻게 이용하는게 좋은 구성인지 궁금합니다. 제가 생각해본 바는 3가지 입니다 1. entity 만 독립된 레포로 구성하고, submodule 로 각각 참조하도록한다. - 1개 레포 쓰려고 구성했는데 entity 만 독립 레포로 분리한다는 점이 불편하게 다가옵니다, 그리고 submodule 구성 자체도 거부감이 들었습니다 2. A 에 주로 entity 를 작성하고, 필요한 부분만 B 에 일부 복사하여 사용한다. - 구성하기는 편하지만 관리가 잘 될까, 변경점을 잘 따라갈 수 있을까 걱정됩니다 3. 프로젝트 A 와 B 를 합치고, 실행을 각각한다. Repo |___ A |___ src / main / kotlin / com / test / api / entity |___ src / main / kotlin / com / test / api / service |___ src / main / kotlin / com / test / cron / service - api 서버와 cron 서버 jar 자체를 분리하고 싶엇는데, 제가 찾아본 바로는 gradle 관련 포럼에서 이렇게 구성하는 것을 비추천 한다는 글들을 보았습니다, 구체적으로 찾아보진 못한 상태입니다 *현재구성) Repo |___ A |___ src / main / kotlin / com / test / api / entity |___ src / main / kotlin / com / test / api / service | ... |___ B |___ src / main / kotlin / com / test / cron / service 위와 같은 환경에서 권장되는 방법이 어떤 것인지 궁금합니다. 읽어주셔서 감사합니다!

  • spring
  • spring-boot
  • jpa
  • entity
theRule 댓글 1 좋아요 2 조회수 940

order by 에 대한 궁금증이 있습니당

해결됨

실전! Querydsl

안녕하세용 예를 들어 [1, 3, 7, 2, 5] 이렇게 member id에 대한 list가 주어졌을떄 1, 3, 7, 2, 5 이 순서대로 member 엔티티리스트가 조회되도록 할수 있는 방법은 없는 건가요?

  • java
  • jpa
이영진 댓글 1 좋아요 1 조회수 382

인기 태그

인프런 TOP Writers

주간 인기글