프로젝트(12)
-
[쿠폰] Redis 기반 비동기 시스템 구현
이전 포스팅에서 이어지는 내용입니다. https://matt1235.tistory.com/73 Redis를 사용해 쿠폰 발급을 요청하는 로직을 비동기로 구현했습니다. 시스템 구조는 다음과 같습니다. 동작 방식 유저의 요청을 API 서버에서 받아서 처리하고, 쿠폰 발급 요청을 Redis 에 던집니다. 레디스에서 쿠폰 발급 요청을 처리할 때 Set에 쿠폰 발급 내역을 저장하고, List로 된 대기열 큐에 쿠폰을 집어넣습니다. 비동기적 방식으로 쿠폰 발급을 처리하며, 레디스를 통한 많은 트래픽 대응이 가능하도록 설계했습니다. Redis 에서 사용한 자료구조는 Set, List 입니다. 시나리오 1. 유저의 쿠폰 발급 요청이 들어온다. (coupon_id, user_id) 2. 발급 수량 조회 및 검증 지정된..
2024.04.21 -
[쿠폰] 트러블 슈팅 - 동시성 처리
대용량 트래픽이 발생했을때의 상황을 가정하여, 부하테스트를 진행하여 발생한 이슈와 트러블 슈팅에 대해 작성하고자 합니다. 서비스에서 중요한 부분은 트래픽이 단시간에 몰릴 때 오류가 없고 다운되지 않는 서버를 설계하는 것입니다.고객 입장에서 서버가 느려지거나 다운된다면 이탈율이 높아지기 때문이겠죠...! 저 같은 경우에도 앱이 먹통이 되거나 오류가 발생하는 일이 잦아지면 다른 대체 앱을 찾고는 합니다. 이것이 대용량 트래픽 경험이 중요한 이유 중 하나일 것입니다. 단기간에 대량의 트래픽이 몰리는 상황은 아래와 같은 경우들이 있습니다.뮤지컬 티켓팅대학교 수강신청배달어플 및 숙박 앱에서 선착순 할인 쿠폰 뿌리기배달 어플에서 선착순으로 할인 쿠폰을 발급받았던 경험을 떠올리면서..
2024.04.15 -
Docker, Github Actions 로 CI/CD 구축하기
본 포스팅에서는 Docker, Github Actions 을 통해 CI/CD를 구축한 과정을 적어보려 합니다. 프로젝트명 - PLAC(Planning-Your-Activities) https://github.com/PLAC-Planning-Your-Activities/plac-server 배포 자동화는 Github Action 을 사용했습니다. 깃허브 리포지토리에서 main 브랜치로 push를 받는 순간 Github Action으로 트리거되어 프로젝트가 정상인지 테스트한 후, 빌드하여 AWS 로 자동 배포하게 됩니다. 도커, Github Action을 사용한 이유 -> 편리하고 강력하다고 생각해서 깃허브 액션은 깃허브 자체에서 제공해주는 것으로 프로젝트 내의 deploy.yml 파일을 작성하는 것만으로 ..
2024.03.11 -
배포 스크립트 작성
본 포스팅에서는 프로젝트를 EC2에서 배포하고, 스크립트를 작성하는 과정을 적었습니다. CI/CD를 구현하기 전, 배포 스크립트를 짜본 것에 의의를 두려 합니다. CI/CD 구현 과정은 다음 포스팅에 담겨있습니다. EC2 서버 구성 과정을 자세히 살펴보겠습니다. 1. 톰캣 웹서버 설치하기 저희는 깃허브에서 Spring boot 프로젝트를 다운받아 실행할 것이기 때문에 톰캣이 내장되어 있습니다. 따라서 해당 부분은 건너뛰어도 무방합니다. apt-cache search tomcat sudo apt install tomcat8 tomcat8 패키지가 없다고 다른 패키지를 이용하라는 문구가 나옵니다. 기존의 ubuntu repository 저장소가 tomcat8을 들고 있지 않기 때문에 추가적으로 저장소를 추가..
2024.03.05 -
[JWT] Access Token 과 Refresh Token 저장 및 관리에 대한 고민
본 포스팅에서는 프로젝트에서 채택한 JWT 를 통한 토큰 교환 방식에 대한 생각을 적어보려고 합니다. 설명하기 앞서, 간단히 JWT에 대해 알아보겠습니다. JWT 란? header typ : JWT (토큰의 종류를 지정. 이 경우 JWT로 고정) alg : 암호화 알고리즘 payload 토큰에서 사용할 정보들의 조각인, Claim 이 담겨 있다. 클레임은 JSON(Key, Value)의 형태로, 다수의 정보를 넣을 수 있다. Signature (서명) 서명은 토큰의 유효성 검증을 할 때 사용되는 곳으로, 무결성을 보장한다. 헤더 + 페이로드를 BASE64로 인코딩 한 값을 지정된 비밀 키를 이용해 헤더에 적혀있는 alg 으로 암호화한다. 서명은 데이터를 암호화 하는 것은 아니고, 토큰의 데이터가 변조 ..
2024.02.02 -
Spring Security를 이용한 인증/인가
본 포스팅에서는 프로젝트에서 구현한 사용자 인증 및 인가 구현 과정을 살펴보고자 합니다. 이를 통해 회원가입, 로그인, 로그아웃 기능을 구현하였습니다. [프로젝트 URL] https://github.com/devridge-team-project/devridge-server/pull/15 로그인 기능 구현 (인증, 인가) by Jungsu-lilly · Pull Request #15 · devridge-team-project/devridge-server Description ✍️ Spring Security를 사용해 로그인 기능을 구현했습니다. 회원 가입, 회원 탈퇴, 로그인, 로그아웃 API를 개발했습니다. JWT(Json Web Token) 방식으로 엑세스, 리프레시 토큰을 발급합니다. Scr gith..
2024.02.01