자바스크립트: function declaration와 Arrow Function의 this 스코프 차이

이번 포스팅은 ES6 JavaScript 대상입니다.

자바스크립트가 ES6로 개정되며 새로 들어온 것 중 Arrow Function이라는 것이 있습니다. () => {}의 모양을 갖고 있고 동작하는 것도 비슷하게 보입니다.

하지만 기존의 function() {} 함수형태를 1:1로 바로 변환할 수 있는 것은 아닙니다.

this, arguments의 바인딩이 다르다.

Arrow Functionthis 바인딩을 갖지 않습니다. 기존의 function에서 this의 탐색 범위가 함수의 {} 안에서 찾은 반면 Arrow Function에서 this는 일반적인 인자/변수와 동일하게 취급됩니다. 따라서 아래와 같은 상황이 발생합니다.

1
2
3
4
5
6
7
8
9
10
11
12
// function(){}방식으로 호출할 때
function objFunction() {
console.log('Inside `objFunction`:', this.foo);
return {
foo: 25,
bar: function() {
console.log('Inside `bar`:', this.foo);
},
};
}

objFunction.call({foo: 13}).bar(); // objFunction의 `this`를 오버라이딩합니다.

위 결과는 아래와 같습니다.

1
2
Inside `objFunction`: 13 // 처음에 인자로 전달한 값을 받음
Inside `bar`: 25 // 자신이 있는 Object를 this로 인지해서 25를 반환

우리가 기대한 그대로 나옵니다.

하지만 Arrow Function을 실행하면 이야기가 약간 달라집니다.

1
2
3
4
5
6
7
8
9
10
// Arrow Function방식으로 호출할 때
function objFunction() {
console.log('Inside `objFunction`:', this.foo);
return {
foo: 25,
bar: () => console.log('Inside `bar`:', this.foo),
};
}

objFunction.call({foo: 13}).bar(); // objFunction의 `this`를 오버라이딩합니다.

위 코드의 결과는 아래와 같습니다.

1
2
Inside `objFunction`: 13 // 처음에 인자로 전달한 값을 받음
Inside `bar`: 13 // Arrow Function에서 this는 일반 인자로 전달되었기 때문에 이미 값이 13로 지정됩니다.

즉, Arrow Function 안의 thisobjFunctionthis가 됩니다.

그리고 이 ArrowFunction은 this의 Scope를 바꾸고 싶지 않을 때 특히 유용합니다.

1
2
3
4
5
6
7
8
9
10
// ES5 function에서는 `this` Scope가 function안에 들어가면 변하기 때문에 새로운 변수를 만들어 씁니다.
var someVar = this;
getData(function(data) {
someVar.data = data;
});

// ES6 Arrow Function에서는 `this` Scope의 변화가 없기 때문에 `this`를 그대로 사용하면 됩니다.
getData(data => {
this.data = data;
});

이와 같이 Arrow Function에서는 .bind method와 .call method를 사용할 수 없습니다.

즉, 비슷하게 보이지만 실제로 동작하는 것이 다르기 때문에 사용하는 때를 구별하는 것이 필요합니다.

Arrow Function은 new로 호출할 수 없다

ES6에서 함수는 callable한 것과 constructable한 것의 차이를 두고 있습니다.

만약 어떤 함수가 constructable하다면 new로 만들어야 합니다. 반면 함수가 callable하다면 일반적인 함수처럼 함수()식으로 호출하는 것이 가능합니다.

function newFunc() {}const newFunc = function() {}와 같은 방식으로 만든 함수는 callable하며 동시에 constructable합니다. 하지만 Arrow Function(() => {})은 callable하지만 constructable하지 않기때문에 호출만 가능합니다.

ps. ES6의 classconstructable하지만 callable하지 않습니다.

정리

함수 정의 방식을 바꿔서 사용할 수 있는 경우는 다음과 같습니다.

  • thisarguments를 사용하지 않는 경우
  • .bind(this)를 사용하는 경우

함수 정의 방식을 바꿔서 사용할 수 없는 경우는 다음과 같습니다.

  • new등을 사용하는 constructable한 함수
  • prototype에 덧붙여진 함수나 method들(보통 this를 사용합니다.)
  • arguments를 함수의 인자로 사용한 경우

Ubuntu Locale 한글로 바꾸기

이번 가이드는 Ubuntu 12/14/16에 적용되는 가이드입니다.

Locale이란?

Locale이란 세계 각 나라에서 가지고 있는 언어, 날짜, 시간 등에 관해 i18n(국제화)를 통해 같은 프로그램이더라도 OS별로 설정되어있는 것에 따라 어떤 방식으로 출력할지 결정하게 되는 것을 말합니다.

Locale은 단순히 언어 번역뿐만 아니라 시간과 날짜등을 표시하는 형태도 결정하게 되는데요, 예를들어 한국에서 2017년 7월 10일이라고 표현한다면 미국에서 07/10/2017와 같은 형식으로 표현할 수도 있는 것이죠. 영국이라면 10/07/2017이라고 표현할 수 있는 것 처럼요.

이와 같이 프로그래머가 한 코드에서 각 국가와 언어권에 맞도록 출력 형태를 결정하도록 OS에서 안내해 주는 것이 Locale입니다.

한국의 Locale

한국의 Locale은 보통 ko_KR.UTF-8로 사용합니다. 만약 많이 오래된 서버라면 ko_KR.EUC-KR일 수도 있어요.

Ubuntu의 기본 Locale

만약 여러분이 AWS나 Vultr등의 외국 회사에서 제공하는 우분투 이미지를 사용하고 있다면 아마 기본 설정은 en-US.UTF-8일 가능성이 큽니다. 그리고 만약 여러분이 미국권에서 사용하는 형식에 익숙하다면 (그리고 프로그램에서도 Locale이슈가 없다면) 이 설정을 굳이 한글로 바꾸실 필요는 없습니다. 하지만 가끔 업체마다 Locale정보를 공란으로 둔 이미지를 제공하는 경우가 있습니다. 그런 경우 기본값으로 한국어 UTF-8을 이용하는 것은 나쁘지 않은 선택입니다.

Ubuntu에 Locale변경하기

우선 여러분의 우분투에 깔린 Locale을 확인하려면 아래와 같은 명령어를 입력하면 됩니다:

1
locale

우분투에서 Locale을 변경하는 방법은 아래와 같습니다. 먼저 한글 패키지를 설치해 주세요.(이미 깔려있을수도 있습니다.)

1
sudo apt-get install language-pack-ko

그 다음으로는 locale-gen을 통해 Locale을 설치해 줍시다.

1
sudo locale-gen ko_KR.UTF-8

다음으로 dpkg-reconfigure을 이용하는 방법입니다. 아래와 같이 명령어를 쳐 주시고 나오는 화면에서 ko_KR.UTF-8을 스페이스로 선택(*모양이 뜨면 선택된 것입니다)후 엔터를 눌러 설정을 마무리 해 주세요.

1
sudo dpkg-reconfigure locales

마지막으로 update-locale으로 시스템 LANG설정을 업데이트 해 줍시다.

1
sudo update-locale LANG=ko_KR.UTF-8 LC_MESSAGES=POSIX

이 방법을 사용하면 시스템에서 자동으로 LANG에 지정된 한국어 UTF-8로 Locale세팅을 마무리해 줍니다.

다른 방법으로는 직접 시스템 파일을 수정해주는 방법이 있습니다.

/etc/default/locale 파일을 수정하는 것인데요, nanovim등으로 아래와 같이 내용을 수정해주시면 됩니다.

1
2
LANG=ko_KR.UTF-8
LC_MESSAGES=POSIX

끝났어요!

이 세 가지 방법 모두 시스템에 로그아웃 후 SSH로 재 접속시 적용됩니다. (서버를 Reboot하는 것도 괜찮습니다.)

멋진 Terminal 만들기

이번 가이드는 macOS를 위한 가이드입니다.

맥을 개발용으로 사용하는 경우 터미널을 좀 더 편리하고 다양하게 사용하는 방법 중 기본 Shell인 bash대신 zsh을 사용하는 경우가 많습니다. 그리고 oh-my-zsh을 함께 사용해 더 많은 기능을 편리하게 깔수 있기도 합니다. 물론 oh-my-zsh의 기본 테마인 robbyrussell도 예쁘지만, 약간 아쉬운 점이 남기도 하죠. 좀 더 예쁘고 사용하고싶어지는 기분이 들도록 agnoster테마를 깔고 Oceanic Next색 테마를 입힌 후 터미널에서 사용하는 명령어가 제대로 쳤는지 확인해주는 zsh-syntax-highlighting를 깔아봅시다. 참, 터미널은 iTerm2라는 멋진 맥용 터미널을 먼저 깔아야 해요.

앞으로 나오는 가이드는 이미 깐 경우 Pass해주시면 됩니다.

iTerm2 설치하기

우선 iTerm2 다운로드 페이지에 들어가서 iTerm2를 받아주세요.

iTerm2 Download Page

Stable Releases중 최신 버전을 받아주세요. 다운 받은 후 압축을 풀면 iTerm2라는 맥 앱이 생길거에요. 맥 파인더에서 ‘응용 프로그램’으로 iTerm2를 옮겨주세요.

HomeBrew 설치하기

우분투의 APT와 비슷하게 프로그램 패키지를 관리해 주는 프로그램이 있습니다. 바로 HomeBrew라는 프로그램인데요, brew라는 명령어로 패키지를 관리할 수 있습니다.

HomeBrew 공식 홈페이지는 https://brew.sh/입니다.

아래 명령어를 터미널에 입력해주세요.

1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Zsh 설치하기

zshbash에 추가적인 명령어를 추가하고 편의성을 개선한 새로운 쉘입니다. 한가지 예로 git 폴더 상태를 관리해주고 터미널에 상태를 나타내주는 점 등이 있습니다.

zsh은 위에서 설치한 brew를 통해 설치할 수 있습니다. 아래 명령어를 터미널에 입력해 주세요.

1
brew install zsh

OhMyZsh 설치하기

oh-my-zshzsh을 좀 더 편리하게 이용하게 이용해주는 일종의 zsh 플러그인입니다. oh-my-zsh은 아래 명령어를 통해 설치할 수 있습니다. 터미널에 아래 명령어를 입력해주세요.

OhMyZsh을 설치하면 기본 쉘을 zsh로 바꾸기 위해 맥 잠금해제 암호를 물어봅니다. 암호 입력시에는 입력해도 *같은 표시는 뜨지 않으니 그냥 입력하고 엔터를 눌러주세요!

1
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

Oceanic Next iTerm 색 테마 입히기

oceanic-next-iterm을 이용해 터미널의 색 테마를 바꿔봅시다. 우선 master.zip 파일을 받아줍시다.

master.zip파일의 압축을 풀어주면 Oceanic-Next.itermcolors파일을 보실 수 있으실텐데요, 이 파일을 더블클릭으로 실행하면 iTerm2의 색 테마에 추가가 됩니다.

iTerm2를 실행하고 맥 화면 상단 좌측의 사과 아이콘 옆 iTerm2를 누르고 나오는 메뉴 중 ‘Preferences…’를 눌러주세요.

이제 위 스크린샷처럼 Profiles > Default > Colors > Color Presets… > Oceanic-Next 로 차례대로 눌러주신 후 iTerm2를 껐다가 켜면 적용이 완료되어있을 거랍니다.

Agnoster 테마 설치하기

이제 우리 zsh의 테마를 위 스크린샷처럼 Agnoster테마로 바꿔줍시다!

텍스트 편집기(vi, sublimetext3, atom등)로 ~/.zshrc파일을 열어주세요.

만약 .zshrc파일에 특별한 수정을 하지 않았다면 10번째줄 처럼 ZSH_THEME를 설정하는 코드가 보일거에요. 이 줄을 아래 스크린 샷처럼 바꿔주세요.

1
ZSH_THEME="agnoster"

이제 새 탭을 열면 Agnoster테마로 바뀐 쉘이 보일거에요! 하지만 이렇게 하면 폰트가 일부 깨진답니다. 아래 Ubuntu Mono Powerline폰트를 받아 설정을 진행해주세요.

Ubuntu Mono derivative Powerline 폰트 설치 & 설정하기

우선 Ubuntu_Mono_derivative_Powerline.ttf를 다운받아 서체 설치를 진행해 주세요.

서체 설치가 완료되면 iTerm2를 다시 실행해 주세요.

주의: 서체 설치 전 iTerm2이 켜져있었다면 완전히 종료 후 다시 켜 주세요. 켜져있는 상태에서 설정에 들어간다면 설치한 폰트가 뜨지 않을 수 있습니다!

위에서 Oceanic Next 테마를 설치한 것과 같이 위 스크린샷처럼 Preferences..에 들어가 주세요.

그리고 위 사진처럼 Profiles > Default > Text > ChangeFont를 눌러주세요. 그러면 아래와 같은 창이 뜹니다. 시스템에 깔린 모든 폰트가 나오기 때문에 ‘고정폭’을 먼저 선택하고 폰트를 선택해 주세요.

zsh-syntax-highlighting 설치하기

이제 시스템의 PATH에 등록된 명령어들을 자동으로 Syntax HighLighting을 해주는 zsh-syntax-highlighting를 설치해 봅시다.

아래 명령어 두줄을 터미널에 입력해 주세요.

1
2
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
echo "source ${(q-)PWD}/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc

수고하셨습니다 :D

이제 모두 끝났습니다!! iTerm2를 완전히 종료한 후 다시 실행해 보면 잘 작동되는 것을 보실 수 있으실거에요!

나만의 웹 크롤러 만들기(6): N배빠른 크롤링, multiprocessing!

좀 더 보기 편한 깃북 버전의 나만의 웹 크롤러 만들기가 나왔습니다!

이전 가이드: 나만의 웹 크롤러 만들기(5): 웹페이지 업데이트를 알려주는 Telegram 봇

들어가기전..

나만의 웹 크롤러 만들기 6번째 가이드는 크롤링을 병렬화를 통해 빠르게 진행하는 방법을 안내합니다.

지금까지 만들어온 크롤러들은 모두 한번에 하나의 요청만을 처리하고 있습니다. 물론 지금까지 따라오셨다면 충분히 크롤러들을 여러분의 의도에 맞게 잘 수정해서 사용해보셨을거라 생각합니다.

하지만 한 페이지만을 여유로운 시간을 갖고 크롤링하는 것이 아니라 여러 사이트 혹은 여러 페이지를 좀더 빠르게 긁어오는 방법에는 역시 N개를 띄우는 방법이 제일 낫다고 볼 수 있습니다.

만약 100만개의 페이지가 있다면 125만/25만150만/50만175만/75만1100만와 같이 4개로 쪼개서 돌린다면 더 빠르게 도는 것은 당연합니다.

하지만 전달해주는 페이지의 목록이나 페이지 숫자에 직접 저 수들을 입력하는 것은 상당히 귀찮은 일이기도 하고, 크롤링이 ‘자동화’를 위한 것이라는 면에 반하는 측면도 있습니다. 따라서 우리는 Python 자체에 내장된 병렬화 모듈을 사용할 예정입니다.

Python을 이용할 때 프로그램을 병렬적으로 처리하는 방법은 여러가지가 있습니다. 하지만 우리가 하는 일은 연산이 아니고 IO와 네트워크가 가장 큰 문제이기 때문에 multiprocessing을 사용합니다.

threading 모듈도 사용 가능합니다. 하지만 multiprocessing모듈을 추천합니다. threading모듈은 싱글 프로세스 안의 스레드에서 동작하지만 이로인해 GIL의 제약에 걸리는 경우가 생기기 때문에 성능 향상에 제약이 있습니다. (물론 우리는 CPU 연산보다 IO/네트워크로 인한 지연이 훨씬 크기 때문에 큰 차이는 없습니다.)

멀티프로세스란?

프로세스란 ‘실행 중인 프로그램’을 의미합니다. 간단하게 말해 멀티프로세스는 프로세스를 여러개 띄우는 것, 즉 프로그램을 여러개 실행시키는 것이라고 볼 수 있습니다.

Python에는 멀티프로세싱 프로그램을 위한 모듈이 multiprocessing이라는 이름으로 내장되어 있습니다.

가장 단순한 예시로, 임의의 숫자 리스트 (ex: [20, 25, 30, 35])를 받고 그 자리의 피보나치 수를 구해주는 프로그램이 있다고 가정해 봅시다.

만약 for문을 통해 리스트를 순회하며 계산한다면 아래와 같이 코드를 짤 수 있습니다.

주의: 명백한 코드 실행 시간 차이를 보여주기 위한 느린 코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import time

start_time = time.time()

def fibo(n): # 회귀적 피보나치 함수
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibo(n-1) + fibo(n-2)

num_list = [31, 32, 33, 34]
result_list = []
for num in num_list:
result_list.append(fibo(num))

print(result_list)
print("--- %s seconds ---" % (time.time() - start_time))

실행을 해보면 다음과 같이 약 7s가 걸리는 것을 볼 수 있습니다. 너무 오래걸리네요.

그렇다면 multiprocessing을 이용하면 어떨까요?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from multiprocessing import Pool
import time

start_time = time.time()

def fibo(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibo(n-1) + fibo(n-2)

def print_fibo(n): # 피보나치 결과를 확인합니다.
print(fibo(n))

num_list = [31, 32, 33, 34]

pool = Pool(processes=4) # 4개의 프로세스를 사용합니다.
pool.map(print_fibo, num_list) # pool에 일을 던져줍니다.

print("--- %s seconds ---" % (time.time() - start_time))

실행을 해 봅시다!

확실히 빨라진 모습을 볼 수 있습니다. 3s, 즉 절반정도로 줄어든 것을 확인 할 수 있습니다.

크롤링 병렬화 하기

이번 가이드에서는 위에서 사용한 모듈인 multiprocessing을 이용해 진행합니다. 크롤링은 위에서 사용한 것처럼 연산집중적이지 않습니다. 그래서 크롤링하는 함수를 만들어두었다면 그 함수를 그대로 사용하시면 됩니다.

이번 가이드에서는 첫번째 가이드에서 사용했던 함수를 약간 변형해 사용해 봅니다.

하나씩 크롤링 하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# parser.py
import requests
from bs4 import BeautifulSoup as bs
import time


def get_links(): # 블로그의 게시글 링크들을 가져옵니다.
req = requests.get('https://beomi.github.io/beomi.github.io_old/')
html = req.text
soup = bs(html, 'html.parser')
my_titles = soup.select(
'h3 > a'
)
data = []

for title in my_titles:
data.append(title.get('href'))
return data

def get_content(link):
abs_link = 'https://beomi.github.io'+link
req = requests.get(abs_link)
html = req.text
soup = bs(html, 'html.parser')
# 가져온 데이터로 뭔가 할 수 있겠죠?
# 하지만 일단 여기서는 시간만 확인해봅시다.
print(soup.select('h1')[0].text) # 첫 h1 태그를 봅시다.

if __name__=='__main__':
start_time = time.time()
for link in get_links():
get_content(link)
print("--- %s seconds ---" % (time.time() - start_time))

약 7.3s가 걸리는 것을 아래에서 확인해 볼 수 있습니다.

Multiprocessing으로 병렬 크롤링하기

이제 좀더 빠른 크롤링을 위해 병렬화를 도입해 봅시다.

multiprocessing에서 Pool을 import 해 줍시다.

그리고 pool에 get_content함수를 넣어 줍시다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# parser.py
import requests
from bs4 import BeautifulSoup as bs
import time

from multiprocessing import Pool # Pool import하기


def get_links(): # 블로그의 게시글 링크들을 가져옵니다.
req = requests.get('https://beomi.github.io/beomi.github.io_old/')
html = req.text
soup = bs(html, 'html.parser')
my_titles = soup.select(
'h3 > a'
)
data = []

for title in my_titles:
data.append(title.get('href'))
return data

def get_content(link):
abs_link = 'https://beomi.github.io'+link
req = requests.get(abs_link)
html = req.text
soup = bs(html, 'html.parser')
# 가져온 데이터로 뭔가 할 수 있겠죠?
# 하지만 일단 여기서는 시간만 확인해봅시다.
print(soup.select('h1')[0].text) # 첫 h1 태그를 봅시다.

if __name__=='__main__':
start_time = time.time()
pool = Pool(processes=4) # 4개의 프로세스를 사용합니다.
pool.map(get_content, get_links()) # get_contetn 함수를 넣어줍시다.
print("--- %s seconds ---" % (time.time() - start_time))

약 2.8초로 약 3~4배의 속도 향상이 있었습니다.

마무리 및 팁

멀티프로세싱으로 크롤링을 할 때 유의할 점은 Pool을 생성시 processes의 개수가 많다고 빠르지는 않다는 점을 유의하셔야 합니다.

두번째 parser.py파일을 실행 시 process를 4개인 경우 2.8s, 8개로 할 때 1.85s, 16개로 할 때 0.96s, 32개로 할 때 0.63s로 속도 향상이 두드러집니다. 하지만 64개로 할 때는 오히려 1.30s로 속도 지연이 발생합니다. 프로세스는 CPU코어(Hyper-Thread인 경우 2배) 개수의 2배(ex: 4코어 i5는 8개, 4코어8스레드인 i7은 16개)로 하면 가장 빠르지는 않지만 적당히 빠른 속도를 가져다줍니다.

다음으로는 웹 사이트에서 이러한 공격적 크롤링을 차단할 수 있다는 문제입니다. 잘 관리되는 사이트의 경우 이와 같은 공격적 크롤링은 사실 시스템 관리자에게 있어서는 공격 시도와 같이 보일 수 있기 때문에 적당한 속도를 유지하며 robots.txt를 존중해주는 것이 중요합니다.

무작정 빠르게 긁는다고 빠르지 않은 점에는 이 코드를 실행하는 컴퓨터의 네트워크 환경 자체가 제약이 되기도 합니다. 만약 핫스팟이나 테더링을 이용하거나 인터넷 속도에 제약을 받는 환경에서 이러한 작업을 돌린다면 오히려 네트워크쪽 문제로 인해 에러나 지연이 발생할 가능성이 높습니다. 이런 경우에는 processes개수를 2~4개로 맞춰서 크롤링을 진행하는 것이 최적의 속도를 이끌어낼 수도 있습니다.

다음 가이드에서는 실제 명령어를 받아 사용자들의 정보를 저장하고 사용자들에게 실제로 유용한 정보(예: 글 제목과 링크)를 보내주는 내용으로 진행할 예정입니다.

서브라임텍스트 터미널에서 실행하기(macOS)

이번 가이드는 macOS 용입니다.

들어가기 전

프로그램의 설치 경로

macOS에 프로그램을 설치하면 기본적으로 /Users/유저이름/Library(~/Library와 같음)에 위치합니다. 사용자의 Library에 저장되는 이 경로는 root 권한 없이도 응용프로그램을 추가하거나 제거하는 것이 가능합니다.

터미널에서 실행되는 경로, PATH

대부분의 운영체제에서는 PATH가 있습니다. 그리고 이 PATH에 등록된 경로는 시스템 전역에서 호출 가능한 위치가 됩니다. 예를들어 PATH에 등록된 경로 중 /usr/local/bin폴더가 있었다면 아래와 같이 python명령어를 실행할 경우 /usr/local/bin/python에 있는 파이썬이 실행됩니다.

1
2
➜ ~ which python
/usr/local/bin/python

그리고 기본적으로 /usr/local/bin폴더는 사용자 터미널의 PATH에 등록되어있습니다. 따라서 SublimeText3(혹은 2) 실행 프로그램을 ln -s명령어를 통해 /usr/local/bin폴더에 심볼릭 링크를 걸어줘야 합니다.

심볼릭 링크란? 파일을 이동하지 않고 어떤 위치에 바로가기를 하나 더 만드는 것입니다. 윈도우의 바로가기 아이콘과 비슷하다고 생각하시면 됩니다.

SublimeText가 깔렸는지 확인하기

최신 버전의 sublimetext는 3버전입니다. 하지만 2버전도 유사한 방식으로 사용할 수 있습니다.

우선 아래 명령어를 터미널에 입력할 경우 실행이 되는지 확인해보세요.

코드를 그대로 복사해서 사용하세요!

1
2
3
4
# SublimeText3 의 경우
open /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl
# SublimeText2 의 경우
open /Applications/Sublime\ Text\ 2.app/Contents/SharedSupport/bin/subl

위 명령어를 쳐서 서브라임 텍스트 창이 뜬 경우 아래 가이드를 따라가 주시면 됩니다.

심볼릭 링크 등록하기

우리는 subl이라는 명령어로 서브라임 텍스트 프로그램을 실행할 계획입니다.

터미널에 아래와 같은 명령어를 입력해 주세요.

SublimeText3인 경우:

1
ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/subl

SublimeText2인 경우:

1
ln -s /Applications/Sublime\ Text\ 2.app/Contents/SharedSupport/bin/subl /usr/local/bin/subl

모두 끝났습니다!

이제 터미널에서 subl이라는 명령어를 통해 서브라임 텍스트를 실행할 수 있습니다 :)

그냥 서브라임텍스트를 실행하려면

1
subl

현 폴더를 열려면

1
subl .

이와 같이 subl뒤에 파일/폴더등을 인자로 전달해 줄 수 있습니다.

만약 위 방식으로 되지 않으신다면 .zshrc이나 .bashrc등의 파일에 아래와 같이 입력해 주세요.

1
alias subl="open -a /Applications/Sublime\ Text.app"

macOS 환경설정에서 Shift Space로 한영 전환하기

이번 가이드는 macOS 10.12 Sierra 기준입니다.

맥을 사용하다 보면 한영 전환키가 계속 바뀌어 불편함을 느끼는 경우가 많습니다. 처음에 알게 된 전환키를 익숙하게 쓰고, 특히 여러 OS를 번갈아가며 사용할 때에는 언어 전환 키를 통일해 사용하는 것이 편리합니다.

물론 맥의 키보드 환경설정에서는 기본적으로 사용자가 원하는 키보드 조합을 통해 언어 전환을 할 수 있습니다.

우선 키보드 전환 설정으로 들어가봅시다. 환경설정에서 키보드로 들어가주세요.

키보드로 들어가신 후 아래 빨간 네모대로 클릭을 해 주세요.

여기서 마지막 네모를 더블클릭하고 키를 입력하면 언어 변경키를 지정할 수 있는데요, 더블클릭 후 Shift+Space를 누르면 아무런 반응이 일어나지 않는걸 보실 수 있습니다.

하지만 사실은 가능합니다!

입력키 변경(입력키 부분 더블클릭시 변경 가능)을 할 때 fn + shift + space를 이용하면 위 사진와 같이 Shift+Space조합으로 이전 언어로 변경하기 키가 사용가능하도록 바뀐 것을 볼 수 있습니다.

MS AzurePass 등록하기

시작 전 MS계정이 모두 만들어져 있다고 가정합니다.

MS AzurePass(애저패스)란?

마이크로소프트에서는 자사 클라우드 서비스 Azure의 프로모 코드인 AzurePass를 행사등에 따라 발급해 줍니다.

무료 크레딧의 경우 30일의 제약이 있고 해외결제가 가능한 카드가 필요하지만 AzurePass를 통해 등록할 경우 카드가 필요하지 않습니다.

AzurePass에서는 월 100달러(한국 12만원)의 크레딧을 3개월간 제공해 줍니다.

AzurePass 등록하기

유의) 아래 과정은 MS계정 가입과는 별도입니다. 계정이 없다면 가입을 먼저 진행해주세요!

애저패스를 등록하기 위해서는 애저 공식 사이트가 아닌 애저패스의 사이트에서 진행해야 합니다.

공식 사이트에 들어가시면 아래와 같은 화면이 나옵니다. Start버튼을 눌러주세요.

    1. 스타트 버튼을 누르면 아래와 같은 화면이 나옵니다. 받으신 애저패스의 번호를 입력해 주신 후, 아래의 Claim Promo Code를 눌러주세요.

    1. Claim PromoCode버튼을 누르면 아래와 같은 화면이 나옵니다. 잠시 기다려 주세요.

    1. PromoCode의 등록이 완료되면 애저패스 활성화 버튼이 나옵니다. Activate버튼을 눌러주세요.

    1. Activate 버튼을 누르면 나오는 등록 화면입니다. 사용자 정보, 전화번호를 입력 후 구독계약에 동의후 ‘등록’버튼을 눌러주세요.

    1. 잠시 기다려주신 후 아래 화면을 보시면 성공적으로 등록이 완료된 것이랍니다.

    1. 이제 Azure Portal으로 이동해 작업을 계속하세요!

Deploy Django to MS Azure with Fabric3

한국어 버전은 Django MS Azure에 Fabric으로 배포하기에서 보실 수 있습니다.

This guide covers about deploying DjangoGirls Tutorial to MS Azure Virtual machine(Ubuntu 16.04 LTS) with Fabric3.

You’re probably participant in DjangoGirls Tutorial Workshop and you’ll be now on ‘deploy’ step on it.

Today we’re going to deploy our django project to Azure which is provided with MS.

If you didnt’ register your AzurePass yet, please precede this guide first: Register Azure and redeem AzurePass

(If Windows) Using cmder

You can’t use linux commands like git or ssh on your cmd, so we’re going to use great shell program which named cmder.

First, click this link:cmder.zip to download cmder. (It may take times.)

Second, unzip downloaded cmder.zip file. (It’ll take some times too.) And then you got this!:

Execute cmder.exe in this folder. If you execute cmder.exe as a first time you’ll be see Security Warning like this: just click RUN.

And one time more, if you execute cmder for the first time, there will be another warning like this: click first option, “Unblock and continue”.

It’ll take some times when you run cmder first time. This wouln’t appear next time, so please wait for a moment!

If you see this, you’re ready to use cmder NOW!

If you’re following DjangoGirls Tutorial, you probably made folder named djangogirls. Let’s get into it.

cd is command to ender the folder! Let’s get into djangogirls folder with cd djangogirls.

Let’s start deploy then.

Deploy Azure Virtual machine

You’ll see this screen if you logged in to Azure Portal.

Azure Portal Dashboard

Let’s make Virtual machine with clicking VirtualComputer(가상 컴퓨터) button.

Now let’s add Virtual machine with ‘+Add’ button.

If you click + Add button, you’ll see another options which provides many OS. But we’re going to use Ubuntu Server today.

If you clicked Ubuntu Server there’ll be server lists like this: we’ll use Ubuntu Server 16.04 LTS.

Then you’ll see Create button. Click it!

You’ll see configure window when you click Create button. Fillout blanks like picture lower.

Username should be django (surelly this is not critical but you may encounter issues.

You may set your password on your own, but it shoud be longer/equal than 12. Please remember not to reset it later.

Select locaiton on Korea Centeral or SouthEast Asia(which available one).

Now we have to choose server size. We’ll setup just one django server so we’ll choose DS1_V2, the left one.

Don’t worry, you won’t be charged :)

Next step you have to setup storage settings. Just select Use managed disks to ‘Yes’.

And then click Network Security Group(Firewall) settings. After click on it, you’ll see pre-configured setting SSH (TCP/22). We’re going to add HTTP (TCP/80)

Click + Inbound Rule add Button, and fillout blanks like this and click OK button.

Now default settings are finished! Just click OK button.

And one more time, click confirm button.

And lastly, click confirm button more! I know you’re tired with confirm button, but this is process of Azure :)

If you see your azure dashboard again like this, your server deployment is finished :)

Please wait until your server is successfully installed! (This will take upto 5mins.)

Your browser will redirected to your server info page when your server is successfully installed.

Get Azure Server Configurations

You can access to your server info with clicking server icon-which tells Running.

On this page you can see your server’s ‘Public IP Address’. ip is set of numbers which provides your computer access to internet. We can upload and deploy our django project through this ip.

You can see this example server’s ip, 13.67.60.234. Surelly we can access to our server with this numbers but we can’t remember easily with it.

So we’re going to use domain like djangogirls.com to that ip.

First of all, copy(CTRL+C) your virtual machine’s ip!

Get free domain and connect to Virtual Machine

You may know about popular domains like .com or .net. But they are paid one(10 dollars per year) so we’re going to use free domain.

Let’s go to Dot.tk.

This Dot.tk provides .tk domains as free! I’ll check djangogirls-seoul-tutorial-en.tk as example. You should think of your own domain name and click Check Availability!

Oh, it’s available! Just click ‘get it now’ button and add to cart.

You’ll see this page when you clicked ‘checkout’ button. Just click ‘Use DNS’ button and input ip address of your virtual machine(azure) and click ‘Continue’.

If you forgot ip address of your virtual machine, go to Azure portal and check your machine’s ip again!

You’ll see checkout page and you have to login. You can login with your social media account like Google or Facebook!

Sometimes there are some errors(404 or others..) then you can restart from “Get free domain and connect to Virtual Machine” on this guide.

If you successfully logined, you’ll see form to input your info, but you don’t have to fill it all. Just click Agress Terms and conditions and Conitnue button, your order will be finished!

Great! You’ve just connect your own domain to your server!

Install Fabric3

Now your server is connected with yourdomainname.tk domain. But if you try to access to that address, you can see nothing at all.

Because your server doesn’t have any django code and ofcourse, even django!

We’ll upload and deploy our django project with just one command line through Fabric3.

Let’s install fabric3 on our computer. You can install fabric3 with this command:

1
pip install fabric3

Remember: NOT fabric BUT fabric3! Don’t forget 3. fabric is python2 project.

Downlaod fabfile.py and edit deploy.json

Download Fabfile for Django and unzip it.

You can see deploy.json and fabfile.py inside of it. Move 2 files into your django folder(where manage.py exists)

Inside deploy.json, we can edit our server(virtual machine) info.

1
2
3
4
5
6
7
8
9
{
"REPO_URL":"Your Github Repository URL",
"PROJECT_NAME":"DjangoProject folder's name(where settings.py exists)",
"REMOTE_HOST":"Your domain(ex: djangogirls-seoul-tutorial-en.tk )",
"REMOTE_USER":"django",
"STATIC_ROOT":"static",
"STATIC_URL":"static",
"MEDIA_ROOT":"media"
}

Change REPO_URL, PROJECT_NAME, REMOTE_HOST. Other values are already setup for djangogirls tutorial we followed.

Every values must be in “”!

Upload and deploy code thorugh Fabric3

We can use fabric through fab command. Like this: fab new_server, fab deploy, fab create_superuser. This commands will execute commands on remote server(azure virtual machine which we made)

When you use fabric for new server, just type this command and execute: fab new_server. this will install python3, apache2, and mod_wsgi to run django.

1
fab new_server

When you edit django code and committed & pushed to github, then use fab deploy command. This will fetch latest code on github and migrate db.

1
fab deploy

When you want to create superuser, just execute fab create_superuser and there’ll be creating superuser prompt.

1
fab create_superuser

Whoa!

You’ve just upload and deploy REAL working web service on Azure! Congratulation!

Django MS Azure에 Fabric으로 배포하기

If you looking for English version, goto Deploy Django to MS Azure with Fabric3.

이번 가이드에서는 DjangoGirls Tutorial를 Fabric으로 Azure 가상 컴퓨터(Ubuntu16.04LTS)에 올리는 과정을 다룹니다.

지금 이 글을 읽고 있는 분들은 아마 장고걸즈 워크숍에 참가해 DjangoGirls Tutorial을 따라가다 이제 배포를 해볼 단계에 도착하셨을거에요.

오늘 우리가 만들어본(만들고 있는) Django 프로젝트를 MS가 서비스하는 Azure(애저)에 배포해보는 시간을 가져볼거에요.

만약 여러분이 AzurePass를 아직 계정에 등록하지 않았다면, Azure 가입하고 AzurePass 등록하기를 먼저 진행해 주세요.

(윈도우의 경우) cmder 설치하기

윈도우에서는 gitssh등의 명령어를 cmd에서 바로 사용할 수 없어요. 그래서 우리는 cmder라는 멋진 프로그램을 사용할 거에요.

우선 cmder.zip을 클릭해 cmder를 받아주세요. (84MB정도라 시간이 조금 걸릴거에요.)

다운받은 cmder.zip 파일의 압축을 풀어주세요.(이것도 시간이 조금 걸릴거에요.) 그러면 다음과 같은 내용이 보일거에요.

여기 있는 cmder.exe 파일을 실행해주세요. 실행하면 아래와 같은 Security Warning이 뜰 수 있어요. RUN을 눌러주세요.

만약 여러분이 cmder를 처음 실행하신다면 아래와 같은 워닝이 뜰거에요. 제일 첫번째 옵션인 “Unblock and continue”를 눌러주세요.

첫 실행시 아래 화면에서 약간 시간이 걸릴 수 있어요. 다음번 실행부터는 뜨지 않을테니 잠시만 기다려주세요!

아래 화면이 뜨면 여러분이 멋진 cmder를 쓸 준비를 마친거랍니다!

장고걸즈 튜토리얼을 따라오는 중이시라면 djangogirls라는 폴더를 만드셨을거에요.

폴더로 이동하는 명령어가 cd입니다! cd djangogirls라고 입력해주세요.

이제 배포를 진행해볼게요.

Azure 가상컴퓨터 만들기

Azure Portal에 들어가 로그인 하시면 아래와 같은 화면을 볼 수 있습니다.

Azure Portal 초기 대시보드

이제 대시보드 왼쪽의 메뉴에서 가상 컴퓨터를 눌러보시면 아래와 같은 화면이 나옵니다.

이제 가상 컴퓨터를 추가해봅시다.

+ 추가 버튼을 눌러주시면 아래와 같은 수많은 선택지가 나오는데요, 우리는 그 중에서 Ubuntu Server(우분투 서버)를 사용할거랍니다. Ubuntu Server를 클릭해주세요.

우분투 서버를 클릭하면 아래와 같이 서버 버전들이 나옵니다. 우리는 오늘 Ubuntu Server 16.04 LTS를 사용할거에요.

우분투 서버 16.04를 선택하고 나면 아래와 같이 만들기 버튼이 나올거에요. 버튼을 눌러주세요.

만들기 버튼을 누르면 아래 사진처럼 기본 사항을 설정하는 창이 나올거에요. 내용을 화면 사진 그대로 채워주세요.

사용자 이름은 가이드 다음부분에서 이용할 django로 하셔야 합니다.

암호는 각자 사용하는 암호를 입력하시면 되는데요, 12자리 이상을 요구하기 때문에 약간 어려우실 수 있어요!

위치는 대한민국 중부/남부로 해주세요. (안되는 경우 아시아 남동부로 해주세요!)

이제 서버의 크기를 골라야 하는데요, 오늘 우리는 장고 서버만을 띄울 것이기 때문에 가장 왼쪽에 있는 DS1_V2를 이용할거에요.

AzurePass를 등록하면 돈을 지불하지 않아도 되니 걱정하지 마세요!

이제 다음으로 넘어가면 저장소 설정을 해야 해요. 이부분에서는 ‘관리 디스크 사용’을 ‘예’로 클릭해주세요.

그 다음으로는 아래쪽의 네트워크 보안 그룹(방화벽)을 클릭해 주세요. 클릭하시면 아래와 같이 SSH (TCP/22)만 인바운드 규칙에 들어가 있는 것을 확인할 수 있어요. 우리는 여기서 HTTP (TCP/80)을 추가해 줄 거에요.

+ 인바운드 규칙 추가 버튼을 눌러주시고 사진과 같이 칸을 채워주시고 확인 버튼을 눌러주세요.

이제 설정이 모두 끝났어요! 아래쪽의 확인버튼을 눌러주세요.

다시 한번 확인 버튼을 눌러주세요.

이제 정말로 다음 확인버튼만 누르면 서버 설치가 끝나요!

이제 조금만 기다려주시면 서버 설치가 끝난답니다!

아이콘의 설명이 Creating에서 Running으로 바뀌면 설치가 끝난거에요.

Azure 설정 확인하기

Running으로 바뀐 아이콘을 클릭해주시면 아래 화면으로 들어올 수 있어요.

애저에서 가상컴퓨터가 생기면 공용 IP 주소라는걸 하나 갖게 된답니다. ip라는 것은 서버나 컴퓨터가 인터넷에 접속할 수 있게 해주는 일련의 번호인데요, 우리는 이 ip를 통해 우리 장고 프로젝트를 서버에 올리는 작업을 진행할 수 있어요.

지금 화면에 보이는 가상컴퓨터의 ip는 52.231.30.148인데요, 이렇게 숫자로만 되어있으면 우리는 기억하기가 어려워요.

그래서 djangogirls.com와 같이 사람이 이해하고 외우기도 쉬운 도메인을 저 ip주소에 붙여줄거에요.

자, 우선 여러분의 가상 컴퓨터의 ip를 복사(Ctrl+C / CMD+C)해두세요!

무료 도메인 얻어 가상컴퓨터에 연결하기

.com, .net와 같이 유명한 도메인은 돈을 주고 사야한답니다.(1년에 만원정도 나가요) 하지만 우리는 오늘 무료 도메인을 연결해 볼 거에요.

우선 Dot.tk로 들어오세요.

이 Dot.tk에서는 .tk 도메인을 무료로 제공하고 있어요. 우선 djangogirls-seoul-tutorial이라는 이름으로 찾아볼게요. 값을 입력하고 Check Availability를 눌러주세요!

여러분은 여러분이 원하는 주소를 검색해보세요! (ex: myfirstdjango 등등)

오, 다행히 주소가 남아있어요. 이제 Get it now!버튼을 눌러 장바구니에 담아볼게요.

장바구니에 담은 도메인을 Checkout버튼을 눌러주면 아래 화면으로 넘어올거에요. Use DNS버튼을 눌러주신 후에 IP address 칸에 아까 애저 가상컴퓨터의 ip를 입력해주신 후 Continue를 눌러주세요.

Continue를 누르면 로그인 화면이 나와요. 구글이나 페이스북의 소셜 로그인을 이용할 수 있어요!

페이스북은 가끔 오류가 나기도 해요. 그럴때는 구글이나 MS Live계정으로 다시한번 시도해주세요.

로그인이 완료되면 아래와 같이 자신의 정보를 입력하는 부분이 나와요. 꼭 다 채울필요는 없어요!

주문 거래 동의 체크상자를 클릭한 후 계속 버튼을 누르면 주문이 완료된답니다! 좋아요!

Fabric3 설치하기

이제 여러분의 서버는 여러분이입력한이름.tk라는 인터넷 주소로 연결되었어요.

하지만 아직 여러분의 서버에는 아무것도 설치되어있지 않아요. 물론 장고도 설치되어있지 않아요.

이제 Fabric3이라는 멋진 자동화 도구를 통해 명령어 한 줄로(마치 startapp처럼) 진짜 서버에 배포하는 멋진 작업을 해볼거에요!

우선 여러분의 가상환경에 fabric3을 설치해줘야 해요. fabric3은 아래 명령어를 통해 설치할 수 있어요.

fabric이 아니라 fabric3입니다! 3을 빼먹지 마세요. 그냥 fabric은 파이썬2용이랍니다.

1
pip install fabric3

deploy.json 수정하기

이제 Fabfile for Django를 클릭해 압축파일을 받아 풀어주세요.

안에 deploy.jsonfabfile.py가 보일거에요. 이 두 파일을 여러분의 장고 폴더(manage.py파일이 있는 곳)안에 넣어주세요.

deploy.json파일 안에는 우리 서버의 정보를 적어넣을 수 있어요.

1
2
3
4
5
6
7
8
9
{
"REPO_URL":"깃헙Repo주소",
"PROJECT_NAME":"프로젝트폴더(settings.py가있는 폴더)의 이름(ex: mysite)",
"REMOTE_HOST":"여러분이 만든 도메인주소(ex: djangogirls-seoul-tutorial.tk )",
"REMOTE_USER":"django",
"STATIC_ROOT":"static",
"STATIC_URL":"static",
"MEDIA_ROOT":"media"
}

파일에 있는 REPO_URL, PROJECT_NAME, REMOTE_HOST 부분을 채워주세요. 나머지 값은 우리가 따라한 튜토리얼에서 이미 설정되어있어요.

모든 값은 “큰 따옴표” 안에 들어가야 한다는 것을 주의하세요!

Fabric으로 서버에 올리기

Fabric을 사용하기 위한 명령어는 fab이라는 명령어입니다. 이 fab뒤에 new_server, deploy, createsuperuser등을 덧붙여 실제로 원격 서버에 명령을 내리는거에요.

서버에 처음 올릴 때는 fab new_server 명령어를 이용하세요. 파이썬3 설치부터 Apache2설치와 mod_wsgi설치까지 완료해준답니다.

1
fab new_server

만약 여러분이 장고 소스를 수정(커밋&푸시)후 서버에 올리고 싶으시다면 fab deploy 명령어를 이용하세요. 장고 앱을 새로 실행해주고 manage.py migrate, manage.py collectstaticfiles등의 명령을 서버에 실행해 준답니다.

1
fab deploy

우리가 진행하는 튜토리얼에서는 슈퍼유저 만들기 항목이 있어요. 여러분의 컴퓨터에서는 manage.py createsuperuser를 통해 만들었지만 서버에 띄운 장고에 슈퍼유저를 만들어 주려면 fab create_superuser를 이용해주세요.

1
fab create_superuser

짜잔!

여러분은 이제 Azure에 올라간 진짜 웹 서비스 하나를 만들었어요! 이제 여러분은 장고로 웹 서비스를 만드는 것의 처음부터 끝까지를 모두 알게되었어요! 축하합니다 :D

배포한 Django 서비스 Exception Sentry로 받아보기

이번 포스팅은 wsgi기반으로 동작하는 django서비스를 대상으로 합니다.

Django 서비스를 실제 서버에 배포하면 보안을 위해 프로젝트 폴더의 settings.py파일 안의 DEBUG항목을 False로 두고 배포합니다. 이렇게 디버그모드를 끌 경우 장고에서 기본적인 보안을 제공해 줍니다. 그러나 만약 View나 Model에서 Exception이 발생했을 경우 클라이언트에 흰색의 500에러 화면만을 띄워줍니다.

이 경우 개발자에게도 장고의 에러 화면을 보여주지 않습니다. 따라서 Exception이 발생할 경우 개발자(혹은 운영자)에게 에러를 전송할 필요가 있습니다. wsgi 기반으로 서버를 구동할 경우 에러로그는 Apache2나 NginX등의 웹서버의 접근/에러로그가 있으며 Wsgi의 에러로그로 두가지가 있습니다.

장고서버의 경우에는 Wsgi의 에러로그에 로그를 쌓습니다. 그러나, Django 프로젝트에 LOGGERS 설정값을 추가해줘야 하며 에러 트래킹을 따로 설정해줘야 합니다.

이때 사용할 수 있는 것이 Sentry와 같은 서비스입니다.

이번 가이드는 Sentry for Django를 기반으로 진행합니다.

Sentry 설치하기

우선 raven을 설치해 줍니다.

raven은 Sentry를 위한 Python패키지입니다.

1
pip install raven --upgrade

Sentry settings.py에 설정하기

장고 프로젝트의 settings.py파일 안 INSTALLED_APPS에 아래 줄을 추가해줍니다.

1
2
3
4
INSTALLED_APPS = [
# 기존 앱 가장 아래에 추가해주세요.
'raven.contrib.django.raven_compat',
]

이제 Sentry용 환경변수를 추가해 줍시다. 아래 DSN_URL은 Sentry에 로그인 하신 후 Sentry for Django의 코드 부분을 복사하면 알 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# settings.py 파일 import문 아래에 raven을 import해주세요.
import os
import raven

# import아래 환경변수를 설정해주세요. 이 URL은 위 Sentry for Django에서 바로 찾을 수 있습니다.
DSN_URL = 'https://sampleurl1234141534samplesample:somemoreurl12341235dfaetr@sentry.io/123456'

# 기타 설정들(생략...)

# settings.py 파일 가장 아래에 RAVEN_CONFIG를 추가해주세요.
RAVEN_CONFIG = {
'dsn': '{}'.format(DSN_URL), # DSN_URL을 위에 적어주셔야 동작합니다.
'release': raven.fetch_git_sha(BASE_DIR), # Django가 Git으로 관리되는 경우 자동으로 커밋 버전에 따른 트래킹을 해줍니다.
}

Sentry wsgi.py에 설정하기

이제 장고 프로젝트 폴더 안의 wsgi.py 파일을 아래와 같이 수정해봅시다.

1
2
3
4
5
6
7
8
9
10
import os

from django.core.wsgi import get_wsgi_application
from raven.contrib.django.raven_compat.middleware.wsgi import Sentry

# 이 부분은 여러분의 장고 프로젝트 이름을 쓰세요..
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "장고프로젝트이름.settings")

# get_wsgi_application을 Sentry()로 감싸주세요.
application = Sentry(get_wsgi_application())

자, 이제 Sentry 사용을 위한 기본적인 설정이 끝났습니다. 여러분의 서비스를 다시 원래 서버에 배포해보세요.

Exception이 발생하면..

이제 여러분이 잡아주지 않은 Exception이 발생할 경우 아래와 같이 이메일이 옵니다.

sentry django integrity error log mail

이메일의 Issue 링크를 클릭하면 아래와 같이 에러로그 페이지가 나옵니다.

Sentry django integrity error log web page

조금 더 알아보기

이번 포스팅에서는 장고의 Wsgi에서 발생하는 에러(Exception)을 Sentry 미들웨어를 통해 관리합니다. 그러나 유저에게 500페이지를 보여주는것은 여전합니다.

만약 여러분이 미리 잡아준 상황을 Sentry로 보내고 싶으시다면 Sentry를 logging와 함께 쓰기를 참고하세요.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×