묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA소개 영상에서 jpa.persist() 관련 질문 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 강의 잘 듣고있습니다. 강의를 듣던 중 질문이 생겨서 문의드립니다.저는 SI 개발자로 커리어를 시작하여 SI 업체 방식밖에 몰라mybatis만 써보고 JPA를 처음 배우는 입장이라 부족한 질문이 될수 있는점 미리 양해부탁드립니다. 12:26 초에 JPA와 상속 - 부분을 듣던 중 의문이 생겼습니다. item과 album 테이블이 부모 자식 관계가 있을 때jpa.persist( album ); 로 album 객체를 넣어주면 자동적으로 부모 테이블인 item 테이블에 자동으로 넣어준다고 되어 있는데 제 생각에는 FK 를 jpa가 추적해서 넣어주는것 같습니다.그러나 제 짧은 실무경험상에서는 편의상의 이유로 논리 ERD 상에서만 FK를 설정하고 실제로는 FK를 걸지 않고 개발을 진행한 적이 많습니다.그렇다면 혹시 FK를 걸지 않아도 jpa가 찾아서 item 테이블에도 데이터를 넣어주게 되는지 궁금하니다.
-
해결됨서버개발자 과제전형 완벽가이드 - 1편
cqrs에 관하여
안녕하세요. 지식공유자님!데이터베이스 연결 강의를 보고 질문 드립니다.서비스를 command와 query로 분리하고 있는데요.이것을 cqrs 패턴으로 부른다고 알고 있습니다.이게 좋다고는 들었는데, 정확히 왜 그런지는 잘 모릅니다.만약, 면접관이 "cqrs에 대해서 아느냐? 왜 이렇게 구현했느냐?" 라고 묻는다면, 지식공유자님께서는 어떻게 답변하시겠습니까?감사합니다.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
수업자료 문의
안녕하세요 수업자료 관련하여 문의드립니다. 수업자료중 강의에서 문제들만 있고 프로그래밍언어 이론부분은 따로 내용이 없는거 같네요 시간은 촉박한데 필기하면서 하려니 시간이 많이 소모되어 이론부분도 같이 업로드 해주시면 감사하겠습니다. 만들기가 귀찮으시다면 영상에 사용하는 화면을 pdf로 따서 바로 올려주셔도 좋을것 같아요
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
27분17초 a[1]인 경우
문제가 str = str + a[1] 인 경우에 답이 SSeoul 인가요??
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
질문
15분대 문제 초기 설정 a,b=1 sum=0 으로 시작While문 1~5까지 if 문 b가 짝수이면 sum+b, 아닐시 sum-b 계산 후 a증감 b+2 계산으로 해석했습니다 그래서 a=1 홀수 sum-b 계산 sum=-1, b=3후에 a증감 a=2a=2 짝수 sum+b 계산 sum=2, b=5a=3 홀수 sum=-3 ,b=7a=4 짝수 sum=4, b=9a=5 홀수 sum=-5, b=11계산 후 a=6, b=11로 while문 조건에 맞지않아서 빠져나오게 되면 sum은 -5아닌가요???
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
2023 2회 20분 문제
2023 2회 20분경 문제 오류 찾기요kim을 넣어서 public person(string val)으로 간다까진 이해했는데요. 거기로 가면 public person(string val)부터 시작이 아니라 위인 private string name부터 시작인가요?그래서 private string name은 static string get()을 부르는 함수인가요????ㅠㅠㅠ연결 고리를 모르겟어요 그리고 return 반환에서 오류가 나서 7 정도가 오류 위치라고 하신건가요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
생성한 java-start 프로젝트가 프로젝트 폴더에 보이지 않아요
강사님의 말에 맞춰 java-start 프로젝트를 생성하였습니다만 아래 그림과 같이 프로젝트 폴더에 External Libraries와 Scratches and Consoles만 보이고 java-start 프로젝트가 보이지 않게 됐습니다. 어떻게 해결할 수 있을까요?프로젝트 생성 시 설정은 다음과 같습니다:Build System: IntelliJJDK: 18 Oracle OpenJDK 18.0.1 - aarch64 (M1 Mac입니다)
-
해결됨서버개발자 과제전형 완벽가이드 - 1편
멀티모듈 문의드립니다.
아래링크 문의에 대한 추가 질문입니다.https://www.inflearn.com/questions/1385202버전과 동일한 소스코드 동일한 것으로 확인됩니다. 또한, restart 후에도 동일한 현상 확인되어 추가문의드립니다. 혹시, intellij community 버전이라 그런건지 문의드리며 해결방법 확인부탁드립니다!!
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
24년 2회기출 35분 52초
24년 2회기출 35분 52초 에 아스키코드 65,97 설명하시는데65가 더 작은 소문자 a 라고 말한게 잘못말한거 같아요
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
학습자료 통합본
수업자료 PDF 통합본 언제쯤 나오나요? 이제 한 달이 채 안 남았네요ㅠㅠ
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
업캐스팅 질문입니다
11분 07초A a = new A();A b = new B();위 두개는 이렇게 생성하겠다 라는 생성만 하는 문장이지 않나요?b.paint(); 는 출력을 하는 문장이므로 실행될때 classA의 기본생성자인 Contruct~와 classB의 기본생성자인 Contruct~가 출력되고 난후 B()내의 paint()가 실행되는건 이해가 갑니다.근데 b.paint(); 가 실행되기 전에 A a = new A();를 선언함으로서 즉시 classA의 Contructor ~가 출력 되는 것이 이해되지 않습니다ㅠㅠ
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
switch-case 6분 문제 k관련 질문입니다.
int i = 3 이어서 3 - 10 을 하고 마지막에 --k가 아닌 k--를 계산하는 이유는 뭘까요?k-- 이면 계산되지 않은 -7이 되어야 하지 않을까 생각했는데 -8이 답이라 하셔서 질문 남깁니다.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
C언어 질문
강사님, 안녕하세요. 강의 잘 듣고 있습니다. 강의를 듣다 궁금한 점이 생겨 질문 남깁니다. C언어 - 함수 부분(31:18) 홀수인지, 짝수인지 판별하기 문제 [오답]10는 짝수입니다. 13는 짝수입니다.01는 홀수입니다. 1는 홀수입니다. (0) [정답]10는 짝수입니다. 13는 짝수입니다.1는 홀수입니다. (0) 저는 위에 제시한 오답처럼 풀이를 진행하여 해당 문제를 틀렸습니다. 제 풀이는 함수 정의 부분에 있는 첫 번째 if문에서 retrun 0을 반환(print)하고 그 아래에 있는 if문에 있는 else까지 실행시켜 오답이 되었습니다. 1) if 문 질문isEven 함수 정의 부분에서 첫 번째 if문만 실행되고, 두 번째 if문은 실행되지 않는지 궁금합니다. 2) return, printf 질문 다른 문제에서도 이러한 식으로 오답을 작성한 적이 있는데, return과 print의 차이에 대해 설명해주시면 좋겠습니다. (혹시 예시를 알려주실 수 있을까요?) 교안 관련 질문python 변수와 출력 예제 부분 pdf에 '\n'이 빠져있는 것 같습니다. 강의에는 잘 반영되어 있는데 pdf에는 빠져있는 것 같아서요! (이미 수정하셨을 수도 있을 것 같습니다. ㅎㅎ 확인 부탁드려요)실습 관련 환경 설정가볍게 실습 코드를 돌려보고 싶은데 어느 환경에서 하는 것이 좋을까요? 코랩으로 시도해보았으나 좀 불편한 것 같아 보통 어느 환경에서 실습을 진행하는지 여쭙고 싶습니다!
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
숙제 검사
안녕하세요 선생님숙제로 내주신 문제를 풀어보았습니다.좀 무식한 방법으로 한 것 같은데 이것 말고는 다른 방법이 떠오르지가 않더라구요.피드백 부탁드립니다! public class Main { static int[] visited; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int nodeCount = Integer.parseInt(st.nextToken()); // 노드의 수 int lineCount = Integer.parseInt(st.nextToken()); // 간선의 수 List<Integer>[] list = new ArrayList[nodeCount + 1]; for (int i = 1; i <= nodeCount; i++) { list[i] = new ArrayList<>(); } visited = new int[nodeCount + 1]; for (int i = 0; i < lineCount; i++) { st = new StringTokenizer(br.readLine()); int nodeA = Integer.parseInt(st.nextToken()); int nodeB = Integer.parseInt(st.nextToken()); list[nodeA].add(nodeB); } bfs(list, 2); } private static void bfs(List<Integer>[] list, int target) { Queue<List<Integer>> q = new LinkedList<>(); q.offer(list[1]); visited[1] = 1; int level = 1; while (!q.isEmpty()) { boolean isFinished = false; int size = q.size(); loopOut: for (int i = 0; i < size; i++) { List<Integer> currentNodes = q.poll(); for (Integer nextNode : currentNodes) { if (nextNode == target) { System.out.println(target + " : " + level); isFinished = true; visited[nextNode] = 0; break loopOut; } else { List<Integer> e = list[nextNode]; if (!e.isEmpty() && visited[nextNode] == 0) { visited[nextNode] = 1; q.offer(e); } } } } if (!isFinished) { level++; } else { target++; level = 1; q.clear(); q.offer(list[1]); for (int i = 2; i < visited.length; i++) { visited[i] = 0; } visited[1] = 1; } } } }
-
해결됨서버개발자 과제전형 완벽가이드 - 1편
클린한 아키텍쳐에 관하여
안녕하세요.API 서버 구현 - 1 의 내용에 대해서 질문 드립니다. package com.library.service; import com.library.controller.response.PageResult; import com.library.controller.response.SearchResponse; import문을 보면 BookQueryService 와 BookRepository 가 controller 패키지의 DTO들을 의존하고 있습니다. 3-tier architecture 에서는 한 방향으로 의존 관계가 흘러야 한다고 알고 있는데, 아키텍쳐 부분에 대해서 의견을 듣고 싶습니다. 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
애플리케이션 단과 DB단 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]해당 강의에서 설명하는 내용은 JPA를 가지고 Application단에서 연관된 객체들의 생명주기를 관리해주는 것인데 그러면 db단에서 직접 cascade 속성을 걸고 관리해주는것과 어떤 차이가 있나요? 둘다 같이 적용해도 되는건가요? 아님 둘중 하나만 해주면 되나요? app단에서 다 해주면 DBA 가 필요한가?라는 궁금증도 생기네요. 실제 현업에서는 어떤 방법을 더 많이 사용하는지 알려주시면 감사하겠습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Member테이블에 insert가 안돼요
[질문 내용]Create 테이블은 잘 되는데 insert가 안되서요 강의처럼 @Rollback(false) 넣었는데 insert 가 안뜹니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
orderList 페이지 div크기 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.html코드는 같은데 입력창의 배치가 form-inline으로 안 나오는 이유가 있나요?<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head th:replace="fragments/header :: header"/> <body> <div class="container"> <div th:replace="fragments/bodyHeader :: bodyHeader"/> <div> <div> <form th:object="${orderSearch}" class="form-inline"> <div class="form-group mb-2"> <input type="text" th:field="*{memberName}" class="formcontrol" placeholder="회원명"/> </div> <div class="form-group mx-sm-1 mb-2"> <select th:field="*{orderStatus}" class="form-control"> <option value="">주문상태</option> <option th:each= "status : ${T(jpabook.jpashop.domain.OrderStatus).values()}" th:value="${status}" th:text="${status}">option </option> </select> </div> <button type="submit" class="btn btn-primary mb-2">검색</button> </form> </div> <table class="table table-striped"> <thead> <tr> <th>#</th> <th>회원명</th> <th>대표상품 이름</th> <th>대표상품 주문가격</th> <th>대표상품 주문수량</th> <th>상태</th> <th>일시</th> <th></th> </tr> </thead> <tbody> <tr th:each="item : ${orders}"> <td th:text="${item.id}"></td> <td th:text="${item.member.name}"></td> <td th:text="${item.orderItems[0].item.name}"></td> <td th:text="${item.orderItems[0].orderPrice}"></td> <td th:text="${item.orderItems[0].count}"></td> <td th:text="${item.status}"></td> <td th:text="${item.orderDate}"></td> <td> <a th:if="${item.status.name() == 'ORDER'}" href="#" th:href="'javascript:cancel('+${item.id}+')'" class="btn btn-danger">CANCEL</a> </td> </tr> </tbody> </table> </div> <div th:replace="fragments/footer :: footer"/> </div> <!-- /container --> </body> <script> function cancel(id) { var form = document.createElement("form"); form.setAttribute("method", "post"); form.setAttribute("action", "/orders/" + id + "/cancel"); document.body.appendChild(form); form.submit(); } </script> </html>
-
해결됨실전! 스프링 데이터 JPA
스프링 데이터 Jpa 공통 인터페이스 기능 getOne(ID)
강의 자료 3. 공통 인터페이스 기능 마지막 주요 메서드 부분 getOne(ID): 엔티티를 프록시로 조회한다. 내부에서 EntityManager.getReference() 호출여기에 적힌 getOne이 스프링 데이터 JPA 2.5 부터 getById로 변경 되었고 스프링 데이터 JPA 2.6 getReferenceById로 변경되어 3.0 부터 getById도 deprecated 되었다고 들었는데 강의 자료에는 변경되어 있지 않는 것 같습니다.
-
해결됨실전! 스프링 데이터 JPA
섹션 3 지연 로딩 설정 후 MemberTest 실행 후 쿼리 문
이전 강의를 수강 하면서 엔티티 조회 시 지연 로딩 설정 시 즉시 조회가 되는 게 아닌 프록시 객체가 데이터의 위치를 가지고 사용할 때에 프록시 객체가 초기화 되며 데이터베이스에 쿼리를 요청하고 데이터를 받아 온다 라고 배웠습니다. 그렇다면 테스트 메서드를 실행하게 된다면Team, Member 객체를 persist -> 영속성 컨텍스트에 Member와 Team 존재flush() -> 영속성 컨텍스트에 들어있던 엔티티를 데이터베이스에 반영 -> insert 쿼리가 실행데이터베이스에 반영되었으나 아직 영속성 컨텍스트에는 값이 존재하는 상태clear() -> 영속성 컨텍스트에 들어 있는 데이터를 초기화createQuery로 Member 엔티티를 데이터베이스에서 조회 -> Member에 대한 select 쿼리 실행영속성 컨텍스트가 초기화 되었고 team이 지연 로딩으로 설정되어 프록시 객체가 생성루프를 돌며 getTeam() 호출 시점 team_id를 기반으로 데이터베이스에 team을 조회 -> Team에 대한 select 쿼리 실행memberA 조회 후 teamA에 대한 조회 쿼리가 발생하고 memberC 조회 후 teamB 조회 쿼리가 발생이러한 과정으로 이뤄진다고 배웠는데 테스트 코드를 돌려보니 member에 대한 조회 쿼리 후 team에 대한 조회 쿼리가 발생하지 않습니다.그래서 팀의 프록시 객체가 초기화 되었는지 체크하기 위해 Hibernate.isInitialized를 사용해 찍어봤는데 제일 처음 false 로 초기화 되지 않았다고 나오나 team을 조회하는 쿼리가 발생하지 않았습니다.찾다 보니 Hibernate에 쿼리 최적화 기능으로 영속성 컨텍스트는 초기화 되었지만 메모리가 초기화 된 것은 아니므로 해당 객체가 메모리에 존재한다면 Hibernate가 쿼리를 생략하고 해당 객체를 반환한다라는 게 있던데 그것 때문에 쿼리가 나가지 않는 건지 궁금합니다. 2차 캐시가 설정되어 있지는 않습니다. 스프링 부트 3.3.4, 자바 17, Hiberante 6.5.3 입니다!* 해결 *spring.jpa.properties.hibernate.show_sql=true하이버네이트 show_sql이 주석처리 format_sql만 출력되는 상황이었습니다.정상 출력 확인했습니다!package springPJ.dataJpa.domain; import jakarta.persistence.EntityManager; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.hibernate.Hibernate; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import java.util.List; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest @Transactional @RequiredArgsConstructor @Slf4j class MemberTest { @Autowired EntityManager em; @Test void testEntity() { Team teamA = Team.builder().name("teamA").build(); Team teamB = Team.builder().name("teamB").build(); em.persist(teamA); em.persist(teamB); Member memberA = Member.builder().name("memberA").age(10).team(teamA).build(); Member memberB = Member.builder().name("memberB").age(20).team(teamA).build(); Member memberC = Member.builder().name("memberC").age(30).team(teamB).build(); Member memberD = Member.builder().name("memberD").age(40).team(teamB).build(); em.persist(memberA); em.persist(memberB); em.persist(memberC); em.persist(memberD); em.flush(); em.clear(); List<Member> members = em.createQuery("select m from Member m", Member.class).getResultList(); for (Member member : members) { log.info("team.isInitialized = {}", Hibernate.isInitialized(member.getTeam())); log.info("member = {}", member); log.info("member.team = {}", member.getTeam()); } } } select m1_0.member_id, m1_0.age, m1_0.name, m1_0.team_id from member m1_0 2024-09-21T19:36:05.194+09:00 INFO 7696 --- [dataJpa] [ Test worker] springPJ.dataJpa.domain.MemberTest : team.isInitialized = false 2024-09-21T19:36:05.194+09:00 INFO 7696 --- [dataJpa] [ Test worker] springPJ.dataJpa.domain.MemberTest : member = Member(id=1, name=memberA, age=10) 2024-09-21T19:36:05.197+09:00 INFO 7696 --- [dataJpa] [ Test worker] springPJ.dataJpa.domain.MemberTest : member.team = Team(id=1, name=teamA) 2024-09-21T19:36:05.219+09:00 INFO 7696 --- [dataJpa] [ Test worker] springPJ.dataJpa.domain.MemberTest : team.isInitialized = true 2024-09-21T19:36:05.219+09:00 INFO 7696 --- [dataJpa] [ Test worker] springPJ.dataJpa.domain.MemberTest : member = Member(id=2, name=memberB, age=20) 2024-09-21T19:36:05.219+09:00 INFO 7696 --- [dataJpa] [ Test worker] springPJ.dataJpa.domain.MemberTest : member.team = Team(id=1, name=teamA) 2024-09-21T19:36:05.219+09:00 INFO 7696 --- [dataJpa] [ Test worker] springPJ.dataJpa.domain.MemberTest : team.isInitialized = false 2024-09-21T19:36:05.219+09:00 INFO 7696 --- [dataJpa] [ Test worker] springPJ.dataJpa.domain.MemberTest : member = Member(id=3, name=memberC, age=30) 2024-09-21T19:36:05.219+09:00 INFO 7696 --- [dataJpa] [ Test worker] springPJ.dataJpa.domain.MemberTest : member.team = Team(id=2, name=teamB) 2024-09-21T19:36:05.219+09:00 INFO 7696 --- [dataJpa] [ Test worker] springPJ.dataJpa.domain.MemberTest : team.isInitialized = true 2024-09-21T19:36:05.220+09:00 INFO 7696 --- [dataJpa] [ Test worker] springPJ.dataJpa.domain.MemberTest : member = Member(id=4, name=memberD, age=40) 2024-09-21T19:36:05.220+09:00 INFO 7696 --- [dataJpa] [ Test worker] springPJ.dataJpa.domain.MemberTest : member.team = Team(id=2, name=teamB)