묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
영속성 컨텍스트 관련 질문
안녕하세요! 영한님 먼저 양질의 강의를 제공해주셔서 감사의 말씀 드립니다. 갑자기 영속성 컨텍스트에 대한 개념이 헷갈려서 질문드립니다. 😭 만약에 order테이블에서 member의 id가 동일한 경우 ordersV2()를 사용하면 쿼리가 총 4번 나가는데 이때 영속성 컨텍스트에서 관리되어(1차 캐시에서 조회하기 때문으로 이해했습니다.) 기존에 있는 것을 가져온다고 말씀하셨습니다. 그런데 @Transactional 안에서 DB를 조회해야 영속성 컨텍스트에서 관리되는 것 아닌가요? 🤔 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
object references an unsaved transient instance 오류 관련 문의
강사님의 강의를 듣고 로그인 후 업체 등록을 가능하게 만드는 기능을 작업 중 제목과 같은 object references an unsaved transient instance 오류가 떠서 문의 드립니다. business entity @ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "mail")private Member member;@OneToMany(mappedBy = "business", cascade = CascadeType.ALL)private List<Review> review = new ArrayList<>();/** 연관 관계 메서드 **/public void setMember(Member member) { this.member = member; member.getBusiness().add(this);} member entity @OneToMany(mappedBy = "member", cascade = CascadeType.ALL)private List<Business> business = new ArrayList<>(); business controller /** 업체 등록 **/@GetMapping("/business/new")public String createForm(Model model){ model.addAttribute("businessForm", new BusinessForm()); return "business/createBusinessForm";}@PostMapping("/business/new")public String create(@Valid BusinessForm form, BindingResult result, Member member){ if(result.hasErrors()){ return "business/createBusinessForm"; } Business business = new Business(); business.setBusinessname(form.getBusinessname()); business.setHomepage(form.getHomepage()); business.setPhone(form.getPhone()); business.setAddress(form.getAddress()); business.setEtc(form.getEtc()); business.setCreated_at(now()); business.setUpdated_at(now()); business.setMember(member); try { businessService.join(business); }catch (IllegalStateException e){ //업체명 중복 에러 메세지 가져와서 폼에 띄워주기 result.addError(new FieldError("createBusinessForm", "businessname", e.getMessage())); return "business/createBusinessForm"; } //회원가입 완료 후 홈으로 갈지 완료 페이지로 갈지 정하기 return "/success";} business service /** 중복업체검증 **/private void validateDuplicateBusiness(Business business) { List<Business> findBusiness = businessRepository.findBusinessName(business.getBusinessname()); if (!findBusiness.isEmpty()){ throw new IllegalStateException("이미 존재하는 업체명입니다"); }}/** 업체생성 **/@Transactionalpublic String join(Business business){ validateDuplicateBusiness(business);//중복회원검증 businessRepository.save(business); return business.getBusinessname();} business repository public void save(Business business){em.persist(business);}/** 이메일 조회 **/public List<Business> findBusinessName(String businessname){ return em.createQuery("select b from Business b where b.businessname = :businessname ", Business.class) .setParameter("businessname", businessname) .getResultList();} 소스는 위와 같습니다. 오류를 검색해보니 member 값이 없는 상태에서 세팅을 하려는 게 문제로 cascade로 처리하는 경우가 많았습니다. 그래서 business entity에 manytoone에도 동일한 cascade를 넣으면 ids for this class must be manually assigned before calling save() 라는 오류가 뜹니다. 강의를 몇 번이나 돌려보고 오류를 찾아봐도 연관 관계 관련 문제인 것만 알겠고 정확한 처리 방법을 찾기가 어렵습니다. 어떤 부분이 문제일까요ㅠ.ㅠ??
-
미해결기출로 대비하는 개발자 전공면접 [CS 완전정복]
노션 엑세스 권한 부여 문의드립니다
안녕하세요! 노션 링크를 메일로 공유받았는데요 엑세스 권한이 없다고 나와서 문의드립니다! 메일 주소는 nolzen3302@gmail.com 입니다!
-
미해결면접과 취업을 부르는 '퍼블리셔 개인 포트폴리오 홈페이지' 제작
절대주소설명하실때 절대주소를 탐색기에서 연다는말이 어떤뜻인지모르겠어요 ㅜㅜ
절대주소를 더블클릭했을때 탐색기에서 안나온다는게 어떤것을 말씀하시는거죠?ㅜ 라이브서버로 창을 띄울수없다는건가요..?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
제로초님 강의외 질문 하나만 드려도 될까요
리액트+스프링부트 조합으로 사이드 팀프로젝트를 진행중입니다. 리액트 개발환경은 CRA명령어를 통해 구축했습니다 근데 이게 local 서버에서는 router url을 주소창에 직접입력하거나,새로고침해도 잘실행되는데요 예를들어 배포서버URL/login 같이 router url을 주소창에 직접입력하거나 새로고침하면 404에러가 납니다. 구글링을 해본결과 webpack.config.js devserver 서버 사이드 설정을 하라는글이 있습니다. 근데 저희가 CRA로 개발환경을 구축해서 webpack.config.js 파일이 없는데 그러면 해결방법이 webpack을 eject해서 devserver에서 서버사이드설정을 하는방법밖엔 없나요? 아니면 백엔드서버에서 따로 서버사이드 설정을 할 수 있나요?
-
미해결반응형 웹사이트 포트폴리오(App Official Landing Website)
강의 듣는 순서 상의드립니다.
선생님 항상 감사히 공부하고 있습니다. 지금 랜딩사이트 웹 섹션별로 강의 들으면서 따라해보고 있는데요. 웹 페이지 마무리까지만 해도 꽤 시간이 걸리겠더라고요.ㅜㅜ 혹시 섹션별로 웹 페이지와 모바일 레이아웃제작 파트에 나오는 섹션별로 맞춰서 강의를 따라한다면 제작순서에 문제 없이 괜찮을지 궁금해서 질문드리고 싶어서요. 예를 들어, welcome 섹션 pc버전 - 모바일버전 이런식으로요. 가능하다면 반응형 제작방식도 미리 조금씩 병행하면서 배우면 좋을 것 같다는 생각이 들어서요. 살펴봐주셔서 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
CreateNativeQuery..
강의 28:50~30:00까지를 수강하고 질문 남깁니다. entitymanger로부터 createNativeQuery를 받아와서 실제 SQL처럼 구문을 작성하면 알아서,, persist에 있던 것들 Flush해주고 원하는 값을 잘 가져오는데.. JDBCtemplate를 함께 사용해서.. connection받아오고,, 쿼리 작성하고 실행하고,, 이렇게 받아오는 로직과 굳이 같이 써야 하는 상황이 존재할까요...? 동적쿼리생성이라면,, nativeQuery는 불가능한건가요... 이런 의문점이 생겨 질문합니다..
-
미해결배달앱 클론코딩 [with React Native]
push 적용중 에러
The Swift pod `FirebaseCoreInternal` depends upon `GoogleUtilities`, which does not define modules. To opt into those targets generating module maps (which is necessary to import them from Swift when building as static libraries), you may set `use_modular_headers!` globally in your Podfile, or specify `:modular_headers => true` for particular dependencies. "react": "17.0.2","react-native": "0.68.2", 사용중입니다 저런 에러가 pod intsall할때마다 나는데요 왜 그런지 알수가 없습니다.
-
미해결React + API Server 프로젝트 개발과 배포 (CI/CD)
강사님 강의외 질문 하나만 드려도될까요?
리액트+스프링부트 조합으로 사이드 팀프로젝트를 진행중입니다. 리액트 개발환경은 CRA명령어를 통해 구축했습니다 근데 이게 local 서버에서는 router url을 주소창에 직접입력하거나,새로고침해도 잘실행되는데요 예를들어 배포서버URL/login 같이 router url을 직접입력하거나 새로고침하면 404에러가 납니다. 구글링을 해본결과 webpack.config.js devserver 서버 사이드 설정을 하라는글이 있습니다. 근데 저희가 CRA로 개발환경을 구축해서 webpack.config.js 파일이 없는데 그러면 해결방법이 webpack을 eject해서 서버사이드설정을 하는방법밖엔 없나요? 아니면 백엔드서버에서 따로 서버사이드 설정을 할 수 있나요?
-
미해결쉽고 자연스럽게 배워보는 Javascript 입문 - 코드스쿼드 마스터즈 코스 레벨1
동영상 권한 문제
밑에 있는 라이브코딩영상이 권한이 없다면서 이렇게 뜹니다.. 왜 이런거죠??? 잘보고있는데 갑자기 못보고있습니다 ㅠㅠㅠㅠ
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
@Transactional 내부에서 save가 발생하는 경우 처리방법 질문드립니다
@Entity @Datapublic class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id;} @Data @Entitypublic class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; @Column(nullable = false) Product product;} @Service @RequiredArgsConstructorpublic class OrderService { private final OrderRepository orderRepo; private final ProductRepository prodRepo; @Transactional public void CreateOrderV1(){ Product product = new Product(); prodRepo.save(product); Order order = new Order(); order.setProduct(product); orderRepo.save(order); throw new RuntimeException("order 에러"); }} Product와 Order를 생성하는데 예외가 발생하면 Product와 Order 둘 다 롤백하겠다는 의도의 비즈니스 로직을 가정해보겠습니다. Repository는 JpaRepository를 상속받아서 사용하고 있습니다. DB는 MySQL을 사용하고 있고, IDENTITY 전략으로 키를 생성하는데, 위 CreateOrderV1 함수를 실행하면 에러가 발생합니다. Order는 Product를 참조하고 있기 때문에 결국 product의 save 쿼리가 DB에 전달되야 키 값을 알 수 있기 때문으로 생각했고, 아래처럼 CreateOrderV2를 생성했습니다. @Transactionalpublic void CreateOrderV2() { Product product = internalService.CreateProduct(); Order order = internalService.CreateOrder(product); throw new RuntimeException("order 에러");} @Service @RequiredArgsConstructorpublic class InternalService { private final ProductRepository prodRepo; private final OrderRepository orderRepo; @Transactional(propagation = Propagation.REQUIRES_NEW) public Product CreateProduct(){ Product product = new Product(); return prodRepo.save(product); } @Transactional public Order CreateOrder(Product product){ Order order = new Order(); order.setProduct(product); return orderRepo.save(order); }} InternalService의 CreateProduct는 결국 쿼리가 DB에 날아가야하기 때문에 REQUIRES_NEW로 트랜잭션을 분리시켜줬습니다. 그런데 이렇게 하면 CreateOrderV2에서 런타임 에러를 뱉기 때문에 롤백이 수행될 텐데, DB 테이블을 보면 order는 롤백이 됐지만 product의 경우 롤백이 되지 않습니다. 이런 현상은 결국 강의에서 원했던 상황인 '회원 데이터는 저장되고, 로그 데이터만 롤백되는' 상황에는 부합하지만, 위 예제 코드에서는 Product에 의존하는 Order를 위해서 CreateProduct 코드에 REQUIRES_NEW를 사용했기 때문에 product까지 롤백되기를 원하는 비즈니스 로직의 의도대로 동작하지 않는다고까지는 이해했습니다. 그런데 이러한 비즈니스 로직을 어떻게 처리해야할지 고민하다가 질문글 올립니다! 이렇게 Product에 의존적인 Order를 가정할 때 @Transactional 혹은 다른 방법으로든 해결할 수 있는 방법이 있을까요? 엔티티매니저를 주입 받아서 prodRepo.save 직후에 em.flush 를 호출도 해봤지만 의도대로 동작하지는 않았고(@Transactional 내부에서 em.flush 호출 관련해서 어떤 식으로 동작하는지 알아보기 위해 구글링은 해봤는데 정확한 정보는 찾기 어려웠습니다ㅠㅜ) 결국 CreateOrderV2 내에서 Product product = internalService.CreateProduct() 호출 이후 try catch로 감싸서 예외 발생 시 catch 문에서 prodRepo.delete(product) 를 호출해줘서 수동으로 롤백처럼 동작하게끔 처리하는 방법까지밖에 생각이 나지 않았습니다..ㅠ
-
해결됨탄탄한 백엔드 NestJS, 기초부터 심화까지
PositiveIntPipe 생성할때 @Injectable() 사용한 이유
안녕하세요! 강의 잘듣고있습니다.!! PositiveIntPipe pipe를 만들때도 의존성 주입을 해야하기 때문에 @Injectable()를 사용하신건가요?? 만약 맞다면 사용한 이유가 궁금합니다.!!( @Injectable 를빼도 작동이 잘되고 파이프도 의존성을 주입해야하나? 라는 궁금증이 있어서 남깁니다!) 감사합니다!
-
미해결풀스택 리액트 라이브코딩 - 간단한 쇼핑몰 만들기
마지막날 강의에서 카트에 담긴 상품 삭제가 안되시는 분들은 참고해주세요~
client/src/graphql/cart.ts 파일에서 DELETE_CART 부분 수정이 필요합니다! [변경전] [변경후] products.ts 뺄 때랑 같은 이유로 오류가 나더라구요~ 오류나시는 분들은 참고해주세요~!
-
미해결[개념은 호옹~, 실습 빡] SQL 데이터 분석, 활용!
뻥튀기 문제
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 훈련 2번에서 배송완료 주문수가 뻥튀기 되더라구요. 그래서 다른분질문 올리셨던 것 참고해서 distinct로 쓰니까 해결되긴했는데 이 부분이 잘 이해가 안 됩니다. 중복되는 것을 없애는 것은 알겠는데 저는 이렇게 풀었는데요 JOIN이 3개 이상이 되면 뻥튀기 가능성이 있다고 보면 되는 건가요?? distinct를 쓰기로 결정하는 기준이 잘 와닿지 않네요..
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
order을 넣고 나니깐 오류가 발생합니다!
order 부분 전까지는 잘 작동하였는데 order 넣고 나니깐 포스트맨에서 받아 올 때 오류가 발생합니다 ㅠㅠ 똑같이 따라한 것 같은데 어디가 잘못된걸까요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
Test코드에 @Transaction 동작 문의
안녕하세요 , 영한님 강의 항상 잘보고 있습니다. 프로젝트를 진행하면서 궁금한 점이 생겨 혹시 도움을 받을 수 있는지 해서 문의남겨봅니다.. Service 에 @Transaction 어노테이션이 있는데 JPA repository save 를 호출하고 의도적으로 exception 을 발생시켰는데요, Test 클래스의 @Transaction 여부에 따라 결과가 제대로 확인되지 않는 점을 발견했습니다. Test 에서 findById 로 rollback 된 회원의 아이디를 조회하려고 하면, @Transaction 어노테이션이 테스트에 없다면 기대한대로 회원이 조회되지 않는데, @Transaction 을 붙이면 서비스에서 exeption 이 발생했는데도 rollback 이 되지 않은건지 테스트클래스에서 회원이 조회가 됩니다. 영속성 컨텍스트를 초기화하거나 @Transaction(readonly=true) 로 해도 마찬가지였고 , 서비스 트랜잭션 propagation 은 REQUIRES_NEW 로 트랜잭션을 분리했을 때는 롤백된 것이 확인되었는데요. 트랜잭션과 서비스가 하나의 트랜잭션으로 묶이면 서비스에서 발생한 exception 에 대한 rollback 은 일어나지 않고 마지막에 테스트가 끝날 때 rollback 이 발생하는 것인가요? 열심히 검색을 해봤는데, 힌트를 찾기 어려워 도움을 구합니다.. 물론 Test에서 findById 를 하는데 @Transactional 이 필요하지는 않지만, 그래도 붙였을 때 영향을 미치는 것이 궁금하여 문의 남깁니다.
-
해결됨코딩은 실전이다! - Git알못을 위한 깃린이코스(Git, Github 실습위주)
슬랙 초대 부탁드립니다.
acejsy@gmail.com 초대 부탁드립니다!
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
SQL문 질문
선생님 채팅방 강퇴를 구현중인데, 강퇴한사람이 해당 방 맴버가 맞는지 그리고 강퇴권한(isOwner OR isManager)이 있는지 체크하려는 sql문을 작성중입니다. SELECT `rm`.`UserId` AS `rm_UserId`, `rm`.`RoomId` AS `rm_RoomId` FROM `room_members` `rm` WHERE `rm`.`RoomId` = ? AND `rm`.`UserId` = ? AND `rm`.`isOwner` = ? OR `rm`.`isManager` = ?이렇게 sql을 짜도 될지 모르겠습니다.roomId와 userId에 인덱싱이 걸려서 먼저 처리되고 isOwner OR isManager 둘중 하나인지 확인하려고하는데, 마지막에 or 때문에 풀쿼리들어갈까봐 걱정됩니다. 저렇게 짜도 괜찮을까요?? typeorm으론 이렇습니다. const isManager = await this.roomMembersRepository .createQueryBuilder('rm') .select('rm.UserId') .where('rm.RoomId = :RoomId AND rm.UserId = :UserId', { RoomId, UserId }) .andWhere('rm.isOwner = :isOwner OR rm.isManager = :isManager', { isOwner: true, isManager: true, }) .getOne();
-
미해결함수형 프로그래밍과 JavaScript ES6+ 응용편
array in object... 는 어떤 식으로 재귀가 가능할까요..?
안녕하세요. 강의 덕분에 함수형 프로그래밍이 너무 재밌는 사람입니다..! 감사합니다! 최근에 fxJS 를 통해서 뭔가 만들어보자 라고 생각해서 Hacker News API 를 이용해서 여러함수들을 실행해보고있는데요! 밑의 스크린샷을 보면 객체안에 comments 배열, 또 객체 안에 comments 배열 ... 로 결국엔 하나의 HTML 표현하려고 합니다.뭔가 deppflatten 과 재귀를 사용하면 될것같다! 하고 여러 시도를 해봤는데, 도무지 좋은 정답이 생각이 안나네요..! 이와 같은 문제에 있어서 어떤 느낌으로 해결할 수있을까요??!
-
미해결부트스트랩 5(Bootstrap 5) - 기초부터 웹 프로젝트 만들기
모바일가로모드일경우와 문맥에 변화없는 클래스이름을 넣는 이유
1. 모바일(세로)에서는 정상적으로 나오는데 모바일회전해서(가로)일 경우에는 이상하게 나오는데요. 2.<div class="col-md-3 d-none d-md-block letsgo"> <div class="card card-body letsgo-card"> 클래스에 letsgo 와 letsgo-card를 넣는 이유가 무엇인가요? 위에 있는 클래스를 없애도 문맥에는 전혀 영향이 없는데요. 이유가 궁금합니다. 좋아요댓글 달기 수정한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.