go revel 구성_루팅_정리

20
- - - - - - - - - - 1 GO REVEL 구구 , ROUTE 구구구구구 구구 구구구구 구구 GOLANG KOREA HTTPS://WWW.FACEBOOK.COM/GROUPS/GOLANGK O/ 구구구 : 구구구구 2014-12-11 구구 : https://fb.com/me.adunhansa 구구구 : https://twitter.com/arahansa 구구구 : http ://adunhansa.tistory.com / Brought to you by : OpenSource mind A B O U T C O N T A C T S O U R C E 1

Upload: -

Post on 27-Jul-2015

192 views

Category:

Technology


1 download

TRANSCRIPT

1

---------- 1

GO REVEL 구성 , ROUTE 공부하면서 정리페이스북 그룹 GOLANG KOREAHTTPS://WWW.FACEBOOK.COM/GROUPS/GOLANGKO/

작성자 : 아라한사2014-12-11

페북 : https://fb.com/me.adunhansa트위터 : https://twitter.com/arahansa블로그 : http://adunhansa.tistory.com/

Brought to you by : OpenSource mind

ABOU

T

CON

TACT

SOU

RCE

2

안 중요

1. 작성자 소개

닉 : 아라한사( 사생활때문에 닉넴 쓰는 점 양해드립니다 .)

주력 & 관심 기술 : Java, Spring, ORM, Go,

Groovy

-----------------------

--------------------------------------------훗날 가내수공업으로 서버를 돌려서

연금도 먹고 , 광고비로도 먹고 살려는

소박한 (?)

생각을 가지며 개발 공부를 하는

개발지망지망생국내에도 브로그래머문화가 확산되기를 바라며 이것저것 .. 관심만

많음 -.-

슬라이드로 정리를 즐겨하나 , 하나의 템플릿으로 돌려쓰기하고있

다 ..;;

3문서 성격

• 본 문서는 번역을 하긴하되 , 정확한 번역도 아니고 , 보면서 바로 하는 직역도 아니고 .. 그냥 보이는 대로 뜻만 통하는 번역이다 . 내용이 중간중간 생략해가면서속도를 위해 , 그리고 매끄러운 읽기를 위하여 ( 사실은 귀차니즘을 극복치못하고 ) Revel 문서를 번역할 것이다 .

• 필자의 개인적 바램은 개발을 모르는 세살배기 어린애도(?!) 이해할 수 있도록 ..( 은 좀 힘들고 ) 아무튼 개발상식이 없더라도 최대한 이해할 수 있도록 하는 것이 개인적 바램이다 . 중간중간에 쓸데없는 설명이 들어갈 수 있다 .

• 폰트 & 디자인같은 것이 마음에 안 들어 요청이 있다면 바꿀 의향이 있다

4일단 구동

• 자 REVEL 공홈의 순서대로 OVERVIEW 를 보자 .

• Revel 과 프로그램들은GOPATH laybout 안에GO line tool 에 정해진된대로설치되어야 한다 .

• 레이아웃설명인데 지난시간에도좀 한 것 같다 . 자세히 알아보자

5App 디렉토리

• App 디렉토리

• App 디렉토리는 소스코드와 템플릿을 가진 폴더다 .app/controllerapp/modelsapp/views

revel 은 모든 템플릿이 app/views 에 있고모든 컨트롤러는 app/controller 에 있다 .

• 그밖에 , 만약 원한다면 어플리케이션은 그것의 코드를 정리할 수 있다 . Revel 은 app/ 폴더 밑의 모든 디렉토리를 관리하며 변경사항이 감지되면 rebuild 한다 . App/ 밖의 어떤 dependencies 들은 변동되어도 감시되지 않을 것이다 . 이것은 개발자가 필요할 때 , 재컴파일할 책임이 있다는 것을 말한다 . 게다가 Revel 은 구동시에 개발자의 코드를 초기화시키기 위해서 app 내의 init() 메소드를 가진 어떤 패키지도 import 한다 .

• The Contollers/init.go 파일은 인터셉터 hook 을 등록하는 관습적인 위치파일이다 . Init() 의 순서는 같은 패키지의 소스파일들사이에서 명확하지가 안다 . 그래서 인터셉터 정의를 하나의 파일에 모으는 것은 개발자로 하여금 그것들이 실행될 순서를 명확하게 정하게 해준다 .

6Conf, message, public

디렉토리

• Conf 디렉토리

• Conf 디렉토리는 어플리케이션 설정 파일이 있는 곳이다 . 두가지 주요 설정 파일이 있는데 하나는app.conf 이다 . 어플리케이션을 위한 주요 설정파일로서 , 표준설정 파라미터를 가진다 .Routes 는 경로 정의파일이다 .

• message/ 디렉토리는 모든 지역화된 메시지 파일을 가지며

• Public 디렉토리는 웹서버에의해 제공될 정적자원들을 저장하는 곳이다 . 일반적으로 이것은 나눠진 세개의 하위 디렉토리를 이미지 , css, js 파일들을 위해 가진다 .

7컨트롤러 오버뷰

• Controller

• 컨트롤러는 *revel.Controller 를 내장하는 아무 타입이다 .• 일반적으로 우측이미지 같이 쓰며 (*revel.Controlelr 는 구조체 struct 의

첫번째 타입으로 내장되어야 한다 )

• Revel.Controller 는 요청을 위한 context 로 , 요청과 응답 데이터를 가진다 . Godoc에 자세한 설명이 나와있다 . 하지만 여기에 정의가 있다 . (helpertype의 정의와 함께 !)

8컨트롤러 오버뷰

• 컨트롤러 오버뷰도 공홈에는 이정도만

나와있다 . 다음에는 route 를 보자 ! 오버뷰 끝 !

9Routing!! 드디어 !!

• Routing ( 경로 설정 ) • 경로설정은 conf 폴더의 routes 파일안에 정의된

다 . • 기본적 문법은 ( 메소드 ) (URL 패턴 )

(Controller.Action) 이다 . • 이 예제는 모든 특징을 보여준다 . 그러면 한 줄씩

알아보자 . 결국 우리는 특정한 action 을 취하는 url 을 생성하는 reverse routing 이 어떻게 이뤄지는 지 알게 될 것이다 .

10Routing!! 간단경로와 슬래시

• Routing ( 경로 설정 )

• 간단 경로 GET /login App.Login이 간단한 경로는 메소드와 경로의 정확한 매치를 사용한다 . AppController 에서 Login 액션을 적용시킨다 .

• Trailing slashes GET /hotels/ Hotels.Index이 경로는 /hotels 와 /hotels/ 두 가지 경로에서 Hotels.Index 를 적용시킨다 . Hotels.Index 에로의 역경로 는 / 를 포함할 것이다 . Trailsing slahes 는 액션들 사이에서 구별짓기 위해 사용해서는 안된다 . 간단경로 /login 은 /login/ 에 대한 요청에 매칭될 것이다 .

• ( 필자 주 : trailing slash .. 뭐 . 그냥 / 있건 없건 같이 처리한다 이말아닌가 모르겠다 . )

11Routing!! : URL 파라미터

• URL 파라미터들• GET /hotels/:id Hotels.Show• 경로의 부분은 매칭되고 추출될 것이다 . :id 변수는 “ /” 를 제외하고

어떤 것과 매칭 될것이다 . 예를 들자면 /hotels/123 이나 /hotels/abc 둘다 이 경로로 루팅될 것이다 .

• 액션 메소드 파라미터뿐만 아니라 Controller.Params 맵에서 파라미터를 추출하는 것이 가능할 것이다 . 예를 들자면 다음과 같다 .

( 필자 주 : 다양한 부분에서 파라미터 추출이 가능하다 )

12Routing!! * 파라미터 , 웹소켓

• 라우터가 와일드카드의 두번째 종류를 인식한다 . * 파라미터는 경로의 마지막 요소가 되어야 한다 . 그리고 이것은 모든 후속 경로요소와 매칭된다 . 예를 들자면 이와 같은 경우 우리는 /public/ 으로 시작하는 모든 경로와 매칭될 수 있다 .

• 웹소켓은 다른 요청과 같은 방식으로 루팅되지만 ws 라는 메소드 식별자를 쓴다 . 웹소켓을 받아주는 액션은 다음같이 될 것이다 .

13Routing!! 정적자원관리

• 정적자원관리 . Static.Serve 의 2 가지 파라미터 버전을 위해서 “ 사이에 공백은 허용되지 않는다 . 또한 인코딩 /csv 때문이기도 하다 .

• 정적 자원 디렉토리들을 지원하기 위하여 Revel 은 Static controller 를 가진 static 모듈을 제공하며 이 컨트롤러는 두개의 파라미터를 받는다 .

• Prefix(String) – ( 상대 혹은 절대 ) 자원 루트 경로• Filepath(String) 요청된 파일의 상대경로

14Routing!! 고정된 파라미터

• 정적 자원 부분에서 설명했듯이 , 루팅은 아마 하나 이상의 파라미터를 액션에 명시한다 . 저 위를 예로 보자 .

• 제공된 아규먼트들은 그들의 포지션을 사용하여서 파라미터이름으로 바운딩된다 . 이러한 경우 리스트 타입 문자열은 첫번째 액션 파라미터의 이름으로 바운딩 된다 .

이러한 것들은 다음상황에 유용할 수 있다 .• 비슷한 액션들이 있는 경우• 같은 일을 하지만 다른 mode 로 운영되는 경우• 같은 일을 하지만 다른 데이터 타입으로 운영되는 경우

15Routing!! 루팅 모듈

• Routes 를 가지고 있는 모듈들은 두가지 방법으로 임포트 가능하다 .일단 mymodule 이 이러한 route 파일을 가지고 있다고 가정하자 .

• 첫번째 방법은 routes 파일을 이용해서 있는 그대로의 경로를 불러오는 것이다 .

• 이렇게 바로 모듈을 불러오면/gopher 와 /gopher/add 의 주소가바로 임포트 된다 .

• 두번째 방법은 prefix 된 경로 밑에 임포트 하는 방법

이렇게 하면 /foo/gopher 와 /foo/gopher/add 를가지게 된다

16Routing!! 자동 루팅

URL 아규먼트 추출은 또한 적용될 액션을 결정하는 데 사용할 수 있다 . 컨트롤러와 액션매칭은 대소문자를 구분하지않는다 .

• 이 루팅 라인 예제는 다음 루팅경로에 영향을 미친다 .

• 비슷하게 , 이 예제는 어떤 액션에도 접근한다 .또한 대소문자를 구별하지 않기 때문에 대문자로 써도 같은 액션을 취하게 된다 .

• 오토루팅은 특히 리버스 루팅과 결합하여 빠른 액션 적용에 유용하다 .

17Routing!! 리버스 루팅

• 몇가지 이유로 리버스 루팅을 사용하여 URL 을 만들어보는 것은 좋은 연습이다 .

• 오탈자 피하기• 컴파일러가 리버스 루팅이 적절한 숫자와 파라미터 타입을 가지고

있는지 보장하기• 지역화된 URL 이 루트파일을 변화시키기 ( 필자 주 :Localizes URL

changes to one place: the routes file. 라고 써있었는데 뭔말인지 ..-_-)

• 당신의 어플리케이션을 빌드하자마자 , Revel 은 app/routes 패키지를 만들것이고 , 양식의 선언과 함께 사용될 것이다 .

• 다음의 문장은 URL 을 Controller.Action 에 주어진 파라미터와 함께 리턴한다 . 다음장에 좀더 복잡한 예제가 있다 .

18Routing!! 리버스 루팅

• 다음 슬라이드에서는 루팅에 대해서 배운 것을 실제 revel 에서 만든 myapp 을 가지고 일단 좀 만지작 만지작 놀아봐야겠다 .. 루팅 예제는 다음과 같다고 하는데당장 이해는잘 안된다 -.-ㅋ

19Revel 정리 : 끝

• 일단 끝 . 슬라이드들의 정리를 아마 페이스북 golangkorea 에서 목록화를 시켜둘 것같다 .

20

THANK YOU !고 잼 .

Go Go

arahansa

------

------

페북 : https://fb.com/me.adunhansa트위터 : https://twitter.com/arahansa블로그 : http://adunhansa.tistory.com/