Giter VIP home page Giter VIP logo

auth-system's Introduction

auth-system

2022 원터데브캠프 1인 프로젝트 인증 시스템

진행 상황

User-Service

  • 도메인 구현
  • 회원 가입 로직 구현
  • 이메일 전송 기능 구현
  • 비밀번호 암호화 구현
  • 비밀번호 찾기 구현

Auth-Server

  • JWT 발급 (access, refresh)

PS

  • 현재 gateway를 직접 구현하다 보니 회원 서비스와 인증 서비스간의 연결이 되어 있지 않은 상태입니다. 양해 부탁드립니다😢
  • 일단 spring 라이브러리를 이용해 연결해놓고 추가 구현을 하겠습니다.

질문

1. 공통되는 모듈 구현

MSA 환경을 위해 모놀리틱 방식을 사용하지 않다 보니 공통되는 기능을 중복적으로 구현해야 하는 상황이 발생했습니다.
(예시: User-Service, Auth-Server 모두 User Persistence, Redis API를 구현해야 함.)
버전 업 시 모두 수정을 해야 하는 상황이 발생하는데(관리 포인트가 2배) 이런 경우 어떻게 하는 것이 좋을까요?

2. gateway도 failover가 가능한가요?

gateway를 통해 접속하는 여러 서비스들은 failover가 가능하다는 것을 알게 되었는데 정작 gateway는 SPOF를 피해갈 수 없는 것 같습니다.

auth-system's People

Contributors

9jahyun avatar

Watchers

 avatar

auth-system's Issues

인증 서버 구현

인증 서버 구현

TODO

  • 인증 로직 구현

인증 방식

JWT

  • 빠른 기능 구현을 위해 가장 간단한 JWT 방식 채택
  • 추후 다른 인증 방식으로 변경

이메일 전송 및 처리율 제한 장치

이메일을 제한 없이 전송할 수 있다보니 악의적인 트래픽에 대항할 방법이 없습니다.
이를 막기 위해 처리율 제한장치를 개발하도록 결정했습니다.
가장 간단한 방법인 Token-Bucket 방식을 채택했습니다.

회원 서버 설계

회원 서버 설계

대략적인 목표 기능

  • 회원 가입
  • 회원 가입시 인증 이메일 전송
  • 회원 정보 검색

ERD 설계

회원-ERD

  • 연관관계가 당장 필요없기 때문에 user 테이블만 생성하면 될 것 같다.
  • table name - user는 예약어랑 겹칠 가능성이 있기 때문에 users로 설정
  • password - 암호화를 해서 저장
  • status - DEACTIVATED, ACTIVATED, DELETED 를 표시
    • DEACTIVATED - 이메일 미인증 상태
    • ACTIVATED - 이메일 인증 상태
    • DELETED - 계정 삭제 상태

아키텍처 설계

Hexagonal Architecture

회원-아키텍처

  • 애플리케이션 영역을 순수하게 만들기 위해 설계한 아키텍처
  • 외부(Adapter)과 애플리케이션 영역간의 통신은 추상화된 port가 담당
    • 의존방향에 따라 [IN, OUT] 포트로 나뉘게 된다.
  • 이 구조를 통해 캡슐화가 되어 변화에 유연성을 가질 수 있다.

회원 서버 구현

회원 서버 구현

TODO

  • 회원 도메인 엔티티 구현
  • DB Adapter 구현
    • Persistence
    • Redis
  • 회원 가입 API 구현
    • Web Adapter 계층
      • input validator 구현
    • Port 계층
    • Service 계층 (Business logic)
      • 비밀번호 암호화
      • 인증 코드 이메일 전송 및 redis 저장
      • business validator 구현

정책

회원 상태 관리

회원 상태 관리는 총 세가지로 나뉩니다.

  • DEACTIVATED - 이메일 미인증 상태
  • ACTIVATED - 이메일 인증 상태
  • DELETED - 계정 삭제 상태 (바로 DB에서 지우지 않고 1년동안 저장 후 배치를 사용해 삭제)

인증 정책

인증 정책은 다음과 같습니다.

  • 회원가입 시 미인증 상태. 추후 인증을 해야 함.
  • 인증 URI 전송
    • queryParam으로 username, email, authcode가 들어가있음.
    • authcode는 UUID를 사용해 전송.
    • 세 개의 정보를 사용해 redis 저장.
    • 해당 링크 접속 시 인증 완료.

Email 정책

  • 회원가입 시 기본적으로 전송해주고 실패 가능성을 산정해 얼마든지 인증 이메일을 전송할 수 있도록 설정.
  • 단, 악의적인 리소스 사용 방지를 위해 횟수 제한을 둘 예정. (하루 3회)
    • 간단하게 bucket 방식을 사용.
    • 단, 트래픽 자체를 제어하는 방식은 적용되지 않기 때문에 게이트웨이에 트래픽 제한 장치 배치를 고려하자.

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.