Giter Site home page Giter Site logo

plub-server's Introduction

PLUB

취미 생활, 소모임 커뮤니티 활동을 위한 플랫폼🎳🎠🥽⚽
1

💡 Features

  • 소셜 로그인 (카카오, 구글, 애플)
  • 취미 생활, 소모임 생성, 모집, 관리
  • 모임 내 자유로운 커뮤니티인 게시판, 댓글
  • 모임 활동을 기록할 수 있는 아카이브
  • 모임 내 작은 챌린지를 할 수 있는 투두리스트
  • 모임 내 일정을 관리 할 수 있는 캘린더, 공지
  • 앱 활동 푸시 알림

⚒️ Tech Stack

  • Spring Boot (Java 17)
  • Spring Data JPA
  • Spring Security
  • PostgreSQL
  • QueryDSL
  • AWS EC2, RDS, S3, ElastiCache, CloudFront, CloudWatch
  • Github Actions
  • Docker
  • Firebase Cloud Messaging

ERD

_plub ERD ERDCloud

System Architecture

plub-infra

plub-server's People

Contributors

sectionr0 avatar mopil avatar rrrmina avatar dldmsql avatar

Stargazers

Choi Seung-eun avatar Sim-km avatar  avatar 우영두 avatar 이원석 avatar Wonjun You avatar DaeYeong Kim avatar  avatar 한규범 (Ryan) avatar  avatar  avatar

Forkers

rrrmina

plub-server's Issues

AWS EC2 의문사 오류

최초 식별 2022-11-28

알 수 없는 이유로 EC2 인스턴스 SSH 접속이 안되는 현상을 식별했습니다.
3
timeout 에러가 발생하고 상태 점검도 통과되지 않는 모습입니다.

일시적으로 EC2 인스턴스를 중지 -> 시작 (재부팅은 안 되더라고요...) 해서 해결했습니다.

원인은 모르겠으나, 혹시라도 이런 현상이 또 발생하면 EC2 인스턴스를 재부팅 해주십시오!

JWT 유효성 검증 오류

서명에 사용되는 키를 문자열 그대로 사용하는 방식은 deprecated 돼서
Key 객체를 사용하는 방식으로 리펙토링 하다가 SignatureException이 발생되는 걸 발견했습니다.

1

원인은 기존 문자열 서명 키를 삭제 안하고, 암호화 할 때랑 복호화 할 때 서로다른 키 (어느부분은 문자열 키로, 어느부분은 Key 객체로)로 진행해서 발생하는 오류였습니다.

현재 수정 완료하였습니다.

부하 테스트

서비스 런칭 전 꼭 부하 테스트를 진행하여 가용 트래픽 범위를 미리 인지하고 있는게 좋을 것 같습니다.
(이를 기반으로 EC2 인스턴스 스펙과 스케일링 전략도 설립하면 더 좋을 겁니다.)

테스트 방법

nGrinder 툴을 이용해서 부하 테스트를 진행하여 다음을 체크합니다.

  • 현재 EC2 인스턴스가 어디까지 트래픽이 수용 가능한지
  • CPU 사용량이 일정 수준 넘어가면 오토스케일링 플랜이 잘 수행되는지
  • DB 병목은 존재하는지 (JPA를 사용하였기 때문에 필수로 체크해야 합니다. 응답시간이 2초이상 걸리는 쿼리는 모두 개선하는게 좋을 것 같습니다. 보통 어플리케이션 레벨의 페이징 로직에서, N+1 문제 때문에 많이 저하가 발생하니 이 부분을 유심히 모니터링 하면 좋을 것 같습니다.)
  • 메모리 누수가 발생하진 않는지 (OOM)

레퍼런스

https://leezzangmin.tistory.com/42
https://thalals.tistory.com/288

Kotlin Converting

작업의 안정성과 레포 보존을 위해서 코틀린 컨버팅 레포는 해당 레포 외 별도의 레포를 생성하여 진행합니다.

  1. 공통 객체에 대한 컨버팅
  • 엔티티 부분과 공통 객체를 전반적으로 먼저 컨버팅을 진행합니다.
  1. 이후 각자 개발했던 부분을 컨버팅을 진행합니다.

  2. 컨버팅 후 테스트코드까지 작성합니다.

  3. 테스트 후 문제가 없으면 도메인별로 PR합니다.

Apple Sign Key 오류

  • 현재 배포된 서버에서 애플 로그인이 안되는 오류가 발생했습니다. 확인된 바로는 Apple Sign Key 정보가 없거나 또는 저장되지 않아서 생긴 문제입니다.

문제가 되는 부분은 AppleService에서 getPrivateKey 메서드에
String privateKey = new String(Files.readAllBytes(Paths.get(resource.getURI())));
해당 부분이 null로 들어와서 오류가 생기고 있습니다.

  • 다른 프로젝트 및 로컬 환경에서는 잘 작동합니다.

소셜 로그인 개선

현재 소셜 로그인 시 앱에서 AccessToken 을 받아서 사용자 정보를 받아오는 식으로 처리를 하고 있습니다
그러나 탈퇴 시 다시 한 번 AccessToken 이 필요하는 과정이 있으므로, 사용자가 필수적으로 로그인을 해야 되는 문제가 있습니다.
(유효시간 떄문에 만료가 됨)
따라서 서버에서 토큰 발행을 OAuth 서버로 요청할 예정입니다.
이후 서버에서 OAuth에서 준 AccessToken, RefreshToken을 저장할 계획입니다.

또한, 지금 탈퇴 시 디비가 삭제되지 않은 문제가 있습니다.(로직 추가)

  • 애플의 경우는 revoke 요청 시 token 값에 refreshToken을 넣어서 처리하면 될 것 같습니다.

AWS S3 이미지 업로드 로직 리펙토링

이미지 삭제 로직 변경

HTTP Delete 메소드는 body를 실어 넘기는 걸 권장하지 않는다는 걸 깜빡하고
AWS S3 이미지 삭제 로직을 이상하게 설계해버렸습니다!
빠른 시일 내로 수정하겠습니다 !

이미지 업로드 방식 변경

현재 S3 이미지 업로드 과정을 다음과 같습니다.
사용자가 사진 업로드 -> 서버는 temp 파일로 EC2에 임시 저장 -> S3 업로드 -> 임시 저장 파일 삭제

임시 저장을 할 때 동일한 이름으로 저장하는데, 이는 추후 동시 요청 시 문제를 야기할 수 있을 것 같습니다.

로그아웃 또는 재발행 시 AccessToken BlackList 등록

현재 로그아웃 또는 재발행 시 기존에 발급받은 AccessToken을 만료 전 까지 사용할 수 있는 문제가 있습니다.
이는 보안 상 문제가 되며, AccessToken을 따로 BlackList로 등록을 해야되는 로직을 추가해야 될 것 같습니다.

테스트코드 작성

각자 맡았던 부분들을 테스트코드를 작성하면 좋을 것 같습니다.

이중 작업을 방지하기 위해, 코틀린 컨버팅을 진행하고 수행하는 것도 좋은 것 같습니다.

CI/CD 과정 중 deploy 단계에서 발생하는 오류

현재 docker 이미지를 불러와서 기존 프로세스를 stop 하고 받아온 이미지를 run 하는 과정에서
원활하게 진행되지 않는 문제가 있습니다.

만약 해당 이슈를 맞이하면 SSH로 EC2로 접속해서
docker ps 명령어를 통해 프로세스가 작동중인지 확인해주세요. 아마 프로세스가 충돌나서 종료되었을 겁니다.

그러면 최근에 받아진 이미지를 명령어로 run 해주시면 됩니다.
docker run -d --rm --name server -p 80:8085 plub-server

빠른 시일내로 원인 규명해서 픽스하도록 하겠습니다!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.