묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
graph 만들때 boolean[][] 으로 만드는 경우랑 int[][] 나 ArrayList<Integer>[] 로 만드는 기준이 어떻게 되나요?
강의 영상마다 질문이 있으면 언제든 그리고 바로 질문 남겨주세요! 질문할 때 가장 정확하게 이해할 수 있습니다.해당 영상과 관련된 질문들을 해주실 때 제가 가장 정확히 답변 드릴 수 있습니다!취업 전반의 상담이나, "제 코드가 왜 틀렸는지 알려주세요"와 같이 광범위한 질문은, 질문자의 상황에 따라 답변이 달라질 수 있기 때문에, 정확한 답변을 드리기가 어렵습니다 :(이런 분들을 위해서는 멘토링 항목으로 별도 제공하고 있으니, 다음 링크를 참고해주세요!이 링크를 통해서는 본인의 코드가 왜 틀렸는지 모를 때 질문을 주셔도 좋고, 취업 전반(면접 준비, 자소서, CS 면접 등)에 관련한 질문을 주시면 답변 드리겠습니다 :)"이 질문은 해도 되나?"라는 생각이 드신다면 우선 남겨주세요! 제가 답변 드리기 어려운 건 멘토링에 올려 달라고 재요청 드리겠습니다 🙂 graph 만들때 boolean[][] 으로 만드는 경우랑 int[][] 나 ArrayList<Integer>[] 로 만드는 기준이 어떻게 되나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
도저히 모르겠서용;;;;;
8월 11, 2024 1:23:56 오전 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation INFO: HHH000204: Processing PersistenceUnitInfo [ name: hello ...] 8월 11, 2024 1:23:56 오전 org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {5.3.10.Final} 8월 11, 2024 1:23:56 오전 org.hibernate.cfg.Environment <clinit> INFO: HHH000206: hibernate.properties not found Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException at org.hibernate.boot.spi.XmlMappingBinderAccess.<init>(XmlMappingBinderAccess.java:43) at org.hibernate.boot.MetadataSources.<init>(MetadataSources.java:86) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:212) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:174) at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:76) at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:171) at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:119) at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:61) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:50) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at hellojpa.JpaMain.main(JpaMain.java:12) Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ... 12 more Process finished with exit code 1 JpaMain.java를 실행시키면 저렇게 나옵니다.잘 되는건줄 알았는데, 에러가 떠서 서버에 HelloA이게 저장이 안됩니다. 그리고 ======================== **javax jakarta 패키지 이름 변경 예)** **JPA 라이브러리** `import javax.persistence.*` **JPA 애노테이션** `javax.persistence.Entity` **persistence.xml 설정** `javax.persistence.jdbc.driver` `jakarta.persistence.jdbc.driver` `javax.persistence.jdbc.user` `jakarta.persistence.jdbc.user` `javax.persistence.jdbc.password` `jakarta.persistence.jdbc.password` `javax.persistence.jdbc.url` `jakarta.persistence.jdbc.url` **H2 데이터베이스 관련해서 이슈가 해결되지 않으면 다음 링크를 참고해주세요.** https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/ edit#heading=h.3ryn0qha48vi 이거는 수정을 해주라는건가요??? 어디에 어느부분을 수정 해줘야 할까요?? 구글링해서 스스로 해결해보고 싶었는데 도저히 안되서 질문 두가지 남깁니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
변경감지(dirty checking) 관련 기본적인 질문
안녕하세요. 영속성 컨텍스트에서 변경 감지 (dirty checking) 부분 수강 중 질문이 있습니다. 변경감지란, 영속성 컨텍스트에서 조회(em.find)한 값을 변경하면, 1차 캐시도 자동으로 업데이트가 일어나는 현상으로 이해하였습니다. 위의 코드와 같이 em.find로 조회하는 경우 1차 캐시에도 Id=memberA 인 엔티티가 저장되는 것으로 알고 있는데요. 1차 캐시에 저장되는 엔티티의 주소가 x001이라고 했을 때, em.find로 가져온 객체 memberA도 같은 객체 (x001)를 가져오기 때문에, memberA의 값을 업데이트하면 1차 캐시 값도 자동으로 업데이트 되는게 맞을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 프로젝트 초기 설정
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기서 Gradle JVM에서 Project SDK(openjdk-21)로 할까요? 아니면 다른 선택지인 21 (Oracle OPenJDK 21.0.2)로 해야 하나요?감사합니다.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
조건문 부분 강의에서 낚시라고 한 부분이 궁금해요
자세한 설명이 궁금합니다.a = 10, b=5, c=8if(a!=b!=c)에서 a!=b를 먼저 계산한 값이 false(0)그럼 후에 비교하는값이 0 != 8이 되는건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강의 순서 질문
기본편 들은 상태인 지금 활용 1만듣고, data jpa 강의 들어도 되나요?jpa를 당장 써야돼서 data jpa 들은 후에 활용2를 들으려고 하는데요, 괜찮을련지 궁금하네요.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 공부전에 미리 공부해야할 것이 있을까요?
자바 공부를 마치고 스프링공부를 하려고 강의를 듣는도중 뭔가 한두단계를 건너뛰고 스프링 공부를 시작하는 느낌이 들었습니다..지금 쓰고 있는 annotation, 라이브러리들이 뭔지 하나도 감이 잡히지 않았네요 저런 지식들은 스프링 공부하면서 외우거나 익히는 건가요? 아니면 선행 학습이 필요한 과목이 있나요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
지금까지 배운 내용을 정리 했는데 맞게 정리한건지 궁금합니다.
엔티티 매니저 팩토리사용자가 설정한 정보에 따라 엔티티 매니저 팩토리를 생성합니다. 이 엔티티 매니저 팩토리는 오직 애플리케이션이 실행될 때 하나만 존재해야 합니다. 엔티티 매니저 팩토리의 주요 기능은 엔티티 매니저를 생성하는 겁니다. 사용자의 요청이 디비로 쿼리를 보내는 경우라면 요청과 1:1로 매핑 되는 엔티티 매니저를 생성합니다.엔티티 매니저엔티티 매니저의 핵심 기능은 엔티티를 관리하는 것입니다.엔티티 매니저에는 영속성 컨텍스트라는 논리적 공간이 존재합니다. 여기서 엔티티를 관리합니다.저장persist()를 할 경우 엔티티 매니저에 엔티티를 저장합니다. 이때 1차 캐시에 키는 엔티티의 pk값, 값은 엔티티를 값으로 저장 합니다. 저장 시 전략이 identity인 경우 insert 쿼리를 DB로 바로 전송합니다. 그 외는 쓰기 저장소에 보관합니다.조회find()를 할 경우 처음에는 1차 캐시에서 조회하고 없으면 DB에서 조회합니다. 주의할점은 즉시로딩과 지연로딩입니다.즉시로딩은 A 조회시 A와 연관관계에 있는 데이터들도 한번에 조회하는 방식입니다.지연로딩은 A 조회 후 A와 연관관계에 있는 데이터 사용 시 조회하는 방식입니다.수정더치 체킹 덕분에 값만 변경해도 JPA가 알아서 update 쿼리를 보냅니다.플러시플러시가 발생 시 우선 더티 체킹이 발생합니다.값이 변경된 부분이 있으면 update, delete 쿼리를 생성하여 쓰기 저장소에 저장합니다. 더티 체킹이 끝나면 쓰기 저장소에 보관했던 SQL문들을 DB로 한번에 전송합니다.쓰기 저장소em.persist()에 의해 발생한 insert 쿼리더디 체킹에 의해 발생한 update 쿼리em.remove()에 의해 발생한 delete 쿼리위 상황에서 발생한 쿼리들을 보관하는 저장소입니다.플러시 발생 시 위 쿼리들을 DB에 한번에 전송합니다. 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberRepository와 MemberService 중복 관련
MemberRepository에 findAll과 findOne이 있는데 MemberService에 findMembers와 findOne의, 실상 같은 역할을 하는 메소드를 중복으로 만들어주는 이유가 뭔가요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
쿼리를 보내는 부분은 따로 스레드를 만들어서 처리하는건지 궁금합니다.
public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setName("member1"); member.setTeam(team); em.persist(member); // team.getMembers().add(member); em.flush(); em.clear(); Team findTeam = em.find(Team.class, team.getTeamId()); List<Member> members = findTeam.getMembers(); System.out.println("==============="); for (Member m : members) { System.out.println("==========="); System.out.println("m = " + m.getName()); System.out.println("==========="); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } emf.close(); } }위 코드를 실행했을때 출력 결과는 아래와 같습니다.Hibernate: select t1_0.TEAM_ID, t1_0.name from Team t1_0 where t1_0.TEAM_ID=? =============== Hibernate: select m1_0.TEAM_ID, m1_0.MEMBER_ID, m1_0.USERNAME from Member m1_0 where m1_0.TEAM_ID=? =========== m = member1 =========== 제가 예상한 실행 결과는 findTeam.getMembers(); 로 인해 두 번째 select 쿼리문이 나오고 그 다음에 =============== 가 출력 될거라고 예상을 했습니다.근데 실행 결과는 =============== 가 먼저 출력 되고 두 번째 select 쿼리문이 출력 됐습니다.그래서 이걸 보고 든 생각이 main 스레드가 코드를 한줄 씩 실행하다가 findTeam.getMembers(); 부분에서 SQL문을 디비로 보낼 스레드를 만들어서 해당 스레드에게 그러한 역할을 넘기고 바로 다음줄을 실행하여 =============== 가 두번째 select 쿼리문 보다 먼저 출력되는건지 궁금합니다. 감사합니다.
-
미해결김영한의 실전 자바 - 중급 2편
Hashset 자료구조에 대해서 질문 있습니다!
김영한 멘토님 안녕하세요 강의를 듣다가 질문이 있어서 질문 남깁니다!HashSet 자료구조를 사용해 객체를 저장할때, HashCode와 equals를 재정의 해야한다고 말씀해 주셨는데요. 정말 멘토님 말대로 재정의 하지 않으면 값이 중복되어서 저장되었습니다. 근데 궁금한것은 HashSet 자료구조이기에 HashCode를 사용하는것은 아는데, 그 이전에 자료구조가 Set의 기반의 자료구조인데 Set은 원래도 중복된 값을 허용하지 않는걸로 알고있습니다. 근데 왜 HashCode를 재정의해야 그때서야 값이 중복되어서 저장되지 않는것인가요? 애초에도 Set 기반의 자료구조인데 말입니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
벌크연산후 createQuery 작동방식 질문
강의 처럼 벌크 연산 후int resultCount = em.createQuery("update Member m set m.age=20") .executeUpdate();clear없이 바로 createQuery를 날리면,Member result = em.createQuery("select m from Member m where m.id = :id", Member.class) .setParameter("id", member1.getId()) .getSingleResult(); System.out.println("member.getAge() = " + result.getAge());아래와 같은 select 쿼리가 날라가고 age가 원래값으로 나옵니다.Hibernate:/* selectmfromMember mwherem.id = :id */ selectm1_0.id,m1_0.age,m1_0.memberType,m1_0.TEAM_ID,m1_0.usernamefromMember m1_0wherem1_0.id=?member.getAge() = 10//////////////////////////////find처럼 selcet문이 안날라갈줄 알았는데, 날라가서 createQuery 작동방식이 궁금합니다.1.이 쿼리가 실제로 db에 날라갔는데,age=20값을 가지고오면서 영속성 컨텍스트에 들렸는데,이미 캐시가 존재해서, 쿼리 값을 업데이트 안해주고 원래값 age=10을 가지고 온건가요?2. 아니면 로그에 보이는 쿼리가 실제 db 에 날라가지 않고 생성만된채로, 영속성 컨텍스트를 찾는건가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepository querydsl 적용 질문입니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]querydsl 강의를 듣고 복습하면서 적용해보고 있는데, memberRepository 부분에서 @RequiredArgsConstructor을 사용했더니 compileJava부분에서 em의 초기값이 없다는 예외가 발생했습니다. 생성자를 활용해서 해결되긴 했는데 그 전의 코드에서 왜 작동이 안되었는지 궁금해서 질문드립니다.@RequiredArgsConstructor을 사용한다던가 하는 더 간단한 방법도 있는지 궁급합니다.코드파일입니다https://drive.google.com/file/d/1ezwW4PrReG_BX-lmAC1uiOL8Syk3GbFW/view?usp=sharing
-
미해결실전! Querydsl
querydsl fetchjoin + Projections.bean을 활용한 특정필드 dto 매핑(feat. query specified join fetching, but the owner of the fetched association was not present )
queryFactory.select(Projections.bean(GetMyCommentResponse.MyCommentInfo.class, commentEntity.id.as("commentId"), commentEntity.content.as("content"), commentEntity.likeCount.as("likeCount"), commentEntity.createDateTime.as("createDateTime"), Projections.bean( GetMyCommentResponse.MyCommentedPopUpInfo.class, postEntity.id.as("postId"), postEntity.name.as("postName"), postEntity.mainImageUrl.as("mainImageUrl"), ).as("postInfo"), // commentEntity // 엔티티도 같이 조회하면 에러가 나지 않음 )) .from(commentEntity) .join(commentEntity.post, postEntity).fetchJoin() 안녕하세요 영한님!강의 잘 듣고 있습니다.공부 중에 코드를 작성하다query specified join fetching, but the owner of the fetched association was not present in the select list이런 에러가 발생했는데, fetchjoin시 실제 질의하는 대상 Entity를 select절에 쓰지않아서 에러가 나더라구요. select절에 commentEntity를 추가하면 에러가 발생하지 않지만 이미 commentEntity의 필드들은 모두 가져왔는데, 또 조회하는게 불필요한 작업이라고 생각되어서요. 그렇다고, fetchjoin이 아닌 일반 조인을 써버리면 코멘트마다 포스트에 대해서 n+1 문제가 발생할 것이라고 생각되구요이러한 상황에서 좋은 해결방법이 있을까요? 감사합니다
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
left join이 안돼요
강의하신 코드랑 같고try { Team team = new Team(); team.setName("teamA"); em.persist(team); Member member = new Member(); member.setUsername("member"); member.setAge(10); member.setTeam(team); em.persist(member); em.flush(); em.clear(); String query = "select m from Member m left join m.team t"; List<Member> result = em.createQuery(query, Member.class) .getResultList(); tx.commit(); } catch (Exception e) { tx.rollback(); e.printStackTrace(); } finally { em.close(); } 결과Hibernate: /* select m from Member m left join m.team t */ select m1_0.id, m1_0.age, m1_0.TEAM_ID, m1_0.username from Member m1_0 left join이 안나가네요, jpql로 join까지 썻는데 왜 안나가는걸까요
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
똑같은 변수의 이름을 바꿀때 한번에 바꾸는 단축키가 먼가요? 강의에서는 shift + f6 이라고 나오는데 맥북은 단축키가 먼지 궁긍하네요 ㅠ
똑같은 변수의 이름을 바꿀때 한번에 바꾸는 단축키가 먼가요? 강의에서는 shift + f6 이라고 나오는데 맥북은 단축키가 먼지 궁긍하네요 ㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
url을 못찾겠답니다...
이거 컨트롤러안에있는 파일에서 import가 자동으로 되지도 않고 html에서는 url이 등록되지도 않았다하네요 실행시키면 Null만 받아오네요
-
미해결실전 JSP (renew ver.) - 신입 프로그래머를 위한 강좌
The server does not support version 5.0 of the J2EE Web module specification.
The server does not support version 5.0 of the J2EE Web module specification. 라는 오류가 발생하면서 서버가 실행되질 않습니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
Thread.sleep() 으로 identity 전략의 insert 쿼리 전송 시점을 테스트 해봤는데 궁금한 점이 있습니다.
public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Member member = new Member(); member.setUsername("A"); System.out.println("======================"); em.persist(member); Thread.sleep(9000); System.out.println("======================="); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } emf.close(); } }@Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name", nullable = false) private String username; public Member() { } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } } 우선 생각 했던 결과는 현재 identity 전략이므로 em.persist() 할 경우 insert 쿼리가 DB에 바로 보내지고 DB의 Member 테이블에 값이 저장되는거를 예상했습니다.실제 실행해 보면======================Hibernate:/* insert forjpa_basic.ex1_hello_jpa.hellojpa.Member */insertintoMember (name, id)values(?, default) Thread.sleep(9000) 전까지는 insert 쿼리가 콘솔에 잘 찍힙니다. 그래서 H2 콘솔에 데이터가 잘 저장이 됐는지 확인 해봤습니다.결과는 저장이 되지 않았습니다.Thread.sleep(9000)가 끝나고 나서야 데이터가 저장이 됩니다. 그래서 생각했던 결과인 identity 전략에서 em.persist() 할 경우 왜 DB에 바로 저장이 안되는건지 궁금합니다.참고로 http://hibernate.hbm2ddl.auto 옵션은 create입니다. 감사합니다.
-
해결됨실전! 스프링 데이터 JPA
3계층 질문
강의에선 서비스 계층 코드가 없는 관계로 컨트롤러에서 리포지토리를 바로 가져와 사용하셨는데요실제로 서비스 계층을 구현하지 않은 상태에서 컨트롤러에서 리포지토리를 바로 사용하는 경우도 있는지 궁금합니다