목록전체 글 (261)
당니의 개발자 스토리
강좌 소개JPA 기본편 강의에 오신 여러분을 환영합니다.제 이름은 김영한이고 Java ORM 표준 JPA 프로그래밍 책의 저자입니다.저는 현재 우아한 형제들에서 개발 팀장으로 일하고 있습니다.먼저 JPA가 뭔지 간단하게 소개를 해드리겠습니다.과거에는 객체를 데이터베이스에 저장을 하려면, 이렇게 복잡한 JDBC API와 SQL을 한 땀 한 땀 직접 작성해야 했습니다.조회할 때도 마찬가지고요.그런데 JdbcTemplate이나 MyBatis 같은 SQL mapper가 등장해서 보시는 것처럼 개발 코드는 많이 줄었지만, 아직도 SQL은 개발자가 한 땀 한 땀 직접 다 작성을 해야됩니다.자 그러다가 이제 JPA가 나오죠. JPA를 사용하면 SQL 조차도 작성할 필요가 없습니다.지금 보면 단순하게 객체를 저장하고 ..
주문 목록 검색, 취소자 여러분 이번 시간에는 주문 목록과 그리고 취소 기능을 한번 만들어 보겠습니다.먼저, 상품 주문으로 들어가셔서 데이터 하나 만들어 가지고 Submit 하면,지금은 없거든요. 이거는 재고 부족으로 안되는 거긴 한데,아무튼 이번 시간에는 마지막 주문 내역을 한번 만들어 보겠습니다.주문 내역은 OrderController에서 하면 됩니다.@GetMapping을 하시고 전에 만들어 놨던 OrderSearch를 쓸 거예요. 폼에서 넘어오는 데이터들, 그러니까 상품 리스트를 검색하는 조건들이 여기에 다 담겨서 넘어올 거구요.OrderSearch를 보시면, 얘가 이제 회원 이름과 주문 상태로 검색을 할 수 있는 기능입니다.그런 다음 Model, 화면을 그려야 되니까 Model을 넘기고그 다음에..
상품 주문이번 시간에는 상품 주문을 한번 만들어 보겠습니다.상품 주문을 만들고 주문 내역까지 하면 완성이 되겠네요.자 상품 주문은 제가 /order 라는 페이지로 가도록 해놨는데요.OrderController부터 만들어 보면 되겠죠.여기까지 자동적으로 어노테이션을 적어주고, OrderController는 예전에 완성된 화면을 보셨던 분들은 기억하겠지만, 고객이랑 Item을 다 선택을 할 수 있어야 되거든요. 그래서 좀 dependency가 많이 필요합니다.이렇게 dependency하는 애들을 적어주면 됩니다. 고객이랑 상품이랑 다 선택을 해야 되니까요.자 이제 createForm을 만들고 코딩하면 되겠죠. 이렇게 반환까지 해줬습니다.그러니까 상품 주문을 클릭하면 orderForm이 렌더링된 화면을 보는 ..
변경 감지와 병합(merge)자 이번 시간에는 변경감지와 병합에 대해서 설명을 해드리겠습니다.정말 너무 중요한 내용이거든요. 여러분 JPA를 쓰시면 변경감지와 병합의 차이를 모르면 정말 많은 시간을 그냥 날리실 수가 있어요. 이 두 개는 진짜 100% 이해를 하셔야 됩니다.우선 말씀드리기 전에 준영속 엔티티라는 것에 대해서 이해를 해야 되는데요. 이게 뭐냐면, 일단 엔티티가 영속상태로 관리가 돼요. 그러면 엔티티에 있는 값만 바꾸면 JPA가 트랜잭션 해서 commit 시점에 변경된 내용을 알아가지고 DB에 반영해 주는 거 아시죠?이렇듯 트랜잭션은 로직을 수행하고 모든 로직이 성공적으로 수행되었을 경우에는 모든 결과를 DB에 일괄적으로 commit 하고, 하나라도 실패한다면 모든 작업을 원상 복구(roll..
상품 수정자 이번 시간은 상품 수정입니다. 이게 엄청 중요합니다. 상품등록이나 조회는 되게 간단했는데, 사실 수정이 좀 복잡해요. 그리고 이거를 또 JPA에서 어떤 방법으로 수정하는 게 옳을까, 또 변경 감지랑 병합(merge)이란 두 가지 방법이 있단 말이에요. 둘 중에 뭘 쓰는게 좀 더 정석적인 방법이지 등등을 좀 디테일하게 설명을 드릴 거에요.그래서 이번 시간은 진짜 집중을 해서 들으셔야 됩니다.이거를 제가 jpa 하시는 분들 많이 보면 데이터 수정하는 거를 jpa가 하라는 guide 대로 하는 게 아니라, 본인의 관성에 의해서 merge(병합)를 쓴다고 하는데요. 사실 jpa에서 guide 해주는 거는 변경 감지를 쓰라는 게 이제 베스트 practice 거든요.자 그거와 관련해서 이제 쭉 엮어서 ..
상품 목록이번 시간에는 빠르게 이 상품목록을 조회하는 기능을 만들어 보겠습니다.상품목록을 들어가시면,items로 가게 해놨구요. 이전과 똑같이 @GetMapping 하면 되겠죠.이렇게 하면 됩니다. 그리고 이제 화면을 찍어야겠죠.itemList.html 있어야 되겠죠. 그리고 복붙하겠습니다.자 그러면 여기 items에다가 루프 돌리면서 쭉 나오겠죠.여기서 id, name, price, stockQuantity가 다 넘어가게 되어 있습니다.자 그래서 model에 담은 items를 가져다가 html 화면에다 쭉 뿌리는 거죠.그런 다음 다시 서버를 띄우면,이제 상품 목록이 잘 나옵니다. 일단 상품을 등록해야겠죠.이렇게 적고 Submit 누르면,items로 리다이렉트 돼서 상품목록을 볼 수 있습니다.리다이렉트(..
상품 등록자 이번 시간에는 상품 등록을 한번 해보겠습니다.상품 기능에 있는 상품 등록에 딱 들어가면,items/new 뭔가 이전에 했던거랑 비슷하죠. 이제 Member가 아니라 Item 인 거예요. 그럼 이제 화면에 넘기기 위한 BookForm을 만들어야 되는 거죠.앞에서 말씀드린 것처럼 상품은 딱 책만 할 거에요.자 @Getter, @Setter 딱 만들어 놓고 상품 폼에다가는 일단 id를 받을 거에요. 왜냐? 상품 수정이 있거든요. 그래서 id 값이 있어야 돼요.그 다음에 name, price, stockQantity 넣고 저자랑 isbn까지 넣어줄게요.여기까지는 상품의 공통속성이고,여기는 책과 관련된 특별한 속성이죠. 이게 BookForm 입니다. 이제 Form 만들었으니까 컨트롤러를 만들어야 되겠..
회원 목록 조회이번 시간에는 회원 목록을 이제 가입된 데이터를 조회를 해야 되겠죠.목록 조회를 해보겠습니다.자 여기 보면 members 라고 나오죠. 그럼 이제 /members를 만들어야 되겠죠.list의 model 이라는 객체를 통해서 화면에 데이터를 전달하게 됩니다.자 그리고 엄청 간단하게 memberService.findMembers 메서드를 사용해서 데이터를 다 끌어옵니다.그 다음에 model.addAttribute 해가지고 그대로 딱 넣어주면 돼요. "members"가 key고, members가 value 입니다. 이렇게 하면 List가 꺼내지겠죠.그 다음에 return을 할 건데 "members/memberList"로 return 하겠습니다.그래서 templates에 있는 members에 me..