본문 바로가기
Server

7. 로그인(1)

by Doromi 2018. 1. 10.
728x90
반응형

4-1. 로그인(Login)

 

모바일 서버가 수행해야 할 기본 기능 중 하나는 로그인 기능이다.

주로 아이디와 패스워드로 인증 과정을 거친다.

아이디와 패스워드 등의 인증 정보를 서버에 저장하는 작업이 선행되어야 한다.

이는 sing-in과정을 통해서 이루어진다.

 

4-1-1. API 설계

API는 기능에 따라 이름을 붙이는 것이 가장 편할 것이다.

/join

/login

 

HTTP기반이라 문자열로 만들면 되니까 매우 쉽다.

이번에는 아이디와 패스워드 값을 서버로 전달해야 한다.

 

/login/id=myid&password=mypass

 

이 방법은 HTTP URL에 Query String으로 변수를 포함시키는 방법이다.

하지만 문제는 길이 제한이 존재한다. 이를 해결하는 방법은 간단하다.

Query String를 URL에 포함시켜서 전달하지 말고 body에 넣어서 전달하면 된다.

POST Method를 이용하면 된다.

POST는 GET처럼 URL에 포함하는 것이 아니라, HTTP에서 전송하는 메시지의 Body에 Query String을 포함한다.

 

/login

id=myid&password=mypass

 

/login은 URL부분이고 그 아래가 body 부분이다.

 

 

4-2. 기능 구현

 

저번 글에서 마지막에 서버 6060포트로 연결을 해봤는데 처음에 잘 안되서 다시 mon 프로젝트로 새로 만들어서 했었다.

따라서 이제 책에서 하는 것과 이름을 통일해서 하려고 한다.

 

mon_app.erl 파일을 수정해야 한다.

 

4-2-1. cowboy router

 

앞에서 설정한 cowboy router는 하나의 path에 대한 handler 모듈을 설정한 것이었다면, 이제는 여러 개의 path에 대해 동작하도록 해야 한다.

 

path를 더 추가해야 한다.

 

[{"/hello/world", mon_http, []},

[{"/join", mon_http, []},

[{"/login", mon_http, []}]

 

이런 식으로 3개의 API를 Path로 등록해도 정상적으로 동작할 것이다.

하지만 활용적인 측면에서 효율적이지도 않고, 코드도 이쁘지 않다.

Cowboy의 Match syntax를 활용하면 코드를 보다 간소화하면서도 효율적으로 작성할 수 있다.

{"/:api/[:what/[:opt]]", mon_http, []}

이렇게 설정하면, /A 또는 /A/B로 설정한 API에 대해서 모두 handler로 설정한 mon_http module이 실행될 것이다.

그리고 A는 api라는 key에 바인딩 될 것이고 B 부분은 what이라는 key에 바인딩 될 것이다.

what 부분을 대괄호로 묶은 이유는 생략이 가능하도록 하기 위해서이다.

 

48라인만 고쳐준다.

Run->Run->Compile 후 Run->Run->Start로 서버를 실행시킨 후 테스트를 해보겠다.

 

a는 api라는 key에,

b는 what,

c는 otp에 바인딩된다.

 

 

 

이제 정확히 지정해 놓은 api에 대해서만 동작하도록 handler 모듈로 설정한 mon_http를 수정하겠다.

 

 

 

728x90
반응형

'Server' 카테고리의 다른 글

9. 로그인(3)  (0) 2018.01.11
8. 로그인(2)  (0) 2018.01.11
6.기본 모바일 서버 만들기(2)  (0) 2018.01.10
5.기본 모바일 서버 만들기(1)  (0) 2018.01.07
4.개발 환경 구축하기(3)  (0) 2018.01.07