21
---------- 1 GO개발환경설정 공부하면서 정리 페이스북 그룹 GOLANG KOREA HTTPS://WWW.FACEBOOK.COM/GROUPS/GOLANGKO/ https://fb.com/me.adunhansa https://twitter.com/arahansa http ://adunhansa.tistory.com/ ABOUT CONTACT SOURCE 1

Go revel 컨셉_정리

  • Upload
    -

  • View
    294

  • Download
    2

Embed Size (px)

Citation preview

---------- 1

GO개발환경설정공부하면서 정리페이스북 그룹 GOLANG KOREAHTTPS://WWW.FACEBOOK.COM/GROUPS/GOLANGKO/

https://fb.com/me.adunhansahttps://twitter.com/arahansahttp://adunhansa.tistory.com/

ABOUT

CONTACT

SOURCE

1

1. 작성자 소개 2

아라한사

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

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

국내에도 브로그래머문화가 확산되기를 바라며 이것저것.. 관심만 많음-.-

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

문서 성격 3

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

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

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

일단 구동 4

• 일단 revel 을 설치했다는 가정하에 진행한다.김헌기님이 정리하신 고설치법으로 Revel 을 일단구동해보자. Revel run myapp 이다.

일단 구동 5

• 이런 페이지가 대략 나올 것이다. 자 이제 revel 이자동으로 만들어낸 revel 폴더 구조를 보자

Revel 폴더 구조 6

• 다른 웹프레임워크를 조금 경험했다면, 조금보다보면 익숙해지는 부분이다.^^

Revel 폴더 구조 7

• 크게 app, conf, message, public 으로 구성되어있다.

• App 은 모델, 컨트롤러, 뷰가 들어가있다.

• Conf 는 환경설정 정보들이

• Message에는 웹에 나올 메시지들

• Public은 css, js, image 파일같은정적파일들이 있다.

Revel 컨셉 8

• 자 무슨 소리인지 모를 수도 있다.

• 아무튼 REVEL 공홈 INTRODUCTION 은 별내용 없어서 넘기고,

• REVEL CONCEPT 로 가기 전에 앞서웹개발이 어떤 개념으로 이뤄지는 지 알아보자.공홈에서의 LIFE QUEST 도 웹개발이 전무한사람이 보기에는 어렵다고 생각한다.

• (사실 필자도 좀 어렵다...끄응;)

Revel 컨셉에 앞서 웹컨셉 9

• 필자가 스프링에 그나마 익숙한 관계로 웹개발을스프링개념으로 적고 싶다. 흔하게 스프링에서의 웹개발을3계층으로 설계하는데, 컨트롤러, 서비스, DB영속화 계층이있다.

• 말만 조금 있어보이는 거지, 실은 결혼식에서 축의금내고 이름적는거나 장례식장에서 돈내고 절하고, 고기 먹는 거랑 비슷한거라고 본다..(;;;이리 적었다고 돌날라올지도..)

• 웹개발에서의 용어가 컨트롤러, 뷰, 모델, 서비스, DAO(데이터엑세스, DB영속화)가 있는데 장례식장으로 이야기를 풀어보자. (지금 밤이라 어깨가 무거운게 귀신이 내 등을 누르고있나)...아..아무튼..;;

Revel 컨셉에 앞서 웹컨셉 10

• 장례식장을 머리속에서 그림그려보며 생각해보자. 이러한 일들이일어날 수 있다는 생각을 해보자~(시간 순 아님)

• 입구(컨트롤러)에 들어서서 자리(view)를 배정받는다. 한 안내원이어디어디로 가라고 한다.

• 입구(컨트롤러)에서 나를 절을 하거나, 돈을 내는 곳(비즈니스 로직, 서비스계층) 으로 보낸다.

• 돈을 내는 곳(?.. 서비스계층)에 이르러 방명록(DAO, 영속계층)에 내이름을 적는다.

• 나는 조문객(모델)이라는 객체로 정의되어있다. 내가 조문객이 아니라지나가는 거지(다른 모델)이라면 안될 것이다.

Revel 컨셉에 앞서 웹컨셉 11

• 웹개발도 이와 같다. 여러가지 경로로 사용자를 받아서, 비즈니스 로직을 처리하고 DB에 저장하고 하는 것이다.

• 다만 이렇게 계층을 나눈 이유는 웹개발의 특성상 자주변동하기도 하고, 유지보수 개발의 편의등을 위해 중복의제거와 하는 일이 비슷한 것들을 모으다보니 이렇게 계층을나누게 된 것이다. 그림으로 보면 다음과 같을 것이다.

Revel 컨셉에 앞서 웹컨셉 12

• 아마도 이런.. 느낌이랄까. 설명이 정확히는 맞지 않음을 느끼지만 초보를위한 모델이다.. 필자도 처음접할때는 참 MVC가 무슨 말인지 잘 몰랐다. ㅠㅠ

컨트롤러(웹주소)

서비스(비즈니스 로직,

계산)

DAO(저장)

모델

뷰(웹화면)

실제 장례식장은 안 그러겠지만, 조문객(모델)이 조의금을 적게내면구석자리(뷰)를 준다던가 관계없는 사람이 오면(에러, 예외)쫓아낸다던가 (에러페이지) 하객에 따라서 (서비스 계층에서) 절을할지 기도를 할지..뭐..그런 일련의 행동들이 다양한 상황에 따라서벌어질 수 있는 것이고 각각의 계층마다 하는 일이 있다.는 것이다

모델

Revel 컨셉 : MVC 13

• 아무튼 이런 컨셉에서 가장 중요한 모델, 뷰, 컨트롤러를 약자를 따서 MVC패턴이라고 부른다.

• Go의 웹프레임워크인 revel은 Rails 와 Play framework 의 영향을 받았다 한다. 관습화Convention..(말이 어렵다) 그러니까 그냥 개발의 네비게이션을 찍고고속대로를 따라 달려가면(-_-) 빠른 개발을 할 수있다 . 이런 얘기가 있었다.

• 앞서도 설명했지만, 공홈에도 나와 다시 잠깐 얘기해보자면

• M은 모델. 하객, 조문객 같은 현실의 데이터를 생각하면 된다. Models also contain domain-specific logic for querying and updating the data. 라고 적혀있는데, 도메인 주도개발인가?! (필자가 아직 여기까지는 모른다^^ㅋ) 모르는 거는 모른다고말하고 싶다. 나중에 보면 알겠지.. 암튼 도메인에 구체적인 로직(할 일)도 서술한다고나와있다. V 는 웹페이지라고 보면 되고.

• C 는 웹페이지 주소, 요청등을 말한다. 어디어디 주소로 가면 글쓰는 것, 어디어디주소로가면 수정하는 것..이런 주소들을 적어줘야 요청을 받는 것이다!! (지금 보니 쉬운개념인데 왜 그 옛날엔 힘들게 했는지..하.. 아무튼 다음으로 넘어가자.

Revel 컨셉 : 요청의 생명주기 14

• 자.. 요청의 생명주기라고 번역을..하긴 해야것는디..-_- 무척 말이 어렵다..

• 그러니까. 웹 주소 치면 나오는 것.아까했던 revel 잠깐 킨것 그것을 생각하면서생각해보자.

• Revel 은 http.Handler 라는 문지기가 관리한다.자신의 하수인으로 컨트롤러를손님이녀석(request)의 요청을 샅샅이 훑어본다(-.-*)

• 인증된 녀석인지, 들고 있는 돈(Parameter)는 어떤 것인지.나갔다가 다시 들어온 녀석인지(Session) 등등을 보고서입력을 받아 결과(Result)를 생산해내는 Action 을 취한다 이말인 것이다.

• ..그..그렇겠지?! .. 공홈에 나온 것이 있으니 좀 더 자세히 보자~

Revel 컨셉 : 쉬어가면서~ 15

• 일부러 어려운 말을 바로 직번역하면서 좀 써보려고 한다.

• 당장 필요한 기능만 구현해가면서 쓰자는주의이지만…뭔가 revel 공홈에 나오기도 해서..

• 정리를 할 겸 적어보기로 하겠다. 모든 것을 한번에 이해할필요는 없다고본다…

• 게임도 치트키부터 치고 배우는 거..아닌가?! 음..음;

Revel 컨셉 : Http handler 16

• Revel 은 Go http server의 맨 위에서 빌드되는데, 경량쓰레드 고루틴을 만든다.경량쓰레드고루틴은 다가오는 각각의 요청을 처리한다. 이것으로 인해 당신의코드는 블락에서 자유롭다. 그러나 이것은 동시요청처리를 다뤄야한다.

• Revel 핸들러는 처리를 위해 필터체인에 요청을 던지는 것밖에 하지 않고 처리가되자마자, 응답을 쓰는데 결과를 적용한다.

• 기본적으로 revel handler 는 “/” 경로로 등록되어 모든 접속을 받는다. 그러나어플리케이션은 이 경로를 오버라이딩할 수 있다. 이하는 생략...;; 말을 그냥 번역하자니 역시 어렵다. 무슨 말인지는 얼추 알겠지만 어렵다. ㅋ

• 여기서 영어를 보시면 더 쉬울지도^^

Revel 컨셉 : Filter 17

• 필터는 revel 에 의해 제공된 대부분의 요청처리기능을 구현한다. 필터들은자신들을 중첩(nested)하게 해줄 수 있는 간단한 인터페이스를 가진다.

• Filter Chain 은 기능의 배열로서, 각각의 것들은 필터단계에서 액션을발동시키기전까지 다음 필터를 발동시킨다.

• 예를 들자면, 필터중의 첫번째 필터가 Router 필터인데 이것은 요청이 의미하는 어떤액션을 취할 것인지 결정하고, 그것을 컨트롤러에 저장한다. 결국 필터들과필터체인은 Rack 과 동등하다. (Rack 은 루비에서 나타난 개념같다. 무슨 용어를이리 만들어..끄응;; 궁금하다면 여길 .. http://en.wikipedia.org/wiki/Rack_(web_server_interface))

Revel 컨셉 : Controller and Action 18

• 각각의 HTTP 요청은 요청을 처리하고 응답을 작성하는 ACTION 을 발동시킨다. 관련된 액션은 컨트롤러에 그룹되어진다. 컨트롤러 타입은 관련된 필드와 메소드를포함하고 각각의 요청에 맞는 행동을 한다.

• Http 요청의 부분으로서 Revel 은 당신의 컨트롤러의 인스턴스를 생성하고, 이것들의 모든 속성들을 내장된 revel.Controller 에 적용한다. Revel 은 요청들사이에 컨트롤러를 공유하지 않는다.

• 컨트롤러는 revel.Controller 를내장하는 아무 타입이다.액션은 컨트롤러에서 revel.Result를리턴하거나 익스포트된 메소드이다.저 예제는 템플릿을 실행하기 위해revel.Controller.Render를 발동!Username을 파라미터로 전달함.

• Revel.Controller에는 revel.Result를 생성하는 많은 메소드가있다.

Revel 컨셉 : Result 19

• Result는 인터페이스를 따르는 어떤 것들이다!!애니띵!~~!

• 일반적으로 액션과 모든 필터가 리턴되기 전가지 아무것도 쓰여지지 않는다. 그지점에서 revel은 응답의 헤더와 쿠키를 쓰고 그 후에 Result.Apply 를발동시켜서 실제들어갈 응답 내용을 적는다~

Revel 컨셉 : 끝 20

• 음.. 마음같아서는 그냥 후딱, 요청처리 주소 잡고 템플릿돌리면서 db만 어떻게 빨리하고픈 마음인데.. 흠흠 고민이 되는군요. 아무튼.. 일단 이정도로 마무리.^^

21

THANK YOU !

arahansa------

------

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