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

More Related Content

What's hot

신림프로그래머 스터디 웹팩 발표자료
신림프로그래머 스터디 웹팩 발표자료신림프로그래머 스터디 웹팩 발표자료
신림프로그래머 스터디 웹팩 발표자료
라한사 아
 
Spring project 예제 분석
Spring project 예제 분석Spring project 예제 분석
Spring project 예제 분석
홍섭 안
 
스프링 오픈소스 정리
스프링 오픈소스 정리스프링 오픈소스 정리
스프링 오픈소스 정리
라한사 아
 
spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼
라한사 아
 
스프링 Generic autowired이용해보기
스프링 Generic autowired이용해보기스프링 Generic autowired이용해보기
스프링 Generic autowired이용해보기
라한사 아
 
jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록
라한사 아
 
동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO 동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO
라한사 아
 
스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기
스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기
스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기
라한사 아
 
블로그 주도 개발
블로그 주도 개발블로그 주도 개발
블로그 주도 개발
JeongHun Byeon
 
구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐
라한사 아
 
구글 검색엔진 최적화(Seo) 정리
구글 검색엔진 최적화(Seo) 정리구글 검색엔진 최적화(Seo) 정리
구글 검색엔진 최적화(Seo) 정리
라한사 아
 
Groovy 시작 입문
Groovy 시작 입문Groovy 시작 입문
Groovy 시작 입문
라한사 아
 
Growing object oriented software guided by test
Growing object oriented software guided by testGrowing object oriented software guided by test
Growing object oriented software guided by test
라한사 아
 
Django in Production
Django in ProductionDjango in Production
Django in Production
Hyun-woo Park
 
뭔지 모르지만 발표
뭔지 모르지만 발표뭔지 모르지만 발표
뭔지 모르지만 발표
Kyoung Up Jung
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.
Kyoung Up Jung
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
Sang-ho Choi
 
201803 파이썬 세미나
201803 파이썬 세미나201803 파이썬 세미나
201803 파이썬 세미나
JeongHwan Kim
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
Kwangyoun Jung
 

What's hot (20)

신림프로그래머 스터디 웹팩 발표자료
신림프로그래머 스터디 웹팩 발표자료신림프로그래머 스터디 웹팩 발표자료
신림프로그래머 스터디 웹팩 발표자료
 
Spring project 예제 분석
Spring project 예제 분석Spring project 예제 분석
Spring project 예제 분석
 
스프링 오픈소스 정리
스프링 오픈소스 정리스프링 오픈소스 정리
스프링 오픈소스 정리
 
spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼
 
스프링 Generic autowired이용해보기
스프링 Generic autowired이용해보기스프링 Generic autowired이용해보기
스프링 Generic autowired이용해보기
 
jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록
 
동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO 동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO
 
스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기
스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기
스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기
 
블로그 주도 개발
블로그 주도 개발블로그 주도 개발
블로그 주도 개발
 
구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐
 
구글 검색엔진 최적화(Seo) 정리
구글 검색엔진 최적화(Seo) 정리구글 검색엔진 최적화(Seo) 정리
구글 검색엔진 최적화(Seo) 정리
 
Groovy 시작 입문
Groovy 시작 입문Groovy 시작 입문
Groovy 시작 입문
 
Growing object oriented software guided by test
Growing object oriented software guided by testGrowing object oriented software guided by test
Growing object oriented software guided by test
 
플라스크 템플릿
플라스크 템플릿플라스크 템플릿
플라스크 템플릿
 
Django in Production
Django in ProductionDjango in Production
Django in Production
 
뭔지 모르지만 발표
뭔지 모르지만 발표뭔지 모르지만 발표
뭔지 모르지만 발표
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
 
201803 파이썬 세미나
201803 파이썬 세미나201803 파이썬 세미나
201803 파이썬 세미나
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
 

Viewers also liked

프로그래밍 go투어 정리
프로그래밍 go투어 정리프로그래밍 go투어 정리
프로그래밍 go투어 정리
라한사 아
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)
상욱 송
 
LogicalDOC White Paper
LogicalDOC White PaperLogicalDOC White Paper
LogicalDOC White Paper
LogicalDOC
 
10 steps to implement edms
10 steps to implement edms10 steps to implement edms
10 steps to implement edms
LogicalDOC
 
Performance test using_j_meter_ver1.2
Performance test using_j_meter_ver1.2Performance test using_j_meter_ver1.2
Performance test using_j_meter_ver1.2
Tommy Lee
 
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
Minchul Jung
 
LogicalDOC Ecosystem
LogicalDOC EcosystemLogicalDOC Ecosystem
LogicalDOC Ecosystem
LogicalDOC
 
HTTP/2와 웹 성능 최적화 방안
HTTP/2와 웹 성능 최적화 방안HTTP/2와 웹 성능 최적화 방안
HTTP/2와 웹 성능 최적화 방안
SangJin Kang
 
Go 1.설치와 세팅
Go 1.설치와 세팅Go 1.설치와 세팅
Go 1.설치와 세팅
재봉 이
 
오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. InfinispanHyeonSeok Choi
 
개발자를위한 오픈소스라이선스
개발자를위한 오픈소스라이선스개발자를위한 오픈소스라이선스
개발자를위한 오픈소스라이선스
라한사 아
 
Go 페이징게시판만들기
Go 페이징게시판만들기Go 페이징게시판만들기
Go 페이징게시판만들기
라한사 아
 
자바채팅 다중
자바채팅 다중자바채팅 다중
자바채팅 다중
라한사 아
 
SPDY : 더 빠른 웹을 위한 프로토콜
SPDY : 더 빠른 웹을 위한 프로토콜SPDY : 더 빠른 웹을 위한 프로토콜
SPDY : 더 빠른 웹을 위한 프로토콜Yunsang Choi
 
HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.
HyeonSeok Choi
 
HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.
HyeonSeok Choi
 

Viewers also liked (16)

프로그래밍 go투어 정리
프로그래밍 go투어 정리프로그래밍 go투어 정리
프로그래밍 go투어 정리
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)
 
LogicalDOC White Paper
LogicalDOC White PaperLogicalDOC White Paper
LogicalDOC White Paper
 
10 steps to implement edms
10 steps to implement edms10 steps to implement edms
10 steps to implement edms
 
Performance test using_j_meter_ver1.2
Performance test using_j_meter_ver1.2Performance test using_j_meter_ver1.2
Performance test using_j_meter_ver1.2
 
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
 
LogicalDOC Ecosystem
LogicalDOC EcosystemLogicalDOC Ecosystem
LogicalDOC Ecosystem
 
HTTP/2와 웹 성능 최적화 방안
HTTP/2와 웹 성능 최적화 방안HTTP/2와 웹 성능 최적화 방안
HTTP/2와 웹 성능 최적화 방안
 
Go 1.설치와 세팅
Go 1.설치와 세팅Go 1.설치와 세팅
Go 1.설치와 세팅
 
오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan
 
개발자를위한 오픈소스라이선스
개발자를위한 오픈소스라이선스개발자를위한 오픈소스라이선스
개발자를위한 오픈소스라이선스
 
Go 페이징게시판만들기
Go 페이징게시판만들기Go 페이징게시판만들기
Go 페이징게시판만들기
 
자바채팅 다중
자바채팅 다중자바채팅 다중
자바채팅 다중
 
SPDY : 더 빠른 웹을 위한 프로토콜
SPDY : 더 빠른 웹을 위한 프로토콜SPDY : 더 빠른 웹을 위한 프로토콜
SPDY : 더 빠른 웹을 위한 프로토콜
 
HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.
 
HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.
 

Similar to Go revel 컨셉_정리

WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
Eunhyang Kim
 
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
Seomgi Han
 
2017 제주코딩해커톤 Ruby On Rails 첫째주
2017 제주코딩해커톤 Ruby On Rails 첫째주2017 제주코딩해커톤 Ruby On Rails 첫째주
2017 제주코딩해커톤 Ruby On Rails 첫째주
범재 이
 
이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께
지수 윤
 
Showroom 2019-react
Showroom 2019-reactShowroom 2019-react
Showroom 2019-react
Deuk Jung Kim
 
쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유
NAVER SHOPPING
 
131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원NAVER D2
 
이정환_구름에듀_특강.pdf
이정환_구름에듀_특강.pdf이정환_구름에듀_특강.pdf
이정환_구름에듀_특강.pdf
이정환
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Sa-ryong Kang
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
NAVER D2
 
Naver Campus Hackday Winter 2017 참가 후기
Naver Campus Hackday Winter 2017 참가 후기Naver Campus Hackday Winter 2017 참가 후기
Naver Campus Hackday Winter 2017 참가 후기
Youngbin Han
 
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
2015 SW마에스트로 100+ 컨퍼런스
 
역시 Redux
역시 Redux역시 Redux
역시 Redux
Leonardo YongUk Kim
 
Place site Design
Place site DesignPlace site Design
Place site Design
HaYoungChoi17
 
Celery의 빛과 그림자
Celery의 빛과 그림자Celery의 빛과 그림자
Celery의 빛과 그림자
Minyoung Jeong
 
Docker registry swift_junojunho
Docker registry swift_junojunhoDocker registry swift_junojunho
Docker registry swift_junojunho
Junho Kim
 
토이 프로젝트를 하자.Pptx
토이 프로젝트를 하자.Pptx토이 프로젝트를 하자.Pptx
토이 프로젝트를 하자.Pptx
Myeongin Woo
 
Light Tutorial Django
Light Tutorial DjangoLight Tutorial Django
Light Tutorial Django
Kwangyoun Jung
 
코드잇-리액트-특강.pdf
코드잇-리액트-특강.pdf코드잇-리액트-특강.pdf
코드잇-리액트-특강.pdf
이정환
 
Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스
WebFrameworks
 

Similar to Go revel 컨셉_정리 (20)

WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
 
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
 
2017 제주코딩해커톤 Ruby On Rails 첫째주
2017 제주코딩해커톤 Ruby On Rails 첫째주2017 제주코딩해커톤 Ruby On Rails 첫째주
2017 제주코딩해커톤 Ruby On Rails 첫째주
 
이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께
 
Showroom 2019-react
Showroom 2019-reactShowroom 2019-react
Showroom 2019-react
 
쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유
 
131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원
 
이정환_구름에듀_특강.pdf
이정환_구름에듀_특강.pdf이정환_구름에듀_특강.pdf
이정환_구름에듀_특강.pdf
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
 
Naver Campus Hackday Winter 2017 참가 후기
Naver Campus Hackday Winter 2017 참가 후기Naver Campus Hackday Winter 2017 참가 후기
Naver Campus Hackday Winter 2017 참가 후기
 
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
 
역시 Redux
역시 Redux역시 Redux
역시 Redux
 
Place site Design
Place site DesignPlace site Design
Place site Design
 
Celery의 빛과 그림자
Celery의 빛과 그림자Celery의 빛과 그림자
Celery의 빛과 그림자
 
Docker registry swift_junojunho
Docker registry swift_junojunhoDocker registry swift_junojunho
Docker registry swift_junojunho
 
토이 프로젝트를 하자.Pptx
토이 프로젝트를 하자.Pptx토이 프로젝트를 하자.Pptx
토이 프로젝트를 하자.Pptx
 
Light Tutorial Django
Light Tutorial DjangoLight Tutorial Django
Light Tutorial Django
 
코드잇-리액트-특강.pdf
코드잇-리액트-특강.pdf코드잇-리액트-특강.pdf
코드잇-리액트-특강.pdf
 
Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스
 

Go revel 컨셉_정리

  • 1. GO개발환경설정 공부하면서 정리 페이스북 그룹 GOLANG KOREA HTTPS://WWW.FACEBOOK.COM/GROUPS/GOLANGKO/ ---------- 1 https://fb.com/me.adunhansa https://twitter.com/arahansa http://adunhansa.tistory.com/ ABOUT CONTACT SOURCE 1
  • 2. 아라한사 ----------------------- -------------------------------------------- 국내에도 브로그래머문화가 확산되기를 바라며 이것저것.. 관심만 많음-.- 슬라이드로 정리를 즐겨하나, 하나의 템플릿으로 돌려쓰기하고있다..;; 1. 작성자 소개 2
  • 3. • 본 문서는 번역을 하긴하되, 정확한 번역도 아니고, 보면서 바로 하는 직역도 아니고.. 그냥 보이는 대로 뜻만 통하는 번역이다. 내용이 중간중간 생략해가면서 속도를 위해, 그리고 매끄러운 읽기를 위하여 (사실은 귀차니즘을 극복치못하고) 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
  • 21. 21 THANK YOU ! arahansa ------ ------ 페북 : https://fb.com/me.adunhansa 트위터 : https://twitter.com/arahansa 블로그: http://adunhansa.tistory.com/