묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
엔티티 매니저 질문드립니다!
안녕하세요!! 제가 생각하는게 맞는지 확인하고 싶어서 질문드립니다!! 엔티티 매니저 팩토리는 연결된 DB당 하나씩 생성되고, 엔티티 매니저는 트랜잭션 단위로 생성된다. 즉, 트랜잭션이 시작될 때, 엔티티 매니저 팩토리가 해당 트랜잭션에 하나의 엔티티 매니저를 할당한다. 그렇기 때문에, 만약 entityManager.flush();를 하고 싶으면 memberRepository.flush(); 로 하든 teamRepository.flush(); 로 하든 똑같다. 위의 내용이 맞을까요!?
-
미해결실전! 스프링 데이터 JPA
질문있습니다.
안녕하세요 insert 벌크 쿼리에 관해 질문있습니다. 강의에서 말씀해주신 대로 해보니 delete와 update의 경우 한번에 처리되는 것을 확인할 수 있었습니다. 문제는 Insert 였습니다. 저는 MySQL 를 사용하면서 IDENTITY 전략을 사용해왔었는데 MySQL의 경우 벌크 INSERT 쿼리를 날리기 위해서는 찾아보니 Batch Insert를 사용하기 위해서는 IDENTITY 전략이 아니라 TABLE 전략을 사용해야 한다고 하더라구요. 제가 궁금한 점은 아래와 같습니다. 1. 다른 ENTITY들은 IDENTITY 전략을 사용하고 Batch Insert가 필요한 특정 ENTITY만 TABLE 전략으로 변경해도 괜찮을까요? 2. 실무에서는 INSERT 쿼리를 한 번에 날리기 위해서는 어떤 방식을 사용하나요?? 감사합니다 :) 2.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 매핑이 언제 필요한지 여쭤보고 싶습니다.
선생님 안녕하세요! 매번 정말 좋은 강의 감사드립니다ㅋㅋㅋㅋ 저 진짜 웹 하나도 모르는 생짜 초보인데, 갑자기 자바 스프링 실무에 투입되어서 넘 힘들었거든요ㅠㅠ 바로 선생님 강의 패키지로 싹 다 결제하고, 하나씩 들으면서 감을 잡고 있습니다. 제 구세주십니다. 감사합니다!! (다음달 월급 들어오면 선생님께 다 갈 예정입니다..?!ㅎㅎㅎ) 최근에 JPA Mapping 관련해서 공부하고 또 실무에 적용해 보고 있는데요, 현재 제가 하는 프로젝트에서는 음식 재료 바구니 기능을 구현해야 합니다. 요게 유저 - 대바구니 - 소바구니 - 음식 재료로 이어지는 계층적 구조이고, 유저 하나가 여러 대바구니, 대바구니 하나가 여러 개의 소바구니, 소바구니 하나가 여러 개의 음식 재료를 포함하는 구조입니다. 각 자식들은 하나의 부모에만 속하게 되어 있구요. 쌤 강의 듣고 일단은 ManyToOne 단방향 매핑으로 각각을 1:N으로 걸어줬는데요. 특정 대바구니 id 아래에 있는 소바구니 (혹은 그 소바구니 아래에 있는 음식 재료까지)를 조회하거나, 특정 소바구니 id 아래에 있는 음식 재료들을 조회하거나 하는 쿼리가 가끔 필요한 상황입니다. 또 대바구니 하나를 삭제하면 그 밑에 소바구니는 싹 다 지워지고, 소바구니 하나를 지우면 그 바구니에 음식 재료들은 싹 다 지워져야 하는 상황이구요. 즉 DELETE시 CASCADE + 가끔 부모 아래에 있는 자식을 부모 id로 조회하는게 필요한 상황입니다. 요럴때 양방향 매핑이 필요할까요?! 현재 고민하고 있는 옵션은 - 단방향 매핑으로 계속 가되 ON DELETE CASCADE를 DB TABLE에 걸어줘서 부모 삭제시 자식도 삭제되도록 만든다. - 아니면 양방향 매핑으로 해주고 mappedBy 있는쪽에 CASCADE.ALL, orphanRemoval 걸어준다. 인데요, 1) 성능이 단방향, 양방향 매핑에서 차이가 많이 나는지 궁금합니다. 2) 그냥 단방향 매핑으로 모든 거 처리하고, 필요할때만 sql join query 날려서 join해서 불러오면 되는거 아냐? 라는 생각도 드는데요.. 그리고 추가 질문으로, 언제 양방향 매핑을 사용하는게 좋은지 잘 모르겠습니다. 양쪽에서 참조할 일이 있을 때라고 강의에서는 말씀해 주셨는데 잘 안 와 닿더라구요. 혹시 실무 예시를 좀 들어 주실 수 있으실까요? 감사합니당!!!
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
MS간 호출에 있어 질문이 있습니다.
feign client를 이용해 order-service의 컨트롤러를 호출하는 방식으로 이해했습니다. 그런데, 실제 order-service의 getOrder라는 컨트롤러 메서드는 반환타입이 ResponseEntity로 한번 감싸져 있습니다. 이를 user-service에서 이용할때는 ResponseEntity가 벗겨진 List<ResponseOrders>를 바로 사용했구요. 아마, @FeignClient 어노테이션을 사용함으로써 이렇게 바로 파싱받아 사용할 수 있는 것 같은데.. ResponseEntity로 감싸져 있는 것만 파싱할 수 있는건가요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
hibernate.dialect 오라클 변경시 문의드려요.
시점 : 26:25 org.hibernate.dialect.Oracle12cDialect 로 변경시 쿼리가 rownum계열이 아닌 Hibernate: /* select m from Member as m */ select member0_.id as id1_0_, member0_.name as name2_0_ from Member member0_ fetch first ? rows only 와 같이 나오는데 왜그런지 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
레포지토리에 @Transactional을 안붙이는 이유
Service에는 Transactional 어노테이션을 달지만 레포지토리에는 달지 않는 이유가 궁금합니다. 서비스에만 어노테이션을 달아도 서비스에서 레포지토리의 메소드를 호출하니 레포지토리에까지 Transactional 어노테이션이 적용되어서 그런건가요??
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Config Server 설정파일 관리방법 질문
안녕하세요. 선생님 Spring Cloud Config Server 의 설정파일 관리에 대해 문의드립니다. Config Server 의 설정값도 변경이 필요한 항목들이 있어보입니다. RabbitMQ 브로커의 주소라던가, Https 사용시 KeyStore 의 위치 라던가, 몇가지 항목이 수정될때, Config Server 도 그 값을 적용할 수 있을까 고민이 됩니다. 제가 확인한 항목은 Remote Repository 에 application.yaml 항목을 만들면 Config Server 도 actuator/metrix 확인 시 propertySources 로 읽어 오는 것을 확인했습니다. 다만 해당값들이 적용은 되지 않았습니다. 오케스트레이션에서 ENV 값을 바꾸어서 롤링업데이트를 수행해도 되겠지만, Config Server 자체에서 Uptime 으로 자체 설정값 변경내용을 적용하고 싶습니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
대쉬보드에 데이터를 못가져오는것 같습니다.
안녕하세요 이제 거의 강의가 끝나가네요 ㅠ 그라파나관련 질문이 있습니다. 대쉬보드 설정을 맞게 한거같은데 데이터를 불러오지 못하는것 같습니다. Data sources: 프로메테우스 설정정보 apigateway-service 에 대한 cpu, memory used 이런 차트는 잘 나오는데 requests served 의 데이터 표시, success api gateway의 차트는 N/A 또는 No data라고 뜨는데 원래 값이 안나오는 것이 맞는지 아니면 뭔가 잘못된 것인지 잘모르겠습니다. (프로메테우스에서 spring_cloud_gateway_requests_seconds_count값을 넣었을때 값이 있으면 나와야 하는것 아닌가요?)
-
미해결
JPA DataSource 런타임 이후 동적으로 dataSource를 변경하는 방법이 있을까요 ?
안녕하세요 jpa를 배우고 있는 신입입니다. 다름이 아니라 jpa를 런타임 이후 데이터소스 동적 치환 하고 싶은데 방법이있을까 싶어 문의드립니다. 아래와 같이 3개의 데이터소스가 있고 A,B,C 3개의 데이터소를 jar구동 후 테스트시 정상적으로 3개의 DBMS와 연결이 되었습니다. application.properties A - jdbc: mariadb://10.10.10.1 B - jdbc: orcle://10.10.10.2 C - jdbc: sqlserver:://10.10.10.3 다만 구동 이후 서버 재구동없이 B 데이터 소스의 jdbc서버정보(jdbc: mariadb://10.10.10.x)를 입력받아 치환해서 동작하게 하는 방법이 있는지 여쭙고자 문의드려요.. 치환하려는 서버 정보는 고객사 서버라서 어떤 서버정보인지는 미리 알수가 없어요 ! 구글이나 모든 폼에 프로퍼티에 하드코딩이후에 라우팅하는 정도만 설명되어있고 실질적으로 입력받아 라우팅하는 방법은 없네요..ㅠㅠ spring Cloud 에서 설정 reflash 방법이 있긴한데 현재 실무에서 spring Cloud를 사용하고 있지 않아서 처리방안이 있는지 여쭙습니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
dto 로 변환 단계에 대해 질문드립니다!
안녕하세요! entity를 dto로 변환하는게 좋다 하셨는데 repository에서 service로 넘겨줄때 dto를 넘기는게 맞나요 아니면 repository에서는 entity를 넘겨주고 service에서 controller로 넘겨줄때 dto로 변환해서 넘겨주는게 맞나요??
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
item 엔티티 설계
package hello.upload.domain;import lombok.Data;import java.util.List;@Datapublic class Item { private Long id; private String itemName; private UploadFile attachFile; private List<UploadFile> imageFiles;} 메모리에 저장하는 도메인은 위와 같은데, jpa 엔티티 설계시 uploadFile은 값 타입으로 하는게 좋을까요? 그러면 imageFile와 같은 값 타입을 List 형식으로 선언해도 되나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
spring.jpa.open-in-view is enabled by default
- spring.jpa.open-in-view is enabled by default 전체 프로젝트 빌드 및 실행은 정상적으로 동작합니다. 그런데, console에서 spring.jpa.open-in-view is enabled by default 라는 문구를 발견하게 되었습니다. 구글링을 통해 검색하니, 어떤 분들은 default로 지정된 true 값을 false로 변경해야 성능에 좋다고 하시는데,.,, 자세히 알지 못하여 질문 남깁니다. default 값인 true로 나둬야 할지, 아니면 false로 변경해야 할지 궁금합니다!
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
프록시 객체 초기화 중 질문있습니다.
안녕하세요 영한님! 강의 내용 중 궁금한 점이 있어 질문 드립니다. Team refTeam = em.getReference(Team.class, 1L);refTeam.getName(); 을 하게되면 Proxy가 비어있으므로 1. 영속성 컨텍스트에 초기화 요청을 보내고, 2. 영속성 컨텍스트가 DB를 조회해 3. 실제 엔티티 객체를 생성 은 이해가 되었습니다. 그럼 여기서 영속성 컨텍스트가 실제 엔티티 객체를 생성하고 Proxy의 target에 연결을 해줄 뿐이지, 1차 캐시에 실제 엔티티가 저장되는 것은 아닌 건가요? 1차 캐시에는 'Proxy 객체만' 있고 Proxy의 target을 통해 실제 엔티티를 접근할 수 있는 건지 궁금하여 질문 드립니다! 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
엔티티와 컬럼 생성 기준
안녕하세요. 연관관계 주인이 아닌 List로 구현된 members에서 궁금한 점이 있습니다. 먼저 지금까지 이해한 바로는, @Entity 애노테이션과 ddl-auto 속성에 의해서 @Entity를 가진 클래스의 필드들이 해당 테이블의 attribute로 만들어지는 것으로 이해했습니다. 1. @Column이 DB 테이블의 실제 컬럼 이름과 매핑을 짓는 용도라고 이해했는데 @Column을 생략해도 DB상에 해당 컬럼이 생성된 것을 확인했습니다. 이 경우, 컬럼은 생성됐지만 매핑은 이루어지지 않은건가요? 2. Team 클래스의 members 어레이리스트는 Team 테이블의 attribute로 등록되지 않는 이유가 뭔가요? 물론, 데이터베이스 상에서 하나의 attribute에 하나의 값을 가져야 하는건 맞지만 이게 컬렉션으로 구현된 필드는 JPA에서 자동으로 attribute이 아니라고 인식하는 건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 메서드 질문입니다!
강사님 Order클래스에서 연관관계 메서드를 만드실 때 Member에 대한 연관관계 메서드의 경우 public void setMember(Member member)라고 하셨는데 그 이전에 lombok으로 이미 setter를 만들어 주셨는데 그렇게 되면 lombok으로 만든 setter는 연관관계 메서드에 의해 무시가 되는건가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
이번강의에서 rabbitmq server 를 실행시켰는데 어떤 용도로 사용되었나요?
microservice 분산추적 강의를 전부 봤지만rabbitmq가 어떤용도로 사용되었는지 잘 모르겠습니다. CircuitBreaker 와 Slueth, Zipkin 을 구현하는데 rabbitmq 가 필요하나요? 전체 강의를 다 본다음 다시한번 봐야겠네요.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
form tag중 action에서 질문이 있습니다.
회원 등록시 html form에는 action="/members/new"로 되어있는데 <form role="form" action="/members/new" th:object="${memberForm}" method="post"> --- 새로운 아이템 등록시 html form에는 action="@{/items/movie/new}"로 되어있습니다. <form th:action="@{/items/movie/new}" th:object="${form}" method="post"> 이 '{@"" }'의 차이가 뭔지 왜 빼거나 넣으면 작동이 안되는지 이유와 역활을 알려주시면 감사하겠습니다.
-
미해결실전! 스프링 데이터 JPA
totalCount는 어디서 쓰이나요?
페이징하면 제일 먼저 생각나는게 영한님이 말씀하신것 처럼 게시판의 페이징 기능이 생각이 납니다. Member가 m1~m5까지 있을때 이름, 나이 m1 AAA 10 m2 BBB 10 m3 CCC 10 m4 DDD 10 m5 EEE 10 이렇게 나이는 동일하고 이름만 다른 조건이 있다고 했을 경우 강의에서 offset과 limit을 활용하여 3개씩 잘라서 1 page = m1,m2,m3 2page = m4,m5 이렇게 나누는것 까지는 잘 이해가 됐습니다. 하지만 이때 totalCount는 강의내용을 참고하면 age가 같은 사람의 개수이니 5 라는 숫자가 나오게 되는데요 이 totalCount는 어디서 쓰이는건가요? 제가 생각하는 페이징에는 offset과 limit만 있어도 게시글 다음페이지 이런걸 할 수 있을거 같은데 어디서 쓰이는지 궁금합니다 ㅎㅎ
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Order의 PK에 따른 find()
안녕하세요 강사님! 다대다 강의를 보던 중, 다대다를 일대다-다대일 관계로 풀어내고, 연결테이블을 엔티티로 승격하라고 하셨습니다. 여기서, 연결테이블의 PK를 의미없는 값이 아닌, (member_id, product_id)로 가져가게 된다면 em.find(Order.class, [ A ]) 위 메서드를 사용할 수 없고 JPQL을 통해 조회를 해야하나요?? 그렇지 않고 find를 사용할 수 있다면 [ A ] 부분에 어떻게 들어가야하는지 문득 궁금해져서 질문 드립니다!
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
4분 20초쯤 @JoinColumn
언제나 좋은 강의 감사합니다 영한님! 4분 20초쯤 @JoinColumn 을 넣지 않으면 default 값이 들어가는데 default 값이 지저분해서 넣어주는 것을 권장한다 라고 말씀하셨는데, default값을 확인해보고 싶어서 넣지 않아봤더니 Member 테이블에 LOCKER_ID 라는 컬럼이 추가되는 것을 확인하였습니다. 영상에서의 하이버네이트 버전과 제가 쓰는 하이버네이트 버전이 달라서인지는 모르겠지만 굉장히 직관적인 이름처럼 보이는데 생략하고 사용해도 상관이없을지, 아니면 다른 부분에서 문제가 될 만한 부분이 있는건지 궁금합니다.