묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
윈도우에서 카프카 토픽 삭제 시, 카프카가 실행이 안됩니다..
https://www.inflearn.com/questions/644825제가 예전에 올린 글입니다.질문한 글에 댓글을 또 달았었는데 도저히 해결을 할 수 가 없어서 다시 질문올립니다. 제가 윈도우 환경에서 카프카 토픽을 삭제 했는데그 뒤로 답글로 제시해주신 해결책을 해보려고 해도 해볼 수가 없었습니다..즉, C:\Temp 디렉토리 하위에 zookeeper, kafka 폴더가 전혀없고저의 C:\Temp 아래는 폴더 구조는 다음과 같습니다..2020(폴더)HncDownload(폴더)Service.logAUtempR(폴더 - 안에 아무것도 없음) 그리고 기존 에 사용하고 있던 Kafka환경 폴더(강의에서 제공해주신 폴더)를삭제하고 다시 압축을 풀어서 압축을 푼 경로에zookeeper와 kafka를 실행해도 zookeeper는 실행되고 kafka는 실행되지 않습니다...즉, 동일한 에러가 발생하네요..대체 어떤 걸 지워야지 다시 kafka서버가 정상 실행될까요? 참고로 자료 올려주신 윈도우용 카프카 파일 전부 삭제하고 다시 압축 풀고 설정해도토픽목록은 동일한 에러로 안보이고, 카프카 역시 동일한 에러로 켜지지 않습니다..감사합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
카프카 토픽안쓰고 저장하면 대용량 처리에 불리한 이유가 있나요?
안녕하세요 강의를 듣다가 궁금증이 카프카 토픽을 안쓰고 저장하면 대용량 처리에서 불리한 이유가 있나 싶어 궁금해 졌습니다. 우선 인터넷에서 검색해서 찾아본 봐로는그러면 카프카 사용하면 대용량 처리에 유리한 이유가병렬처리에 의한 데이터 처리율 향상 : 카프카는 아래 보실 아키텍처에 보면 데이터를 병렬로 처리함으로서 데이터를 빠르고 효과적으로 처리할 수 있습니다. disk에 순차적으로 데이터를 적재하기 때문에 임의 접근(random access) 방식보다 훨씬 더 빠르게 데이터를 처리합니다.데이터 유실 방지 : disk에 적재되기 때문에 만약 불의의 사고로 서버가 다운되었을 시에도 데이터가 유실되는 일 없이 재시작하여 기존 데이터를 안정적으로 처리 가능합니다.클러스터링에 의한 고가용성 서비스 : Scale-out이 가능하여 시스템 확장이 용이하며 어떤 하나 혹은 몇 개의 서버가 다운되도 서비스 자체가 중단될 일 없이 시스템이 운용가능합니다.출처 : https://engkimbs.tistory.com/691정도로 보이는데요 그렇다면토픽을 사용하는 경우와카프카 커넥트를 사용하는 경우가 있었는데 (프로듀서, 컨슈머를 파이프라인을 매번 구성하기 힘들어서 사용하는 것으로 알고 있습니다.)그러면 우선 첫번째 질문은토픽을 사용할 때와 카프카 커넥트를 사용할 때 모두 카프카가 알아서 병령처리를 해주고 데이터 유실 방지를 해주는 건가요?? 또한 두번째 질문은 강의에서 order-service를 여러 개 띄우고 주문 요청을 여러 번 하면여러 개의 order-service의 db에 나눠서 저장을 하는 식으로 했는데요현업에서 MSA환경에서 프로젝트할 때도예를들면 order-service, user-service, catalog-service 각각 db를 하나씩 사용하는게 일반적인 방법인가요? 즉, 각 서비스마다 db를 하나씩 두는 것이 일반적인 방법인가요? 세번째 질문은 강의에서order-service를 여러개 띄우고 하나의 db에 저장하는 방식을 사용했는데즉, Kafka Topic에 설정된 Kafka Sink Connect를 사용해 단일 DB에 저장 했서 데이터를 동기화 했는데.그러면 카프카 커넥트를 사용하지 않고는 여러개의 order-service를 단일 db에 저장할 수 없나요?
-
해결됨GraphQL 완전정복 (키오스크를 만들며 배우는 풀스택 과정) - [2024 부분 리뉴얼]
comments null 출력
안녕하세요! 다른 쿼리문은 잘 출력되는데 comments만 계속 null이 뜹니다.query { comments { text userId }} 위 쿼리문에서{ "data": { "comments": null }}널값이 출력됩니다. 다른 쿼리문은 수업 내용과 같이 출력되고, mutation까지 잘 진행됐는데 코멘트만 null이 떠서 질문 남깁니다. 제가 무슨 실수를 한걸까요?ㅠㅠ
-
해결됨팝스타 공식 뮤비 제작 & 유튜브 2천만 뷰 크리에이터의 애니메이트 X 이모티콘 클래스
다른 툴에서 작업한 것을 그대로 불러오는 방법이 있을까요
안녕하세요~ 친구와 협업하려고 하는데 프로크리에이트나 일러스트레이터로 그린 작업 파일을 애니메이트에 불러올 수 있는 방법이 있을런지요... 친구의 그림을 사용해 애니메이트에서 모션을 주려고 하는데 친구가 애니메이트에서 그림을 그리는 수밖에 없을까요~?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
th:each 부분이 작동하지 않습니다.
안녕하세요 강의를 열심히 따라가다가 th:each 부분을 따라치고재실행을 한 후 새로고침을 했는데 상품목록이 안나옵니다. 혹시나 제가 잘못 입력한 부분이 있을까봐 소스코드를 다운받아 items.html 을 통째로붙여넣기 했는데도 안나옵니다... 어떻게 해야될까요?
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
강의 예시코드
판다스 데이터 인덱싱과 필터링 - 02 강의에서 설명주시는 코드와 강사님의 깃헙 예시코드 내용이 조금씩 다른가요..? 강사님 깃헙에서 실습코드를 다운 받아서 보니 강의에서는 있는데 실습코드에는 없는 경우가 있습니다..
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
kex_exchange_identification 에러
이 에러때문에 강의가 진행되지않습니다 ㅠㅠ인텔맥이고, 정리된 도커명령어 그대로 작동시켜 ssh 에 접속하려고할때 아래와같은 에러가 발생합니다.. kex_exchange_identification: Connection closed by remote host Connection closed by ::1 port 20022
-
해결됨GraphQL 완전정복 (키오스크를 만들며 배우는 풀스택 과정) - [2024 부분 리뉴얼]
m1 meteor 설치 오류!
안녕하세요!meteor 설치 오류로 한참 고통받다 해결한 m1 유저입니다.meteor가 m1에서 호환된다고 공식발표되었지만,여전히 rosetta를 이용한 우회로 설치 가능한 것 같습니다.설치 오류 있으신 분들은 rosetta로 설치해보세요!혹시 저처럼 고통받는 분들이 있으실까봐 공유합니다🥲
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
주문 조회 v2에서 에러가 발생 & 궁금한 점이 있습니다
안녕하세요.주문 조회 V2("api/v2/orders")에서 코드를 작성하고 포스트맨을 실행시켰는데 에러가 발생합니다.datatype jackson hibernate5 모듈은 설치하지 않았습니다.@Entity @Table(name = "orders") // 관례 @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Order { @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> orderItems = new ArrayList<>(); @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "delivery_id") private Delivery delivery; private LocalDateTime orderDate; // 주문 시간 @Enumerated(EnumType.STRING) private OrderStatus status; // 주문 상태 [ORDER, CANCEL] } @Entity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class OrderItem { @Id @GeneratedValue @Column(name = "order_item_id") private Long id; @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "item_id") private Item item; @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "order_id") private Order order; private int OrderPrice; // 주문 가격 private int count; // 주문 수량 } @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "dtype") @Getter @Setter public class Item { @Id @GeneratedValue @Column(name = "item_id") private Long id; private String name; private int price; private int stockQuantity; @ManyToMany(mappedBy = "items") private List<Category> categories = new ArrayList<>(); } @RestController @RequiredArgsConstructor public class OrderApiController { private final OrderRepository orderRepository; @GetMapping("/api/v2/orders") public List<OrderDto> orderV2() { List<Order> orders = orderRepository.findAllByString(new OrderSearch()); List<OrderDto> collect = orders.stream() .map(o -> new OrderDto(o)) .collect(Collectors.toList()); return collect; } @Data static class OrderDto { private Long orderId; private String name; private LocalDateTime orderDate; private OrderStatus orderStatus; private Address address; private List<OrderItem> orderItems; public OrderDto(Order order) { orderId = order.getId(); name = order.getMember().getName(); orderDate = order.getOrderDate(); orderStatus = order.getStatus(); address = order.getDelivery().getAddress(); // order.getOrderItems().stream().forEach(o -> o.getItem().getName()); // 프록시 초기화 orderItems = order.getOrderItems(); } } } 포스트맨 실행시, 결과가 아래처럼 출력됩니다.[ { "orderId": 4, "name": "userA", "orderDate": "2022-09-19T19:28:18.294267", "orderStatus": "ORDER", "address": { "city": "서울", "street": "1", "zipcode": "1111" }, "orderItems": [ { "id": 6, "count": 1, "orderPrice": 10000, "totalPrice": 10000 }, { "id": 7, "count": 2, "orderPrice": 20000, "totalPrice": 40000 } ] }, { "orderId": 11, "name": "userB", "orderDate": "2022-09-19T19:28:18.333162", "orderStatus": "ORDER", "address": { "city": "부산", "street": "2", "zipcode": "2222" }, "orderItems": [ { "id": 13, "count": 3, "orderPrice": 20000, "totalPrice": 60000 }, { "id": 14, "count": 4, "orderPrice": 40000, "totalPrice": 160000 } ] } order.getOrderItems().stream().forEach(o -> o.getItem().getName());를 프록시를 초기화시키는 부분이라고 이해했는데, 해당 부분을 주석처리하거나 안하거나 결과가 똑같이 출력됩니다. 이유를 모르겠는데, 어디선가 프록시가 초기화가 된걸까요..?orderItem 값 자체가 아니라 프록시 객체를 초기화하는게 맞..죠..ㅠㅠ?!그리고 강의와 다르게 item에 대한 정보가 출력되지 않는데, 혹시 datatype jackson hibernate5 모듈을 설치하지 않았기 때문에 발생하는 문제인가요? ('간단한 주문 조회 V2'에서는 강의와 똑같이 출력되었어서 문제가 뭔지 모르겠습니다.) 또, OrderItem.item에 @JsonIgnore을 추가하지 않을 때 아래와 같은 에러가 발생하는데, 지연 로딩에 의한 에러가 맞나요? (OrderItem과 Item 엔티티가 양방향 매핑이 아닌데.. '간단한 주문조회 V1' 강의에서 양방향 매핑에서 발생했던 에러 메세지와 비슷해보여서 질문드리게 되었습니다.)지연 로딩이 맞다면, order.getOrderItems().stream().forEach(o -> o.getItem().getName());에서 o.getItem().getName()에 의해 item에 대한 쿼리를 날리게 되어 이 부분이 해결되지 않나 싶은데 제가 틀리게 이해한건가요ㅠㅠ?com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]->jpabook.jpashop.API.OrderApiController$OrderDto["orderItems"]->org.hibernate.collection.internal.PersistentBag[0]->jpabook.jpashop.Domain.OrderItem["item"]->jpabook.jpashop.Domain.Item.Item$HibernateProxy$Hp0g9cdN["hibernateLazyInitializer"])at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.13.3.jar:2.13.3]에러를 해결할 수 있는 방법도 궁금합니다. OrderDto에서 items를 따로 추가해 order.getOrderItems().getItem()들을 출력해보려고 했는데 방법이 틀린건가요? (위에 forEach문을 보면 해당 방법을 통한 접근이 가능한 것 같아서 시도해봤습니다..!)
-
미해결
vscode에서 html를 썼는데 파일을 열면
(맥북입니다) 이상한 글자로 열립니다. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> </body> </html>위의 코드가 {\rtf1\ansi\ansicpg949\cocoartf2580 \cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fnil\fcharset129 AppleSDGothicNeo-Regular;\f1\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} {\*\expandedcolortbl;;} \paperw11900\paperh16840\margl1440\margr1440\vieww11520\viewh8400\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \f0\fs24 \cf0 \'be\'c8\'b3\'e7\'c7\'cf\'bc\'bc\'bf\'e4 \f1 \ \f0 \'b9\'dd\'b0\'a9\'bd\'c0\'b4\'cf\'b4\'d9 \f1 }이렇게 나옵니다 텍스트편집기(메모장)에 썼을 때는 이런 현상이 없었고 제대로 나왔는데vscode에서 작성해서 여니까 이렇게 나옵니다..
-
미해결스프링 핵심 원리 - 기본편
@PostConstruct,@PreDestroy 빈 생명주기 콜백 과정 하나하나 질문
제가 과정을 잘 아는지 체크하고 싶어요.그리고 의존관계 주입이 어디까지를 말하는건지 알고 싶어요 ConfigurableApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class);에서1. LifeCycleConfig.class가 파라미터로 들어가면2. 이제 스프링 컨테이너에 LifeCycleConfig.class 안에 @Bean이 지정된 networkClient()가스프링 빈에 등록되면서 이때 객체가 만들어지는거죠?3. 그러면서 생성자가 발생되고,4. 이렇게 생성자까지 설정되고 나면, // 여기까지가 의존관계 주입 이라는 거죠?5. @PostConstruct의 init()이 실행되고 // init() 안에 connet()가 있는데, connet 하는게//의존관계 주입이라는 건가요?6. ac.close()가 발생되기 전에 @PreDestroy가 설정되는거겠죠?
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
feature importance 컬럼명 질문입니다.
안녕하세요 xgboost와 lgbm을 사용하여 학습후 feature importance를 사용하여 중요도를 알아보았는데 몇가지 질문사항이 있습니다.그래프 y축이 컬럼명이 아닌 f21. f0 이런식으로 나오게 되었습니다. 혹시 저게 어떤 데이터를 가리키는지 알수있는 방법이 있나요?2. 컬럼명이 나오게 그래프를 그리려면 pd.Dataframe으로 바꾸면 된다고 했는데 그러면 코드를 처음부터 수정해야하나요? 아니면 from xgboost import plot_importance fig, ax = plt.subplots(figsize=(10, 12)) plot_importance(clf, ax=ax)이 부분에서 수정이 가능할까요?
-
미해결
c++ 자료구조 문제 질문
배열이 더 이상 항목을 보유하지 않을 때까지 n개의 원소 배열로부터 무작위로 엔트리를 반복적으로 선택하고 제거하는 간단한 C++함수를 만들어야 하는데 오늘 처음 공부하는데 잘 몰라서 해답을 보면서 공부하고 싶은데 해답이 없네요...
-
미해결MERN STACK 커뮤니티 : 시작부터 배포까지 알려주는 React
배포 후 Not Found
로그 확인해보니 아래와 같은 에러가 있습니다Error: ENOENT: no such file or directory, stat '/app/client/build/index.html'다른 에러는 없고 위 에러 코드만 3번 뜨네요. + 몽구스 에러도 나왔습니다. production.js에 키는 제대로 입력을 했습니다MongooseError: The uri parameter to openUri() must be a string, got "undefined". Make sure the first parameter to mongoose.connect() or mongoose.createConnection() is a string.
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
테스트 코드와 트랜잭션 문의 드립니다.
강사님 영상https://www.youtube.com/watch?v=S_66BYHWT2A안녕하세요 강사님강의 잘 보고 있습니다.강의중 테스트 코드 작성하는 부분에서 궁금한 부분이 있어서요H2 데이터베이스를 사용해서하나의 테스트 파일에 여러개의 테스트 코드를 작성하게 되면auto-increment 가 같이 증가하면서 문제가 발생하더라구요관련해서 구글링을 해보니까@Transactional과 this.entityManagr .createNativeQuery("ALTER TABLE portfolio ALTER COLUMN pofo_post_no RESTART WITH 1") .executeUpdate();초기 값으로 초기화 하는 방법이 있더라구요강사님은 트랜잭션을 서비스 코드에서 사용하지 않는다고 하셨는데auto-increment 초기화를 어떻게 하시는지 궁금해서 질문 드립니다.참고 링크https://github.com/HomoEfficio/dev-tips/blob/master/Spring%20Data%20JPA%20%ED%85%8C%EC%8A%A4%ED%8A%B8%20%EC%8B%9C%20auto-increment%20%EB%AC%B8%EC%A0%9C.md감사합니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
cookie와 cache에 대해서 질문 드립니다!
안녕하세요, http 강의를 끝까지 어제 일자로 완강하고 다시 한번 보고 있는데 아리송 한게 생겨서 질문 남겨봅니다.쿠키는 사용자 인증을 도와주며 최소한의 정보만으로 사용자를 식별하여 http의 stateless 문제를 해결할수 있었습니다. 또한 session의 개념이 cookie를 통해 전달되는 session id를 서버에서 관리하는 것일뿐 cookie와 session이 완전 다른 것이 아니라 cookie의 일부분이 session임을 알수 있었습니다.반면 캐시는 이미지 파일등과 같은 크기가 큰 데이터를 전송 할때 서버에서 네트워크 부하를 줄여 주며 클라이언트에서도 랜더링이 더 빠르게 되게끔 해주는 역할을 하는 것으로 이해 하였습니다.제가 궁금한점은제가 이해한 cookie와 session, cache에 대한 이해가 명확한지 궁금합니다.쿠키에 해당 URI에 대응하는 쿠키 저장소에 정보가 존재한다면, 반드시 request시 함께 보내는것이 HTTP cookie specification에 있음을 알았는데, 캐시 또한 항상 uri에 대응하는 데이터가 브라우저 캐시에 있으면 request시 함께 보내는지 궁금합니다.'쿠키로 광고 정보 트래킹시 사용할 수 있다'는 부분이 이해가 안되는데 session id로 서버쪽에서 이 광고에 누가 접근 했는지 기록해서 맞춤 광고를 내보낼수 있다라는 말인가요?캐시와 조건부 요청 헤더 3:30초 부분에서 잘 이해가 안되는데, 캐시 만료일 지정시 expire에서 캐시 만료일을 날짜로 지정하는 것이 초단위(max-age)로 설정하는것 보다 왜 덜 유연하다고 표현하나요? 초단위는 계산을 해야하는데 왜 더 유연하다고 표현하는지가 명확히 이해가 안됩니다항상 답변 감사합니다.
-
미해결
yolo v5 labelimg 사진추가 오류
yolov5에서 labelimg를 사용하는데 labelimg로 라벨링 작업을 한 후,새로운 이미지들이 생겨 이전에 라벨링 작업을 했던 이미지 폴더에 새로운 이미지들을 추가하여라벨링 작업을 이어서 했더니, 전에 작업했던 라벨링들이 다 지워지는 현상이 발생했습니다. labelimg를 사용하여 전에 라벨링 작업했던 것과 새로 라벨링 작업한 것을 합쳐도 이런 현상이 발생하는데,labelimg에서 새로운 이미지를 추가하려면 모든 이미지들을 처음부터 라벨링 다시 해야 하나요?아니면 해결방법이 있을까요?
-
해결됨(UPDATED) Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
무비렌즈 최신 데이터를 이용하고싶은데요~
안녕하세요 거친코딩님!해당 알고리즘을 최신 무비렌즈 데이터를 이용해서 구현하려하는데요.해당 압축파일에 있는 파일과 강사님이 올려주신 파일이 확장자명이 다른데,최신파일로 구현하고자하면 밑에 파일에서 어떤걸 건들어야할까요?
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
this === {}
export와 this에서, global에 있는 this와 {}가 같다고 하셨는데, 테스트 하면 false로 뜹니다.console.log(this === module.exports === {}) //false어떻게 해야 같다고 뜨는 건가요? 제가 잘못 작성한건지 문의드립니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
양방향 연관관계 편의 메소드, 생성 메소드에 대해 질문드립니다.
안녕하세요. 항상 강의 잘 보고 있습니다.https://www.inflearn.com/questions/16235의 답변을 보면 setter를 외부에 노출을줄이기위해Entity의 setter의 사용을 지양하는거로 이해했고, 워낙 복잡하게 엔티티들을 사용하실텐데강의 예제에서 사용하는 Member와 Order, OrderItem의 엔티티를 실무에서 사용하는거처럼 연관관계메소드랑 생성메소드를 임의로 작성해봤습니다.@Entity @Getter public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String name; @OneToMany(mappedBy = "member") private List<Order> orders = new ArrayList<>(); @Builder private Member(String name) { this.name = name; } /== 생성 메소드 == / public static Member createMember(String name) { return Member.builder().name(name).build(); } } @Entity @Getter public class Order { @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; //주문 회원 @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> orderItems = new ArrayList<>(); @Builder private Order(Member member) { /== 연관관계 메소드 ==/ this.member = member; member.getOrders().add(this); } /== 생성 메소드 == / public static Order createOrder(Member member) { return Order.builder().member(member).build(); } } @Entity @Table(name = "order_item") @Getter public class OrderItem { @Id @GeneratedValue @Column(name = "order_item_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "order_id") private Order order; //주문 @Builder private OrderItem(Order order) { /== 연관관계 메소드 ==/ this.order = order; order.getOrderItems().add(this); } /== 생성 메소드 == / public static OrderItem createOrderItem(Order order) { return OrderItem.builder().order(order).build(); } } 제가 예제를 실무에서 setter를 제거하고 builder를 사용하는 방법인거처럼 생각하고 바꿔보았는데,연관관계 메소드를 저렇게 변경하는게 맞는방법인가요?@OneToMany를 가진엔티티에서 생성자에 아무것도 안해줘도 되는것인지?아니면 어떻게 setter를 제거하고 연관관계메소드를 정의하시는지 궁금합니다.