안녕하세요 선생님! 매번 좋은 강의 잘 듣고 있습니다 ㅎㅎ 강의에 매료되어 남은 강의 모두 구매해버렸어요!! 덕분에 너무 재미있게 학습하고 있습니다 ^^ 회원 수정 부분에 동일이름 회원 중복 검출이 안 되는 것 같아 다음 내용을 추가하면 되는 것인 지 궁금합니다. MemberService.java /** * 회원 수정 */ @Transactional public void update(Long id, String name) { Member member = memberRepository.findOne(id); validateDuplicateMember(member); // 추가한 부분 member.setName(name); } 좋은 강의 만들어 주셔서 감사합니다.
안녕하세요! 스프링 부트와 JPA 실무 완전 정복 로드맵 강의를 완강한 학생입니다. 배운 내용을 바탕으로 토이 프로젝트를 시작하려고 하는데, 개발 경험이 없어서 어떻게 시작해야 할 지 감이 안잡히네요 ㅠㅠ 조언을 구하고 싶어서 질문을 드립니다... 프로젝트 목적은 취업 포트폴리오로 활용하는 것입니다. 1. 클론 코딩 vs 직접 만들기 1) 클론코딩을 하면 어떻게 설계하고 어떤 것들을 구현해야 할 지 쉽게 파악할 수 있을 것 같아서 좋은 것 같은데, 한편으로는 이미 누군가가 구현한 것을 따라한 수준 밖에 안될 것 같아서 취업 포트폴리오로 활용할 수 있을까 걱정이 되네요... 2) 반면에 직접 만들어보면 학습, 설계 ,구현 등 모든 것을 "스스로" 했다는 것을 어필할 수 있을 것 같지만, 퀄리티가 많이 떨어질 것 같아서 고민입니다 2. 프론트 부분 처리 (API vs thymeleaf로 화면 출력) 1) API로 구현하면 아무래도 화면 처리에 대한 부담이 줄어들어서 백엔드 구현에 더 집중할 수 있을 것 같습니다. 하지만 취업 포트폴리오 목적으로 하는 것이니 만큼 화면까지 엮어서 구현을 해야 좀 더 있어보일 것 같은데, API만 구현하면 좀 부족해보이지 않을까 하는 걱정이 됩니다. 2) thymeleaf를 이용해서 html, css까지 엮어서 화면 출력을 하면 API와는 반대로 좀 더 있어보이는 포트폴리오를 만들 수 있겠지만, 백엔드 부분의 완성도가 떨어지지 않을까 하는 걱정이 됩니다. 아니면 html 무료 템플릿에 thymeleaf만 적용해서 만들어도 괜찮을까요? 물론 정해진 답은 없겠지만, 각각의 선택지에 대해서 어떠한 장단점이 있는지, 어떠한 점들을 고려해야 하는지 알고 싶습니다. 개발 경험이 없어서 무엇을 여쭤봐야 할 지도 모르겠네요 ㅎㅎ.. 강의를 들으면서 정말 많은 것들을 배웠습니다! 항상 친절하고 자세한 설명 감사합니다^^
주문하기 service입니다. 여기보시면 itemId로 하나의 아이템을 조회해서 ---> OrderItem에 파라미터로 item을 등록하지 않습니까? 궁금한 점이 있는데 만약 하나의 아이템이 아니라, 여러가지 아이템을 한번에 주문하고 싶다면 위 코드를 어떻게 바꿔야 할까요? Order의 createOrder은 파라미터를 (OrderItem... orderitem)으로 여러가지 아이템들이 올 수 있도록 만들어놨는데, 여러가지 아이템을 등록하기 위해서는 OrderItem의 createOrderItem을 어떻게 바꿔야 하는지 궁금합니다.
안녕하세요 김영한님. 강의를 듣다가, 문득 모바일의 경우에는 flow가 어떻게 되는지 궁금해져서 질문남깁니다. 인터넷에서 통신은 결국 IP와 Port번호를 알아야 data를 전송할 수 있는 것으로 이해하고 있습니다. 그런데, 모바일은 IP가 계속 바뀌고 Port번호를 따로 설정하지 않아도 카톡 메시지를 서버로 부터 수신할 수 있습니다. 검색을 통해, FCM이나 APNs과 같은 Push 서버를 이용해서 보낸다는 개념은 이해하였습니다만, 이 Push 서버들이 어떻게 바뀌는 모바일의 IP를 알아내는 건지, port 포워딩?은 어떻게 해결하는지 궁금합니다. 바쁘시겠지만, 답변남겨주시면 정말 감사하겠습니다.
안녕하세요 김영한님. Persistent Connection 질문입니다. 제가 간단한 웹 프로젝트를 운영하고 있는데, 자동으로 Persistent Connection가 적용된 것처럼 보입니다. 원래 따로 설정을 해주어야 적용이 되는 건지, g유니콘이나 그런 앱에서 알아서 처리를 해주는 건지, HTTP 자체적으로 기본설정이 되어 있는 건지, 궁금합니다!
안녕하세요. 좋은 강의를 보고 패킷모아 보내기를 테스트 해보고 있습니다. 강의와 같이 ServerSession을 500개 만들어서 테스트를 해보면 500개 까지 Connect가 안되고 400좀 넘어서 끝나버리는데(실행할때마다 달라요) 이게 피씨 사양과도 관련이 있나요? 아님 다른 이유가 있을까요? (선생님 파일을 받아서 실행해봐도 비슷해서요)
클라에서 서버로 요청 할 경우, 1. header에 cache-control의 max-age의 시간은 이미 만료 2. last modified date의 시점이 아직 변경되지 않은 시점일 때 서버에서 클라이언트로 보내주는 header 정보에 cache meta 데이터는 어떤 식으로 갱신이 되는건가요?
안녕하세요 강의 듣고 따라해보고 있는 학생으로서 IDE에 대해 간단한 질문인데요..! 강의 중간에 보면 인텔리제이 하단에 초록색으로 어떤 단축키를 통해서 무엇을 할 수 있다고 뜨는 것 같은데 제 인텔리제이에서는 그게 안뜨더라구요. 혹시 어떻게 나올 수 있게할 수 있는지 여쭤봐도 될까요...? 강의 잘 듣고 있습니다!
항상 좋은 수업 감사합니다! JPA와는 관계가 먼 질문일 수도 있는데요.. order_item 테이블의 역할이 무엇인지 이해가 잘안됩니다ㅜ order 테이블과 item 테이블 간 N:M 관계를 풀기위해 생성된 테이블인건 알겠는데요, order_item 테이블 안에 다른 속성들(orderPrice, count) 등을 추가해서 사용하는 이유나 이렇게 해야하는 기준을 알 수 있을까요?? order_item 테이블 내 orderPrice(주문가격), count(주문수량) 속성들을 order 테이블에 넣어줘도 되는거 아닌가요? 이 질문을 드린 이유가, 개인 프로젝트를 위해 멘토님 수업을 바탕으로 삼아 테이블 설계를 하면서 장바구니 기능을 추가하려고 있습니다. (아직 개발 초기라 위의 설계도을 검증하지 못했지만,) 추가할 속성을 '장바구니' 테이블 과 '장바구니_상품' 테이블 중 어디에 넣어줘야 괜찮은 설계가 될지 고민이 생기면서 경험많으신 멘토님의 의견을 감히 여쭤보게 되었습니다ㅜ
선생님, 설명하기에 앞서 제가 생각하는 부분이 잘못 된 곳이 있다면, 정정 부탁드립니다... 제가 알기로는 테이블을 조인 할때 무슨 조건으로 조인할지를 정하는 on 절 은 필수인 것으로 알고 있습니다. 예를 들어 아래와 같은 sql 은 join 에 대한 on 절이 없기 때문에 에러가 발생한다고 생각합니다.(실제로도 테스트 해보니 에러가 발생하였습니다.) 그렇지만, 아래에 코드처럼 연관관계로 조인을 하면, 에러가 발생하지 않습니다. 실제 데이터 베이스 쿼리를 확인해 보니, on 절 자동으로 추가가 되더군요. jpa 에서는 연관관계로 조인 을 하면 자동으로 외래키 와 매칭되는 테이블의 pk 를 찾아서 on 절 을 설정해주는 것 같은데 제 생각이 맞나요.?
안녕하세요. 두 가지 질문이 있어 이렇게 질문을 적어봅니다. 1. inner class를 왜 static으로 선언하나요? private으로 하면 물론 코드가 돌아가는 방식은 다르지만, 잘 돌아가더라구요. 혹시 실무에 적용한다면 어떤 문제점이 있나요? (다음 강의에서는 아무 것도 붙이지 않은 상태로 작성하신 것을 보니, 별로 임팩트 있는 부분은 아닌가보군요 ^^;) 2. 이건 간단한 질문인데, updateMemberV2 메서드에서 merberService.update 후, id로 update를 날렸음에도 id를 다시 찾아오시더라구요. id로 Member를 찾고 그로부터 getId를 다시 하는 이유가 있을까요? (수강자료에서 updateMemberV2 메서드 부분에 fineOne이라고 오타 있습니다.!) 항상 좋은 강의 감사드립니다.
안녕하세요. 김영한 강사님! 기본편부터 이번 챕터까지 덕분에 잘 배우고 있습니다! 제가 배웠던 내용을 되짚어 보면 프록시 객체가 초기화 되는 시점이 영속성 컨텍스트가 관리하는 중에 해당 프록시의 id를 제외한 다른 속성들을 호출하면 되는 것으로 이해하고 있는데요. 아니면 초기화 메소드를 사용하던가. 여기서 의문이 orderService를 통해 조회해서 받아온 List<Order> orders는 프록시 객체를 담은채로 반환이 되는 걸로 추측이 되는데. model.addAttribute()로 orders를 담은 후 "orders/orderList" 페이지를 렌더링 하는 과정 중에 <table class="table table-striped"> <thead> <tr> <th>#</th> <th>회원명</th> <th>대표상품 이름</th> <th>대표상품 주문가격</th> <th>대표상품 주문수량</th> <th>상태</th> <th>일시</th> <th></th> </tr> </thead> <tbody> <tr th:each="item : ${orders}"> <td th:text="${item.id}"></td> <td th:text="${item.member.username}"></td> <td th:text="${item.orderItems[0].item.name}"></td> <td th:text="${item.orderItems[0].orderPrice}"></td> <td th:text="${item.orderItems[0].count}"></td> <td th:text="${item.status}"></td> <td th:text="${item.orderDate}"></td> <td><a th:if="${item.status.name() == 'ORDER'}" href="#" th:href="'javascript:cancel('+${item.id}+')'" class="btn btn-danger">CANCEL</a></td> </tr> </tbody> </table> item.member.username에서 member를 lazy 로딩하고 item.orderItems[0].item.name에서 orderItem과 item을 lazy 로딩을 하는 것을 확인할 수 있었습니다. 저는 이번 과정을 통해서 @Transactional 어노테이션이 붙은 Service 로직 내에서만 영속성 컨텍스트가 엔티티를 관리해준다고 나름대로 이해를 했었는데, Service 영역을 벗어난 곳에서도 영속성 컨텍스트가 지연 로딩을 하는 것을 보니 조금 당혹스럽더라구요! 그래서 핵심 질문은 프록시 객체들이 @Transactional이 붙은 Service 로직 내를 벗어났는데 왜 lazy 로딩이 신기하게도 잘 발생하는지?가 궁금합니다 ㅎㅎ! 추가) 같은 member, 같은 item을 가진 order를 2개 조회해봤는데요! 1차 캐시에 의해 lazy 로딩이 첫번째 table 목록을 구성하는데만 발생하고 두번째 목록을 구성할 때는 member와 item 엔티티를 받는데에 select 쿼리를 새로 DB에 안 날리고 영속성 컨텍스트의 1차 캐시에 등록된 엔티티를 반환 받는 것도 확인이 되네요.
좋은강의 감사드립니다 :) 만약 IDENTITY 와 SEQUENCE 둘 다 사용할 수 있는DB라면 성능적인 측면에서 SEQUENCE 전략을 사용하는게 네트워크를 덜 타니, 좋을 것 같은데 맞을까요? 그리고, IDENTITY를 사용하는 DB가 있는만큼(mysql - auto_increment 등 ) 분명히 장점도 존재할거 같은데 IDENTITY가 SEQUENCE 에 비해 가지는 장점은 무엇이 있을지 궁금합니다!