지금까지 데비안에서 돌아갈 인증서버를 만들기위해 도커환경을 구축했다.

이제 본격적으로 데비안에서 돌아갈 인증서버를 설계 해보고 싶다.

얼기설기 만들다가 갈아엎는것보다는 처음에 가닥을 좀 잡고 가는게 좋을 것 같아서 강의로 들었던 게임서버쪽 코드도 좀 참고하고, 인증서버가 구체적으로 어떻게 동작할지도 생각해보면서 아직 모르는 개념들 있으면 공부부터 좀 하자.

 

그래서 이번엔 인증서버가 어떻게 돌아갈지 일단 글로 써보고, 필요한데 모르는 것들을 좀 정리해봤다.

 

회원가입

클라이언트(외부)와의 통신은 protobuf 직렬화, TLS암호화를 함.

  1. 유저가 회원가입 창에서 ID/PW 이메일 입력. 인증서버로 전송
    클라이언트는 확인코드 창으로
  2. 인증서버가 postgres select ID, 이메일 where 유저 정보 때림
  3. 이미 가입정보가 있다면 1 돌아감.
  4. 가입정보가 없다면 레디스에 key = 랜덤uuid id, 이메일, 확인코드, 해싱된PW 적어두고(2 제한시간), 유저 이메일로 확인코드 보냄. 그리고 유저 클라로 key값인 랜덤 uuid 보내줌.
  5. 유저가 확인코드 입력. 인증서버로 uuid 함께 전송
  6. 인증서버가 유저가 보낸 확인코드와 레디스상의 인증코드가 일치하는지 확인
  7. 일치하지 않으면 재시도 or 인증코드 다시보내기. 다시보내기 누르면 기존인증코드 redis에서 삭제. 그리고 다시 4부터.
  8. 일치하면 인증서버가 postgres ID, 해싱된PW, 이메일 정보 INSERT.
    그리고 redis 유저 인증코드 제거함.
  9. INSERT 실패하면 실패 이유 적어서 실패패킷 보냄.
  10. 성공하면 클라이언트에 성공 패킷 보냄.
  11. 클라이언트는 성공패킷 받으면 회원가입에 성공했습니다! 뜨고나서 로그인 페이지로 .

로그인

  1. 유저가 로그인 창에서 ID, PW, 자동로그인 체크 유무 입력, 인증서버로 전송함
  2. 인증서버가 postgresql에서 select 해싱된PW where user_id
  3. 인증서버에서 PW 해싱조져서 select 가져온것과 일치하는지 확인.
  4. 일치하지 않으면 유저에게 실패 패킷 보냄.
  5. 일치하면 세션토큰(+자동로그인 토큰) 발급해서 redis 저장함.
    자동로그인 토큰과 세션토큰 뭐가다르지?
  6. 인증서버가 유저에게 로그인 성공패킷을 세션토큰과 함께 전송.
  7. 클라가 성공패킷 받으면 게임서버로 로그인 패킷 ID 세션토큰 담아서 전송.
  8. 게임서버가 redis id 세션토큰 일치하는지 확인.
  9. 불일치면 로그인 실패(알수없는 이유)
  10. 일치하면 로그인 성공 패킷 보냄.
  11. 로그인 5 실패하면 5 제한
  12. 만약 동일 ID 접속중이면이미 로그인중인 ID입니다. 문구와 들어가기, 나가기 선택지

 

기능은 회원가입과 로그인 두가지 뿐.

추가로 인증서버의 멀티스레딩을 어떻게 하면 좋을지 ai 와 얘기해봤는데 메인쓰레드에서 epoll로 여러 클라이언트들의 요청을 받고 job_queue에 넣으면 나머지 워커쓰레드들이 job_queue에서 일을 꺼내서 (주로 db작업이나 해싱) 한다. 여기서 워커쓰레드가 하는 작업에서의 블로킹은 허용. 이렇게 돌리기로 했다. 이유는 클라이언트에게 받은 데이터를 역직렬화하고 job에 넣어서 jobqueue에 넣는건 상대저으로 cpu를 덜 쓰는 작업이고 워커쓰레드가 하는 일들은 cpu를 많이쓰거나 db잡업같은 무거운 작업이기 때문.

 

쓰레드는 쓰레드풀을 이용해서 잡큐에 일이 없을때는 자고있다가 일이 생기면 하나씩 깨어나서 일을 하게 만들자. 이 때 cv가 필요하다고 한다. 또 DB와 자주 통신하기 때문에 DB커넥션 풀도 만들어야한다.

 

 

회원가입 파트에서 모르는것들

epoll, 해싱하는법, 이메일API 쓰는 방법, redis 실사용법(개념만 앎), TLS, 쓰레드풀, cv, db커넥션 풀(개념만 앎)

이외에도 구현해보다 모르는게 있으면 공부하고 정리하면서 서버를 만들어보자.


어찌됐든 그래서 결국 공부를 해야하는 상황.

공부한 내용을 여기에 정리하긴 좀 그래서 따로 글을 썼다. 필요한 공부를 마치고 본격적으로 인증서버 제작.... 하려했는데, 감질나서 그냥 공부는 적당히 TLS 에코서버 만들 정도로만 하고 일단 서버를 조금 만들어봤다. 다음글에서 확인하자.

 

IO 멀티플랙싱, epoll 개념 및 실습

 

I/O Multiplexing epoll 채팅서버 만들기 with.C/C++

개발환경은 도커 debian trixie 컨테이너 입니다.ai의 도움을 받아 공부하며 작성된 게시글입니다.I/O Multiplexing여러 파일 디스크립터를 동시에 감시하여, 블로킹 없이 준비된(바로 실행 가능한) I/O만

dodontak.tistory.com

TLS 개념

 

SSL/TLS 그리고 인증서란 무엇인가

유튜브 채널 생활코딩의 강의영상을 보고 정리한 글입니다.SSL/TLShttp와 https인터넷을 하면 사이트 주소 앞에 항상 https가 붙어있다. http는 html 문서를 전송하기 위해 만들어진 통신규약이고, https

dodontak.tistory.com

 

TLS openssl 실습 1

 

openssl example with.C/C++

도커 debian:trixie 컨테이너환경에서 작성된 글입니다.ai의 도움과 여러 블로그를 참조하며 작성된 게시글입니다. SSL/TLS 그리고 인증서란 무엇인가유튜브 채널 생활코딩의 강의영상을 보고 정리한

dodontak.tistory.com

TLS openssl 실습 2 에러코드

 

openssl SSL_get_error 에러코드 정리

openssl 문서 SSL_get_error - OpenSSL DocumentationSSL_get_errorNAMESSL_get_error - obtain result code for TLS/SSL I/O operationSYNOPSIS#include int SSL_get_error(const SSL *ssl, int ret); DESCRIPTIONSSL_get_error() returns a result code (suitable for the

dodontak.tistory.com

 

스레드 풀 개념

 

스레드 풀 thread pool

유튜브 채널 쉬운코드의 강의 영상을 보고 공부하며 작성된 글입니다.thread pool미리 여러개의 스레드를 만들어 두고, 작업이 들어오면 그 스레드들에게 나눠서 처리하게 하는 구조. 작업이 생길

dodontak.tistory.com

 

+ Recent posts