inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

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 조회수 136

성능 오버헤드

해결됨

채널톡 면접관이 직접 알려주는 CS 면접 대비 - Java 편

런타임에 객체의 타입을 확인하는 과정에서의 성능 오버헤드는 어느정도?? 라고 생각해야되나요 신경을 써야되는 수준인지 궁금합니다.

  • java
  • 객체지향
  • computer-science
Cola 댓글 2 좋아요 1 조회수 79

다음 강의는 언제 올려주시는지요?

미해결

LLM 활용 Hadoop & Hive 빅데이터 실무 AI Tutor와 함께하는 Hadoop Ecosystem

좋은 강의 감사드립니다. 강의를 계속 듣고 싶습니다. 다음 강의는 언제 올려주시는지요? 또한 완강은 언제쯤이 될지 궁금합니다. 감사합니다.

  • java
  • sql
  • hadoop
  • linux
  • hiveql
dkgold 댓글 3 좋아요 0 조회수 116

하단 파일이 열리지 않습니다

미해결

Data Engineering Course (1) : 빅데이터 하둡 직접 설치하기

Download Ubuntu 20.04 LTS and Installation Hadoop 3.x on Ubuntu Standalone Operation(Local mode)

  • java
  • 빅데이터
  • hadoop
  • 데이터-엔지니어링
  • mapreduce
홍태경 댓글 1 좋아요 0 조회수 61

ssh-keygen -t rsa -P "" 등 ssh 암호화? 는 하둡에서 필수인가요?

미해결

Data Engineering Course (1) : 빅데이터 하둡 직접 설치하기

강사님 안녕하세요 아래부터 자세한 설명 없이 코드를 쳤는데 하둡 셋업할때 필수로 입력 해야 하는건가요? export PDSH_RCMD_TYPE=ssh ssh-keygen -t rsa -P "" cat ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys

  • java
  • 빅데이터
  • hadoop
  • 데이터-엔지니어링
  • mapreduce
홍태경 댓글 2 좋아요 0 조회수 70

강의 중복 확인 요청

미해결

죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.

섹션 9부터 중복으로 내용이 있는데 확인 바란다

  • java
  • spring
  • spring-boot
  • spring-batch
  • backend
댓글 1 좋아요 1 조회수 53

리뷰를 가장 많이 작성한 회원들 조회

미해결

SQL 코딩테스트를 위한 마지막 걸음

안녕하세요 최근에 코테를 봤었는데, 비슷한 문제가 프로그래머스에 있어서 어떤 로직이 맞는지 궁금해서 질문을 남깁니다 프로그래머스의 문제는 SQL 고득점 kit에 있는 " 그룹별 조건에 맞는 식당 목록 출력하기" 입니다. MySQL로 진행했고, 리뷰를 가장 많이 작성한 멤버id를 구하기위해 서브쿼리를 작성후 rnk=1을 사용했습니다. 이후, 리뷰 가장 많이 작성한 멤버가 여러명일 수 있으므로 바깥에서 in을 사용하여 최종적으로 order by로 정렬했습니다. SELECT MEMBER_NAME, REVIEW_TEXT, DATE_FORMAT(REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE FROM REST_REVIEW r INNER JOIN MEMBER_PROFILE m ON r.MEMBER_ID = m.MEMBER_ID WHERE r.MEMBER_ID IN ( SELECT MEMBER_ID FROM( SELECT MEMBER_ID, COUNT(MEMBER_ID), RANK() OVER(ORDER BY COUNT(MEMBER_ID) DESC) AS RNK FROM REST_REVIEW GROUP BY MEMBER_ID ) AS A WHERE RNK = 1 ) ORDER BY REVIEW_DATE, REVIEW_TEXT 최근 코테에서는 가장 높은 점수를 가진 회원의 부서ID를 구해야 하는 문제였고, 가장 높은 점수를 가진 회원이 여러명 일 경우 모두 출력하라고 명시되어있었습니다. 해당 코테에서도 rank() over (order by score desc)를 쓰고 바깥에서 rnk=1인 회원id를 구해 본 테이블과 join을 하는 로직으로 풀었는데 이렇게 접근하는게 맞는지 궁금합니다.

  • sql
  • mysql
  • 코딩-테스트
  • 프로그래머스
abdortus159 댓글 2 좋아요 0 조회수 62

volatile에 대해 질문 있습니다.

해결됨

채널톡 면접관이 직접 알려주는 CS 면접 대비 - Java 편

volatile 관련해서 자료를 보다 보니, 일부 자료에서는 “CPU 캐시를 우회하는 것이 아니라 happens-before 관계와 메모리 배리어를 통해 가시성과 재정렬 제한을 보장한다”고 설명하더라고요. 골드 답변의 내용과 정반대되는 내용이라 혼란스러워서 어떻게 이해하면 좋을지 질문드립니다.

  • java
  • 객체지향
  • computer-science
Cola 댓글 2 좋아요 2 조회수 111

Mark and Sweep

해결됨

채널톡 면접관이 직접 알려주는 CS 면접 대비 - Java 편

Mark and Sweep 알고리즘을 통해 참조가 되고 있는 객체만 Survivor 0 또는 Survivor 1 Generation 으로 옮깁니다. 라고 하였는데 Mark and Sweep 이 아닌 Copying아닌가요?

  • java
  • 객체지향
  • computer-science
Cola 댓글 1 좋아요 1 조회수 80

20년 4,5회 13번

해결됨

2026 벼락치기 합격! 기출문제 집중 정보처리기사 실기

이거 답이 샘플링 오라클 아닌가요?

  • python
  • java
  • c
  • 정보처리기사
  • database
갈굼먹고 댓글 2 좋아요 0 조회수 63

GC 알고리즘

해결됨

채널톡 면접관이 직접 알려주는 CS 면접 대비 - Java 편

Java에서 Mark and Sweep 말고도 다른 알고리즘을 조합해서 사용한다고 하는데요. 이렇게 Mark and Sweep만 키워드로 가져가도 괜찮을까요??

  • java
  • 객체지향
  • computer-science
Cola 댓글 2 좋아요 1 조회수 83

용어 질문

해결됨

채널톡 면접관이 직접 알려주는 CS 면접 대비 - Java 편

GC Root가 아닌 Root Space라는 용어를 더 많이 사용하나요?

  • java
  • 객체지향
  • computer-science
Cola 댓글 1 좋아요 1 조회수 56

일대일 fk 위치

미해결

김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복

안녕하세요. JPA 강의를 듣다가 궁금한 점이 생겨 질문드립니다. JPA 강의에서는 일대일 관계를 설명하면서 Member가 FK를 가지고 있는 방식이 더 좋다고 설명하셨고 김영한님께서도 주 테이블에 FK를 두는 방식을 더 선호한다고 말씀하신 것으로 해했습니다. 그래서 저는 일반적으로 주 테이블이 FK를 가지고 있는 방식이 더 편리하다고 생각하고 있었습니다. JPA 강의에서 해당 이미지로 설명하셨어요. 그런데 이번 강의에서는 보조 테이블이 FK를 가지고 있는 방식이 더 좋다고 설명되어서 조금 헷갈립니다. 저는 화면의 예시에서 Member가 주테이블, Locker를 보조 테이블이라고 이해했는데 강의마다 설명이 반대되는 것처럼 느껴졌습니다. 혹시 제가 잘못 이해한 부분이 있을까요?

  • sql
  • mysql
  • dbms/rdbms
  • 소프트웨어-설계
  • SQLD
tjrans303 댓글 1 좋아요 0 조회수 69

호출횟수 질문입니다.

해결됨

채널톡 면접관이 직접 알려주는 CS 면접 대비 - Java 편

메서드 호출 횟수가 약2,000회 / 약15,000회로 적어주셨는데 이 횟수는 버전마다 크게 차이가 없는걸까요? 이렇게 약 2천 약 1만5천 이라고 확정지어 알고 있어도 되는건지 궁금합니다.

  • java
  • 객체지향
  • computer-science
Cola 댓글 2 좋아요 1 조회수 81

실행과정 질문입니다.

해결됨

채널톡 면접관이 직접 알려주는 CS 면접 대비 - Java 편

첫째와 둘째에서 프로그램 실행은 .java 파일이 컴파일러에 의해 .class로 변환 된 후에 되어야 하는게 아닌가요? 첫째에서 프로그램이 실행되면~~ 둘째에서 컴파일러 변환~~ 이라고 나와서 컴파일보다 프로그램 실행이 먼저라는 느낌이 드네요.

  • java
  • 객체지향
  • computer-science
Cola 댓글 1 좋아요 2 조회수 74

코딩 테스트 All-in-One(Java)' 강의 노션 교재 권한문의

미해결

2026 코딩테스트 올인원 [JAVA]

코딩 테스트 All-in-One(Java)' 강의 노션 교재를 신청한 이메일로 로그인하였는데도 권한이 없다고 하는데 다시 "요약 노트 신청하기" 구글 폼을 통해서 다른 이메일로 다시 요청하면 다시 받을 수 있을까요?

  • java
  • 코딩-테스트
  • 알고리즘
  • data-structure
tjd125gns 댓글 1 좋아요 0 조회수 66

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

해결됨

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

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

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

수업에서 사용하는 툴 질문드려요

해결됨

2,000++억건 데이터를 다루는 실리콘 밸리 AI 개발자의 PostgreSQL

음 바로 전 강의에 docker compose 명령어를 사용하시는데 도커 설치 안내도 없었고, 지금 강의도 사용하는 툴이 뭔지 안나와 있어서 뭔가 중간중간 수업이 연결이 잘 안되는 느낌인데요.. 편집하다가 잘린 건가요 아니면 원래 이렇게 녹화가 된 건가요?

  • mysql
  • postgresql
  • oracle
  • dbms/rdbms
  • database
hellooguy 댓글 2 좋아요 0 조회수 78

중복내용 제보?!

미해결

죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.

안녕 킬구형 강의는 구매한지 오래됐지만 지금에서야 공부하고 있어 별건 아닌데! 청크처리와 트랜잭션 부분이 2번 들어가있어서 알려줄려고! 킬구형 덕분에 싸게 구매해서 정말 공부 열심히 하고 있어! 다음것도 기대할게!

  • java
  • spring
  • spring-boot
  • spring-batch
  • backend
잉꼬팡이 댓글 2 좋아요 1 조회수 93

태어난김에 세계일주 시간 초과

미해결

2026 코딩테스트 올인원 [JAVA]

class Solution { int answer = 0; public void dfs(int[][] countries, boolean[] visited, int balance, int count) { answer = Math.max(answer, count); for (int i = 0; i < countries.length; i++) { if (visited[i] || countries[i][1] > balance) { continue; } visited[i] = true; dfs(countries, visited, balance - countries[i][0], count+1); visited[i] = false; } } public int solution(int balance, int[][] countries) { var visited = new boolean[countries.length]; dfs(countries, visited, balance, 0); return answer; } 이렇게 결과 제출하였는데, '시간 초과'라고 계속 뜨는데, 뭐가 잘못됐는지 잘 모르겠습니다.. ㅡㅜ

  • java
  • 코딩-테스트
  • 알고리즘
  • data-structure
김주현 댓글 1 좋아요 0 조회수 64

인기 태그

인프런 TOP Writers

주간 인기글