묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
request로 받는것과 long id로 받는것에 차이점이 뭔지 모르겠어요
long id는 특정 필드값만 받는것 이라면 request로 받게되면 1. 모든 필드를 다 받고 2. isUserNotExist 부분에 id를 request.getId()로 바꿔 id만을 호출해서 받을수 있게 하는건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
jpa주문입력이 안됩니다.
주문 입력시 아래와 같은 에러가 조회됩니다.Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "T(jpabook.jpashop.domain.OrderStatus).values()" (template: "order/orderList" - line 19, col 33)] with root cause에러상황: 주문 입력시 화이트 페이지 조회전체코드:https://drive.google.com/file/d/1xAF2BknQ4Zr6eKmkgAyxDn59q7aXbza8/view?usp=drive_link아래에서 하라는대로 다 해봤는데 안됩니다. 참고로 order자바,orderservice자바는 강의와 똑같습니다. https://www.inflearn.com/questions/362231/%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94-%EC%9D%B4%EB%9F%AC%ED%95%9C-%EC%97%90%EB%9F%AC%EA%B0%80-%EB%B0%9C%EC%83%9D%ED%95%98%EC%97%AC-%EC%A7%88%EB%AC%B8-%EB%93%9C%EB%A6%AC%EA%B2%8C-%EB%90%98%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
안녕하세요 질문이 있습니다.
여러 서비스가 Kafka에 메시지를 전달해서 이를 단일 서버에서 저장하는 것은 이해가 갑니다! 그렇다면 조회할 때는 어떤 식으로 흐름이 발생하는건가요? 기존에 어플리케이션이 직접 DB와 커넥션이 되어있는 상태라면 조회문 날리면 그만인데 조회의 경우엔 조회 이벤트가 발생할 때마다 조회 이벤트를 보내면 DB가 카프카에 쿼리를 실행한 결과값을 저장하고, 어플리케이션에서는 또 컨슈머를 만들어서 그값을 가져오는 형태인가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@OneToMany , @ManyToOne 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 JPA 강의를 수강 후 게시판에 이미지 첨부를 구현하기 위해 공부하고 있습니다.1.Board와 Image는 1:N 관계2.연관관계 주인은 Board3.cascade = CascadeType.ALL로 옵션을 주어 부모 엔티티(board)가 영속화될 때, 자식 엔티티(Image)도 함께 영속화되도록 했습니다.위와 같이 설계를 한뒤 코드를 작성했습니다.근데, Image와 Board 테이블에 모든 데이터가 다 들어가는데 Image 테이블의 board_id가 계속 null값이 들어갑니다. 이 부분이 잘 이해가 안되는데 원인이 무엇일까요? 코드는 아래와 같습니다 ! @Entity @Getter @Setter @NoArgsConstructor public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "board_id") private Long id; @Column(name="title") private String title; @Column(name="content") private String content; @Column(name="writer") private String writer; @Column(name="date") private String date; /* @OneToMany(mappedBy = "board") @Nullable private List<Image> images = new ArrayList<>(); */ @OneToMany(mappedBy = "board",cascade = CascadeType.ALL) private List<Image> images = new ArrayList<>(); @Builder public Board(String writer,String title,String content,String date,List<Image> images){ this.writer=writer; this.title=title; this.content=content; this.date=date; this.images=images; }@Entity @Getter @Setter @NoArgsConstructor public class Image { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String fileName; @ManyToOne @JoinColumn(name = "board_id") private Board board; private String url; @Builder public Image(String fileName,String url){ this.fileName=fileName; this.url =url; } }@Service @Transactional @RequiredArgsConstructor public class BoardService { private final BoardRepository boardRepository; LocalDateTime currentTime = LocalDateTime.now(); // 현재 시간을 가져옴 /** * Create */ @Transactional public Long saveBoard(BoardSaveRequest request,List<Image> images){ Board board= Board.builder() .writer(request.writer()) .content(request.content()) .title(request.title()) .date(String.valueOf(currentTime)) .images(images) .build(); board.setImages(images); //cascade = CascadeType.PERSIST : 보드 생성 -> image add boardRepository.save(board); return board.getId(); } @RestController @RequestMapping("/board") @RequiredArgsConstructor @Slf4j public class BoardController { private final BoardService boardService; private final ImageService imageService; /** * 게시글 생성 * @param writer * @param title * @param content * @param images * @return 생성된 게시글 id */ @PostMapping() public ResponseEntity<ApiUtil.ApiSuccessResult<Long>> createBoard( @RequestPart(value="writer") String writer, @RequestPart(value="title") String title, @RequestPart(value="content") String content, @RequestPart(value = "images", required = false) List<MultipartFile> images) throws IOException { BoardSaveRequest boardSaveRequest= BoardSaveRequest.builder() .writer(writer) .content(content) .title(title).build(); List<Image> listImage = imageService.saveImage(images); Long saveId = boardService.saveBoard(boardSaveRequest,listImage); return ResponseEntity.ok().body(ApiUtil.success(HttpStatus.CREATED,saveId)); } @Service @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter public class ImageService { public List<Image> saveImage(List<MultipartFile> multipartFiles) throws IOException { List<Image> images = new ArrayList<>(); for(MultipartFile m : multipartFiles){ m.transferTo(new File("/Users/parkjihyeon/Desktop/imageFolder/"+m.getOriginalFilename())); Image image= Image.builder() .fileName(m.getOriginalFilename()) .url("/Users/parkjihyeon/Desktop/imageFolder/"+m.getOriginalFilename()) .build(); images.add(image); } return images; } }
-
해결됨실전! 스프링 데이터 JPA
테스트 시 생성자 주입에 관하여
package com.myproject.jpaboard.web.service; import com.myproject.jpaboard.domain.Post; import com.myproject.jpaboard.web.repository.BoardRepository; import lombok.RequiredArgsConstructor; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import java.util.Optional; @SpringBootTest @RequiredArgsConstructor class PostServiceTest { private final BoardRepository boardRepository; private final PostService postService; @Test void addViewCount() { Optional<Post> byId = boardRepository.findById(1L); Post post = byId.get(); System.out.println("post.getViewCount() = " + post.getViewCount()); postService.addViewCount(1L); System.out.println("post.getViewCount2() = " + post.getViewCount()); } }안녕하세요. 개인적으로 배운것들을 따로 테스트중입니다. 위의 코드와 같이 생성자 주입을 하니 boardRepository에 NullPointerException이 발생하였습니다. @Autowired를 이용한 필드 주입으로 코드를 수정해보니 문제가 해결되었습니다. 원인을 추측해보면, 테스트 메서드 실행할 때 주입받을 빈이 초기화되어있지 않기 때문으로 보입니다.이런 상황이 처음이라 지식 공유자님의 의견을 듣고싶습니다.
-
미해결코드로 배우는 React with 스프링부트 API서버
PathVariable이 제대로 인식되지 않는 문제
본 강의 REST컨트롤러 - 수정/삭제, CORS 설정 시청중에Putmapping, DeleteMapping 쪽에서 파라미터를 @PathVariable로 받는데, postMan에서 테스트 요청을 보냈을때 파라미터가 전달되지 않습니다. @PathVariable(name="tno") 처럼 name을 명시하니까 제대로 파라미터가 받아지던데요 원래는 name은 생략 가능한게 아닌가요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원가입 테스트 작성시 에러가 발생합니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]회원 기능 테스트 강의를 수강하며 회원가입 테스트 예제를 작성하고 실앻해도 계속 에러가 나옵니다. 코드도 모두 동일하게 쳣는데 에러가 뜨니 어떻게해야할지 모르겟습니다. ㅠㅠ 10:53:19.411 [Test worker] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [jpabook.jpashop.service.MemberServiceTest]: MemberServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.10:53:19.579 [Test worker] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper -- Found @SpringBootConfiguration jpabook.jpashop.JpashopApplication for test class jpabook.jpashop.service.MemberServiceTest10:53:19.906 [Test worker] INFO org.springframework.boot.devtools.restart.RestartApplicationListener -- Restart disabled due to context in which it is running이렇게 에러문구 3개가 뜨는데 뭐가 틀린지 모르겟습니다. 도움주시면 감사하겟습니다.
-
미해결실전! Querydsl
동적 order by..
쿼리dsl로 동적인 order by 정렬 처리하는거는 강의에서 안보여주시나요?...ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
ModelAttribute 사용유무가 궁금합니다.
public class Order 클래스중 //==생성 메서드==// public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems) { Order order = new Order(); order.setMember(member); order.setDelivery(delivery); for (OrderItem orderItem : orderItems) { order.addOrderItem(orderItem); } order.setStatus(OrderStatus.ORDER); order.setOrderDate(LocalDateTime.now()); return order; }위에는 jpa1강 파트이고아래는 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 상품 등록 처리 파트에서 @ModelAttribute 중 일부입니다.jpa에서는 혹시 @ModelAttribute 이부분을 못쓰나요? 아니면 쓸 쑤는 있는데 주문처럼 생성메서드일때는 안쓰는건가요? // @PostMapping("/add") public String addItemV2(@ModelAttribute("item") Item item, Model model) { itemRepository.save(item); // model.addAttribute("item", item); //자동 추가, 생략 가능 return "basic/item"; }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문입력시 질문입니다.
아래와 같은 에러가 조회됩니다.Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "T(jpabook.jpashop.domain.OrderStatus).values()" (template: "order/orderList" - line 19, col 33)] with root cause에러상황: 주문 입력시 화이트 페이지 조회전체코드:아래에서 하라는대로 다 해봤는데 안됩니다. 참고로 order자바,orderservice자바는 강의와 똑같습니다. https://www.inflearn.com/questions/362231/%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94-%EC%9D%B4%EB%9F%AC%ED%95%9C-%EC%97%90%EB%9F%AC%EA%B0%80-%EB%B0%9C%EC%83%9D%ED%95%98%EC%97%AC-%EC%A7%88%EB%AC%B8-%EB%93%9C%EB%A6%AC%EA%B2%8C-%EB%90%98%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4
-
미해결실전! 스프링 데이터 JPA
spring data jpa의 merge() 를 쓰지 말고 persist() 만 쓰라는 걸까요??
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의에서 merge 를 쓰지 않는게 좋다고 이야기 해 주셨는데, spring data jpa의 save() 를 실무에서 쓰지 말라는 뜻일까요?? 아니면 쓰되 isNew 로직을 타도록 잘 세팅해두라는 뜻일까요?? 실무에서는 객체 저장 어떻게 하는지 궁금합니다~!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
orphanRemoval
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]orphanRemoval 개념을 설명할 때, 부모 엔티티와 자식 엔티티에 대해서 이야기 하셨는데 부모 엔티티와 자식 엔티티를 정하는 기준이 어떻게 되나요?다대일 개념에서 다쪽이 자식 엔티티이고 일쪽이 부모 엔티티가 되는건가요?
-
미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
서비스 메소드 작성 시 질문!
안녕하세요 쥬쥬님 서비스에서 메서드를 만들 때 질문 있습니다. A라는 서비스 메소드를 만들 때 로직이 복잡하면 코드가 엄청 길어지면 그 때는 안에 있는 메소드를 B, C 서비스 메소드로 분리해야 할 것 같은데 서비스 메소드를 만들 때 기준이 있나요?지금 createReview 서비스 메소드를 만들때restaurantRepository.findById(restaurantId).orElseThrow()를 사용하여 조회 및 검증 작업을 진행하는데 추후에 해당 코드를 그대로 유지하는지, 서비스 메소드로 분리하는지, 스태틱 메서드로 만드는지 기준이 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 도메인 요구사항 설계 중 의문점
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 5. 상품 도메인 개발 수강 중 궁금한 점이 있어 글 올립니다!상품 도메인 비즈니스 요구사항에는 1. 상품 등록 2. 상품 목록 조회 3. 상품 수정 이 있는데 핵심 비즈니스 로직을 정의하는 클래스인 ItemService(상품 서비스 클래스)에서는 오직 1. 상품 등록 2. 상품 목록 조회 로직만 설계하신 것을 알 수 있었습니다.상품 리포지토리에서 상품 등록 로직(save(Item item))에 if - else 문을 통해 merge()가 3. 상품 수정 기능을 해서 상품 서비스 클래스에서 설계를 안 하신 걸로 봐도 될까요?
-
해결됨
@Transactional을 붙이는 위치가 궁금합니다. (Service, ServiceImpl..)
회원 정보 수정 API를 구현하며 dirty checking을 이용한 회원 정보 update를 사용했습니다.service의 update 메소드를 호출하기 전과 후를 controller단에서 로그를 찍어보니 정보가 잘 변경되는데 DB에는 반영이 되지 않아 애를 먹었습니다.serviceImpl단의 update 메소드에 @Transactional을 붙여서 해결했습니다. 그 전에는 service단의 update 메소드에 @Transactional을 붙였더니 안되더라구요.service단의 메소드에 붙이는 @Transactional와 serviceImpl단의 메소드에 붙이는 @Transactional이 다른 트랜잭션으로 작동하는건지, 그렇다면 어디에 @Transactional을 붙이는게 맞는건지 궁금합니다.
-
미해결코드로 배우는 React with 스프링부트 API서버
Entity에 ElementCollection이 두 개 있는 경우
안녕하세요! 하나의 엔티티에 @ElementCollection 붙은 필드가 두 개 있는 경우를 시험해 보고 있습니다. @EntityGraph(attributePaths = {"a", "b"}) 이런 식으로 해서 테스트를 돌리면 org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags 과 같은 오류가 나는데 ElementCollection 두 개가 있는 경우는 하나의 쿼리로 모두 가져오는 방법은 없나요?
-
미해결
강의 내용에서 이해안되는 부분 질문드립니다.
package jpabook.jpashop.domain; import jakarta.persistence.*; import jdk.jshell.Snippet; import lombok.Getter; import lombok.Setter; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Date; import java.util.List; @Entity @Table(name = "orders") @Getter @Setter 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(cascade = CascadeType.ALL, fetch = FetchType.LAZY) private Delivery delivery; //배송정보 private LocalDateTime orderDate; //주문시간 @Enumerated(EnumType.STRING) private OrderStatus status; //주문상태 [ORDER, CANCEL] //이 연관관계 부분입니다. //==연관관계 메서드==// public void setMember(Member member) { this.member = member; member.getOrders().add(this); } public void addOrderItem(OrderItem orderItem) { orderItems.add(orderItem); orderItem.setOrder(this); } public void setDelivery(Delivery delivery) { this.delivery = delivery; delivery.setOrder(this); } //==연관관계 메서드==// public void setMember(Member member) { this.member = member; member.getOrders().add(this); } public void addOrderItem(OrderItem orderItem) { orderItems.add(orderItem); orderItem.setOrder(this); } public void setDelivery(Delivery delivery) { this.delivery = delivery; delivery.setOrder(this); }이 연관관계 메서드 부분이 이해가 안되어서 질문드립니다.setMember 메소드에서 member.getOrders().add(this); 이 부분이 전혀 이해가 안되는데 설명 부탁드립니다. addOrderItem 메소드에서 orderItems.add(orderItem); 와 orderItem.setOrder(this); 이 부분이 전혀 이해가 안되는데 설명 부탁드립니다. setDelivery 메소드에서 delivery.setOrder(this); 이 부분이 전혀 이해가 안되는데 설명 부탁드립니다.
-
미해결
강의 내용 질문드립니다.
package jpabook.jpashop.domain.repository; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import jakarta.persistence.PersistenceUnit; import jpabook.jpashop.domain.Member; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import java.util.List; @Repository @RequiredArgsConstructor public class MemberRepository { private final EntityManager em; public void save(Member member) { em.persist(member); } public Member findOne(Long id) { return em.find(Member.class, id); } public List<Member> findAll() { // 회원 목록 조회 return em.createQuery("select m from Member m", Member.class) ry .getResultList(); } public List<Member> findByName(String name) { return em.createQuery("select m from Member m where m.name = :name", Member.class) .setParameter("name", name) .getResultList(); } } 위의 코드에서 findByName메소드에서 왜 단건조회가 아닌 리스트 조회를 사용한건가요? 어차피 중복가입은 안되고 이름으로 조회하니까 하나의 결과가 나와야하는거 아닌가요?findByName 메소드에서 setParameter은 왜 있는건가요? 설명부탁드릴게요.
-
미해결실전! Querydsl
세타조인 크로스조인
[질문 내용]세타조인과 크로스조인의 차이가 무엇인가요 ??
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
unexpectedRollbackException 에러가 로그에 다르게 남겨져요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 1분 51초 부근에 테스트를 할시에 unexpectedRollbackException이 에러에 남겨지는 것을 확인할 수 있는데, 로그가 저는 다르게 남겨집니다.2024-04-25T15:46:38.354+09:00 DEBUG 5056 --- [springdx] [ main] cResourceLocalTransactionCoordinatorImpl : JDBC transaction marked for rollback-only (exception provided for stack trace)java.lang.Exception: exception just for purpose of providing stack traceat org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.markRollbackOnly(JdbcResourceLocalTransactionCoordinatorImpl.java:310) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final]at org.hibernate.engine.transaction.internal.TransactionImpl.markRollbackOnly(TransactionImpl.java:203) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final]at org.hibernate.engine.transaction.internal.TransactionImpl.setRollbackOnly(TransactionImpl.java:224) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final] 다른 테스트도 몇개 그렇게 표시 되는데 recoverException_fail test 시에 위와 같이 에러표시가 됩니다.테스트 시 통과는 돼서 UnexpectedRollbackException가 터지는 건 맞는 것 같은데 로그에 에러가 그냥 Exception으로 표시가 되는 것 같아서 구글링해봤는데 문제가 무엇인지 모르겠어서 질문드립니다. https://drive.google.com/file/d/1UzxlCeILcMUkroixUZmV2W49LfPqQAnb/view?usp=sharing