project17 [Delivery] Redis에 session 저장하기 Delivery 프로젝트는 대용량 트래픽을 대비해 Scale-out 환경으로 구축했습니다. Scale-out 환경엔 session 로그인 구현 시 아래 그림과 같은 문제가 생길 수 있는데 로그인을 했음에도 세션이 저장되어 있지 않은 서버가 요청을 받는다면 다시 로그인을 해야 하는 문제입니다. 저는 session storage 방식으로 해결했습니다. 세션을 관리하는 Redis 서버를 별도로 두어 어느 애플리케이션 서버에 요청이 들어와도 로그인은 한 번만 하면 됩니다. UserLoginService @Service @AllArgsConstructor public class UserLoginService { private final HttpSession httpSession; private final User.. 2021. 12. 31. [Delivery] 반복되는 로직을 AOP로 분리하기 Delivery 프로젝트에 주문 관련 로직을 담당하는 OrderService 클래스가 있습니다. OrderService에서 제공하는 대표적인 메서드는 사용자에 따라 아래의 내용처럼 기능을 제공합니다. User (소비자) - 주문 요청 Owner (식당 주인) - 주문 받기 - 주문 거절 Rider (배달원) - 주문 배달 받기 - 주문 배달 완료 각각의 메서드는 Order Entity의 상태 값을 변경시켜줍니다. ORDER_REQUEST, ORDER_APPROVAL, IN_DELIVERY, DELIVERY_COMPLETE, ORDER_CANCEL, ORDER_REFUSED 저는 실시간으로 상태 값을 보여주고 또한 알림의 목적으로 Firestore를 도입하기로 했습니다. 아래 코드는 Firestore에 O.. 2021. 12. 31. [Delivery] 프로젝트 구조 Delivery 프로젝트는 대용량 서비스를 대비한 구조로 만들어 보려고 노력을 했다. 하지만 웹 개발자를 위한 대규모 서비스를 지탱하는 기술이란 책을 최근에 읽어보면서 Delivery 구조는 부족함이 많았다. 그래도 일단 지금까지 구성한 내용을 설명하고 부족한 것 같은 부분도 써보겠다. ▶Application Server Spring boot + tomcat 환경으로 scale out 방식으로 분산처리가 가능하도록 했다. ▶Nginx 웹서버로 로드밸런싱을 위해 도입했다. 아파치도 고려를 해보았으나 아파치는 요청마다 자식 프로세스를 생성함으로 리소스를 많이 먹는다. Nginx는 싱글 스레드로 event driven 방식으로 저렴한 비용으로 비동기 작업을 수행한다. ▶Jenkins Jenkins로 CI/CD.. 2021. 12. 28. javax.net.ssl.SSLException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty ubuntu환경인 서버에 spring boot 프로젝트를 배포하고 실행하는 작업에서 아래와 같은 에러가 발생했다. javax.net.ssl.SSLException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty 구글링을 통해 원인을 찾아보니 ubuntu에 open-jdk를 설치를 하면 $JAVA_HOME/lib/security 경로에 cacerts 파일이 없기 때문이란 것을 알게 되었다. 정확한 해결책을 못 찾았지만 나의 로컬에 있는 cacerts 파일을 ubuntu 서버에 그대로 복사하여 해결은 하였다. cacerts이 무엇인지 왜 필요한지 알아봐야.. 2021. 12. 23. Tennis Together 6주차 프로젝트 마감일이 다가온다. 내가 맡은 기능은 거의 다 구현이 되었지만 실제 서버에서 동작하는데 여러 버그들이 있는 것 같다. 이를 수정하는데 시간을 보낼 것 같다. 지금까지 API 문서는 Notion으로 관리했었는데 튜터님께서 Swagger를 적용해보라고 제안해주셨다. 스웨거(Swagger)는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크이다. 대부분의 사용자들은 스웨거 UI 도구를 통해 스웨거를 식별하며 스웨거 툴 셋에는 자동화된 문서화, 코드 생성, 테스트 케이스 생성 지원이 포함된다. 위키백과를 인용했는데 쉽게 말해 Swagger란 API를 관리하는 오픈소스 프레임워크라고 보면 되겠다. Spring bo.. 2021. 11. 21. Tennis Together 5주차 Tennis Together 프로젝트를 시작한 지 벌써 5주 차가 되었다. 조금씩 기능이 추가되고 있다만 아직도 해야 할 일이 산더미다. 지금은 현재 각자 맡은 기능을 개발하는데 시간을 많이 보내고 있다. 테스트 코드의 필요성 지금까지 작업해온 로직들이 간단하기도 하고 6주 기간 동안 할 일들을 완수할 수 있을지 모르는 걱정도 있기에 테스트 코드에 시간을 투자하기에 좀 꺼리게 되었었다. 기껏해야 Post Man으로 나름 성공 테스트와 실패 테스트를 거치는 정도..? 문제는 코드들이 조금씩 많아지고, 복잡해지는 가운데 기존의 코드를 리팩터링 하는 과정이 필요했다. 리팩터링 자체는 어렵진 않았지만 작동이 잘 되는지 검증을 해야 하는데 테스트 코드가 없다 보니 Post man으로 지금까지 해왔던 테스트를 해야.. 2021. 11. 14. 이전 1 2 3 다음 728x90