묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
한 트랜잭션내 DB오류 발생시 예외처리
[질문 내용]안녕하세요. 강의 잘듣고있습니다. [상황] 1.일대다 양방향 관계인 A,B를 저장하려고 합니다. 2.B(다) entity insert시 오류가 발생했습니다. ( 컬럼 크기 보다 큰 데이터 입력) 3.A(일)는 B 기록에 대한 로그성 테이블입니다. 4.@Transactional 처리 없음 5.A에 오류기록이 저장되지않습니다. (exception catch 실패, finally에서 persist 작업시 무반응) [문의] 1.한 트랜잭션 안에서 2개의 entity 저장시 B entity 작업에 오류 발생해도 A entity 작업은 rollback이 안되었으면 합니다. 2. JPA는 @transactional 없이도 rollback이 적용되는걸까요? 어느부분을 참조하면 좋을지 조언부탁드립니다. 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속 컨텍스트에 대해 질문이 있습니다 !
안녕하세요! 실무에서 JPA를 도입하기 위해 강의를 열심히 수강하고 있습니다. ㅎㅎ 좋은 양질의 강의를 준비해주셔서 정말 감사합니다. 강의수강 도중 궁금한 점이 생겨 글을 남깁니다! 보통 실무에서는 애플리케이션을 1개만 사용하지 않을거고, 2개라고 가정했을 때, (DB는 하나로 가정하겠습니다.) Item DB가 있다고 가정하고, price = 0 이라 할 때, 1) A앱에서 update price = 1000, A앱 1차캐시 price = 1000 2) B앱에서 update price = 2000, B앱 1차캐시 price = 2000 3) A앱에서 price를 정보를 가져왔을 때, 1차캐시에 있는 1000값을 가져오는게 맞나요? (1번2번은 트랜잭션이 겹치지 않고, 1이 종료한 후에 2가 시작했다고 가정하겠습니다!) A앱, B앱은 서로 캐시를 공유하지 않는게 맞을까요? A앱에서 데이터 정합성을 지키기 위해 정확한 데이터가 필요하다면 다시 select를 하거나 persist를 하면 되는걸까요? 긴 글 읽어주셔서 감사합니다!
-
미해결
강의 학습법에 대해서 질문 드리고 싶습니다.
원래 뭔가를 만들다가 필요한 부분만 찾아서 강의를 듣는 스타일이었는데,최근에 어떤 프로젝트에 참여하기 위해JPA랑 Spring을 공부해야 되는 상황입니다. 해서 영한님의 강의를 듣고 있는데요. 강의를 듣다 보니, PDF에 정리해주신 것 말고도말씀으로 정리해주시는 부분 중에 너무 중요한 내용들이 자주 나와서필기를 할 수 밖에 없더라고요 애초에 제가 필기하며 정리하는 학습법이 기억에 잘 남는다고 여기는 것도 있고.. JPA든 Spring이든 완강하기 까지 내용이 엄청나게 방대한데이거를 꼼꼼히 정리해가며 학습하면후에 프로젝트에 들어갈 때 제 기억속에 다 남아있진 않아도,적어도 빠르게 필기한 부분을 참고해서 원하는 부분을 발췌할 수 있을 것 같아서 필기를 하는 것도 있는데요. 문제는 프로젝트에 들어갈 시간이 며칠 안남았습니다!1) 짧은 시간내에 완강을 할려면 필기를 하지 않고 설렁설렁 빠르게 들어야하는데,이렇게 빠르게 대충 듣고 프로젝트를 시작하는게 좋을지 2) 3분의 1만 듣고 프로젝트를 시작하는 한이 있더라도 필기하면서 어느정도 이해하고들어가는게 좋을 지 모르겠습니다. 이런 딜레마에 빠져있구요.. 혹시나 영한님처럼 프로그래밍 학습과 프로젝트에 있어 많은 경험을 하신 분이라면,확답을 내려주실 수 있지 않을까 하여 여쭤보아요.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
rabbitMQ 도커 기동 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. rabbitMQ 도커 기동 관련해서 질문드립니다. 도커로 rabbitMQ를 기동하면서 기존에 사용하던 포트번호를 그대로 사용하는거 같은데, 현재 로컬 PC에선 기존에 설치했던 rabbitMQ가 돌아가면서 해당 포트를 사용하고 있는거 같습니다. (컴퓨터 부팅 후 따로 설정하지 않아도 15672 포트로 웹 관리 콘솔에 접근이 되더라구요) 이러한 부분에 관해 설정을 따로 하거나 로컬의 rabbitMQ를 삭제하지 않아도 문제가 없을까요? (추가적으로 MQ를 설치하면서 함께 설치했던 erlang을 로컬에서 삭제해도 도커에선 문제없이 작동하는지도 궁금합니다)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderService에서 OrderItem접근
OrderService에서 OrderItem접근이 어떻게 가능한지 궁금합니다. OrderService @Transactionalpublic Long order(Long memberId, Long itemId, int count) { // memberId를 가져오기 위해선 MemberRepository있어야 함 //엔티티 조회 Member member = memberRepository.findOne(memberId); Item item = itemRepository.findOne(itemId); //배송정보 생성(회원정보 Address) Delivery delivery = new Delivery(); delivery.setAddress(member.getAddress()); //주문상품 생성 OrderItem.createOrderItem() // [질문한 부분]} 혹시 어떠한 도메인 이든 , Controller, Service, Repository에 접근 가능해서 그런걸까요?!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
파라미터 ...
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Order에 생성 메서드를 구현할때 파라미터에 ... 넣는 의미를 모르겠습니다. 어느 경우에 사용하나요? public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems) { }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Mysql 인메모리DB 설정, 로그 쿼리남기기
안녕하세요, 저는 처음부터 H2데이터베이스가 아닌 MySQL을 연결해서 사용하고 있습니다. 테스트 코드 작성 후 여러 이점으로 메모리디비 연결 하는 방법을 알려주셨는데, Mysql의 경우도 할 수 있나요? 현재 dependencies에 implementation 'mysql:mysql-connector-java' 추가된 상태입니다. 추가적으로 로그에 쿼리남기는 것도 보고싶어서, dependencies에 implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' 만을 추가한 상태입니다. 로그에 남는것 같기는 한데 선생님처럼 예쁘게 보이는 것이아닌 줄글처럼 나오는데요, 혹시 추가하거나 봐야할 게 있을까요? application.properties에는 이렇게 설정했습니다, # JPA Settingsspring.jpa.hibernate.ddl-auto=createspring.jpa.properties.hibernate.format_sql=true spring.jpa.properties.hibernate.show_sql=true
-
미해결실전! 스프링 데이터 JPA
프록시 초기화
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 강의 코드를 실행해보다가 궁금한점이 생겨서 질문드립니다. 예전에 MemberTest 클래스에서 아래 코드를 실행했을때는 member.getTeam() 에서 team에 대한 select 쿼리가 나가면서 프록시 초기화가 발생했습니다. @Test public void testEntity() throws Exception { Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); em.persist(teamA); em.persist(teamB); Member member1 = new Member("member1", 10, teamA); Member member2 = new Member("member2", 20, teamA); Member member3 = new Member("member3", 30, teamB); Member member4 = new Member("member4", 40, teamB); em.persist(member1); em.persist(member2); em.persist(member3); em.persist(member4); //초기화 em.flush(); em.clear(); //확인 List<Member> members = em.createQuery("select m from Member m", Member.class) .getResultList(); for (Member member : members) { System.out.println("member = " + member); System.out.println("-> member.team = " + member.getTeam()); } } 하지만 MemberRepositoryTest 클래스에서 아래의 코드의 경우 member.getTeam() 으로 하면 team에 대한 select 쿼리가 나가지 않고 프록시 초기화가 발생하지 않습니다. 이 두가지 테스트의 차이가 무엇이길래 처음 테스트는 getTeam()으로 프록시 초기화가 되고 두번째 테스트는 getTeam()만으론 안되고 getTeam().getName() 까지 해야 프록시 초기화가 될까요? @Test public void findMemberLazy() throws Exception { //given //member1 -> teamA //member2 -> teamB Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); teamRepository.save(teamA); teamRepository.save(teamB); memberRepository.save(new Member("member1", 10, teamA)); memberRepository.save(new Member("member2", 20, teamB)); em.flush(); em.clear(); //when List<Member> members = memberRepository.findAll(); //then for (Member member : members) { member.getTeam(); System.out.println("Team = " + member.getTeam().getClass()); } }
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Spring 재시작시 상품 데이터가 사라지는데, hibernate ddl-auto 설정 때문인가요?
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용] Spring이 런타임에서는 상품을 잘 저장하고, 불러오는 것도 정상적입니다. 그런데 스프링을 Re-Run 하게 되면, 상품이 전부 사라지네요. ddl-auto: create를 update로 바꿨더니 데이터가 안 사라지네요. 이거 말고 다른 이유는 없는 건가요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
IDENTITY 전략 영속성 텍스트 상태
안녕하십니까 기본 키 매핑 강의 23:37분에 IDENTITY 시퀀스 전략을 사용할 때, em.persist(member)를 할 때 키를 모르기 때문에 바로 Insert 문을 날린다고 하셨는데 그럼 이때 트랜잭션 커밋 한것 처럼 영속성 컨텍스트 상태에 있는 모든 상태가 적용되나요? 아니면 em.persist(member)만 적용되나요?
-
미해결실전! Querydsl
Sort관련 질문있습니다!.
안녕하세요 ! 스스로 이해를 잘못하고있는거 같아서 이전 강의들 포함 다시 돌려보아도 이해가 되질 않아 질문드립니다. pageable을 클라이언트가 order조건까지 요청하였을때 그 pageable의 sort()를 querydsl의 orderby로 변환하는 과정에서 OrderSpecifier를 사용한다고 이해하였습니다. 근데 적어주신 내용에 "루트 엔티티 범위를 넘어가는 동적 정렬 기능이 필요하면 스프링 데이터 페이징이 제공하는 Sort 사용하기 보다는 파라미터를 받아서 직접 처리하는 것을 권장한다." 라는 의미가 예를들어 Member의 team의 name으로 sort를 하는데 클라이언트가 teamNameOrder=True 같은 값을 요청하고 그요청 파라미터를 기준으로 동적으로 querydsl쿼리 order를 처리하라는 말씀이신가요? 머리가 안좋아서 헷갈리네요 ㅜ_ㅜ
-
미해결실전! Querydsl
BooleanBuilder, BooleanExpression 차이
영한님 안녕하세요 작년 7월부터 스프링 공부했는데 어느새 여기까지 왔네요,, 좋은 강의 덕분에 재밌게 잘 공부하고 있습니다 . BooleanBuilder와 BooleanExpression 차이를 알고 싶어서 다이어그램을 보았습니다. Expression을 상속하고 있는 클래스더라구요 그래서 "도대체 무슨 차이지"라고 생각이 들어 찾아보았습니다. 동욱님 블로그 를 참고하고나서 제 생각엔 BooleanBuilder는 where 조건에 BooleanBuilder 객체 자체를 넣으니 코드를 이해하는데 가독성이 떨어진다고 생각했습니다.(조건들이 하나의 BooleanBuilder에 있기 때문) . BooleanExpression을 사용하면 여러 조건들을 각각 BooleanExpression을 반환하는 메서드를 만들어 가독성 좋게 조건들을 나열할 수 있고, 조합을 할 수 있다라고 생각했습니다. . 하지만 옛날에 영한님이 Q&A에 대한 답을 보았을 때, BooleanBuilder로도 충분하게 가독성 좋은 코드를 만들 수 있더라구요 . 그래서 제 생각엔 두 가지의 차이점이 보였습니다 . 1. BooleanExpression은 null일 경우 그냥 null만 반환해도 되지만, BooleanBuilder는 항상 BooleanBuilder라는 객체를 생성하여 반환해야하기 때문에 리소스 측면에서 낭비이다? 2. BooleanExpression은 ","을 이용해서 where조건에 여러 BooleanExpression의 조건들을 나열할 수 있지만, BooleanBuilder는 where에 나열할 수 없다? 정도라고 생각이 드는데, 아직까지 뭐가 확실하게 다른거지라는 생각이 들어 질문드립니다! 감사합니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
팩토리 메서드 관련해서 질문이 있습니다!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용] 안녕하세요!! 강의를 보면서 팩토리 메서드에 대해 궁금증이 몇가지 생겼는데 구글링을 해봐도 잘 나오지 않아서 질문 올립니다🥲 1. 팩토리 메서드를 사용하는 기준이 있을까요? 생성자를 통해 객체를 생성하지 않고, 팩토리 메서드를 사용하는 경우 이름을 가질 수 있다, 하위 타입 객체를 반환할 수 있다 등등의 장점이 있고, 이에 반해 몇몇 단점도 있는것 같은데 단순히 팩토리 메서드 내부에서 생성자만 호출하는 경우에도 실무에서는 팩토리 메서드를 웬만하면 다 사용하는 편인가요?? 생성자 대신 팩토리 메서드를 사용하여 객체를 생성하는 상황이나 기준이 있는지 궁금합니다! 2. 팩토리 메서드를 사용하는 경우 프로젝트에서 네이밍 규칙을 어떻게 가져가는 것이 좋을까요? 강의를 듣고 복습하면서 Order와 같이 연관 관계들이 얽혀있는 팩토리 메서드는 createOrder와 같은 좀 더 의미있는 이름을 사용하고, 그냥 단순히 객체만 생성하는 경우에는 of를 사용해서 실습을 해보았습니다! 실무에서 프로젝트를 진행하면 위와 같이 어떠한 룰을 만들어서 사용하시는지, 아니면 하나의 이름으로 통일해서 가져가시는지 궁금합니다 ㅎㅎ 감사합니다😀
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 질문 드립니다
안녕하세요 강의를 듣다가 연관관계와 관련해서 질문이 있어 여쭤봅니다 만약 id(pk값) 이 4 인 Order의 OrderItem 리스트에서 count가 5인 값만 가지고 온다고 하면 이걸 가져올 수 있는 방법이 있을까요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
member를 여러개 넣을 때 오류(?)에 대해 질문합니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 강의 7:00에서 member들을 findMember로 뽑아올 때 하나로는 됬었는데 제가 member를 여러개 설정해 놓고서 할려니까 안되더라고요. 이게 왜 안되는 것인지 이해가 안되서 질문드립니다. 코드는 이렇게 작성했습니다. 쿼리문을 보니까 insert는 잘 날라가는데 콘솔 출력값이 이런식으로 나오고 members size: 1 Member: member2 db값이 이런식으로 나오더라고요 왜 그러는지 이해가 도저히 안되가지고 질문 드립니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
유니크 제약 조건 예외처리 관련 질문입니다
[질문 내용] 안녕하세요 선생님!! 정말 좋은 강의 감사드립니다. 이제 드디어 선생님 강의를 크게 한 바퀴 돌리고 프로젝트를 진행하고 있습니다. 한 가지 궁금한 점이 생겨서 이렇게 질문을 남기겠습니다. 제가 지금 멤버 엔티티를 설계하고 있는데 유니크 제약조건에 대한 고민이 생겼습니다. 먼저 제가 loginId와 email 두 필드 각각 유니크 조건을 걸었습니다. 코드는 아래와 같습니다. 이렇게 이제 postman을 사용해 email과 loginId 테스트를 진행하면 아래와 같은 예외가 발생합니다. (데이터베이스는 h2 데이터베이스 사용중입니다) org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Unique index or primary key violation: "PUBLIC.LOGINID_UNIQUE_INDEX_8 ON PUBLIC.MEMBER(LOGIN_ID) VALUES 1"; SQL statement: 이제 여기서 고민이 생겼습니다. 위 예외를 상속해 사용자 정의 예외를 만들어서 예외를 처리하고 싶은데 h2 데이터베이스에 의존하는 것 같아서 좋지 않다고 생각합니다. 이런 경우에는 어떻게 예외를 다룰 수 있을까요?? 혹시 제가 로그인 처리를 이메일과 로그인 아이디로 하고 싶어서 이렇게 설계를 했는데 유니크 제약 조건 말고도 해결할 수 있는 다른 방법이 있을까요?? (서비스에서 해당 값의 중복을 검사하는 방법을 생각해보았습니다.) 늘 좋은 강의 정말 진심으로 감사드립니다!!! ㅎㅎ
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
JPA renaming
안녕하세요. JPA 가 (Java Persistence API) -> Jakarta Persistence API 로 renaming 된 것 같아서 제보 드려요~
-
해결됨실전! Querydsl
Querydsl4RepositorySupport.applyPagination의 countQuery질문
안녕하세요. 질문에 앞서 좋은 강의 감사합니다. Querydsl4RepositorySupport클래스의 applyPagination메소드에서 fetchCount()를 하여 리턴해주시는데 강사님도 아시다시피 fetchCount가 deprecated되어서 앞에서 실습했던 MemberRepositoryImpl.searchPageComplex 처럼 바꾸고 싶은데(fetchOne사용) 어떻게 해야 할지 막막하네요. 제 생각에는 countQuery부분이 JPAQuery<Long>을 반환해줘야 하는데 이를 위해서는 (어디선가 들어만 본...)수퍼타입토큰을 사용해야 할 것 같습니다. 그런데 이걸 이용해서 문제를 풀려고해도 잘 안풀리네요 혹시 강사님은 이 문제를 어떤식으로 해결하셨는지 궁금합니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
스프링 로드맵을 보면서 따라가고있는 수강생입니다.
스프링 핵심원리 기본편까지 보고 네트워크를 본 후 다음 강의를 뭘할지 고민중입니다. JPA도 들을 생각인데 네트워크를 본 후 바로 JPA활용편으로 가서 JPA로드맵 수강 후 스프링 MVC에 들어가야할지, 아니면 스프링 MVC 수강 이후 JPA강의를 봐야할지 고민이 됩니다... 강의 수강 순서 추천 부탁드립니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA PK String 관련 문의드립니다
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요 김영한 강사님의 강의를 듣고 프로젝트에 JPA를 적용해보려고 합니다. 기본키의 값을 Long(정수)타입이 아니라 String 타입으로 받고싶은데 JPA에서 따로 지원하는 기능이 있는 지 문의드립니다. ex) YYYYMMDD + 시퀀스값(숫자) 좋은 강의 해주셔서 항상 감사드립니다.