월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Postman 기술 질문입니다,(스프링 시큐리티)
안녕하세요 강사님강의 감사하게 잘 듣고 있습니다.다름이 아니라 제가 연습 중인 프로젝트에 Spring-Security, Auditing, Envers를 적용해 보고 있습니다.당연히 데이터를 등록, 수정, 삭제 시 DB에 현재 로그인 중인 사용자 정보가 담기게 되는데 postman에서 그냥 테스트를 하게 되면 오류가 나더라고요,1) 이러한 부분을 해결하기 위해 postman에서 따로 설정을 해줄 수 있는 부분이 있는지도 궁금합니다.(이와 비슷한 관련 강의가 있는지도 궁금합니다!)2) 강의 내용을 보면 DTO 클래스를 ApiController에 작성하셨는데 실무에서는 domain 패키지에 따로 따로 생성해주나요? (그렇게 되면 Create, Update, Delete 너무 많아지는 것 같아서요)
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
JPA 프로그래밍 13장 웹 애플리케이션과 영속성 관리
ORM 표준 JPA 프로그래밍 강의를 먼저 보고 이 강의를 듣고 있습니다. OSIV에 관해 더 깊이 알고 싶으면 13장 웹 애플리케이션과 영속성 관리를 봐라고 하시는데 자바 ORM 표준 JPA 프로그래밍 - 기본편 여기 어떤 강의에 있는건가요 이강의를 결제해서 미리 봤는데도 어딨는지 잘 모르겠습니다.
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Dto 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요 DTO 관련해서 질문이 있습니다. Entity를 Controller에서 사용하면 안되어 값을 받을 때 DTO로 받고 이를 Entity로 다시 변환 후 서비스로 값을 넘기더라구요.우리가 저장을 한다고 할 때, 넘어오는 값이 id, pw, name, email, address 등등 해서 많은 값이 넘어오면 이를 DB에 저장을 해줘야 하잖아요. 그러면 DTO를 Entity와 똑같은 필드를 가진 객체로 만들어 사용하는 건가요?그리고 회원가입도 간편가입, 홈페이지 가입 등 반환되는 값이 다르다고 하셨는데 이런 경우는 하나의 DTO에 모든 필드들을 다 집어넣고 로직마다 필요한 값을 빼서 쓰는 게 나은지 아니면 각각의 로직별로 DTO를 다 만드는 게 나은지 알고 싶습니다. 감사합니다2 질문 ex홈페이지 가입 필요 필드(name, age, date)간편가입 (id, pw)이럴 때 하나의 DTO에 5개 필드를 모두 넣은 DTO를 사용하는게 좋은지, 아니면 홈페이지용, 간편용 DTO를 두개 만드는게 나은지에 대한 질문입니다
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
OSIV 질문
osiv를 끄면 지연로딩을 모두 트랜젝션 안에서 처리해야한다고 배웠습니다.그 말은 즉슨 osiv를 키면 지연로딩은 트렌젝션안에서 처리 안해도 된다라는 말입니다.osiv를 키면 컨트롤러에서는 @Transactional이 없다라는 가정하에findById로 엔티티를 조회하면 그 엔티티는 준영속 상태입니다.osiv가 켜있는 상태(전 범위에서 영속성 컨텍스트가 생존되어 잇는 상태)의 준 영속상태에서는 트렌젝션이 없어도 프록시의 초기화가 일어난다는 말씀입니다.저는 지연로딩일시에 영속성 컨텍스트에서 조회해서 없으면 프록시를 넣어주고초기화가 되면 jpql이 실행이 되면서 실제 엔티티를 넣어준다고 배웠습니다.[질문]그러면 jpql은 영속성 컨텍스트만 생존이 된 상태라면 트렌젝션이 없어도 실행이 되는건지 궁금하고 이유가 궁금합니다.
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Dto안에 변환로직
저희가 배운 order클래스안에 필드는 저렇습니다.그리고 수업 시간에 배운 orderDto의 필드는 저렇습니다.수업시간에 배운 dto안에는 order안에 있는 필드중 필요한 부분만 그대로 가져왔습니다.그래서 변환하는 로직도 order에 필드를 그대로 넣습니다.하지만 저런식으로 날짜를 바꿔서 dto를 만든다던가이렇게 order에는 없지만 order와 관련된 필드를 추가하는 것이 괜찮은 가요??(대신에 order필드를 이용하여 orderDto에 필드값을 넣습니다.)(참고로 이건 진짜 임의로 예를 들기 위해 추가한겁니다.) [결론]OrderDto에 필드에 order테이블의 필드값을 그대로 넣는 것이 아니라 바꿔도 되나요??(예를 들면 시간 포멧을 바꾼다.)OrderDto안에 order에는 없는 필드지만 관련된 필드를 생성해도 되나요??(대신에 order안의 필드값을 이용합니다.)
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
PutMapping 405 error 관련 질문드립니다
[POST]로 객체 생성까지는 완료 되었습니다그런데, update api 요청을 하지 405 에러가 발생합니다(이유가 무엇일까요? ㅜㅜ){ "timestamp": "2022-10-20T16:10:13.182+00:00", "status": 405, "error": "Method Not Allowed", "trace": "org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported\n\tat org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:253)\n\tat org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:442)\n\tat org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:383)\n\tat org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:125)\n\tat org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:67)\n\tat org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:498)\n\tat org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1265)\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1047)\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964)\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789)\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n\tat org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n\tat org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n\tat java.base/java.lang.Thread.run(Thread.java:833)\n", "message": "Request method 'POST' not supported", "path": "/api/v2/members/1" } MemberService @Transactional public void update(Long id, String name) { Member member = memberRepository.findOne(id); member.setName(name); } MemberApiController @PutMapping("/api/v2/members/{id}") public UpdateMemberResponse updateMemberV2(@PathVariable("id") Long id, @RequestBody @Valid UpdateMemberRequest request) { memberService.update(id, request.getName()); Member findMember = memberService.findOne(id); return new UpdateMemberResponse(findMember.getId(), findMember.getName()); } @Data @AllArgsConstructor static class UpdateMemberRequest { private String name; } @Data @AllArgsConstructor class UpdateMemberResponse { private Long id; private String name; } 에러 화면
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
EAGER와 LAZY 질문
JPA를 사용할때 path에서 EAGER을 사용하는 경우는 거의 없나요?
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
ddl-auto : none 문의 입니다.
application.yml에서 ddl-auto : none으로 하였는데 스프링 재시작했을 경우 DB가 Drop되어 초기화 됩니다. .. 어떻게 해야하나요?
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
포스트맨 실행시 trace 부분을 변경할 수 있나요??
안녕하세요. 11:21 분쯤 보면 trace 부분을 볼 수 있는데,설정으로 단순한정보만 나올 수 있도록 변경이 가능한가요?
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
다대다 관계와 관련해서
안녕하세요 강의 수강 후 게시판을 만들다가 궁금한 점이 생겨 질문을 남깁니다. 게시글과 해시태그를 M:N 관계로 등록하면서 강사님이 category-item을 설명하시면서 하신 것처럼 ManyToMany로 등록을 했습니다.게시글을 작성하면서 해시태그를 작성하고 싶은데 service단에서 어떻게 작성해야 하는지 궁금합니다. (연관관계의 주인은 게시글입니다.) 현재 등록하려는 해시태그가 해시태그 테이블에 없으면 해시태그 테이블에 해당 해시태그를 저장하고, article 테이블에서도 hashtag를 등록해주었습니다. (article Entity에서 addHashtag 메서드를 만들어서)이 경우 db 조회시 중개테이블에도 값이 잘 들어가있는데 postman으로 조회시 해시태그의 article이 빈 리스트로 나옵니다. 어떻게 해야 하나요??
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
PostMapping시에 Dto -> Entity에 관해
안녕하세요.강의에서는 entity를 dto로 전환하는 것을 controller에서 진행하고 있는데 service 계층이 있다면 https://www.inflearn.com/questions/139564 을 참고하여 진행하라고 하셨습니다. 그러면 service 계층에서 변환이 일어난다고 가정할 때, PostMapping으로 controller에 들어온 Dto를 service 계층으로 그대로 넘겨주는 것이 약간 의아합니다.service 계층에도 dto가 들어오면 controller에서도, service에서도 dto에 접근이 가능하니 (같은 동작을 하여 한 곳에서 모든 것을 수행할 수 있음)controller와 service의 역할이 애매해지는 것 같습니다. @PostMapping public ResponseEntity saveItem(@RequestBody ItemSaveDto dto) { itemService.save(dto); // 이 한 줄만 사용하는 것이 불편합니다. }단순히 controller는 api 통신을 위한 레이어라고 생각해야 할까요?RestController는 웹에서 전달받은 dto를 그저 service에 전달하는 역할인가요?(service에서 Dto -> Entity로 전환한다면 controller에서는 어떤 작업을 수행하는지 잘 모르겠습니다.)
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
연관관계의 주인
갑자기 연관관계의 주인 개념이 너무 헷갈립니다.양방향 연관관계에서 "연관관계의 주인을 지정해라"라고 하면,주인이 아닌 쪽에 mappedby 를 작성했을 때'연관관계의 주인이 정해졌다.' 라고 보는 건가요?
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
프로젝트에 대해서
항상 영한님 강의를 들으며 공부하는 학생입니다. 좋은 강의를 제공해주셔서 감사합니다. 질문이 하나 있습니다. 강의와 관련된 질문은 아닙니다. 공부를 하다가 문득 저도 작은 프로젝트를 하나 만들어 보고 싶다는 생각을 하게 되었습니다. 그래서 영한님의 로드맵을 어디까지 수강하고 프로젝트를 시작하면 좋을지 기본은 알고 프로젝트를 진행해야 한다고 생각하는데 어디까지가 기본인지 감이 안잡힙니다. 그래서 혹시나 어디까지 강의를 들었다면 부족해도 프로젝트를 진행해도 되는지와 처음 연습 프로젝트는 어떤걸 만들어 보는것이 좋은지 알려주셨으면 좋겠습니다. 감사합니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@GetMapping("/api/v1/members") 부분이 이해가가지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. 다름이 아니라@GetMapping("/api/v1/members") public List<Member> membersV1() { return memberService.findMembers(); } 관련 포스트맨으로 저도 강사님처럼 테스트하려고 하니오류가 발생햇습니다.HttpMessageNotWritableException에러가 발생했고 강사님이랑 코드는 똑같은데 왜 오류가 나는지 모르겟습니다. 제가 추측하기로는 멤버의 전체를 가져오는데 xtoMany 전략이 기본 fetch가lazy를 사용하기 때문에 멤버를 조회 할 때 오더에내용은 가져오지 않앗고 JSON 으로 넘기는 과정에서member가 가지고 있는 orders 에 값을 가져오지 못하여 나는 오류인거같은데 맞는지 궁금합니다. 실제로 @OneToMany(mappedBy = "member", fetch = FetchType.EAGER) private List<Order> orders = new ArrayList<>();이렇게 Member 엔티티의 페치방식을 수정해주니까 오류없이 강사님과 같은 화면을 출력 할 수 있었습니다. 근데 이상하게 해당 fetch 속성을 변경하지 않고public List<Member> findAll() { return em.createQuery("select m from Member as m join fetch m.orders", Member.class) .getResultList(); } JPQL 을 이런식으로 변경했더니 또 아무것도 못가져오는 상태가 되었습니다. 저는 위에 fetch 속성을 변경하거나해당 jpql 로 저렇게 가져오는게 동일하다고 생각햇습니다.. 그리고 추가적으로 강산님은 Member 엔티티 order에 fetch 속성을 변경하지도 않으셧는데 아무런 오류 없이 잘 가져와지는것이 이해가 가지 않습니다. 왜 강사님은 페치전략 변경없이 잘 가져와 지는데저는 페치전략을 변경해야 강사님처럼 가져와지는걸까요??
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Dto의 위치2
강사님이 커뮤니티게시판에 dto관련 위치에 대해 쓰신 글을 공부했습니다. 결론적으로는 dto를 사용하는 위치에 두는 것이 맞다라고 이해를 했습니다.그런데 이번 강의 rest api를 구현하시면서 dto를 컨트롤러에 내부클래스에 두었습니다.이번 강의에서 사용하는 dto는 화면에 의존적이기때문에 저도 컨트롤러에 두는 것이 맞다고 생각합니다.여기서 질문입니다. 여기서 강사님께서 엔티티 조회방식으로 우선 접근을 하라고 권장하셨습니다.그런데 강의대로 한다면 컨트롤러에 dto관련 내부 클래스가 너무 많아질텐데그럴 경우에는 controller에 따로 dto페키지를 만드는 것이 좋은 선택인지 궁금합니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Dto의 위치
엔티티를 조회해서 dto로 변환할 시에 강사님은 controller에 내부 클래스 방식을 이용하셨습니다. 그 이유가 어차피 dto가 화면에 의존적이기 때문에 controller에 내부클래스 방식으로 하신건지아니면원래는 따로 dto페키지를 만들어서 사용하는 게 맞으나 수업을 위해서 그러신건지 궁금합니다.결론적으로는 dto의 위치를 어떻게 가져가는 것이 맞는 지 궁금합니다.controller의 내부 클래스dto페키지생성repository그 외4가지 중 어디에 두어야 할 지 궁금합니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@Data의 역할
왜 Dto에 @Data가 빠지면이런 오류가 나는 지 궁금합니다.강의에서는 getter가 없어서 오류가 났다고 배웠습니다.property가 없다고 오류가 난다고 배웠는데 왜 getter가 있어야 하는 지 궁금합니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
api에 대해서
api라는 개념에 대해서 햇갈려서 질문을 남깁니다. 이 컨트롤러를 여기서는 회원수정api라고 하고postman에 json으로 작성한 것을 api스펙이라고 하는 건가요??
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
V1
강사님 코드에서는 orderRepository.findAllByString();으로하시는데 pdf파일에는 findAll(); 되어있습니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
8분10초쯤
jpql짤때 OrderQueryDto파라미터로 d.address 이렇게 주면jpa가 알아서 임베디드 타입의 필드를 뒤져서 반환해주는건가요?