목록전체 글 (63)
종우의 삶 (전체 공개)
들어가며.... 얼마전 구매한 테스트 관련 서적인 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..

Spring Security를 한동안 계속 알아보고 있다. 이번 포스트에서는 다시 한번 Spring Security의 로그인(JWT를 통한 인증, 인가) 과정을 살펴볼 것이다. Security 자체에서 숨겨진 채로 진행되는 것들이 많다보니 잘 알아차리기 힘들다. 하지만 이 과정을 어느정도 이해할 수 있어야 Spring Security 관련된 기능들을 자유롭게 사용이 가능할 것이다. 1. Spring Security의 인증 과정 우선 Spring Security Authentication (인증) 기본적인 설정은 아래와 같다. (출처 : https://docs.spring.io/spring-security/reference/servlet/architecture.html#servlet-architecture..