2013년 8월 31일에 올렸던 speakerdeck에 올렸던 자료 백업
https://speakerdeck.com/perhapsspy/mweonji-moreujiman-balpyo-aspeseo-djangoro-olmgyeogan-sayeon
---
한 개발자의 성장기(아니 삽질기)입니다.
ASP 개발을 하다가 Django를 쓰게 된 이야기를 간략하게 재미위주로 적어보았습니다.
커빙의 Django, Celery, Azure Cloud, SNS 연동, 컨텐츠 수집 기술을 한눈에 볼 수 있도록 소개한 자료 입니다.
커빙을 처음 개발하면서 많은 어려움이 있었고,
또 많은 분들의 도움으로 좋은 결과를 얻을 수 있었습니다.
조금 더 깊은 내용을 다뤘으면 하는 아쉬움이 있지만,
다른 분들에게 조금이나마 도움이 되었으면 좋겠네요!
2013년 8월 31일에 올렸던 speakerdeck에 올렸던 자료 백업
https://speakerdeck.com/perhapsspy/mweonji-moreujiman-balpyo-aspeseo-djangoro-olmgyeogan-sayeon
---
한 개발자의 성장기(아니 삽질기)입니다.
ASP 개발을 하다가 Django를 쓰게 된 이야기를 간략하게 재미위주로 적어보았습니다.
커빙의 Django, Celery, Azure Cloud, SNS 연동, 컨텐츠 수집 기술을 한눈에 볼 수 있도록 소개한 자료 입니다.
커빙을 처음 개발하면서 많은 어려움이 있었고,
또 많은 분들의 도움으로 좋은 결과를 얻을 수 있었습니다.
조금 더 깊은 내용을 다뤘으면 하는 아쉬움이 있지만,
다른 분들에게 조금이나마 도움이 되었으면 좋겠네요!
The biggest problem experienced by organizations in all industries is the distribution of
information. Many documents are generated each day, and are co-authored and exchanged
among people in different teams. That’s why Document Management solutions have arisen
as a way to address the challenges of organizing the work and eliminating the chaos that
many workers experience when sifting through thousands of files for the right information.
In today’s business processes, information plays a key
role. Information is used to steer business processes and
to provide people the information and instructions to do
their job. Most of our information is kept in documents and
it is very important that documents are well managed and
that they are available to the right people at the right time.
A Document Management System is therefore crucial to
steer business processes and to ensure that people have
access to the right information; whenever they want and
wherever they are.
Since Document Management Systems are closely
related to business processes, a Document Management
System should not be implemented overnight. An
organization needs to be well prepared and needs to
understand their requirements, scope and objectives to
successfully implement a Document Management
Solution.
This white paper describes 10 steps to a
successful implementation of a (Electronic) Document
Management System.
LogicalDOC is the best choice among document management solutions. It features an intuitive interface that is so easy to use it requires no training. It utilizes advanced technology and widely-accepted international standards to facilitate a non-invasive integration with your system. LogicalDOC will solve all of your document management needs.
요즘 뜨고있는 Go언어에 대해서 공부를 시작하면서 처음에 설정하는데 많은 삽질을 했었기에 다른 분들에게 도움이 되고자 만들었습니다.
앞으로도 공부하는김에 PPT로 만들어서 기존 프로그래밍 언어와 무엇이 다른지에 대해서 생각해보고 제가 공부하면서 느낀 궁금증과 그 해답에 대해 정리해 올리도록 하겠습니다.
Session 1 - 김득중 쇼핑검색 React 전환 경험 공유
2019년 9월 6일 네이버 쇼핑 개발자 meet up 행사인 'SHOWROOM' 에 발표된 자료입니다.
보다 자세한 내용은 http://nshop-developer.github.io 을 참고해주세요.
(2019년 9월 30일 오후 오픈 예정)
서비스를 만들면서 피할 수 없는 주제 중 한가지가 바로 비동기 처리입니다. 무겁고 오래 걸리는 일에 대한 처리뿐 아니라, 주기적으로 수행해야 하는 일까지 대부분 서비스에 반드시 라고 할 만큼 겪게 되는 문제죠. Python을 쓰는 우리에게는 물론 싱싱하고 훌륭한 해법인 Celery가 있습니다. 요구되는 거의 모든 기능을 제공할 뿐만 아니라, 유연하게 설계되어 있고 관리툴 같은 부가 기능까지, 비동기에 관련된 모든 부분을 책임져주죠.
하지만 Celery에 이런 빛과 같은 아름다움만 존재하는 것은 아닙니다. 싱싱한 채소를 맛있게 먹기 위해서는 몇 가지 공부가 필요한 것처럼, 때로는 Celery의 의아스러운 점을 잘 다루고, 우리의 서비스에 맞게 이용하기 위해서는 몇 가지 알아야 할 점이 있습니다. 지난 1년여간 최대 1만 건/초의 요청을 Celery로 처리하면서 제가 얻은 경험을 나누고자 합니다.
Light Tutorial Django
Studybee 3주차 - 가볍게 배우는 장고!!
Django를 이용해 블로그를 만들기 전에 가볍게 Django에 대해 알아보고 익숙해져 봅시다.
**http://www.studybee.kr 에서 운영하는 '초심자를 위한 웹개발' 클래스에서 만드는 교재이며,
장고를 이용해 간단하게 블로그를 만드는 것을 목표로 하고 있습니다.
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