묻고 답해요
138만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
자동주입이 안되고 있습니다. ㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)주입이 안되고 있는데 왜그런지 모르겠습니다 ㅠㅠ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 수정시 유효성 검사
상품 수정 기능 구현중에수정내역의 유효성 검사를 추가해보고 싶어서 코드를 추가했습니다.```java``` package jpabook.jpashopre.controller; import lombok.Getter; import lombok.Setter; import javax.validation.constraints.NotEmpty; @Getter @Setter public class BookForm { private Long id; @NotEmpty(message = "이름은 필수 입력 사항입니다.") private String name; private int price; private int stockQuantity; @NotEmpty(message = "작가은 필수 입력 사항입니다.") private String author; private String isbn; } package jpabook.jpashopre.controller; import jpabook.jpashopre.domain.item.Book; import jpabook.jpashopre.domain.item.Item; import jpabook.jpashopre.service.ItemService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.List; @Controller @RequiredArgsConstructor @Slf4j public class itemController { private final ItemService itemService; @GetMapping("/items/new") public String createForm(Model model) { model.addAttribute("form", new BookForm()); return "item/createItemForm"; } @PostMapping("/items/new") public String create(@Valid @ModelAttribute("form") BookForm form, BindingResult result) { if(result.hasErrors()){ return "item/createItemForm"; } Book item = new Book(); item.setName(form.getName()); item.setPrice(form.getPrice()); item.setStockQuantity(form.getStockQuantity()); item.setAuthor(form.getAuthor()); item.setIsbn(form.getIsbn()); itemService.saveItem(item); return "redirect:/"; } @GetMapping("/items") public String list(Model model) { List<Item> items = itemService.findItems(); model.addAttribute("items", items); return "item/itemList"; } @GetMapping("/items/{itemId}/edit") public String updateItemForm(@PathVariable("itemId") Long itemId, Model model) { Book item = (Book) itemService.findOne(itemId); BookForm form = new BookForm(); form.setId(item.getId()); form.setName(item.getName()); form.setPrice(item.getPrice()); form.setStockQuantity(item.getStockQuantity()); form.setAuthor(item.getAuthor()); form.setIsbn(item.getIsbn()); model.addAttribute("form", form); return "item/updateItemForm"; } @PostMapping("/items/{itemId}/edit") public String updateItem(@ModelAttribute("form") @Valid BookForm form,@PathVariable("itemId")Long itemId, BindingResult result) { if (result.hasErrors()) { return "item/updateItemForm"; } itemService.updateItem(form.getId(), form.getName(), form.getPrice(), form.getStockQuantity(), form.getAuthor(), form.getIsbn()); return "redirect:/items"; } } <!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head th:replace="fragments/header :: header" /> <style> .fieldError { border-color: #bd2130; } </style> <body> <div class="container"> <div th:replace="fragments/bodyHeader :: bodyHeader"/> <form th:object="${form}" method="post"> <!-- id --> <input type="hidden" th:field="*{id}" /> <div class="form-group"> <label th:for="name">상품명</label> <input type="text" th:field="*{name}" class="form-control" placeholder="이름을 입력하세요" th:class="${#fields.hasErrors('name')}? 'form-control fieldError' : 'form-control'"> <p th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Incorrect date</p> </div> <div class="form-group"> <label th:for="price">가격</label> <input type="number" th:field="*{price}" class="form-control" placeholder="가격을 입력하세요" /> </div> <div class="form-group"> <label th:for="stockQuantity">수량</label> <input type="number" th:field="*{stockQuantity}" class="form-control" placeholder="수량을 입력하세요" /> </div> <div class="form-group"> <label th:for="author">저자</label> <input type="text" th:field="*{author}" class="form-control" placeholder="저자를 입력하세요" th:class="${#fields.hasErrors('author')}? 'form-control fieldError' : 'form-control'"> <p th:if="${#fields.hasErrors('author')}" th:errors="*{author}">Incorrect date</p> </div> <div class="form-group"> <label th:for="isbn">ISBN</label> <input type="text" th:field="*{isbn}" class="form-control" placeholder="ISBN을 입력하세요" /> </div> <button type="submit" class="btn btn-primary">Submit</button> </form> <div th:replace="fragments/footer :: footer" /> </div> <!-- /container --> </body> </html>이름을 입력하지 않고 유효성검사를 실시했습니다. 하지만...네...실패했습니다네트워크에서도 이름이 빠진채로 의도대로 전달도 되었으나 뷰를 표기하지 못하고 화이트라벨 에러페이지만 나옵니다 ㅠ콘솔도 의도된 에러메시지가 출력이 됩니다.뷰단쪽에 문제 일까요? 해결th:action="@{/items/*{id}/edit}" ->updateItemForm,html에 form에 action으로 해결하였습니다.화이트라벨 에러페이지가 좀더 상세한 에러메시지를보여줬으면 하는데 어떻게 설정해야 할까요?
-
미해결실전! Querydsl
Projections 질문 dto의 property와 entity의 property의 타입이 다를때 어떻게 변환을 할 수 있나요?
안녕하세요. 다음과 같이 Entity와 Dto가 LocalDateTime, OffsetDateTime 을 사용하여 데이타 타입이 다릅니다. 이경우에class EntityA { public Long id public LocalDateTime regDt; } class DtoA { public Long id public OffsetDateTime regDt; }querydsl 문장을 다음과 같이 하면, List<DtoA > list = jpaQueryFactory .select( Projections.fields( DtoA.class, entityA.id, entityA.regDt )) .from(entityA) .fetch() ; 다음과 같이 오류가 발생합니다.java.lang.IllegalArgumentException: java.time.LocalDateTime is not compatible with java.time.OffsetDateTime다음과 같은 변환함수를 쓰면 될거 같은데, public OffsetDateTime map(Date value) { try{ ZoneOffset zoneOffset = ZoneId.systemDefault().getRules().getOffset(Instant.now()); return value.toInstant().atOffset(zoneOffset); } catch( Exception e) { throw new RuntimeException( e ); } }이 함수를 querydsl에 어떻게 넣어야 할지 모르겠어요답변 부탁드립니다.감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
select 조회
item1을 조회할 때, 왜 select문이 출력이 안될까요ㅜㅜ
-
해결됨실전! Querydsl
PageableExecutionUtils 사용 시, count 쿼리 생략 조건
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]PageableExecutionUtils 을 사용시, count 쿼리 생략 조건에 "마지막 페이지 일 때" 라고 되어 있어서강의에 샘플 데이터 기반으로size=5, page=20 으로 마지막 페이지를 호출했는데,count 쿼리가 나가서 봤더니컨텐츠 사이즈가 0 이 아니면서 페이즈 사이즈 보다 작아야 되는 경우로 되어 있었습니다.해석하자면 카운트 쿼리 생략하는 경우가 "마지막 페이지이면서 컨텐츠 사이즈가 페이지 사이즈보다 작을 때" 인 것 같아서 의견드립니다.중복된 것이라면 죄송합니다
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
강의 6강 질문
CalculatorMultiplyRequest DTO에서 다음과 같이 final을 붙여주면, postman에서 send 버튼 눌렀을 때 에러가 표시되는데 왜 그런지 알 수 있을까요?!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
안녕하세요.
안녕하세요.maven과 gradle 차이는 하는 기능은 같은데maven은 pom.xml에서 xml로 설정해주고 gradle 은 application.yml에서 그루비로 설정해주는 차이만 있을가요???
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
persist 호출 이후 롤백 상황이 발생하는 경우?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의에서 멤버 객체를 persist를 이용해서 저장하는데 그 시점에 PK를 알 수 없으니 insert 구문이 실행되는 것까지는 이해가 되는데, 지금 트랜잭션이 진행중인데 모종의 이유로 인해서 커밋 전 예외가 발생한다면, 롤백이 이루어지면서 저장 작업을 무효화하고 ID도 회수하는 과정이 이루어지나요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
flush() 전에 Insert 쿼리 출력되는 현상
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]강의에서는 flush()를 호출하기 전에는 insert 문이 나가지 않는다고 하셨는데, 저 같은 경우에는 위와 같이 작성해도 insert 문이 콘솔에 출력됩니다. 이유가 궁금합니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
실무에서도 address를 값타입으로 사용하나요?
실무에서는 주소와 같은 경우는 값타입으로 사용하는지 혹은 엔티티로 따로 만들어서 사용하는지 궁금합니다. 고객의 주소 정보만 따로 관리하고 싶다 할때는 엔티티로 만들고 아닐때는 값타입으로 사용하는 등 실무에서는 유동적으로 선택해서 사용하나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
트랜잭션 롤백 시 Insert 쿼리
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.위와 같이 테스트를 구현하고 테스트 실행 시 Insert 쿼리가 나갑니다. 그런데 예외가 발생했기 때문에 롤백이 되어서 또는 테스트의 트랜잭션 디폴트 값이 Rollback이라서 Insert 쿼리가 나가지 않아야 하는 것 아닌가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
index.html의 href 경로가 C:/로 연결됩니다.
index.html의 href 경로가 localhost:8080/hello로 연결되지 않고 C:/hello로 연결되어서원하는대로 작동하지 않습니다. 제가 뭘 놓친 걸까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 주문 에서 Submit 버튼 누를시 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 상품 주문에 정보를 입력하고 submit 버튼을 누르면 Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported] 오류가 발생합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
MSA에서 데이터를 가져오는 방법
MSA에서 다른 어플리케이션의 데이터를 가져오는 방법으로 RestTemplate, FeignClient를 사용하는 방법을 알려주셨는데요.데이터를 가져오는 것은 보통 rest 통신을 사용하여 가져오나요?실무에서 카프카나 다른 라이브러리를 사용해서 가져오는지, 아니면 설명해주신 것 처럼 rest 통신을 통해 가져오는지 궁금합니다~
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
batchsize 로 연결한 엔티티를 동적으로 사용하기
안녕하세요 김영한 선생님.선생님 강의로 현장에서 jpa를 현장에서 더욱 자유롭게 사용하고 잇습니다. 현제 실무에서 궁금한점이 생겨 질문드립니다.(정보: 저희는 eclipselink를 사용하고 있고 query dsl은 사용하고 있지 않습니다.ㅠㅠ ) 엔티티에서 n+1 이 발생하는 부분을 batchsize를 사용하여 별도의 쿼르를 실행하여 해결하고 있습니다. 이럴 경우 batchsize를 지정한 엔티티에 대헤서 조건문을 지정할수 있을까요? ernate.annotations.BatchSize (size = 5) @OneToMany (mappedBy ="member", fetch = FetchType. EAGER) private List<Order> orders = new ArrayList<Order> () ;예를 들어 맴버안에 주문 리스트가 있고 이것을 BatchSize를 이용하여 별도의 쿼리로 값을 가져오고 있는데.이 주문 상품의 타입이 책인 것을 가지고 있는 맴버로 하고 싶은 경우에는 어떤식으로 접근하는게 좋을까요?오더를 먼저 선택해서 맴버를 찾아가야 하는 걸까요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
git push 중에 에러가 발생합니다.
git push 중에 다음과 같은 에러가 발생햡니다.error: src refspec master does not match anyerror: failed to push some refs to 'https://github.com/kparkjun/library-app.git'
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
서버와관련해서 질문
보통 AWS를 이용해서 서버를 임대해서 웹사이트를 개설하잖아요? 개인용 소규모 웹사이트를 운영한다고쳤을때 집에다 만약 PC한대를 서버로 돌린다쳤을때그런경우는 AWS를 사용할필요가없잖아요?이런경우에 배포하는방법은 알려주실수없으신지?집에 따로 서버용 PC를 구축해서 개인용 소규모 웹사이트를 운영했을경우 배포는 어떻게해야할지 궁금해지네요 AWS는 사용하면 할수록 요금이 청구가되니 ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
ItemService updateItem
ItemService의 updateItem 메서드에서 영속성 컨텍스트에 있는 item의 값을 변경하고 있는데,제가 생각했을 때 데이터의 값을 변경하는 것은 repository에서 해야할 것 같은데 service 계층에서 직접 구현해 놓으신 이유가 있나요? repository에 update 관련 메서드를 하나 더 만들 수는 없나요?각자의 역할을 위배하는 느낌이어서 여쭤봅니다ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Dto 생성에 관하여
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Dto 관련하여 질문이 있습니다. A라는 도메인 안에서만 생각해볼때, 프론트측에서 api별로 필요로하는 데이터에 딱 맞게 여러 응답 dto를 생성하는것이 좋은지 아니면 하나의 응답 dto를 생성해서 프론트 측에서 필요로하는 data를 뽑아 사용하게 하는 것이 좋은지 궁금합니다.전자는 필요로하는 데이터를 프론트측에 전달해줘서 가독성? 측면에서 좋은 것 같지만 다수의 DTO가 생성되어 유지보수 측면에서 단점이 있을것 같습니다. 후자는 하나의 DTO를 사용하므로 유지보수 측면에서 좋아보이는데 dummy 데이터나 null 값을 return 해주는 단점이 있을것 같은데 실무에서는 어떻게 dto를 생성하고 관리하는지 궁금합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
db에서 Join vs 애플리케이션에서 조합
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]제가 한 게시판에서 이런 글을 읽었습니다."요즘에는 논리적인 연관관계는 만들지만 db에서는 만들지 않고 조인 연산을 거의 안 하고 여러 번 쿼리해서 애플리케이션에서 조합합니다."이유로는연관관계를 맺으면 테이블 설계에 있어 유연성이 떨어짐조인연산은 db 자원을 많이 잡아먹는 무거운 연산이고 db 성능에는 한계가 있어 서버를 확장해서 자원을 쓰는 것이 유리함라는 근거를 들었습니다.이것이 맞는 판단인지 궁금합니다(금융권에 계신 분이 쓴 듯 합니다)