inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

N+1 관련해서 질문있습니다.

해결됨

토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1

안녕하세요. 우선 좋은 강의 제작해주신 토비님께 항상 감사하고 있어요. 이제 배운지 1년된 왕초보입니당.. 혼자 배워보면서 개인 프로젝트를 만들고 있는데 JPA를 사용하고 있어요. 제가 궁금한 것이... N+1 관련한 문제입니다. 아 일단 프로젝트 주제는 복식부기 가계부에요. @Entity ... public class Journal extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "ledger_id", nullable = false, updatable = false) @OnDelete(action = OnDeleteAction.CASCADE) private Ledger ledger; ... @OneToMany(mappedBy = "journal", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) private List<EntryLine> entries = new ArrayList<>(2); ... public EntryLine getEntryLine(EntrySide side) { switch (side) { case CREDIT : this.entries.stream().filter(line -> line.isCredit()).findFirst() .orElseThrow(...); case DEBIT : this.entries.stream().filter(line -> line.isDebit()).findFirst() .orElseThrow(...); default : throw new ... } } ... // Service에서 저장되기 전에 호출 public void validateSavable() { ... validateJournalSave(); } private void validateJournalSave() { AccountType debit = getEntryLine(EntrySide.DEBIT).getAccountType(); AccountType credit = getEntryLine(EntrySide.CREDIT).getAccountType(); if(!this.transactionType.isValidPlacement(debit, credit)) { throw new ... } } } Journal Class에서 EntryLine List에 접근하고 있어요. 그리고 EntryLine Class는 이렇게 생겼어요. @Entity ... public class EntryLine extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "journal_id", nullable = false, updatable = false) private Journal journal; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "account_id", nullable = false) private Account account; ... // private package 접근제어자 사용 // Account는 Category를 참조중이에요. AccountType getAccountType() { return this.account.getCategory().getAccountType(); } } 거래가 저장되기 전에 Journal : validateJournalSave() 에서 this.transactionType에 따라 차변과 대변에 올바르게 위치하고 있는지 검사한 후 저장하고 있는데 이것을 생성과 수정할 때 두 곳에서 사용하고 있어요. Ledger에 5개 Category가 있고, Account는 그 Category를 참조하고 Category에서만 AccountType이 있어요. Journal이 각 EntryLine의 AccountType을 얻기 위해 Journal -> EntryLine -> Account -> Category -> getAccountType() 이렇게 흘러가네요. 이렇게 접근해도 설계상 괜찮은걸까요? Journal을 저장할때는 @Query 사용해서 Fetch Join으로 필요한 Account를 가져오고 있는 상황이에요. Journal이라는 엔티티가 비즈니스 로직 수행을 위해서 다른 엔티티의 필드까지 깊게 참조?? 가져오도록 설계하는게 옳은건지 모르겠어요.

  • java
  • spring
  • spring-boot
  • jpa
  • 리팩터링
  • ddd
Jubuseong 댓글 3 좋아요 0 조회수 177

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

해결됨

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

[질문 내용] 56 벌크연산 - 08:40초 member1.getAge() member2.getAge() member3.getAge() 이건 자바 메모리에서 가져오는걸까요 아니면 영속성 컨텍스트에서 가져오는걸까요? 결과는 동일하지만 findMember1 = em.find 이런식으로 가져와야 영속성 컨텍스트에 저장된 데이터를 가져오는거 아닌가해서 질문 남깁니다!

  • java
  • jpa
thrkrif 댓글 2 좋아요 0 조회수 125

inheritance startegy 선택시 고려사항

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 조인 전략 or 단일 테이블 전략 중 고민해서 맞는걸 사용한다고 하셨는데 기준이 있을까요? 저 같은 경우도 현업에서 (jpa x) 조인 형식을 취할지 아니면 단일 테이블 형식을 선택할지는 강의에서 말씀하신 추후 확장성 및 데이터가 저장될 양 등 그냥 간단히 생각하고 정하는데 혹시 영한님만의 방법이 따로잇나요? 데이터를 많이 넣어보고 성능을 테스트 한다든지 어떤 방법을 사용해서 전략을 선택하시는지 궁금합니다.

  • java
  • jpa
안태승 댓글 1 좋아요 0 조회수 90

Entity 동등성 비교

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. Entity는 영속성 컨텍스트 내에서 동등성을 보장하니깐 equals 재정의할 필요 없이 그냥 == 비교 해도 되나요?

  • java
  • jpa
매콤한각설탕 댓글 1 좋아요 0 조회수 83

패키지 구분에 대해 궁금한게 있습니다

미해결

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

요즘은 domain별로 패키지를 나눈다고 들었는데 강의에서는 역할별로 패키지를 나누고 있어서요. 어떻게 나누는게 좋은건가요?! \

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
포기안할게요오 댓글 2 좋아요 0 조회수 125

스프링부트 서버 에러나요

미해결

Spring Boot와 React로 배우는 초간단 REST API 게시판 만들기

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2026-04-28T17:27:55.938+09:00 ERROR 27483 --- [prac] [ main] o.s.b.d.LoggingFailureAnalysisReporter :

  • mysql
  • rest-api
  • spring-boot
  • jpa
  • react.js
댓글 1 좋아요 0 조회수 156

RepositoryTest의 패키지 위치가 domain인 이유

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요, 영한님. ItemRepositoryTest 파일의 위치가 hello.iitemservice.repository 가 아니라, hello.iitemservice.domain 임을 확인했습니다. 제 생각으로는 단순 패키지 구조 오타 로 인해 domain에 위치된 것이라고 여겨지는데요. 혹시 의도적으로 domain 패키지 하위에 두신 건지 궁금합니다!

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
dev.rudevico 댓글 2 좋아요 0 조회수 116

도메인 모델에서 관계와 규칙을 구분하는 방법

미해결

토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1

안녕하세요. 도메인 모델을 설명하는 부분에서 관계와 규칙을 온라인 서점 운영 예시로 간단히 언급해주셨습니다. 강의를 들으면서 실제 업무 도메인에 관계와 규칙을 구분지으며 간단히 개인 실습을 해보았는데요. 적다보니 어느샌가 관계에 규칙이 섞이기도 하더라고요. 문득 이런 생각이 들었습니다. '관계와 규칙의 차이는 무엇인가?' 관계와 규칙을 명확하게 구분지으려면 어떤 기준을 갖고 생각해야할까요? 관계는, DB 모델에 워낙 익숙하다보니 하나의 OO은 여러 OOO을 갖는다. 이쪽으로 먼저 생각이 흐르기도 하고요. 예시로 들어주신 것을 보면 관계는, '비즈니스에서 관계'라는 생각이 듭니다. 규칙은 데이터를 변경할 때 필요한 조건이라고 생각하면 될까요? 토비님 의견이 궁금합니다.

  • java
  • spring
  • spring-boot
  • jpa
  • 리팩터링
  • ddd
공부하는학생 댓글 2 좋아요 0 조회수 180

16 강의 메세지 retryCount의 의도

미해결

RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기

retryCount가 전역에서 작동하는것이 좀 수상하네요. 각 메세지의 retryCount를 세어야 할 것 같은데 저렇게 두면 혹시 메세지들이 들어오면 숫자가 마구 이랬다 저랬다 할 가능성은 없나요? 이를테면 메세지 두세개가 들어왔는데 첫번째는 실패 두번째 메세지 실패 세번째 성공 이런 경우 첫번째 메세지가 성공할때까지 sync하게 작동하여 완전 처리될때까지 두번째 메세지는 아예 실행되지 않는것인가요? 아니면 평행하게 동시에 실행되는거라 저 코드가 좀 잘못된 건가요?

  • spring-boot
  • jpa
  • websocket
  • rabbitmq
kellyyoon.dev 댓글 2 좋아요 0 조회수 106

JPA Repository 질문이 있습니다!

해결됨

Spring Boot, AWS로 백엔드 서비스 한 사이클 완성하기

안녕하세요! 기존 PostRepository를 사용하다가 JPA 도입으로 JpaPostRepository가 새로 생겼는데, JpaPostRepository 클래스에 재구현을 하기 위해 default 메서드를 추가했는데 그 방법이 아닌 PostRepositoryImpl 와 같은 구현체를 만들어서 구현해도 무방할까요? 실무에서는 어떤 방식이 더 자주 사용 되는지 궁금합니다.

  • aws
  • mysql
  • docker
  • spring-boot
  • jpa
Aurora 댓글 2 좋아요 1 조회수 113

페이지네이션 처리를 쿼리에서 하는 방식 질문

해결됨

Spring Boot, AWS로 백엔드 서비스 한 사이클 완성하기

안녕하세요. 강의 잘 보고 있습니다. 여기서 페이지네이션 구현을 values 데이터값을 가져와서 Java단 코드내에서 stream을 사용하여 페이징 처리를 하고 있는데, 만약 데이터를 DB에서 가져온 데이터라면 쿼리에서 페이징 처리(limit, offset)를 하는게 더 효율적일까요?

  • aws
  • mysql
  • docker
  • spring-boot
  • jpa
Aurora 댓글 1 좋아요 1 조회수 88

UserService, CertificationService 책임 분리 기준 질문

미해결

Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트

UserService 가 회원 생성이라는 유즈케이스를 담당하는데, 인증 url 생성이나 메일 발송 정책까지 함께 가지고 있기 때문에 책임이 섞여있다고 판단하여 CertificationService 를 분리하신걸까요? 단순히 외부 의존성 분리하려는 목적보다는 인증메일 정책 이라는 별도의 변경 이유를 분리하려는 의도가 맞는지 궁금합니다

  • spring
  • tdd
  • jpa
  • 소프트웨어-테스트
  • unittest
바나나 댓글 1 좋아요 0 조회수 81

실무 조언 관련 질문입니다.

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 실무 조언으로 묵시적 조인 대신 명시적 조인을 사용하라는 부분에 대해 질문이 있습니다. 단일 값 경로 표현식이나 컬렉션 값 경로 표현식을 사용하면 무조건 내부 조인이 발생하는데 명시적 조인을 쓰라는 것이 어떤 의미인지 잘 모르겠습니다. 어차피 발생할 조인을 겉으로 드러내서 내부 조인이 발생하는 지점이라도 명시하자 라는 의미로 말씀하신걸까요? 아니면 다른 개선책이 있어서 명시적으로 조인을 사용하라고 하시는걸까요?

  • java
  • jpa
쉽지않네 댓글 1 좋아요 0 조회수 115

sdk 설정 오류

미해결

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

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 이렇게 오류가 떠서 jdk oracle을 다운 받고 sdk도 설정하고 IVM도 설정했습니다. 자바 스프링 버전은 최신 버전인 4.0.5 대신 강의 자료에서 3.x인 최신버전을 선택하라길래 3.5.13.을 선택했습니다. 무슨 문제일까요?

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
김주현 댓글 2 좋아요 0 조회수 180

H2데이터베이스 파일 생성

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] H2 데이터베이스 파일 생성방법 강의자료에서는 저장된 설정이 server가 아닌 embedded로 되어있는데 어떤것을 따라야할까요?

  • java
  • jpa
김주현 댓글 2 좋아요 0 조회수 129

SpringBoot 4.X에서의 Querydsl 설정

미해결

실전! Querydsl

plugins { id 'java' id 'org.springframework.boot' version '4.0.5' id 'io.spring.dependency-management' version '1.1.7' id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } group = 'study' version = '0.0.1-SNAPSHOT' description = 'querydsl202604' java { toolchain { languageVersion = JavaLanguageVersion.of(21) } } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-h2console' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-webmvc' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-data-jpa-test' testImplementation 'org.springframework.boot:spring-boot-starter-webmvc-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' // test 롬복 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' // Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta' annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } tasks.named('test') { useJUnitPlatform() } clean { delete file('src/main/generated') } // querydsl 추가 def querydslDir = layout.buildDirectory.dir("generated/querydsl").get().asFile querydsl { jpa = true querydslSourcesDir = querydslDir } sourceSets { main.java.srcDir querydslDir } configurations { querydsl.extendsFrom compileClasspath } compileQuerydsl { options.annotationProcessorPath = configurations.querydsl } 이렇게 하면 build 폴더에도 Q붙은 엔티티들 나오고요. 테스트 코드 짤 때도 Q붙은 엔티티들 불러올 수 있습니다. 참고하세요.

  • java
  • jpa
  • querydsl
댓글 2 좋아요 0 조회수 422

REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 전체 롤백을 방지하기 위해 REQUIRES_NEW를 사용하면 된다고 하셨는데 그럼 Service의 트랜잭션과는 완전히 분리되는건가요?? MemberRepository가 롤백이 발생해서 전체 서비스가 롤백되야 하지만 서비스가 호출한 LogRepository가 커밋을 하는 경우도 발생하지 않나요??

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
황우찬 댓글 1 좋아요 0 조회수 100

오탈자 - @Transactional

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. 영한님. 프로젝트 환경설정 - JPA와 DB 설정, 동작확인 오탈자 제보합니다. 강의에서는 Spring을 사용하고 있기 때문에 Spring의 org.springframework.transaction.annotation.Transactional 을 사용하셨지만 수업자료는 jakarta.transaction.Transactional 을 사용하고 있습니다. [1. 프로젝트 환경설정 | JPA와 DB 설정, 동작확인] import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.transaction.annotation.Transactional; import 문 수정 내용입니다. 감사합니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
장태근 댓글 1 좋아요 0 조회수 117

Dto와 Entity 사용 관련 질문

미해결

스프링부트를 이용한 웹 프로그래밍: 웹사이트 이렇게 만드는 거예요!

안녕하세요, 57강 관련 질문입니다. Dto 클래스를 완전히 없애버리고 Entity만 사용하는 건 불가능한 건가요? Entity가 DB 관련 어노테이션을 가지고 있다는 점을 제외하면 Dto 클래스와 굉장히 유사한 형태인데, 이 두 개를 왜 꼭 따로 정의하고 사용해야 하는 것인지 이해가 잘 안 갑니다!

  • rest-api
  • spring-boot
  • jpa
  • spring-security
  • mybatis
돌돌 댓글 2 좋아요 0 조회수 123

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

미해결

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

select o from Order o where o.orderAmount > ALL(select p.stockAmount from Product p) ALL 예제가 강의록에 위와같이 되어있던데요. 이게 아래 sql 문처럼 서브쿼리에 MAX 적용한 거랑 동일한 결과를 내는 걸까요?? select o from Order o where o.orderAmount > (select MAX(p.stockAmount) from Product p)

  • java
  • jpa
이상우 댓글 2 좋아요 1 조회수 125

인기 태그

인프런 TOP Writers

주간 인기글