개발자취

TIL | 로그인 프로젝트 1 본문

개발/Dev | 웹개발

TIL | 로그인 프로젝트 1

hnhnhun 2022. 7. 31. 00:58

1. 프로젝트 설계

1.1 프로젝트 개요

본 프로젝트는 앞서 배운 개념을 바탕으로 하여 OAuth를 이용한 소셜 로그인 구현 및 
블로그 포스팅 웹앱을 만드는 것입니다. 본 앱을 만들기 위해 수강한 강의에서는 모바일에 
최적화된 앱으로 제작하였으나, 쓰니의 개발 능력 향상을 위해 웹에 최적화된 앱의 형태로 
변형하여 제작하였습니다.

1.2 아키텍처 설계

1.2.1 OAuth flow

- Vendor
    - Naver
    - Facebook
    - Kakao

- 각각의 OAuth provider에 개발자 계정을 만들어서 그에 따른 설정을 해야함.
- access token -> (platformUserId, platform) -> 회원가입 / 로그인 처리
- 위 vendor를 통한 로그인 처리를 위해서는 HTTPS 상에서만 처리가 가능함. HTTPS -> ngrok

1.2.2 이메일 가입

 - 인증 상태를 확인할 필요가 있음 -> 유저 정보에 `verified`라는 필드가 있어야 됨.
- 이메일 인증과정
    1) user의 이메일에 특수한 코드를 전송 
        (ex) "다음 링크로 들어와 인증을 완료해주세요. 
              https://webservice.com/verify_email?code=rulru-ralra"
    2) 위 링크로 접속시 링크를 `GET`하였으므로, `verified`가 `true`로 바뀜.
- AWS(Amazon Web Services) -> SES(Simple Email Service)로 인증 메일을 보냄.

- 비밀번호 초기화
    - 비밀번호를 찾을 수 있다는 것은 plane text로 저장이 되어있다는 의미로 
      암호의 양방향(암호화, 복호화) 변환 이슈가 발생할 수 있어 보안에 취약해질 수 있다. 
      따라서 본 프로젝트에서는 최초 가입시 암호의 형태를 one-way hash function으로 사용하여 
      해시된 값으로 db에 저장함.
    - 비밀번호 찾기는 유저가 가입시 인증한 방법과 동일하게 user의 이메일로 비밀번호를 
      초기화할 수 있는 링크를 전송함.
    - user에게 전송된 메일의 링크로 접속하면, 그 때 바꾸고자 하는 비밀번호로 갱신을 가능하게 함.

1.2.3 DB 모델링 및 배포

- 데이터베이스는 AWS EC2에서 접근 가능한 DB면 가능한 MongoDB를 사용함. 
  (타 DB의 경우 EC2 접근만 만족하면 가능).
- AWS를 통해 본 애플리케이션을 배포함.
- EC2 (server) / node server를 띄울 수 있는 서버
    - git 레포지토리를 clone해서 배포함.
- HTTPS를 지원을 위한 Amazon 인증서를 사용함.
- ELB(Elastic Load Balancer)를 사용하여 인증서가 위치하도록 하고, 
  ELB가 EC2와 기본적인 HTTP 통신을 함(plane text 통신).
- plane text 통신이지만, 보안상 격리된 곳에서 통신하므로 보안상으로는 안전함.

1.3 프론트엔드 UI 디자인

1.4 백엔드 디자인

Comments