• 본 문서는번역을 하긴하되, 정확한 번역도 아니고, 보면서
바로 하는 직역도 아니고.. 그냥 보이는 대로 뜻만 통하는
번역이다. 내용이 중간중간 생략해가면서
속도를 위해, 그리고 매끄러운 읽기를 위하여 (사실은
귀차니즘을 극복치못하고) Revel 문서를 번역할 것이다.
• 필자의 개인적 바램은 개발을 모르는 세살배기 어린애도(?!)
이해할 수 있도록..(은 좀 힘들고) 아무튼 개발상식이 없더라도
최대한 이해할 수 있도록 하는 것이 개인적 바램이다.
중간중간에 쓸데없는 설명이 들어갈 수 있다.
• 폰트&디자인같은 것이 마음에 안 들어 요청이 있다면 바꿀
의향이 있다
문서 성격 3
4.
• 일단 revel을 설치했다는 가정하에 진행한다.
김헌기님이 정리하신 고설치법으로 Revel 을 일단
구동해보자. Revel run myapp 이다.
일단 구동 4
5.
• 이런 페이지가대략 나올 것이다. 자 이제 revel
이자동으로 만들어낸 revel 폴더 구조를 보자
일단 구동 5
6.
• 다른 웹프레임워크를조금 경험했다면, 조금
보다보면 익숙해지는 부분이다.^^
Revel 폴더 구조 6
7.
• 크게 app,conf, message, public 으로 구성되어
있다.
• App 은 모델, 컨트롤러, 뷰가 들어가있다.
• Conf 는 환경설정 정보들이
• Message에는 웹에 나올 메시지들
• Public은 css, js, image 파일같은
정적파일들이 있다.
Revel 폴더 구조 7
8.
• 자 무슨소리인지 모를 수도 있다.
• 아무튼 REVEL 공홈 INTRODUCTION 은 별
내용 없어서 넘기고,
• REVEL CONCEPT 로 가기 전에 앞서
웹개발이 어떤 개념으로 이뤄지는 지 알아보자.
공홈에서의 LIFE QUEST 도 웹개발이 전무한
사람이 보기에는 어렵다고 생각한다.
• (사실 필자도 좀 어렵다...끄응;)
Revel 컨셉 8
9.
• 필자가 스프링에그나마 익숙한 관계로 웹개발을
스프링개념으로 적고 싶다. 흔하게 스프링에서의 웹개발을
3계층으로 설계하는데, 컨트롤러, 서비스, DB영속화 계층이
있다.
• 말만 조금 있어보이는 거지, 실은 결혼식에서 축의금내고 이름
적는거나 장례식장에서 돈내고 절하고, 고기 먹는 거랑 비슷한
거라고 본다..(;;;이리 적었다고 돌날라올지도..)
• 웹개발에서의 용어가 컨트롤러, 뷰, 모델, 서비스, DAO(데이터
엑세스, DB영속화)가 있는데 장례식장으로 이야기를 풀어보자.
(지금 밤이라 어깨가 무거운게 귀신이 내 등을 누르고있나)...아..아무튼..;;
Revel 컨셉에 앞서 웹컨셉 9
10.
• 장례식장을 머리속에서그림그려보며 생각해보자. 이러한 일들이
일어날 수 있다는 생각을 해보자~(시간 순 아님)
• 입구(컨트롤러)에 들어서서 자리(view)를 배정받는다. 한 안내원이
어디어디로 가라고 한다.
• 입구(컨트롤러)에서 나를 절을 하거나, 돈을 내는 곳(비즈니스 로직,
서비스계층) 으로 보낸다.
• 돈을 내는 곳(?.. 서비스계층)에 이르러 방명록(DAO, 영속계층)에 내
이름을 적는다.
• 나는 조문객(모델)이라는 객체로 정의되어있다. 내가 조문객이 아니라
지나가는 거지(다른 모델)이라면 안될 것이다.
Revel 컨셉에 앞서 웹컨셉 10
11.
• 웹개발도 이와같다. 여러가지 경로로 사용자를 받아서,
비즈니스 로직을 처리하고 DB에 저장하고 하는 것이다.
• 다만 이렇게 계층을 나눈 이유는 웹개발의 특성상 자주
변동하기도 하고, 유지보수 개발의 편의등을 위해 중복의
제거와 하는 일이 비슷한 것들을 모으다보니 이렇게 계층을
나누게 된 것이다. 그림으로 보면 다음과 같을 것이다.
Revel 컨셉에 앞서 웹컨셉 11
12.
• 아마도 이런..느낌이랄까. 설명이 정확히는 맞지 않음을 느끼지만 초보를
위한 모델이다.. 필자도 처음접할때는 참 MVC가 무슨 말인지 잘 몰랐다.
ㅠㅠ
컨트롤러
(웹주소)
서비스
(비즈니스 로직,
계산)
DAO
(저장)
모델
뷰
(웹화면)
모델
실제 장례식장은 안 그러겠지만, 조문객(모델)이 조의금을 적게내면
구석자리(뷰)를 준다던가 관계없는 사람이 오면(에러, 예외)
쫓아낸다던가 (에러페이지) 하객에 따라서 (서비스 계층에서) 절을
할지 기도를 할지..뭐..그런 일련의 행동들이 다양한 상황에 따라서
벌어질 수 있는 것이고 각각의 계층마다 하는 일이 있다.는 것이다
Revel 컨셉에 앞서 웹컨셉 12
13.
• 아무튼 이런컨셉에서 가장 중요한 모델, 뷰, 컨트롤러를 약자를 따서 MVC
패턴이라고 부른다.
• Go의 웹프레임워크인 revel은 Rails 와 Play framework 의 영향을 받았다 한다.
관습화Convention..(말이 어렵다) 그러니까 그냥 개발의 네비게이션을 찍고
고속대로를 따라 달려가면(-_-) 빠른 개발을 할 수있다 . 이런 얘기가 있었다.
• 앞서도 설명했지만, 공홈에도 나와 다시 잠깐 얘기해보자면
• M은 모델. 하객, 조문객 같은 현실의 데이터를 생각하면 된다. Models also contain
domain-specific logic for querying and updating the data. 라고 적혀있는데,
도메인 주도개발인가?! (필자가 아직 여기까지는 모른다^^ㅋ) 모르는 거는 모른다고
말하고 싶다. 나중에 보면 알겠지.. 암튼 도메인에 구체적인 로직(할 일)도 서술한다고
나와있다. V 는 웹페이지라고 보면 되고.
• C 는 웹페이지 주소, 요청등을 말한다. 어디어디 주소로 가면 글쓰는 것, 어디어디주소로
가면 수정하는 것..이런 주소들을 적어줘야 요청을 받는 것이다!! (지금 보니 쉬운
개념인데 왜 그 옛날엔 힘들게 했는지..하.. 아무튼 다음으로 넘어가자.
Revel 컨셉 : MVC 13
14.
• 자.. 요청의생명주기라고 번역을..
하긴 해야것는디..-_- 무척 말이 어렵다..
• 그러니까. 웹 주소 치면 나오는 것.
아까했던 revel 잠깐 킨것 그것을 생각하면서
생각해보자.
• Revel 은 http.Handler 라는 문지기가 관리한다.
자신의 하수인으로 컨트롤러를
손님이녀석(request)의 요청을 샅샅이 훑어본다(-.-*)
• 인증된 녀석인지, 들고 있는 돈(Parameter)는 어떤 것인지.
나갔다가 다시 들어온 녀석인지(Session) 등등을 보고서
입력을 받아 결과(Result)를 생산해내는 Action 을 취한다 이말인 것이다.
• ..그..그렇겠지?! .. 공홈에 나온 것이 있으니 좀 더 자세히 보자~
Revel 컨셉 : 요청의 생명주기 14
15.
• 일부러 어려운말을 바로 직번역하면서 좀 써보려고 한다.
• 당장 필요한 기능만 구현해가면서 쓰자는
주의이지만…뭔가 revel 공홈에 나오기도 해서..
• 정리를 할 겸 적어보기로 하겠다. 모든 것을 한번에 이해할
필요는 없다고본다…
• 게임도 치트키부터 치고 배우는 거..아닌가?! 음..음;
Revel 컨셉 : 쉬어가면서~ 15
16.
• Revel 은Go http server의 맨 위에서 빌드되는데, 경량쓰레드 고루틴을 만든다.
경량쓰레드고루틴은 다가오는 각각의 요청을 처리한다. 이것으로 인해 당신의
코드는 블락에서 자유롭다. 그러나 이것은 동시요청처리를 다뤄야한다.
• Revel 핸들러는 처리를 위해 필터체인에 요청을 던지는 것밖에 하지 않고 처리가
되자마자, 응답을 쓰는데 결과를 적용한다.
• 기본적으로 revel handler 는 “/” 경로로 등록되어 모든 접속을 받는다. 그러나
어플리케이션은 이 경로를 오버라이딩할 수 있다. 이하는 생략...;;
말을 그냥 번역하자니 역시 어렵다. 무슨 말인지는 얼추 알겠지만 어렵다. ㅋ
• 여기서 영어를 보시면 더 쉬울지도^^
Revel 컨셉 : Http handler 16
17.
• 필터는 revel에 의해 제공된 대부분의 요청처리기능을 구현한다. 필터들은
자신들을 중첩(nested)하게 해줄 수 있는 간단한 인터페이스를 가진다.
• Filter Chain 은 기능의 배열로서, 각각의 것들은 필터단계에서 액션을
발동시키기전까지 다음 필터를 발동시킨다.
• 예를 들자면, 필터중의 첫번째 필터가 Router 필터인데 이것은 요청이 의미하는 어떤
액션을 취할 것인지 결정하고, 그것을 컨트롤러에 저장한다. 결국 필터들과
필터체인은 Rack 과 동등하다. (Rack 은 루비에서 나타난 개념같다. 무슨 용어를
이리 만들어..끄응;; 궁금하다면 여길 ..
http://en.wikipedia.org/wiki/Rack_(web_server_interface))
Revel 컨셉 : Filter 17
18.
• 각각의 HTTP요청은 요청을 처리하고 응답을 작성하는 ACTION 을 발동시킨다.
관련된 액션은 컨트롤러에 그룹되어진다. 컨트롤러 타입은 관련된 필드와 메소드를
포함하고 각각의 요청에 맞는 행동을 한다.
• Http 요청의 부분으로서 Revel 은 당신의 컨트롤러의 인스턴스를 생성하고,
이것들의 모든 속성들을 내장된 revel.Controller 에 적용한다. Revel 은 요청들
사이에 컨트롤러를 공유하지 않는다.
• 컨트롤러는 revel.Controller 를
내장하는 아무 타입이다.
액션은 컨트롤러에서 revel.Result를
리턴하거나 익스포트된 메소드이다.
저 예제는 템플릿을 실행하기 위해
revel.Controller.Render를 발동!
Username을 파라미터로 전달함.
• Revel.Controller에는 revel.Result
를 생성하는 많은 메소드가있다.
Revel 컨셉 : Controller and Action 18
19.
• Result는 인터페이스를따르는 어떤 것들이다!!애니띵!~~!
• 일반적으로 액션과 모든 필터가 리턴되기 전가지 아무것도 쓰여지지 않는다. 그
지점에서 revel은 응답의 헤더와 쿠키를 쓰고 그 후에 Result.Apply 를
발동시켜서 실제들어갈 응답 내용을 적는다~
Revel 컨셉 : Result 19
20.
• 음.. 마음같아서는그냥 후딱, 요청처리 주소 잡고 템플릿돌리면서 db만 어떻게 빨리
하고픈 마음인데.. 흠흠 고민이 되는군요. 아무튼.. 일단 이정도로 마무리.^^
Revel 컨셉 : 끝 20