안녕하십니까 강사님! 활용1편을 정독하고 jpa기본을 다지기위해 공부중인 학생입니다! 항상 좋은강의 해주셔서 정말 감사합니다 강사님 덕분에 공부하는게 즐겁습니다ㅎㅎ 임베디드 타입과 @MappedSuperclass중에 뭘써야할지 저도 궁금했었는데 다른분이 똑같은 질문을 올려서 그걸 보고 다른 궁금한점들이 있어서 여쭤보려합니다. 1. @MappedSuperclass는 공통적으로 많은 클래스에 공통항목을 적용할때 써야하고 임베디드 타입은 타입별로 사용될 메서드들이 나뉘어져야 할때 사용하면 되는건가요?! 어느 경우에 어떤걸 쓸지 머리속에 딱 정리가 되었으면 하는데 두 경우가 많이 헷갈리는것 같습니다ㅜ 2. 또한 자바에서는 다중 상속이 안되는데 MappedSuperclass로 상속을 써버리는게 괜찮은건지 궁금합니다! 3. 활용1편에서 Address 설계를 임베디드로 하셨는데 MappedSuperclass를 안쓰신 이유가 궁금합니다! 4. 다른 답변의 댓글에서 결국에는 임베디드와 @MappedSuperclass는 상속과 위임의 차이밖에 없다고 하셨습니다! 그리고 JPQL 쿼리 때문에 상속을 선택하신다고 하셨는데 그러면 앞으로 메서드가 타입별로 나뉘어져야 할때 빼고 다 @MappedSuperclass만 써도 되는건지 궁급합니다! 막 궁금한걸 치다보니까 질문이 4개나 되었습니다ㅜ 혹시 질문이 많아서 답변하기에 불편하시다면 죄송합니다..
안녕하세요 강사님, 강의 내용대로 진행을 했을 때 ide에선 정상적으로 화면이 출력되나! 빌드를 해서 실행하면 templates path를 못찾는다는 에러가 발생합니다ㅠㅠ Gradle clean build 도 해봤는데 동일하네요 어떻게 해결할 수 있을까요? 아래는 나오는 오류입니다. cannot find template location: file:src/main/resources/templates/ (please add some templates or check your thymeleaf configuration)
안녕하세요. 강의내용듣다가 궁금한 점이 생겨 질문드립니다^^ 예를들어, JPA의 DDL 자동생성 기능을 이용하지않고 flyway 같은 데이터베이스 migration 관리 툴로 스키마를 관리하는 상황에서, name컬럼이 unique 제약조건이 걸려있을때 실무에서는 해당 필드의 어노테이션으로 unique true나 길이제한 같은 제약을 보통 명시해주나요? 아니면 DDL 자동생성을 이용하지 않는상황에서는 딱히 명시해주지 않는 경우가 많나요?
강사님 안녕하세요! 상품 등록하는 부분에도 유효성 검사를 추가 해봤는데요. Neither BindingResult nor plain target object for bean name 오류가 나서 검색해보니 @ModelAttribute를 붙이면 된다고 해서 해결했습니다. 근데 회원등록 시에는 @ModelAttribute를 사용하지 않았어서 비교해봤더니, 모델객체에 담을 때 클래스명이랑 똑같이 설정하면 정상 동작하더라구요. 오류는 해결했는데 @ModelAttribute를 붙여야될 때도 있고 안 붙여도 될 때도 있고,,, 왜 이렇게 동작하는지 궁금합니다..ㅎㅎ 그리고 여기서 @ModelAttribute가 무슨 역할을 해주는지도 궁금합니다. model.addAttribute("form", new BookForm()); @Valid BookForm form => 오류남 model.addAttribute("form", new BookForm()); @ModelAttribute("form") @Valid BookForm form => 정상 동작 model.addAttribute("form", new BookForm()); @ModelAttribute @Valid BookForm form => 오류남 model.addAttribute("bookForm", new BookForm()); @Valid BookForm form => 정상 동작
안녕하세요. 어제 라이브 재밌었습니다.신세경.. 미국엔 잘 돌아가셨는지 궁금하네요..ㅎㅎ 다름이 아니고, 강의를 보고 개인 프로젝트를 진행하려고 하는데 패키지 구조를 도메인형으로 해야할지, 계층형으로 해야 할지에서 부터 고민이 되어 질문드립니다. 기선님 강의에서는 도메인으로 나뉘었고, 펫클리닉 프로젝트도 찾아보니 도메인으로 나눠놓았더라구요 제가 본 여타 다른 강의들에서는 컨트롤러/서비스/레포지토리/exception/ 등등으로 나눠놓은 걸 보아 어떤 것이 정답이다 라는 것은 없는것 같기도하고.. 해서 블로그 글을 참고해서 보니 https://cheese10yun.github.io/spring-guide-directory/ 도메인이 더 낫다는 글을 보았습니다. 기선님 강의들에서는 더 나은 패키지구조 선택에 관해서 언급하셨던 기억이 없어서 질문드려요! 너무 좋은 강의 만들어주셔서 감사합니다. 많은 도움이 되고 있어요 :)
`윈도우라서 맥의 iTerm이 없는데 어떡하나!?` `Windows 환경에서 Terminal 사용 시, 리눅스 명령어 사용해볼 수 없나?` 고민하시는 분들 아래 링크를 참고하시면, 리눅스 명령어 사용하며 공부하실 기회가 생길 것 같아서 올려봅니다. 인텔리J의 기본 터미널을 cmd가 아닌, Git Bash로 연동하는 방법입니다. ( Git Bash 내에선 *nix계열의 OS에서 쓸 수 있는 명령어인 ssh, scp, cat, find 등을 쓸 수 있습니다.) 수업 중에 강사님이 사용하시던 ls -arlth 도 한번 써보세요! ( - arlth는 모든 파일, 폴더를 시간 역순으로 출력) IntelliJ IDEA와 Git Bash 연동하기 양질의 강의 무료로 제공해주신 김영한 개발자님께 정말 감사드립니다! [ 2020-09-09 추가 ] Git Bash 터미널로 H2 Database 실행 시, ClassNotFoundException: org.h2.tools.Console 에러 해결 방법 ( For Windows User) 1) ./h2.sh 명령어 실행 시, 아래와 같은 에러 메세지가 발생하며 웹 콘솔이 뜨지 않음 Error: Could not find or load base class org.h2.tools.Console. Cause: java.lang.ClassNotFoundException: org.h2.tools.Console 2. 해결 방법 h2.sh 파일을 vim 또는 메모장으로 연 뒤, 경로 구분자를 콜론( : )에서 세미콜론( ; ) 로 변경 합니다. 이후 ./h2.sh 를 재실행 하면 정상적으로 작동합니다.
안녕하세요! JPA에 대해 원리를 이해하며 열심히 수강하고 있습니다. 프로젝트를 진행할 때 영한님 실전예제처럼 UML이나 ERD를 그린 후에 개발을 시작하려고 합니다. 여러가지 툴을 찾아봤는데 마음에 확 드는 툴이 없었습니다 ㅜ draw.io와 같은 툴도 사용해봤는데 설계 단계에서 수정이 많이 일어날 때 이걸 매번 직접 반영하는게 에너지가 많이 소요되더라구요. 영한님은 어떤 툴을 사용하시는 지 궁금합니다! 감사합니다.
dto는 Controller Layer에서 dto->Entity로 치환하여 Service레이어로 넘기는편이 맞을까요? Service Layer에서 dto->Entity로 치환하는것이 맞을까요? 제 개인적인 생각으로는 다양한 경로에서 모일 수 있는 request dto들을 전부 다 Service레이어에서 처리하는 것 보단 Controller단에서 치환하여 서비스는 엔티티로 비즈니스로직을 처리하는게 맞다고 생각하는데 영한님의 고견 부탁드리겠습니다.
안녕하세요! 쉽고 재밌는 강의 만들어주셔서 감사합니다! OrderService 서비스의 public Long order() 메서드 관련해서 질문드리고자 합니다. 강의해주신 대로는 order() 함수에서는 여러 orderItem을 넣을 수 있는 것으로 설계가 되어 있습니다. 그래서 order 객체를 생성할 때 orderItem 여러 개를 파라미터로 받을 수 있도록 OrderItem... orderItems로 설정해주셨습니다. 그런데 public Long order() 함수에서는 파라미터가 하나의 itemId 및 count만을 받아서 order() 함수 내에서 order 객체를 생성할 때 하나의 orderItem만 추가 가능하다고 생각했습니다. 이 경우 아이템마다 외부에서 item마다 order() 함수를 호출하여 order객체의 필드인 orderItems에 orderItem을 추가하여야 하는 것인지 궁금합니다. 감사합니다!
6분21초 화면에서 List<Order> all = orderRepository.findAllByString( ...) return all ; 했을때 무한루프에 빠지는걸 보았습니다. 그런데 Hibernate5Module 을 등록안했기 때문에 Order랑 연관관계인 Member,Delivery 는 프록시객체라서 무한루프가 아닌 jackson 라이브러리가 프록시객체를 인식못하는 예외로 먼저 빠져야 된다고 생각했는데 무한루프 에러를 먼저 처리하네요. 현재 생각으로는 무한루프는 return all 하기전에 orderRepository.findAllByString( ...) 에서 오류가 나는거고 @jasonignore 로 처리하고Hibernate5Module 등록안하면 return all; 할때 jackson 라이브러리가 프록시객체라서 에러를 내서 그렇구나 하고 넘어갔었는데 제가 생각한게 맞는건가요 ??
안녕하세요. 6분11초 화면에 질문 있습니다. jpabook...OrderSimpleQueryDto() 에 인자로 o 를 바로 넘기면 엔티티의 식별자로 넘어가서 o를 바로 넣으면 안된다고 하셨는데 어떤 의미인지 이해가 잘 안되서 질문드립니다..ㅜ 제가 현재 이해하고 있는건 값을 가지고 있는 엔티티가 아닌 말 그대로 int,float 처럼 딸랑 Order 식별자만 넘어가서 값을 못 불러온다는 건가요? 제가 생각한게 맞다면 왜 그런지 알고싶은데 키워드나 공식문서에 어느부분을 봐야하는지 알려주실수 있을까요? 감사합니다.
안녕하세요 영한님, 항상 좋은 강의를 만들어 주셔서 감사합니다! 이번강의를 보다 의문점이 들었는데, 이전 강의에서 DTO 생성자 파라미터에 엔티티를 그대로 넣은 방식은 아무런 문제가 되지 않는다는 말씀을 들었던 기억이 있습니다. 이후의 확장성, 변동성을 생각했을때 이 방식이 정말 최고라고 생각 했었는데요, 같이 프로젝트를 진행하던 팀원이 DTO 생성자 파라미터에 엔티티 자체를 넣는 방식이 오히려 DTO를 들어가봐야 내부속성을 알기때문에 가독성이 떨어지지 않느냐는 얘기를 하였습니다. 서론이 길었네요, 프로젝션의 생성자 방식에서 생성자 파라미터에 엔티티 자체를 넣는것과 엔티티의 속성을 넣는것 중 어느 것이 실무에 더 잘쓰일까요..? 혹시몰라 코드 남김니다! @Test public void findDtoByConstructor (){ List<MemberDto> result = queryFactory .select(Projections. constructor (MemberDto. class, member . username , member . age )) .from( member ) .fetch() ; for (MemberDto memberDto : result) { System. out .println( "memberDto = " + memberDto) ; } } @Test public void findUserDtoByConstructor (){ List<UserDto> result = queryFactory .select(Projections. constructor (UserDto. class, member )) .from( member ) .fetch() ; for (UserDto userDto : result) { System. out .println( "memberDto = " + userDto) ; } }
안녕하세요~ 기본편부터 2편까지 계속 들어오고 있는 수강생입니다. 17:18 초 부터 member를 강제로 LAZY 로딩을 해버린다고 말씀하셨는데 의미가 모호해서 이해가 잘 안됩니다. "강제로 지연로딩을 하다"는 의미가 마치 멤버 객체를 강제로 나중에 가져오겠다는 의미처럼 들리는데 실제 결과를 보면 즉시로딩한거 처럼 나와서 말입니다. 제가 이해하기로는 LAZY 로딩 전략으로 가져온 프록시객체 멤버를 강제로 가져온거 같은데 "강제로 LAZY LOADING 하다" 의 의미를 좀더 구체적으로 말씀해주실수 있으신가요? 감사합니다.