본문 바로가기
728x90
반응형

얼랭11

14. 유저 세션(3) 6-2. 구현하기 유저가 로그인을 성공하면 유저 세션 역할을 하는 프로세스를 생성할 것이다. 점수를 저장하는 API는 핸들러에서 처리시 해당 세션 프로세스에게 메시지를 전달해서 결과값을 받아 오도록 한다. 6-2-1. 유저 세션 프로세스 생성 mon_users 모듈에 new_session/1, loop/1, make_session_key/2 함수를 만든다. 프로세스 생성 부분만 만들고, 나머지는 함수 껍데기만 작성하겠다. %% API -export([join/2, login/2]). join(Id, Password) -> F = fun() -> case mnesia:read(users, Id) of [] -> %% 해당 Id로 가입된 데이터가 없으면 저장한다 Users = #users{id=Id, pas.. 2018. 1. 18.
11. 데이터베이스(2) 5-2-3. 테이블 생성 테이블 생성은 mnesia:create_table(Name, Args) 함수를 사용한다. Name은 생성할 테이블 이름을 Atom 형식으로 작성, record 이름을 사용하면 편리하다. Args에는 테이블의 타입과 각종 테이블 관련 설정값들을 튜플의 리스트로 입력한다. Mnesia에서 생성할 수 있는 테이블에는 3가지 종류가 있다. ram_copies disc_only_copies disc_copies : 데이터를 디스크와 메모리에 동시에 저장한다. 가장 추천하는 옵션 mnesia:create_table 함수의 주요 설정값 {attributes, List} : 테이블의 칼럼 이름을 리스트 형식으로 입력한다. 예를 들어 전에 정의했던 users라는 record를 사용하는 테이블이라.. 2018. 1. 13.
10. 데이터베이스(1) 5-1. 데이터베이스란 관계형 데이터베이스는 관계형 모델을 기초로 한 데이터베이스 데이터를 표의 형태, 즉 테이블 형태로 표현하는 것 데이터 베이스를 설계하는 정규화 과정에서 E-R(개체-관계) 모델과 이것을 그림으로 표현한 다이어그램은 필수적으로 만들어야 하는 문서이다. NoSQL은 관계형 모델을 쓰지 않고 분산 처리가 용이하여 클러스터로 동작이 가능한 오픈소스 데이터베이스이다. 5-1-1. ACID 트랜잭션 ACID 트랜잭션은 관계형 데이터베이스에서 여러 개의 SQL 연산을 하나의 단일 트랜잭션으로 처리하는 것을 의미한다. 여러 개의 테이블에 대해서 읽고 쓰고 하는 행동을 하나의 연산처럼 사용하는 것이다. Atomicity 원자성 : 여러 개의 SQL 연산이 하나의 연산처럼 동작해야 한다. Consi.. 2018. 1. 12.
9. 로그인(3) 4-2-5. ETS와 Dets ETS는 얼랭에 내장된 메모리 데이터베이스 (Erlang Term Storage) Dets는 Disk ETS라고 생각하면 된다. ETS 기능을 파일 베이스로 만든 버전이 Dets ETS는 메모리에 데이터를 저장하기 때문에 서버가 꺼지면 데이터가 소멸되지만 Dets는 파일에 저장하기 때문에 데이터이 분실 위험은 사라진다. 하지만 속도가 느리고 용량도 제한적이다. 지금은 ETS를 이용해서 유저의 아이디와 패스워드를 저장해보겠다. ETS의 모든 기능은 ets 모듈에 BIFs로 구현되어 있다. BIFs는 얼랭 VM 내부에 내장된 함수들을 의미한다. 얼랭 모듈이지만 C언어로 작성되어 있어 속도가 빠르다. ETS에 데이터를 저장하기 위해서는 먼저 테이블을 생성해야 한다. 테이블에는 얼.. 2018. 1. 11.
8. 로그인(2) 4-2-2. URL Parser URL 부분을 우리가 원하는 요청에 대해서 지정된 API를 실행하도록 분류하는 기능을 한다. mon_http.erl의 handle 함수를 다음과 같이 수정하여 실제로 Api,What,Opt 값을 얻어올 것이다.handle(Req, State) -> {Api, Req1} = cowboy_req:binding(api, Req), {What, Req2} = cowboy_req:binding(what, Req1), {Opt, Req3} = cowboy_req:binding(opt, Req2),io:format("api=~p, what=~p, opt=~p ~n",[Api, What, Opt]),{ok, Req4} = cowboy_req:reply(200, [ {, } ], , Re.. 2018. 1. 11.
6.기본 모바일 서버 만들기(2) 3-2-5.cowboy 사용하기 cowboy의 흐름도를 보면 client에서 받은 HTTP요청을 처리하는 순서를 알 수 있다. acceptor에서 클라이언트의 접속을 수락->Erlang 프로세스를 생성 클라이언트의 요청 패킷 하나당 Erlang 프로세스 하나가 생성되는 것이다. 그 다음 parser에서 socket을 읽어 패킷을 처리하게 된다. 에러가 없다면 onrequest->router->handler를 거쳐서 클라이언트로 응답 패킷을 전달한다. 우리가 신경 쓸 부분은 router->handler 이부분이다. 3-2-5에서 작성할 코드 부분이 이 부분으로, 각종 기능들을 이 부분을 통해서 연동시킬 것이다. 먼저 코드 작업을 하기 위해 cowboy 소스를 받아와서 project에 연동 시켜야 한다. I.. 2018. 1. 10.
5.기본 모바일 서버 만들기(1) 3-1.서버 설계 요즘은 스마트폰의 성능이 좋아지면서 게임들이 온라인화되기 시작했다. 최근 모바일 게임들은 대부분 무로료 다운 받아서 인앱 결제를 통해 수익을 받는다. 게임을 구입해야 설치가 가능한 게임들은 매출 순위가 낮고, 인앱 결제 방식의 부분 유료화 게임들이 상위권이다. 이렇게 되면서 서버의 중요성이 매우 커졌다. 게임의 데이터가 스마트폰에 있을 경우에는 유저 마음대로 조작이 가능하기 때문에 굳이 인앱 결제로 돈을 지불하지 않아도 유저가 원하는 대로 플레이가 가능하다. 이를 막기 위해서는 서버에서 데이터를 가지고 있어야 하고 서버가 게임의 플레이를 제어하고 검증해야 한다. 모바일게임은 데이터로 할 경우 서버에 대한 반응 속도가 빠르지 않아도 문제없이 게임이 동작하도록 해야한다. 그리고 PC에 비해.. 2018. 1. 7.
728x90
반응형