Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

배포를 처음할 때 체크하면 좋은 것 #294

Open
davin111 opened this issue Nov 14, 2020 · 0 comments
Open

배포를 처음할 때 체크하면 좋은 것 #294

davin111 opened this issue Nov 14, 2020 · 0 comments
Labels
backend HW4 tip Share your knowledge and experience!

Comments

@davin111
Copy link
Member

davin111 commented Nov 14, 2020

open된 것 기준으로 200번째 Issue네요! 🦄

배포 환경에서 Django settings의 DEBUGFalse로 배포하는 것이 물론 바람직합니다. 그러나 배포를 처음하는 상황에선 여러 문제가 발생할 수 있고(예를 들어 local 환경에선 Redis가 있었는데 배포 환경의 새로운 EC2는 당연히 Redis를 새로 설치해야하는 상황이므로, 동작하던 GET /api/v1/seminar/ 가 동작하지 않는다든지) 이를 디버깅해보는 것이 필요합니다. 같은 코드를 배포했어도 여러 이유로 local과 배포 환경의 동작이 다를 수 있습니다. 그런데 처음에 이러한 확인도 되지 않았는데 무턱대로 DEBUG = False 로 배포를 시작하는 것은 스스로를 고통스럽게 하는 행동일 수 있습니다.(개발이 다 그렇지만 특히 배포는 자신이 난이도를 스스로 설정하게 되는 경우가 많습니다.) DEBUG의 존재 의의를 살려 debugging할 때 사용하고, 배포를 일정 궤도에 올린 거 같으면 False로 바꿔주도록 합시다.

비단 배포뿐 아니라 개발에 있어서 기본적인 자세를, 한 번에 많은 것을 하려고 하지 말고 '확실히 되었다'라고 확인할 수 있는 영역을 만든 후 조금씩 넓혀나가는 것이 좋다고 생각합니다.


배포 환경에서 문제가 생겼을 때 가장 우선적으로 해야할 것 중 하나는 log를 보는 것입니다. uWSGI와 Nginx 각 층위에서 로그를 볼 수 있습니다. uWSGI의 경우, ini 파일에 daemonize 값으로 log 파일이 만들어질 곳을 정할 수 있습니다. uWSGI를 해당 ini 파일을 이용해 실행시키면 그 경로에 log 파일이 생기고, uWSGI를 통해 요청이 처리될 때 해당 파일에 로그가 쌓이게 됩니다.
Nginx의 경우, root 하위의 경로(그렇기에 sudo가 필요합니다)인 /var/log/nginx/ 쪽에 access.logerror.log 등이 쌓입니다. sudo ls /var/log/nginx/를 통해 어떤 파일들이 있는지 listing 해보고 들어가보면 될 것입니다.
log 파일을 볼 때 위아래로 왔다갔다 하기가 너무 힘들다구요? 불편하면 다 방법이 있습니다. Vim 단축키 중 하나인 ggG를 (normal mode에서) 써보세요. Vim이 불편해요? 적응하세요.Emacs를 쓰세요


필수는 아니지만 비교적 바람직한 것을 말하자면, #2555번째 세미나에서 언급한 것처럼, local 환경에서도 환경 변수 하나로 RDS의 DB에 연결 가능하게 하는 것이 좋습니다. 가급적 여러 환경에서 수동으로 코드를 바꿔줘야할 일을 만들기보다 똑똑하게 환경 분기를 타게 하면 좋은 것이지요.


이미 GET /의 response를 다양하게 만들어보는 분들이 많은 것 같습니다. 여유가 있으시면 여러 일들을 해보시면 좋습니다. 우리가 하는 것은 서버 배포라서 프론트와 거리가 멀지만, Django는 사실 full-stack이 가능한 framework이기에 웬만한 눈에 보이는 프론트스러운 것도 모두 만들어서 보여줄 수 있습니다. Django templates을 이용해 Python으로 HTML을 쉽게 내려주는 것도 지원해주는 등(1번째 세미나 등에서도 언급한 Django의 MVT에서 우리가 일단 거의 안 쓸 거라고 했던 'T'입니다!) Django 자체적으로도 별별 것을 다 할 수 있게 해주고, 무엇보다 우리는 EC2 컴퓨터 하나를 갖고 자유자재로 뭐든 할 수 있습니다. 심지어 과제 3의 자유 과제로도 주어졌던, @Hank-Choi 가 만든 React frontend를 하나의 EC2에서 Django와 함께 다 배포하여 완전한 웹 서비스를 서빙하게 할 수도 있을 것입니다.

모두가 같은 환경에서 동일한 조건으로 배포하므로 서로서로 참고하고 도울 수 있는 부분이 많습니다. 다른 분들의 여러 이슈들도 잘 참고하고, 스스로 이렇게 하면 어떻게 될까 저렇게 하면 어떻게 될까 하는 실험 정신, 그리고 내가 하고 싶은 것을 직접 설정해서 동기 부여해보는 자세를 가지면 좋을 것 같습니다. 서로서로 잘 도와서 toy project 전 마지막 과제를 함께 잘 마쳐보도록 합시다! 🚀

@davin111 davin111 self-assigned this Nov 14, 2020
@davin111 davin111 added backend HW4 tip Share your knowledge and experience! labels Nov 14, 2020
@davin111 davin111 removed their assignment Nov 14, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backend HW4 tip Share your knowledge and experience!
Projects
None yet
Development

No branches or pull requests

1 participant