※ 장고 웹서비스를 간단히 구성해보려 보다 보니 사설이 늘어나서 정리해봅니다.
구성 자체는 심플하게 선택하였습니다. 선택 후 특장점을 알아보니 정리를 해두면 도움이 될것 같네요.
- Docker, Nginx, gunicorn, django
특장점이 있어서 이 선택을 하게 되었지만, 아는 사람에게는 단순한 내용이겠지만 모르는 사람에게는 설명이 필요할 거라 생각되기 때문에 조금 적어 보겠습니다.
... 사설은 접고
서버 관련해서 오래전부터 공부는 실사용과 비슷한 환경으로 맞춰서 해보았습니다. 물론 담당 업무가 아니기도 했으니 잘 잊어 버리고 생활하지만, 2003년부터 간간히 리눅스, 유닉스, 우분투 를 깔아서 사용해보고 있습니다. 인터뷰하는 곳에 가면 "단순한 건 할 수 있어요"라고 말하는데 공부하시는 분들에게는 많은 것을 해보시라고 이야기 해 드리고 싶네요.
언제 사용하게 될지 모르기도 하고 자주 사용안하면 안 해본거라 생각하다보니 누적된 경험치가 얼마나 도움이 되는지도 이야기해 드리기도 모호하지만, 도움이 되는 것은 분명합니다.
Docker
리눅스 설치부터 스터디가 시작해서 버철머신으로 넘어와서 요즘은 도커를 사용하고 있어서 도커선택이 되었지만, 왜 도커를 사용하는지 도커를 모르는 분들이 이글을 볼 수 있으니 간단히 적어보면, 도커 컨테이너에 접속하면 리눅스 환경을 사용할 수 있다고 보시면 됩니다. 버철머신의 경우 OS환경을 구성하기 위해 많은 리소스를 설정해야 하는데 도커의 경우 상대적으로 적은 리소스를 사용하기 때문에 사용을 하고 있습니다.
https://www.docker.com/why-docker/
아마존 서비스 중에도 도커를 사용한 서비스도 있어서 적용시에도 도움이 되지만, 개인적인 교육 및 오픈 소스 커뮤니티 용으로는 무료라는 것도 중요한 선택의 이유입니다.
Nginx
- 아파치 / NGINX - 생각없이 늘 사용하던 아파치와 개인적으로 8년전 쯤부터 이야기 들어오던 nginx 비교 후 nginx 선택
아파치의 경우 스레드 포크 방식으로 호출이 많을 경우 메모리 점유가 늘어나서 서버가 포화상태를 넘으면 서비스 중단이 발생한다고 알고 있고, NGINX를 호출이 늘어나도 이벤트 방식으로 비동기 처리방식이라 메모리 점유율이 호출과 비례해서 늘어나는 구조는 아니라고 알고 있습니다.
핵심을 정리하여 간단히 생각을 정리해보면 다음과 같습니다.
기존 웹서비스(Apache)는 프로세스를 스레드 방식으로 하면 서로 독립적으로 처리하는 프로그램이 생성되어 처리된다고 생각하면 됩니다. 일반적으로 빠른 처리가 가능하지만 많은 사용자(10000)를 처리 시 서비스에 문제가 있을 수 있습니다. 참고로 스레드 방식의 가장 큰 문제는 디버깅하기가 어렵다는 것입니다.
nginx의 경우 이벤트를 큐에 입력하여 이벤트 처리 방식으로 순차처리 방식이라 오래걸리는 작업이 걸리면 그로인해 뒷작업이 대기 상태로 오래 있게 됩니다. 이것을 비동기식 방법으로 해결하였다고 합니다. 하지만 큐의 사이즈를 넘어 선다면 서비스가 종료 되지는 않겠지만 누실되는 것이 발생될 것 같습니다. 이 내용은 윈도우 큐를 사용해본 사용자 경험에서 나온거라 nginx에서 어떻게 되는지는 찾아보아야 겠네요.
메모리 문제와 같이 서비스 중단의 발생없이 많은 서비스 요청에 대응 할수 있다는 점에서 nginx의 장점이 있어서 선택했습니다.
gunicorn : WSGI ( Web Server Gateway Interface ) 중의 하나
프레임워크의 웹 서버로 파이썬 스크립트가 웹 서버와 통신하도록 도와주며 웹 서버와 웹 어플리케이션 사이에 위치한다. 때문에 WSGI는 웹 서버와 웹 앱 두 가지의 특징을 가지고 있다.
웹 서버와 웹 앱
웹 서버는 html, image 등 정적인 파일, 소스들을 처리하며 Apache, Nginx를 예로 들 수 있다.
웹 앱은 Django, Flask와 같은 파이썬 프레임 워크라 할 수 있고 동적인 요청을 처리하고 웹 서버에게 처리한 결과를 돌려준다.
WSGI는 서버와 앱 사이에서 Callable Object 를 통해 웹 서버가 요청에 대한 정보를 웹 앱에 전달한다.
대략적인 구조를 보면 쉽게 이해가 될 것 같다.
자세한 분석보다는 개념적 이해를 하는 것이 좋을 것 같다.
django
오늘의 주인공. spring으로 게시판을 만들어 보았고 python으로 구현해 보고자 하는 내용이다.
https://docs.djangoproject.com/ko/4.2/intro/
Django
The web framework for perfectionists with deadlines.
docs.djangoproject.com
python은 현재 3.12 개발자 버전이 나왔고 로컬 개발 환경은 stable diffusion 경험을 위해 Python 3.10.6 환경으로 설정되어 있는 상태입니다.
django는 4.2버전이 최신으로 나와있네요. 사용버전에 대해서 잘 나와있네요. 일단 현재 설치되어 있는 파이썬 기준으로 장고 4.2버전 호환이 된다고 나와있네요.
https://docs.djangoproject.com/ko/4.2/faq/install/#faq-python-version-support
Django
The web framework for perfectionists with deadlines.
docs.djangoproject.com
장고 4.2 : Python 3.8~3.11
다음에 시간을 내서 버전별 특색과 장단점을 알아보고 python 버전과 호환성을 살펴보고 spring과 react로 구현한 db조회 게시판을 비슷하게 만들어 보겠습니다.
문제는 얼마나 걸리냐의 문제일 것 같고, 나중을 위해 정리하면 한달전에 파이썬을 입문하여 기본 문법을 확인하고 웹크롤링등 구글의 codelab을 사용해본 상태에서 spring과 react 복습용 게시판을 만들어 본 상태입니다.
1차 목표 파일럿시스템 소개...
2023.04.21 - [프로그램/Web] - spring boot vscode로 oracle table 조회 실행해보기(2023.4)
spring boot vscode로 oracle table 조회 실행해보기(2023.4)
개발 스펙을 검토중이라면 각 구성항목의 버전별 지원여부와 유무료 정책 및 버전별 특성을 확인하시는 습관을 들이기 바랍니다. 연습하거나 공부용이라면 이점을 확인 안하는 경우가 많아서
jsi0.tistory.com
2023.04.21 - [프로그램/Web] - Oracle23c 도커 설치 후 테스트 계정 생성(2023.4)
Oracle23c 도커 설치 후 테스트 계정 생성(2023.4)
테스트 프로그램 만들고 확인할 용으로 적어 봅니다. 2023.04.15 - [프로그램/짜투리상식] - Dorker에 Oracle 설치(2023.04) Dorker에 Oracle 설치(2023.04) 도커 설치 후 오라클 공식 홈페이지에 접속하여 최신
jsi0.tistory.com
2023.04.23 - [프로그램/react] - 간단하게 react 게시판 만들기 (2023.4)
간단하게 react 게시판 만들기 (2023.4)
때때로 정리를 했었는데 막상 다시하려니 무엇부터 봐야 할지 고민되네요. 다시 정리해 봅니다. 무척 돌아가는 정리가 될것 같네요. 파일럿 서비스로 동작유무 정도의 목적으로 기존 생각을 정
jsi0.tistory.com
'프로그램 > python&&AI' 카테고리의 다른 글
Django 웹 프레임 워크 간단 설명 (0) | 2023.05.10 |
---|---|
django 로컬 개발 서버 알아보기(2023.05) (1) | 2023.05.10 |
Notion AI를 이용한 Python 요약 (2) | 2023.04.13 |
1. 파이썬 개요와 공부 환경 (1) | 2023.04.13 |
python 강좌 (0) | 2023.04.12 |