Erlang

Erlang 리스트에서 검색값 가져오기

메롱씨티 배드맨 2012. 4. 4. 21:17






앞의 포스트에서 언급한것 처럼 리스트에 값을 저장한 후 다시 이 값을 꺼내려고 한다.

먼저, 리스트에 저장된 데이터를 확인해 보면 아래와 같다.





첫번째 리스트 : ["METHOD", {"GET", "/index.html", "PARAM1"}]

두번째 리스트 : ["HOST", {"192.168.0.125", "3001"}]

세번째 리스트 : ["ACCEPT", "123"], ["PARAM", {"123", "234"}]

등등..


이렇게 리스트에 저장되어 있고 이 리스트의 구조는


[KEY-WORD, VALUE | VALUE ......]


와 같은 형태로 저장된다.


즉, 다시 값을 찾아서 꺼낼때는 KEY-WORD로 검색하여 VALUE 부분의 값을 꺼내는 것이다.

이렇게 저장된 리스트에서 값을 찾아 꺼내는 Logic을 만들어봤다.






findList 함수에서 시작되는데, 일단 이 함수안에 찾고 꺼내올 샘플 리스트를 Fixed 했다.

여기에는 4개의 리스트들이 저장되어 있다.

(위에 언급한 리스트 프로그램과는 나중에 합쳐서 하나의 프로그램을 만들겠지만 일단은 테스트를 위해 테스트용 리스트를 Fixed한다.)


findList2 함수에서 "F"는 찾을 키워드, "[H|T]"는 리스트를 집합으로 받았다.

이후 H를 다시 키워드와 값으로 분할하여 키워드와 F를 비교하여 해당 값을 찾고, 없으면 다시 루프를 돌도록 구성되어 있다.

마지막엔 리스트의 마지막까지 도달했을 경우 빈 리스트를 반환하도록 했다.


이렇게 작성된 코드를 컴파일 하고 실행하여 테스트해 본다.


첫번째 리스트 : ["HOST", {"192.168.0.125", "3001"}]

두번째 리스트 : ["METHOD", {"GET", "LOC1", "PARAM1"}]

세번째 리스트 : ["ACCEPT", "123"]

네번째 리스트 : ["PARAM", {"123", "234"}]


이렇게 저장된 리스트에서 KEY-WORD를 통해 값을 찾아본다.



첫번째는 "PARAM" 이란 KEY-WORD로 검색해서 {"123","234"} 란 값을 찾았다.

두번째는 "GET"이란 KEY-WORD로 찾았으나, 값이 없어 빈 리스트가 반환되었다, 여기서는 에러가 나지 않고 빈 리스트가 나오도록 해야한다.

이후 METHOD와 ACCEPT, HOST란 KEY-WORD로 역시 값을 찾았다.



이렇게 값을 찾은 이유는 Client에서 요청하는 파일을 열어주기 위함이다.

그래서 findList함수 이후에 다음을 추가하여 파일을 열어서 내용을 보여준다.


{_, Filename, _} = X,

OrgFile = lists:flatten(["/home/kukto/test/erlang/html", Filename]),

OrgFile,

f_read(OrgFile).


X의 내용은 {"GET", "/index.html", "PARAM"} 이고, 그중에서 파일명만 가져온다.

이후 미리 define된 DocumentRoot와 결합하여 Full Path 명을 만들고 

파일을 Open 한다.



OrgFile 인 "/home/kukto/test/erlang/html/index.html" 의 내용을 이렇게 보여준다.



이후 추가되어야 할 내용은 file open시에 Error가 발생했을 경우,

파일이 없는 경우는 404 내용을, 권한이 없는 경우 403 에러를 보내는 에러처리가 추가되어야 하고,

이후 모든 모듈을 결합하여 WebServer로 구성해야 한다.

'Erlang' 카테고리의 다른 글

Erlang Web Server V0.1  (0) 2012.04.12
Erlang List 변수 처리-로직 변경  (0) 2012.04.09
Erlang Parsing  (0) 2012.04.04
Erlang List 변수 처리  (0) 2012.03.05
[Erlang] Server/Client  (0) 2012.02.06