# 15. TIL

이지훈·2021년 5월 26일
0

TIL

목록 보기
15/33
post-thumbnail

wanted에서 파이썬 개발자 채용공고를 보니 원하는 기술 스텍이 있는 것을 알았다. 그래서 이대로 공부를 하면 되지않을까 싶었다.

근데 모르는 영어단어만 나왔다.(App Engine, FastAPI 등...) 💦

이 스텍들을 정리한 후, 이 기술들이 어떻게 쓰이는지 알아보기위해 검색을 했다.


1. App Engine 기반이란?

회사의 클라우드 플랫폼에서 구동되는 웹 프레임워크를 말한다. 대규모 요청을 처리해야하면 여러가지 설정을 해야하는데, App Engine이 다 해주니 편리하기 때문에 사용.

1-1. Google App Engine(GAE)

Google의 infrastructure를 이용하여 원하는 웹 어플리케이션을 개발/배포/관리하는 것

  • 완전 관리형(Fully managed)
  • Load BalncerScaling 설정은 간단한 옵션으로 관리하거나 스스로 관리해준다.
  • Instance가 죽었다고해도 버튼 클릭 한번이면 다시 인스턴스를 올려 자동으로 복구한다.(장애 허용정책: 장애는 일상적으로 발생하며 중요한 이슈가 아님)
  • 무중단 서비스
  • HTTP URL 기반 라우팅(프로세스 단위로 리소스 구분)
  • PaaS(완전관리형)이다보니 프레임워크를 사용할 때 제약이 생김.

Jongha Kim 블로그, Joinc

1-2. Amazon Web Services

1-2-1. Amazon Relational Database Service(RDS)

RDS는 EC2 인스턴스를 기반으로 운영하는 서비스

인프라 및 데이터베이스 업데이트를 관리해주는 것 뿐만 아니라 까다로운 관계형 데이터베이스의 설치, 운영 그리고 관리를 지원(PaaS)

  • Amazon RDS는 현재 MySQL, Oracle, SQL Server, PostgreSQL, MariaDB, Aurora(MySQL과 호환)을 비롯한 총 6가지 데이터베이스 엔진을 지원하고 있습니다.

  • 데이터베이스 대신에 RDS를 사용하게 되면, OS 및 데이터베이스의 설치 및 관리 그리고 업데이트를 따로 할 필요가 없어짐

  • AWS 콘솔이나 AWS API를 통해 손쉽게 백업이나 복구(recovery)가 가능

1-2-2. Amazon Elastic Compute Cloud(EC2)

아마존닷컴의 클라우드 컴퓨팅 플랫폼 아마존 웹 서비스의 중앙부를 이루며, 사용자가 가상 컴퓨터를 임대 받아 그 위에 자신만의 컴퓨터 애플리케이션들을 실행(컴퓨터의 하드웨어를 가상화 환경에서 제공하는 일부관리형 서비스 IaaS)

기본적으로 데이터베이스 소프트웨어를 패치하거나 데이터베이스를 백업하거나 시점 복구를 활성화하는 것과 같은 복잡한 관리 프로세스들은 자동으로 관리가능

하지만 내가 직접 리눅스 위에 사용하려는 DB(oracle,maria db, postgresql등)를 설치하고 그위에 서비스해야함

JJo의 개발 기록공간, preamtree 블로그


2. 파이썬 웹 프레임워크

프레임워크란? 🙄

프레임워크란, 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것(Ralph Johnson)

프레임워크는 아래와 같은 장점과 단점이 있습니다.

장점

1. 효율적이다

  • 아무것도 그려지지 않은 제로에서 코드를 일일이 짜는 것보다 시간과 비용이 훨씬 절약되며 생산성이 좋아집니다.

2. Quality 향상.

  • 버그 발생 가능성을 처리해줌으로써 개발자가 반복 작업에서 실수하기 쉬운 부분을 커버해줍니다. 다수의 개발자가 사용하며 수정하다 보니 이미 검증된 코드라고 볼 수 있습니다.

3. 유지 보수가 좋다.

  • 프레임워크를 쓰지 않고 일일이 코드를 짜 놓은 경우, 회사 입장에서 개발 담당자가 바뀌어버리면 곤란해집니다. 그러나 Framework를 사용하면 코드가 보다 체계적이어서 담당자가 바뀌더라도 위험부담을 줄일 수 있으며 유지 보수에 안정적입니다.

단점

1. 학습시간이 길다.

  • 코드를 본인이 짜 놓은 것이 아니기 때문에, 프레임워크에 있는 코드를 습득하고 이해하는 데 오랜 시간이 걸립니다.

2. 제약 사항

  • 제작자가 설계한 구조를 어느 정도 유지한 채 코드에 살을 붙여나가야 합니다. 따라서 개발자는 자유롭고 유연하게 개발하는 데 한계가 있습니다.

moolgogiheart 블로그, MDN Django

우선 저는 파이썬 웹 개발자가 되길 원하므로 파이썬으로 작성된 오픈 소스 웹 애플리케이션 프레임워크를 조사했습니다. 🤐

위의 사진을 보고 다 공부할 수는 없어서 full과 micro 에서 많이 사용하는 1개만 공부하기로 했습니다.

2-1. Full Framework

2-1-1. Django

장고는 High-level Framework 입니다. 무조건 쉽고, 무조건 편하게 라는 느낌을 주는 프레임워크.

💻High-level Framework란?

프레임워크는 지속되는 문제들을 보다 쉽게 개발자들이 해결할 수 있도록 만들어진 일종에 솔루션이며, 하이레벨 프레임워크는 이런 지속되는 문제들을 해결하는데 실제적으로 거의 코딩이 필요없도록 지원해주는 프레임워크



디자인 철학은 6가지 카테고리로 수십가지 철학을 기본으로 하고 있는데, 우선 대표적인 4가지는 아래와 같습니다.

❗ Loose Coupling
프레임워크내 레이어들은 꼭 서로 알아야 하는 상황이 아니면 서로서로 알 필요가 없다.

❗ Django는 풀프레임워크지만, 그 안에 조각들은 독립적으로 작동한다.

❗ Less Code
코딩을 더 조금만 할 수 있도록

❗ Quick Development
빠르게 개발할 수 있도록

❗ Don't Repeat Yourself
코드 내용은 프로젝트 내 한 곳에만 있을 수 있도록. 프레임워크는 작은 정보에서 더 큰 것을 추론할 수 있어야 한다.

2-2. Micro Framework

2-2-1. Flask

플라스크는 WSGI 프레임워크 입니다. 플라스크는 당신이 어떤 프로젝트를 만들던 그에 맞게 높은 퍼포먼스를 보여줍니다. 큰 커뮤니티를 가지고 있으며 Jinja2를 사용하여 프론트엔드 작업도 가미할 수 있습니다.

SQLAlchemy가 아니더라도 그어떤 ORM도 사용할 수 있고, 쿠키와 클라이언트 사이드 세션을 지원합니다. 유닛테스트를 지원하며 우수한 성능의 디버거가 포함되어 있습니다.

장점

1. 미니멀하고 직관적

코드 몇 줄 이면 시작할 수 있습니다. Django 보다 코드가 10% 정도 밖에 안되는 가벼운 프레임워크 입니다. 꽤 쉽게 이해할 수 있고 꽤 쉽게 개발을 시작할 수 있습니다.

2. 빠른 개발 속도

보안 등 세밀한 부분에 신경을 쓰지 않아도 된다면, 아마 프로토타이핑에 가장 빠른 프레임워크라고 해도 과언이 아닐정도로 빠르게 개발할 수 있습니다. 패키징된 프레임워크 안에 이미 당신이 필요한 모든 것이 들어 있습니다.

단점

1. WSGI의 한계

WSGI는 구조적으로 한번에 많은 트래픽을 처리하기엔 느리다는 단점이 있습니다. WSGI의 구조적 한계를 극복하기위해 Gunicorn을 사용하지만 관리요소가 늘어나서 효율적이지 못합니다.

🙄 Gunicorn 이란?
gunicorn은 WSGI의 일종이다. 그리고 WSGI는 CGI의 일종이다. 이게뭔말🤔

1-1. Common Gateway Interface(CGI)

단순 정보의 나열뿐이었던 단방향 형태의 웹은 점점 수요가 다양해지고 당연스럽게 동적인 웹으로서의 발돋음을 하게 되는데 그 과정에서 사용자들이 입력하는 데이터를 처리할 로직이 필요했다. 이 데이터를 "공통적인 형태"로 주고받기 위해 만든 것이 바로 CGI이다.

1-2. Web Server Gateway Interface(WSGI)

파이썬 스크립트가 웹 서버와 통신하기 위해 만들어진 인터페이스이며 웹서버에서의 요청을 해석하여 파이썬 응용프로그램에 던지는 역할을 한다.

1-3. Gunicorn

Apache나 nginx로 들어오는 HttpRequest를 Python이 이해할 수 있게 동시통역하여 던져주는 역할이다.

1-4. Wep Application Server(WAS)

이렇게 CGI, WSGI, Gunicorn 같은 해석기와 웹서버가 함께 달려있는 어플리케이션을 WAS라고 한다.

2. 가파른 러닝커브

가볍다라는 말은 개발자가 하나부터 열까지 다 해야한다는 이야기이다.

지금 하고 있는 일이 어떤일인지 정확히 아는 전문가들이 고도화를 해야 하는 프레임워크이며 주니어 개발자라면 사용하기에 애로사항이 많은 프레임워크이다.

규도자 개발 블로그, din9rr 블로그



내일은 MySQL 같은 DBMS, 비동기모듈, Jenkins 를 공부해야겠다. 🤦‍♂️ 너무 길어...

profile
꾸준하게 🐌

0개의 댓글