API9 결제 API 리팩토링 - [2] (feat. WebClient) https://sweeeetgoguma.tistory.com/entry/%EA%B2%B0%EC%A0%9C-API-%EB%A6%AC%ED%8C%A9%ED%86%A0%EB%A7%81-1-feat-%EC%A0%84%EB%9E%B5-%ED%8C%A8%ED%84%B 결제 API 리팩토링 - [1] (feat. 전략 패턴) 결제 API를 리팩토링 시작하며 외부 API를 연동 부분에 대해서 생각해봤다. 기존에도 카카오페이를 이용했었고, 지금도 카카오페이를 이용할 것이지만, 추가적으로 다른 결제 API를 연동할 수 있 sweeeetgoguma.tistory.com 지난 포스팅에 이어서 작성하겠습니다~ 실제 결제 API를 호출하기 위해서는 httpClient 기반의 모듈이 필요하다. 기존에는 동기방식, 멀티스레드를 이용.. 2022. 9. 22. 결제 API 리팩토링 - [1] (feat. 전략 패턴) 결제 API를 리팩토링 시작하며 외부 API를 연동 부분에 대해서 생각해봤다. 기존에도 카카오페이를 이용했었고, 지금도 카카오페이를 이용할 것이지만, 추가적으로 다른 결제 API를 연동할 수 있을 만한 상황을 생각해봤다. 스프링을 처음 공부하기 시작할 때 읽었던 책인 개구리 (스프링 입문을 위한 뭐시기..) 책에서 스프링에서 사용하는 다양한 디자인 패턴들을 알게 되었다. 그 때는 디자인 패턴이란 것에 대해 감이 잘 오지 않았는데, 직접 적용할 기회와 상황이 없었기 때문이라고 생각해본다. 계속 면접 질문 대비해 앵무새처럼 달달 외우고 다니던 도중 직접 적용할 기회가 딱 생겼고, 객체지향 개발 2원칙인 OCP에 찰떡일 것이라는 머리 속의 외침이 울렸다. 그대로 적용해보았다. 기존 플로우 컨트롤러 서비스(카카.. 2022. 9. 20. 「파일 업로드/다운로드 및 테스트」 이번 주에 Sonarqube를 공부하고 적용하기 전 전체적인 코드를 다시 검토 중이었다. 빼놓은 필수적인 기능이 있다는 것을 알게 되었다. 상품 테이블에는 이미지 파일 이름 칼럼이 존재하는데 이를 깜박했던 것이다. 파일 업로드, 다운로드 기능을 급하게 적용하게 되었고, 이 과정을 기록으로 작성하겠다. 파일 업로드 파일을 등록하는데 필요한 타입으로 스프링에서는 MultipartFile 인터페이스를 제공한다. 이를 통해 파일 업로드 및 다운로드를 쉽게 구현할 수 있다. 파일 업로드를 이용하는 내 API는 상품 추가와 수정이다. 먼저 파일 업로드할 위치를 내부 경로와 외부 경로중 고민을 했다. 저번 프로젝트 때는 프로젝트 내부로 지정했지만, 이렇게 하게 되면 배포 시 이미지 경로를 못 찾을 수 있다고 한다. .. 2022. 7. 1. 「테스트 코드 & Spring REST Docs」 개인 프로젝트는 완성이 되었다. 이제는 세부적인 디테일에 신경을 쓰며 리팩터링과 그에 필요한 개념 정리를 하며 프로젝트에 적용시키고 있다. REST API를 처음 설계해 보았는데, 부족한 점이 많았지만 신선한 경험이고 짧은 기간 내에 배운 것이 많은 설계 과정이었다. API를 설계하면 그에 맞는 명세가 필요한데, 보통 Swagger나 Spring REST Docs 프레임워크를 이용한다고 한다. Swagger를 사용하면 애노테이션을 이용해 편하게 문서를 작성할 순 있지만, 프로젝트의 확실성과 정확성을 뒷받침하기 위해서는 테스트 코드 작성이 필수라고 생각하기 때문에 Spring REST Docs를 이용하기로 생각하며 적용해보았다. 테스트 코드 크게 단위 테스트와 통합 테스트가 있다. 통합 테스트 단위 테스트.. 2022. 6. 20. 2022.06.01 「결제 API - Ver.2」 지난번 포스팅에 이어 작성하겠다! https://sweeeetgoguma.tistory.com/entry/20220529-%E3%80%8C%EA%B2%B0%EC%A0%9C-API%E3%80%8D 2022.05.29 「결제 API」 장바구니 crud 작업한 것을 수정 및 테스트를 이번 주에 끝내고 나서, 뒤늦게 결제 API를 설계하기 시작했다. 카카오 페이 API를 사용해서 해보려고 하는데, 생각만큼 쉽지 않았다. 어디서 본 건데 sweeeetgoguma.tistory.com 카카오페이 Rest API를 이용해 결제 준비에 필요한 객체를 설계하는 것까지 완료했다. 카카오 페이 프로세스에 따라 준비와 결제 및 승인을 위한 통신 객체를 생성해야 한다. 이 과정 속에서 수많은 삽질이 있었다. 사실 삽질이라기보다.. 2022. 6. 1. 2022.05.28 「쿠키 수정」 장바구니 API를 처음 구현해보는 쿠키로 힘들게 짰었다. 오늘 주문 API를 구현하려고 카카오페이 관련 API 탐색 및 구상을 하던 도중 장바구니 데이터를 가지고 결제하는 경우를 떠올렸다. 다시 한번 장바구니 API 동작이 잘 되는지 포스트맨으로 확인을 하던 도중 이상한 쿠키 에러가 발생하는 것을 발견할 수 있었다.. 다시 한번 점검을 통해 코드 수정을 하며 단번에 완벽한 코드를 작성한다는 자만심 느꼈던 자신에 반성을 하게 되었다..ㅎㅎ 문제점 장바구니 상품 추가가 되질 않는다 쿠키가 다중으로 생성된다 => 이 두 가지 문제가 제일 컸다 기존 코드 장바구니 쿠키를 수정하여 response 객체에 삽입한다. 문제 새로운 쿠키가 같은 Key를 가진 객체가 생성되어 저장된다. => 내가 원한 건 기존 쿠키를 .. 2022. 5. 28. 데이터 분산 처리 [Micro Service Architecture] 프로젝트를 진행 중이다. 프로젝트의 규모가 커질 수록 계층 간 DTO 객체를 이용하는 일이 많아졌다. 불변 객체를 적절히 설계해야 할 필요를 느끼며 최대한 클래스 설계를 잘했다. 리뷰를 받던 중 MAS 아키텍쳐에 대해 알게 되었다. 데이터 정합성 관련 문제가 생길 수 있지만 한번 개념에 대해 정리해보고 수정을 해볼 생각이다. 보편적인 아키텍처 모놀리식 아키텍쳐 (Monolithic Architecture) 우리가 많이 보아온 형태이다! 소프트웨어의 모든 구성 요소가 하나로 통합되어 있는 형태 주로 소규모 프로젝트에서 사용한다. 규모가 커질 경우 한계가 드러남 장점 단순한 아키텍처로 개발이 쉽다 복잡하지 않고, 배포가 간단하다 확장성이 쉽다 고가용성 서버를 쉽게 구현할 수 있다 단점 Scale out이 어.. 2022. 5. 27. 2022.05.24 「코드 리팩토링 Ver.2」 주마다 리팩터링 및 기능 추가하는 브랜치를 따 설계하며 프로젝트를 진행 중이다. 이런 식으로 주마다 리팩터링을 하니까 확실히 코드가 깔끔해지는 걸 느낀다. 오늘 아침부터 진행한 코드 리팩토링은 유지보수성을 따지는 것은 물론이거니와 어려운 듯하면서도 새로운 개념을 도입해서 진행하니 나름 보람찼던 리팩터링이었다. 직면했던 문제들을 나열하며 정리를 한번 해보겠다. 인증 & 인가 책임 분리 나는 인증, 인가를 인터셉터로 구현했다. 인증은 토큰 검증, 인가는 에너테이션 및 토큰 검증으로 구현했다. 기존 코드 : 인터셉터의 preHandle 메서드 안에 두 개의 로직이 동시에 들어있다. 토큰 검증 + 에너테이션 검증 => 책임이 많다 -> 유지보수가 어렵다. 해결 : 인터셉터를 나누어 분리했다. @Override .. 2022. 5. 24. 2022.05.08 「RestFul한 api? & ResponseEntity의 사용」 어김 없이 스프링 프로젝트를 진행중이다. 일주일 전 View를 없애고 좀 더 Back에 집중된 api를 설계하는 것으로 초점을 맞췄다. handler 메서드의 반환 값을 단순히 json 형식으로 보여주면 되는 거 아니냐? 라고 생각을 했지만 검색을 여러번 해보니 정말 확실하게 알기 전까지는 함부로 생각하지 말자라는 결론을 내렸다.. 어렴풋이 배웠던 rest api가 떠올랐고 제대로 공부를 하고 이용을 해서 restful한 api를 만들어야겠다는 생각에 개념정리를 결심하게 되었다. 또 반환 타입으로 ResponseEntity의 사용이 많은데 이 타입을 왜 사용하는지도 한번 알아봐야겠다. Rest가 정확히 뭘까?? Representational State Transfer -> 자원을 이름으로 구분하여 해당 .. 2022. 5. 8. 이전 1 다음 반응형