목록개발 (28)
종우의 삶 (전체 공개)

개요 서버를 어느정도 구현하였으니 다음 단계의 경험을 해보기 위해 웹 페이지를 만들어보기로 한다. 한번 사용해본적이 있는 Vue.js를 이용하여 도메인과 맞는 페이지들을 구현하려 한다. 회원가입 / 로그인 상품, 장바구니, 주문 도메인과 관련된 페이지(+@)가 되겠다. 처음엔 타임리프를 사용하여 간단하게 서버쪽에 함께 만들려했는데, 이게 더 복잡한 길이었다. 백엔드 서버와 프론트엔드 서버를 분리하여 두개의 프로젝트로 구성하기로 한다. 인텔리제이에서도 Vue프로젝트를 만들 수 있으므로 적당히 만들어준 다음 터미널에서 node와 vue, vue cli까지 설치하여 환경을 만든다. 서버 포트 번호를 다르게 하면 로컬에서 스프링 서버와 vue 서버를 동시에 운영할 수 있다. Vue는 어찌되었든 JS를 기반으로 ..
들어가며.... 얼마전 구매한 테스트 관련 서적인 Effective Software Testing을 읽어보며 필요한 내용들을 정리해본다. 책으로 프로그래밍을 공부하는 것은 무척 오랜만이다. 다양한 내용을 익혀보고, 내가 만든 프로젝트에 적용해 보는 과정을 거쳐보자. 체계적으로 정리하는 것은 시간이 무척 걸리겠으나, 인상깊은 내용이나 기억하고자 하는 내용들을 적어보는 공간으로 만들어보자. 새롭게 안 사실 속성 기반 테스트 다양한 추정을 테스트 할 수 있다. 예를 들어 [ 바나나 , 3개 ] [ 사과 , 5개 ] 같은 형식의 과일 - 갯수 정보가필요한 테스트를 진행할 때 사용한다. [무작위 과일 이름, 무작위 갯수] 를 코딩하여 랜덤으로 생성하고 임의의 객체를 생성하게 되는 것이다. 다양한 상황을 체크할 수..

작년 9월 경에 진행했던 팀 프로젝트에 대한 리팩토링을 진행한다.https://github.com/PetCommunityWebVersion : Java 17, Spring boot 3.1.2 PetCommunityWebPetCommunityWeb has 2 repositories available. Follow their code on GitHub.github.com 게시판 CRUD 말고는 내가 만들지 않은 부분이 많기 때문에 우선 프로젝트를 천천히 살펴보고 기능을 파악해야겠다. DB가 초기화 되었기 때문에 Mysql - root 계정으로 DB를 연결하여 다시 실행시키는 것에 성공하였다. 지난 프로젝트에서는 상관이 없었는데 이 프로젝트에서는 MySql의 유저 비밀번호를 영어 대소문자, 숫자, ..
지난 포스트에서 진행하지 못한 Order 도메인의 Service 코드를 분석해본다. 다른 도메인과는 다르게 Order에는 다양한 도메인과 연관되어 있는 것이 많았다. 단순히 Service 코드 내에서 리팩토링을 진행하면 되는 줄 알았는데, 찾아보니 DDD, 도메인 주도 설계 (Domain-Driven Design)방식 이라는 것이 있었다. 트랜잭션 스크립트라는 말도 이번에 처음 알게 되었는데, 비즈니스 로직이 서비스 레이어에 집중되어있는 형태라 알게모르게 현재까지 이러한 방식으로 설계를 해왔던 것 같다. 사실 다른 방법은 알지도 못했다. 막연히 다양한 메서드들은 Service에서 관리하고, 다양한 의존성주입으로 다른 레이어에서 사용되는 것만 알고 있었을뿐. 애초에 이러한 방식도 제대로 능란하게 사용을 하..

1. Controller 레이어에서 참고하는 Authentication 객체의 사용 vs SecurityUti과 같은 공통 메서드를 사용하는 방법 @GetMapping("/my-cart") public ResponseEntity getCartItems(Authentication authentication) { Long customerId = securityUtil.getCurrentCustomerId(authentication); CartDto cartDto = cartService.getCartItems(customerId); String message = MessageUtil.getMessage(CartApiMessage.CART_LIST_SUCCESS); return ApiResponseUtil.s..

마켓 프로젝트의 마지막 도메인인 장바구니 (Cart) 와 주문 (Order)를 만들어 주었다. 이러한 기능들을 만드는 입장에서 고려해야 할 것들이 생각보다 많았다. 물론 이것은 개인의 생각이므로 실제 커다란 서비스에는 엄청나게 많은 요구사항들이 있을 것이다. 혼자서 여러 도메인을 개발하다 보니 다양한 고려들을 해야했다. 아무튼 무엇이 필요했는지 살펴보자. 1. 장바구니 기능 우선 남아있는 개발 사항이 단순 CRUD 부분이라, 크게 어려운 부분은 없었다. 뭔가 면밀하게 무엇이 필요한지 체크해본다. 1. 장바구니는 장바구니 객체 자체와 장바구니 내의 '상품'(장바구니 내의 상품)이 있어야 한다. -> 2개의 엔티티 Cart, CartItem을 만들어준다. 2. 회원가입 시 회원 개개인의 장바구니가 함께 생성..

마켓 프로젝트에서 이제 남은 것은 장바구니와 주문 관련된 내용이다. 진행하기에 앞서 필요한 코드 리팩토링과 수정사항을 처리하였다. 지난 포스트에 적었던 JWT 검증이 두번 일어나는 것과 관련하여 무엇이 문제인지 살펴보았는데 아무래도 다양한 곳에서 예외와 에러들을 처리하는데 중복이 되거나 산만한 코드가 있는 듯 했다. 정리를 진행하고, 적당한 메시지들을 넣으니 중복처리되는 부분도 사라지고 클라이언트에게도 깔끔한 오류메시지를 전달할 수 있게 되었다. 우선 지난번에 만든 Product 관련 컨트롤러에서 이러한 부분이 있다. // 단일 상품 조회 @GetMapping("/{id}") public ResponseEntity getProduct(@PathVariable Long id) { try { ProductD..

지난 포스트에서 결과적으로 인증을 통과하고, SecurityContextHolder에 Authentication 객체가 저장되고, LoginSuccessHandler를 통해 JWT 가 생성되어 어플리케이션 내에서 사용 가능한 상태가 되었다. 이제 JWT를 가지고 회원 관련 기능을 사용해보자. 우선 추후 개발항 상품 구매, 주문 기능 이전에 나의 정보를 표시하는 기능을 하나 만들어본다. 이번에는 테스트코드가 아닌 실제 Spring 서버를 돌려 API 테스트를 진행한다. CustomerService에 이러한 메서드를 하나 생성한다. public CustomerDto getCustomerName() { return CustomerDto.from( SecurityUtil.getCurrentCustomerName..