묻고 답해요
163만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
persist 호출 시점에 영속성 컨테스트 객체 상태
https://www.inflearn.com/community/questions/336059/%EC%96%91%EB%B0%A9%ED%96%A5-%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84-%EC%A3%BC%EC%9D%98%EC%A0%90%EC%97%90-%EA%B4%80%ED%95%9C-%EC%A7%88%EB%AC%B8안녕하세요. 위 질문을 보고 궁금한 점이 생겨서 질문드립니다. 강의에서 진행하는 프로젝트에서 기본키 생성전략을 IDENTITY 라고 하면 em.persist()를 호출하는 시점에 insert 쿼리를 날려서 db에 저장을 하고, 키를 조회해서 영속성 컨텍스트의 키로 사용한다고 이해하고 있습니다. 이 때 영속성 컨텍스트의 키는 실제 DB의 키를 사용하고 영속성 컨텍스트의 엔티티는 DB의 데이터가 아닌 순수 객체가 들어가는 것이 맞나요?
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
[코드 공유] yield() 유무에 따른 체크 로직 수행 횟수를 확인할 수 있는 코드 공유합니다.
[비교 결론](맥북 프로 2018형 기준)yield() 사용 X: 체크 로직 319_216_379회 수행yield() 사용 O: 체크 로직 000_730_447회 수행[코드 사용법]체크로직 while loop에 있는 Thread.yield();를 주석처리 on/off 하면서 체크하시면 됩니다.프로그램 수행 -> a, b, c, d, e, q를 순서대로 입력위 두 동작을 주석처리 on/off한 후에 실행하는 두 경우 모두에서 비슷한 속도로 해 주시면 비교가 더 명확합니다. [코드 설명]MyPrinterV4 코드를 기준으로 하여 다음과 같이 체크 로직의 수행 횟수를 카운트할 수 있도록 개선했습니다. 러프하게 작성한 코드라서 세부적인 부분은 무시바랍니다.// 체크 로직의 수행 횟수를 기록하는 변수 private static int count = 0;while (!Thread.interrupted()) { if (jobQueue.isEmpty()) { count++; // 체크 로직 수행시 1회 추가 기록 Thread.yield(); // 여기를 On/Off하며 체크 continue; } }// 메인 함수의 마지막 부분에 추가한 코드 // q를 입력하여 프로그램을 종료했을 때까지 수행된 체크 로직의 횟수를 출력 System.out.println(count);[전체 코드]package thread.control.printer; import java.util.Queue; import java.util.Scanner; import java.util.concurrent.ConcurrentLinkedQueue; import static util.MyLogger.log; public class MyPrinterV4 { // 추가된 코드 private static int count = 0; public static void main(String[] args) { Printer printer = new Printer(); Thread printerThread = new Thread(printer, "printer"); printerThread.start(); Scanner userInput = new Scanner(System.in); while (true) { log("프린터할 문서를 입력하세요. 종료 (q): "); String input = userInput.nextLine(); if (input.equals("q")) { printerThread.interrupt(); break; } printer.addJob(input); } // 추가된 코드 System.out.println(count); } static class Printer implements Runnable { Queue<String> jobQueue = new ConcurrentLinkedQueue<>(); @Override public void run() { while (!Thread.interrupted()) { if (jobQueue.isEmpty()) { // 코드 추가된 부분(시작) count++; Thread.yield(); // 주석 on/off 하며 비교 // 코드 추가된 부분(종료) continue; } try { String job = jobQueue.poll(); log("출력 시작: " + job + ", 대기 문서: " + jobQueue); Thread.sleep(3000); log("출력 완료: " + job); } catch (InterruptedException e) { log("인터럽트 발생. message=" + e.getMessage()); break; } } log("프린터 종료"); } public void addJob(String input) { jobQueue.offer(input); } } }
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
setOrder();를 하신 이유가 궁금합니다.
안녕하세요. 강의 내용 16분30초쯤에Order order = new Order();order.addOrderItem(new OrderItem());위 코드를 아래와같이Order order = new Order();em.persist(order);OrderItem orderItem = new OrderItem();orderItem.setOrder(order); 1. 이렇게 수정하셨는데, 이렇게 하시는 이유가 무엇인가요..? 양방향연관관계라서 addOrderItem()을 통해 양쪽에 값을 설정해줬었는데 왜 아래와 같이 변경하신건지 궁금해서 질문드립니다. 2. Order와 OrderItem간의 관계를 양방향연관관계로 하지말고, OrderItem -> Order 단방향연관관계로 설계해서 OrderItem에만 setOrder()로 설정해주신것일까요??3. 만약 2번의 내용이 맞다면, 그렇게 하신 이유도 궁금합니다... 감사합니다
-
해결됨RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기
pub/sub, producer/consumer 차이
안녕하세요 두 개념의 차이점이 궁금한데요 pub/sub 은 특정 topic으로 메세지를 발행하면 해당 topic을구독중인 여러 구독자들에게 전달될 수 있고producer/consumer는 메세지를 큐에 발행하면 큐에 저장된 메세지는 한명의 소비자에게만 전달 될 수 있는 건가요?그러면 rabbitmq는 producer/consumer 이고 websocket은 pub/sub 인가요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO 분리
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 좋은 강의 항상 감사드립니다. 강의를 수강 하던 중 간단한 질문이 있어 작성하였습니다! OSIV를 끄기 위해 분리를 하실 때 QueryService를 만드시면서 동시에 기존의 DTO들을 사용하지 않으시고 Query 패키지에 새로 만들어 사용하셨는데 기존 DTO를 사용하지 않는 이유가 궁금합니다!또한 이렇게 분리해서 새로 만드는 것이 권장되는 사항인지 궁금합니다!
-
미해결RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기
모듈질문
안녕하세요. 강의 잘 듣고 있습니다선결지식 확인 질문과, 강의 질문이 있습니다. Q1. 원래는 프로듀서 모듈, 컨슈머 모듈, 클라이언트(API)이렇게 3개의 모듈로 분리되어서 처리되는게 맞는거죠?그리고 모듈이라하는거는 하나의 jar로 묶일 수 있는 모듈과, 각각 pid를 갖는 단일 프로세스 모듈 이렇게 있는데보통은 프로듀서/컨슈머/클라이언트 모듈이라 하면 후자를 지칭하는 것도 맞구요!? Q2. 강의에서 애플리케이션을 jar로 말아서 2개를 띄우신 것은 어떻게 보면 현재 애플리케이션 내부에서 produce/consume/client 3개의 역할을 혼자 다 맡고 있기때문에의도하신 바는 consumer를 2개 띄웠을 경우 RR 방식으로 동작한다는 것을 뜻하신게 맞을까요? 감사합니다 :)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Valid체크 오류 문의드려요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]상품등록시에서도 입력받는 책 데이터들의 valid를 체크하고싶어서 memberForm을 받을때와 마찬가지로코드를 짰는데 계속해서 오류가 납니다... 아무리 찾아봐도 모르겠어서 질문 남깁니다(name만 null체크를 합니다.) BookFormItemController templates/items/createItemForm.html오류
-
미해결김영한의 실전 자바 - 중급 2편
배열과 비교한 리스트의 이점 중에서 itemCount가 size++랑 비슷한거 아닌가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]배열과 비교한 리스트의 이점으로 itemCount와 같이 배열에 몇 개의 데이터가 추가 되었는지 추적하는 변수를 제거할 수 있다고 했는데, MyArrayList calss에서 add(E e) 메서드를 보면 size++; 부분이 동일한 역할이을 하고 있는 것이 아닌가요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
좋아요 수 설계
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요!10:30초 쯤부터 설명해주시는 내용이 잘 이해가 안가서 질문드립니다.article 테이블에insert 문과 update 문을 동시에 실행한다고 하더라도 서로 다른 레코드에 대한 작업이어서 update문이 실행될 때 x-lock이 걸리는 레코드는 insert하는 레코드와 상관 없을 거라고 생각했는데게시글 쓰기와 좋아요 수 쓰기 작업을 할 때 어떻게 동일한 레코드에 락이 걸릴 수 있는지 상황이 잘 안그려지네요..게시글을 새로 작성하는 경우가 아니라 게시글 수정 - 좋아요 수 업데이트 간에 동일한 레코드에 대한 락이 잡힐 수 있는 상황을 말씀하신 건가요??
-
해결됨(2026) 일주일만에 합격하는 정보처리기사 실기
59분 14초
59분 14초까지 따라가서 arr[0]까지 되는건 이해가 가는데 그 뒷부분이 설명이 여러번 다시들어봐도 거기서 길을 잃었어요..계산을 return줄에서 해서 그 값으로 위로 쭉쭉 올라가면서 계산하는게 맞나요? 59분 42초에서 arr[1] arr[0] 이렇게 적으셨는데 return(arr[size-1]>max)?arr[size-1]:max; 에서 size에 1을 넣으면 배열[0]이 1인건 알겠는데 5(배열[1])가 어디서 어떤식으로 나와서 어떻게 비교가 되는건지 모르겠어요
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
테스트 후 AfterEach 함수에서 나오는 쿼리
안녕하세요 fetch join까지 적용한 후에 테스트 코드 자체가 N+1 문제가 제거된 것은 확인했습니다.그런데 AfterEach 함수에서 deleteAll을 하는 과정에 fetch join 이전의 N+1 쿼리랑 유사한 쿼리가 나오는데 이게 delete 쿼리를 날리기 위한 데이터를 가져오려는 목적인것 같은데 질문이 있습니다. 혹시 deleteAll 이전에 나오는 쿼리도 N+1처럼 동작하는지테스트 코드이므로 테스트 객체의 모수가 작아 무시해도 되는지이정도 질문하고 싶습니다
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
무한 depth 설계에 path enumeration 방식을 선택한 이유?
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 무한 depth는 이전 강의에 소개된 adjency list로도 구현이 가능하고 또 adjacency list, path enumeration 방법 외에도 nested set, closure table 방법도 있는 걸로 알고 있습니다. path enumeration 방법을 선택한 이유가 따로 있을까요??
-
해결됨RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기
클러스터와 페더레이션 관련 PDF 내용은 어디서 확인할 수 있나요?
마지막 강의 영상의 6분 이후부터 본 강의 내용에는 없지만 강사님이 자료 정리 해주신 큐 제어하기, 클러스터와 페더레이션 관련 내용이 있는데 다운로드 받은 pdf 자료에서는 없네요.
-
미해결김영한의 실전 자바 - 기본편
메서드
[질문 내용]여기에 질문 내용을 남겨주세요. public class MemberThis { public String nameField; public void initMember( String nameParameter ) { nameField = nameParameter ; }} 위에서 public void initMember( String nameParameter ) 이 메서드를 선언하는거라고 생각했는데요. 왜 public이랑 void 사이에 static이 없는건가요? 왜 없어도 되는건지 모르겠습니다.
-
미해결김영한의 실전 자바 - 중급 2편
연결 리스트의 삭제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 강사님 강의 항상 감사하게 보고있습니다연결리스트의 삭제에서 초기화를 시킨다고 했는데 참조값의 연결의 끊으면 사용되지 않으므로 gc대상이 되니 초기화는 안해도 되지 않나요?제가 놓친 부분이 있으면 말씀 부탁드리겠습니다 :)
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값타입을 엔티티로 승급하면
39:00 쯤에 자체적인 id 가 있다면 엔티티이므로 엔티티의 값을 수정할 수 있다고 말씀하셨는데요.수정할 수 있다는 데이터는 모든 값타입을 의미하는 건 아니라고 받아드려지는데 맞을까요?즉, "값타입(자바 기본값(원시, 포장) , 임베디드, 컬렉션) 들 중에자바 기본값만 수정해도 된다."(임베디드와 컬렉션은 setter메소드를 사용하면 안되니private나 제거를 해야한다고 권장하셨기 떄문입니다.)
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
v1에서 POST할때 insert문 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.Postman에서 http://localhost:8080/api/v1/members를 POST하는 것을 하고 있는데실행하면 아래와 같이 뜨고 insert into member (city, street, zipcode, name, member_id) values(NULL, NULL, NULL, 'hello', 1) 도 안뜨고 insert문 또한 한줄로 안나타나고 여러줄로 나옵니다...왜 이런걸까요 ?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
일대일 관계 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의에서 `주 테이블이나 대상 테이블 중에 외래 키 선택 가능`이라고 하셨는데`대상 테이블에 외래키가 있는 일대일 단방향 관계는 JPA에서 지원 안한다는 게` 무슨 말인가요..?그러면 외래 키 선택 기준 이런 거 얘기할 필요 없이 무조건 일대일 단방향 관계에서는 주 테이블에 외래키를 설정해야하는 거 아닌가요
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.flush()유무에 대해 질문드립니다.
Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member();member.setName("member1");member.setTeam(team);em.persist(member);//em.flush(); // 영속성 컨텍스트에 있는 쿼리를 db에 전송한다.//em.clear(); // 영속성 컨텍스트를 초기화// 이렇게 하면, 위 em.persist()를 통해 영속성컨텍스트에 있는 Member를 가져오는게 아니라, // em.find()를 할때 db에서 select를 해서 가져온다. Team findTeam = em.find(Team.class, team.getId()); List<Member> members = findTeam.getMembers(); for (Member m : members) { System.out.println("m = " + m.getName()); }여기에서 em.flush()와 em.clear()를 하지않으면, findTeam에 Members가 비어있는 이유가 무엇인지 모르겠습니다.em.flush()를해서 db에 있는 Team데이터와, em.flush()하지않은 영속성컨텍스트에 있는 Team데이터가 무엇이 다르길래 영속성컨텍스트에서 em.find를 하면 members가 비어있는것인지 모르겠습니다. 즉, db를 통해 em.find하면 members가 있고, 영속성컨텍스트를 통해 em.find를 하면 members가 없는데 왜 그런것인가요?1차캐시에 team데이터를 저장하는것과 db에 team데이터를 저장하는것이 다른가요? 강의를 계속 봐도 이해가 가질않아 질문드립니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
카프카 설치 오류
카프카 설치 과정에서 뭔가 오류가 발생한거 같은데 해결이 어려워 글 남겨봅니다. 2025-02-05 20:04:47 ===> User2025-02-05 20:04:47 uid=1000(appuser) gid=1000(appuser) groups=1000(appuser)2025-02-05 20:04:47 ===> Setting default values of environment variables if not already set.2025-02-05 20:04:47 CLUSTER_ID not set. Setting it to default value: "5L6g3nShT-eMCtK--X86sw"2025-02-05 20:04:47 ===> Configuring ...2025-02-05 20:04:47 ===> Launching ... 2025-02-05 20:04:47 ===> Using provided cluster id 5L6g3nShT-eMCtK--X86sw ...2025-02-05 20:04:47 # # A fatal error has been detected by the Java Runtime Environment: # # SIGILL (0x4) at pc=0x0000ffff9513fc5c, pid=13, tid=390 # # JRE version: (21.0.4+7) (build ) # Java VM: OpenJDK 64-Bit Server VM (21.0.4+7-LTS, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-aarch64) # Problematic frame: # j java.lang.System.registerNatives()V+0 java.base # # No core dump will be written. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again # # An error report file with more information is saved as: # /tmp/hs_err_pid13.log [0.016s][warning][os] Loading hsdis library failed # # The crash happened outside the Java Virtual Machine in native code. # See problematic frame for where to report the bug. # 오류 로그는 이렇구요.대강.. 자바 버전? 제 로컬환경과 뭔가 문제가 있는거 같은데.. 맥미니 M4 이구,java -versionopenjdk version "21.0.5" 2024-10-15OpenJDK Runtime Environment Homebrew (build 21.0.5)OpenJDK 64-Bit Server VM Homebrew (build 21.0.5, mixed mode, sharing) 검색해보니 M4에서만 일어나는 문제인거 같기도 하고.. sve 라는 옵션을 꺼보래서docker run -d --name kuke-board-kafka -p 9092:9092 -e FAFKA_JVM_PERFORMANCE_OPTS="-XX:UseSVE=0" apache/kafka:3.8.0 이런식으로 설치 해봤는데 마찬가지네요.뭘 시도해봐야할지 도움 좀 부탁드립니다.