안녕하세요~ 강의 듣던 중 궁금증이 생겨 질문 남깁니다 useReducer로 CREATE 상태 로직을 분리할 때, 기존과 다르게 newItem을 reducer에서 생성하는 이유가 무엇인가요? 아래처럼 기존과 동일한 방식으로 newItem을 onCreate 내에서 생성했을 경우에도 정상 동작하는 것 같은데 혹시 동작이나 성능면에서 차이점이 있나요? +) 계속 생각할수록 로직을 분리할 때 어디서부터 어디까지 분리해야할지 기준을 잘 모르겠어요,,ㅠ 강의에서 CREATE로직 분리 시 newItem을 reducer에서 생성한 것 처럼, INIT로직 분리 시에도 initData를 reducer에서 생성 할 수 있을 것 같은데(아래 코드).. 분리하는 로직의 기준점? 같은걸 어떻게 잡아야할지 잘 모르겠습니다ㅜㅜ 혹시 어떤 기준으로 분리해야할지 규칙이나 팁같은게 있을까요?
안녕하세요 강사님! 최적화3 - useCallback 강의 듣던 중 의문점이 생겨 질문 남깁니다. onCreate에 useCallback을 사용하고 의존성 배열을 빈 값으로 두면 mount시에 한번만 실행되기 때문에 data state가 초기값인 빈 배열인 상태이다 <= 까지는 이해하였습니다. 그런데 함수형 업데이트를 이용해서 인자로 data를 전달하면 최신 data state를 반영할 수 있다는 부분이 잘 이해가 안갑니다. onCreate가 mount시에 생성되고 생성시의 data state가 계속 유지된다면 인자로 전달되는 data state또한 초기값인 빈 배열이 들어가게되어 결국 setData(([]) => [ newItem, [] ]) 처럼 동작해야 하는것이 아닌가요? 어떻게 인자로 전달되는 data에는 최신 상태가 반영되는건가요??
안녕하세요, 영한님! 강의 정말 잘 듣고 있습니다! 강의 중 궁금한 부분이 생겨 질문 드립니다. `@EntityGraph(attributePaths={"team"}) ` attributePaths 속성에 들어가는 이름이 연관 관계가 걸려있는 필드의 이름이 들어가는 건가요?
강의를 들으면서 코드를 다 따라 쳐보고, 적당히 필기하면서 듣고... 그러고 있는데 강의를 다 들으면 해당 내용들에 대해 어떻게 공부를 해야하나요?? 강의 전체 한바퀴를 다 돌린 후에 어떻게 공부를 해야하는지 궁금합니다 안보고 직접 만들기에는 제가 너무 실력이 딸리는데.... 추천하시는 공부법이 있을까요???
안녕하세요. 강의 열심히 듣는 중에 궁금한 점이 있습니다. 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 아! 제 프로젝트 구글 링크 드립니다!ㅎㅎ 항상 양질의 강의 감사합니다!
TypeError: user.comparePassword is not a function >>비주얼에서는 이런식으로 자꾸 오류가 뜨고, 포스트맨에서는 Could not get response Error: read ECONNRESET 이렇게 뜹니다,,!!! post는 http://localhost:5000/api/users/login 이던 http://localhost:5000/login이던 다 안돼요,,, 답변 부탁드립니다ㅠㅠㅠㅠㅠㅠ
@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의 역할이라고 보면 될까요?
안녕하세요 인텔리제이에서 실행시에는 오류 없이 잘 작동하는데 cmd창에서 gradlew build 입력후 빌드 진행하면 아래와 같은 에러가 뜹니다 자바 버전 관련 에러인 것 같아서 설정도 모두 바꿔보고 아예 스프링 프로젝트도 삭제해서 java11로 다시 만들어도 동일한 오류로 빌드가 안되고 있습니다 아래는 인텔리제이 설정입니다. 자바 버전입니다 프로젝트 dir입니다 스프링 프로젝트 다시 만들어도 안돼서 idea 파일 지우고 다시 재실행해보았는데도 안되네요.. 인텔리제이에서는 잘 실행되지만 cmd빌드시에만 해당 오류가 뜨는게 답답해서 문의글 올려봅니다 감사합니다
안녕하세요. 먼저 알차고 좋은 강의 만들어 주셔서 감사하단 말씀을 드리고 싶습니다 ㅎㅎ 강의를 보다보니 서비스 로직에서 saveAndFlush 를 해주고 있는데 @Transactional 어노테이션이 있어서 디비에 반영이 잘 될거 같은데 saveAndFlush 를 해주는 이유가 따로 있을까요? 그리고 저는 보통 save 를 사용했는데 saveAndFlush 를 사용하는 다른 특별한 이유가 있는지 궁금합니다.
솔직히 현업 들어가면 노트북으로 개발하는 거 아닌 이상 다 윈도우로 개발 할 건데.. ㅠ 회사에서 맥지원해주지 않는 한엔.. 윈도우는 경로를 어떻게 들어가야 하는 건가요..? 맥에선 ll쓰고 뭐쓰면 되는데.. 윈도우는 따로 뭘 해야 하는 건가요? 강의가 너무 맥 위주라서 막히지 않아도 될 곳에서 막히는 것 같습니다.. 혹시 앞으로 다른 결제해서 보는 것들도 다 맥 위주인가요..? 단축키도 그렇고.. 사용법도 그렇고.. 보통은 윈도우 개발 환경에서 배우지 않나 싶습니다.. 해외사람이면 몰라도요.. 강의를 위해서 제가 맥을 구비해야 하는 걸까요-_-;; 아니면 윈도우 설명이라도 좀 해주셔야 하는 거 아닌지.. 이럴때마다 죄송한 말이지만 너무 스트레스 받습니다 ㅜㅜ 그래도 강의는 너무 재미있게 잘 보고 있습니다 ㅠ 기분 상하셨다면 죄송합니다.
안녕하세요 좋은강의 감사합니다. 제가 잘못한건지, array.plus (300) 후 foreach 를 활용해 프린트를하여도 300이라는 값은 안나오더라구요.. plus 확장함수를 살펴보니 새로운 객체를 copy 하여 return 해주던데, 새로운 객체로 return 받아서 활용해야하지 않나요? 예를 들어 val newArray = array.plus (300) 이런식으로요 제가 잘못 생각한 것인지..ㅜㅜ 별거아닌거 같긴한데 확인가능하실까요 ㅎ