묻고 답해요
138만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
전체 주문 가격
pdf파일 50페이지에 전체주문가격조회에서괄호안에 "실무에서는 주로 주문에 전체 주문 가격 필드를 두고 역정규화 한다."라고 써져있는데 역정규화가 어떻게 되는건가요??
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
강의와 관련하여 궁금한게있습니다~!
엔티티로 직접 요청을 처리하지말고 별도의 dto를 만들어서 요청을 처리하는게 좋다고말씀해주셨는데! 실무의 경우 api별로 dto를 만들때 내부클래스로 선언해서 사용할까요? 아님 패키지에 따로 dto를 만들어서사용할까요!!그리고 추가적으로 혹시 선생님 spring mvc강좌 restapi관련된 강좌가있을까요!?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
11분06초 @Valid
@Valid를 써야 @NotEmpty가 적용 되는건가요?쓰지않으면 @NotEmpty는 그냥 의미없는건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
MEMBER_SEQ를 2번 호출 하는 이유
처음 호출 하면 51개로 맞추고 그 다음부터, 메모리에서 사용한다고 하는데 이렇게 하는 이유가 무엇인가요 ? 처음 호출 할때 50개를 미리 세팅 하고 1번부터 사용하면 안되나요???
-
해결됨실전! Querydsl
상속관계 매핑을 지양해야 하는가?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]https://inf.run/P9aM안녕하세요 영한님, 위 질문 및 답변에 대하여 몇가지 추가적으로 질문이 있습니다.저도 김문근님의 고민과 같은 고민을 하고 있었는데 JPA강의에서도 관련된 질문이 있는지 계속 찾아보았습니다만 속이 뻥 뚫리는 답이 없어서 여기까지 왔습니다.그런데 한가지 영한님이 계속 말씀하시는 부분은 "실무에서는 상속관계 매핑을 꼭 필요할 때 부분적으로 사용한다" 이었습니다. 그렇다면 상속관계 매핑을 실무에서 잘 사용하지 않는 이유는 무엇인가요?위 예제처럼 상속관계 매핑(싱글테이블)전략을 사용하지 않고 한 테이블에 데이터들이 들어간다면 비어있는 값은 null로 되는 것은 상속관계 매핑과 다를게 없을 것 같은데 이 부분에서의 이점은 무엇일까요? 오늘 하루 이 고민하다 시간이 훌쩍 지나갔네요... 영한님과 JPA의 시작과 끝을 함께하고 싶습니다.강의 정말 감사합니다!!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
프록시 객체의 초기화
프록시객체가 만들어지면 1차캐시에 들어가고 그 상태에서 초기화를 하면 실제 entity가 만들어져서 프록시 맴버변수로 들어가는것으로 이해했는데 맞나요??
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
dto와 도메인의 업데이트 메소드를 만들어 보았습니다. 이렇게 하는게 맞는건가요?
강의에서 말씀하신대로 만들어 보았습니다.이렇게 하는것이 맞는건지 궁금하여 질문드리게 되었습니다.Book 도메인UpdateItemDtoItemServiceItemController항상 감사합니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
초기화의 정확한 의미
강의를 수강하다가 초기화의 정확한 의미가 잘 와닫지 않아서 질문드려봅니다.제가 이해하기로는 특정 값에 값을 set 할때 초기화한다라고 이해했는데 강의에서 .getName 도 초기화라고 표현이 되어 있더라고요이 초기화의 정확한 뜻이 무엇일까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
인텔리제이 서버 재실행 오류
안녕하세요 영한님!영한님 강의 입문편부터 인텔리제이로 코딩중인 학생입니다. 다름이 아니고 얼마 전 ultimate 버전으로 업그레이드 이후 코드 수정하고 재실행했을 때 변경한 코드 전체가 적용이 안됩니다. 가령 컨트롤러에 GetMapping("/") 추가하고 재실행하면 반영이 안됩니다. 혹시 이와 같은 오류를 겪어보셨을까요? 구글링해도 해결방법을 모르겠어 문의남깁니다 ㅜ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
POST 요청시 메서드로 들어오는 BookForm 객체의 생성 주체가 누구인가요?
안녕하세요.코드를 읽어보며 흐름을 파악하다가 궁금증이 생겨 질문 드립니다. public class ItemController { @GetMapping("/items/new") public String createForm(Model model) { model.addAttribute("form", new BookForm()); return "items/createItemForm"; } @PostMapping("/items/new") public String create(BookForm form) { ... 생략 } /items/new에 GET으로 접근하면, createForm()이 호출되어 BookForm 객체가 생성되고, Model 객체를 통해 viewResolver로 넘어가는 로직은 이해가 됩니다. 그러나 POST 요청을 보내면, create()가 호출되어 BookForm 객체를 인자로 받는데요.이때, 인자로 들어온 BookForm 객체는 GET 요청시 보내준 BookForm 객체와 다른 객체더라구요. 아마 누군가가 HTML input 태그에 입력된 값을 BookForm 객체로 변환시켜 넣어주는 것 같은데요. 누가 이 책임을 갖고, 어떻게 데이터를 객체로 변환시키는지 그 흐름이 궁금합니다. 마치 @ResponseBody에서 HttpMessageConverter가 객체를 JSON으로 변환시켜준 것처럼이번에도 스프링이 HttpMessageConverter를 통해 HTML input 데이터를 객체로 변환시켜 Controller에게 반환시켜 주는 걸까요? 감사합니다.
-
미해결실전! 스프링 데이터 JPA
@EntityGraph(attributePaths={"team"})
안녕하세요, 영한님! 강의 정말 잘 듣고 있습니다!강의 중 궁금한 부분이 생겨 질문 드립니다.`@EntityGraph(attributePaths={"team"}) `attributePaths 속성에 들어가는 이름이연관 관계가 걸려있는 필드의 이름이 들어가는 건가요?
-
미해결실전! 스프링 데이터 JPA
Page를 1부터 시작하기(Pageable, Page 커스텀) 질문 있습니다.
안녕하세요. 강의 열심히 듣는 중에 궁금한 점이 있습니다.17:30초 쯤에 Page를 1부터 시작하기 부분에서 1. Pageable, Page를 파리미터와 응답 값으로 사용히지 않고, 직접 클래스를 만들어서 처리한다. 그리고 직접 PageRequest(Pageable 구현체)를 생성해서 리포지토리에 넘긴다. 물론 응답값도 Page 대신에 직접 만들어서 제공해야 한다.이 부분을 직접 구현해보려고 했는데 제가 놓치는 부분이 있는 건지 잘 안 되더라구요. 그래서https://inflearn.com/questions/201572이 질문에 답변해주신 분의 블로그를 참고하여 커스텀을 해봤습니다. package study.datajpa.dto; import lombok.Getter; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Slice; @Getter public class PageableCustom { private boolean first; private boolean last; private boolean hasNext; private int totalPages; private long totalElements; private int page; private int size; public PageableCustom() { } public PageableCustom(PageImpl page) { this.first = page.isFirst(); this.last = page.isLast(); this.hasNext = page.hasNext(); this.totalPages = page.getTotalPages(); this.totalElements = page.getTotalElements(); this.page = page.getNumber() + 1; this.size = page.getSize(); } public PageableCustom(Slice slice) { this.first = slice.isFirst(); this.last = slice.isLast(); this.hasNext = slice.hasNext(); this.page = slice.getNumber() + 1; this.size = slice.getSize(); } } package study.datajpa.dto; import lombok.Getter; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.SliceImpl; import java.io.Serializable; import java.util.List; @Getter public class PageCustom<T> implements Serializable { private List<T> content; private PageableCustom pageableCustom; public PageCustom(List<T> content, Pageable pageable, long total) { this.content = content; this.pageableCustom = new PageableCustom(new PageImpl(content, pageable, total)); } public PageCustom(List<T> content, Pageable pageable, boolean hasNext) { this.content = content; this.pageableCustom = new PageableCustom(new SliceImpl(content, pageable, hasNext)); } } @GetMapping("/memberscustom") public PageCustom<MemberDto> listCustom(Pageable pageable) { Page<MemberDto> map = memberRepository.findAll(pageable).map(MemberDto::new); return new PageCustom<MemberDto>(map.getContent(), map.getPageable(), map.getTotalElements()); }결과적으로는 커스텀에 성공했지만 코드 내용부분에서 뭔가 아쉬운 부분이 있더라구요.이게 블로그 보면서 작성한 MemberController 단 내용인데,보시면 listCustom(Pageable pageable) 에서Pageable pageable 이 파라미터를 그대로 하지말고 이 부분 또한 커스텀해서PageRequest.of()를 이용하라고 설명하시더라구요.혹시 PageRequest.of()를 활용해서 코드를 좀더 최적화 할 수 없을까요?제가 놓치는 부분이 있는 것 같은데 잘 떠오르지 않아서 이렇게 질문 드립니다! https://drive.google.com/file/d/1I__dQwuBmtkUdvT5RahN8ksF3Tr21UP8/view?usp=sharing아! 제 프로젝트 구글 링크 드립니다!ㅎㅎ 항상 양질의 강의 감사합니다!
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Response 클래스
안녕하세요! Response 클래스가 필요하다는 것은 잘 이해했습니다.그런데 Response 클래스를 서비스가 아닌 컨트롤러에서 변환하는 것은 어떻게 생각하시나요? 서비스에서는 리포지토리에서 엔티티를 반환받아서, 컨트롤러에 엔티티를 전달하고 컨트롤러에서 엔티티를 Response로 변환하여 리턴하는 식으로 현재 개발을 해봤는데요. 생각을 좀 해보니까, 엔티티를 Response로 변환하는 것을 비즈니스 로직이라고 생각하면 서비스에 포함시키는게 맞는것 같고..뭔가 Response는 화면UI 에 따라 자주 변할 수 있는 가능성이 많으니까 차라리 서비스는 항상 엔티티만 리턴하고 컨트롤러에서 UI에 맞게 변환만 해서 반환하는 것도 나쁘지 않다고 생각했는데요. 혹시 어떤 방법이 실무에서 자주 쓰이는지 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
강제초기화 후, hibernate5Module 미주입시 오류에 대해
@SpringBootApplication public class JpashopApplication { public static void main(String[] args) { SpringApplication.run(JpashopApplication.class, args); } //@Bean // Hibernate5Module hibernate5Module() { // Hibernate5Module hibernate5Module = new Hibernate5Module(); // return hibernate5Module; // } }hibernate5Module을 의존성 추가하지 않고강제초기화를 해보았는데 오류가 나더라구요.강제 초기화를 했고 sql문은 나갔을텐데 오류가 나는게 의아하더라구요.@GetMapping("/api/v1/simple-orders") public List<Order> ordersV1() { List<Order> all = orderRepository.findAllByString(new OrderSearch()); for (Order order : all) { order.getMember().getName();//강제 초기화 order.getDelivery().getAddress(); } return all; }디버깅을 해보았는데Member와 Delivery의 sql이 나가고return에서 오류가 나더라구요.order->프록시->영속성컨택스트로 이어지고강제초기화를 해서 Member와 Delivery는 영속성 컨택스트에 담겼지만return에서 Order의 Member와 Delivery에는 프록시값이 가리키는 영속성컨택스트가 아닌, 프록시까지만 json으로 변환하기때문에 오류가 난다고 생각하는게 맞는 걸까요?그리고 그 프록시를 영속성컨택스트로 바꿔서 변환해주는게 hibernate5Module의 역할이라고 보면 될까요?
-
해결됨실전! 스프링 부트와 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를 제거하고 연관관계메소드를 정의하시는지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
OrderQueryRepository를 따로 만드는 이유
controller가 repository를 참조하게 되어서라고 하셨는데 ㅌ제가 배경지식이 없어 ㅠㅠ잘 이해가 가지 않습니다.. 조금더 구체적으로 설명 가능할까요?왜 controller가 repository를 참조하게 되는지 이해가 되지 않습니다.OrderQueryRepository를 따로 떼어내면 1번의 문제가 왜 해결되는지요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
fail() 예외를 try -catch로 잡아도 에러 발생
예외를 try -catch로 잡아도 에러 발생하는데이런 경우에는 어떻게 해야할까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
20분경에
컨트롤러에서 엔티티를 생성하지 않고update 서비스를 만들어서변경할 값만 dto를 만들던지, 파라미터를 전달하여 서비스에서update를 하셨는데saveItem을 사용하면 merge가 돼서save를 사용하지 않고 update를 만들어서 변경감지를 사용한다는것까진 이해가 됐는데요update를 만들때 왜 꼭 dto를 만들거나 변경할 파라미터만 넘기는건지는 잘 이해가 되지 않습니다.좀 더 명확하게 지정하여 유지보수성을 증가시키기 위함뿐인건가요? 그 외에 merge가 실행됐을때 같은 오류가 생기는건 아닌거죠??그렇게 웹사이트를 만들다보면 dto가 엄청 많이 만들어질거 같은데 그게 맞는건가요?저도 모르게 편의성을 위해 객체 자체를 넘길거 같아서 정확한 이유를 알기 위해 질문드립니다~
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
@Embeddable 클라스는 보통 마스터 테이블로 쓰이는건가요?
지속적인 추적이,,필요하지 않을땐 @Embeddable 쓰인다고 하는데 테이블의 대부분 데이터는 고정이고 가끔 한두개의 칼럼만 변경될떄 @Embeddable 쓰나요?
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
안녕하세요.. 이때까지 강의 듣다 고민이 있어 질문드려봅니다..
안녕하세요, 지금까지 jpa 강의를 들으면서 api 개발 고급 파트에 오니 나중에 뒤에 가면 갈수록 직접 api를 만들어 봐야, 언제 이걸 쓰는지 직접 상황을 맞닥뜨려봐야 진짜 공부가 되고 체득이 될것 같이 느껴집니다.제가 정확히 잘 몰라서 그런데 api를 실무에서 사용하는것이 다른 프론트나 어플 또는 다른 프로젝트(같은 프로젝트 안에서라도) 끼리 api를 통해서 데이터를 주고 받는 용도로 사용되는 것으로 알고있습니다.그런데 개인적으로 학습하고 만들어 보는데 있어서, api를 적극 활용할 수 있는 프로젝트나 다른 방법이 어떤게 있을지 궁금합니다. 답변자님은 api 학습을 어떻게 하셨는지.. 어떤 방법이 효과적이였는지 궁금합니다.또한 api를 현재 내보내는 방식을 강의에서 다루고 있는데, 다른 외부 api를 가져와 사용하는 방법에 대해서는 어떻게 사용하며 어떤 것을 학습해야 하는지 궁금합니다.조금 과한 질문일수도 있으나, 다소 막막해서 여쭤봅니다..항상 감사합니다.