728x90
1. 서버란 무엇인가?
- 일반인의 관점: 인터넷, 맨날 터지는 짜증나는 곳
- IT관련직 관점: 서비스가 동작하게 만드는 원천, 데이터가 다뤄지는곳
- FE 개발자 관점
- 정해진대로(API) 요청(request)을 보내면, 정대진 대로 응답(response)이 돌아오는 곳
- 모델링, 데이터베이스는 잘모르겠고 내가 클라이언트 개발하게 받고싶은 데이터 내놓고, 내가 넣으려는 데이터 알맞게 넣어줘!
- 요구하지만 매번 핑계되며 늦게 주는 곳
- BE 개발자 관점
- 효율적으로 클라이언트의 요구에 따라 데이터를 건네주고 저장하는 곳
- 데이터를 처리하는 곳
- 부하 분산, 인증, 쿼리 최적화, 보안(CSRF)등 조심해서 다뤄야 하는 예민한 아이
- 한번의 결정이 추후 확장할때 많은 리소스를 소비할수 있으니 신중히 결정!
- 알면알수록 점점 발전할수 있는 양파같은 매력적인 아이
- etc...
사전적 정의 같은건 이미 많이 나와있지만 각자의 관점에 따라서는 위와같다!
2. 서버는 어떻게 만드는가?
- python, java, js, php등 많은 프로그래밍 언어를 통해 직접 서버를 만들수 있지만 각각의 언어엔 python-django, java-spring, js-express, php-lalavel과 같이 유명한 서버 프레임워크가 있다. 이 프레임워크를 활용하여 서버를 만들수 있다.
- full-featured framework (drf) vs not full-featured framework (express)
- full-featured framework는 이미 서버 개발에 필요한 대부분의 기능이 구현 되어있어서 crud 구현이 간단하며 그저 이용만 하면되지만 이에 맞게 해당 프레임워크에 대한 공부또한 많이 해야한다.
- not full-featured framework는 서버 개발에 필요한 최소한의 기능만 주어져있어서 아무래도 crud 구현에 비교적 시간을 할애해야 하겠지만 필요한대로 입맛에 맞게 개발할수 있는 장점이 있다.
- 즉, drf 잘하려면 공식문서 자세히 들여다 봐야한다!!!
3.ORM 이란?
- Object Relation Mapping
- SQL(Structured Query Language) 데이터베이스 언어를 python의 환경에 맞게 객체로 쉽게 가져올수 있도록 하는것
- Table -> Class, Column -> Property, Row -> Instance
#SQL
SELECT * FROM user WHERE ~~
#ORM
User.objects.filter(~~)
- SQL문에서도 마찬가지지만 drf의 ORM에서는 쿼리를 가져올때 최적화하는 작업이 중요하다!
- 캐싱, transaction활용, selected_related, prefetch_related등을 활용하여 최적화 작업을 진행한다
4. RESTAPI란?
프로젝트(1)프론트, 백엔드 통신 방법(feat.django, react)
새롭게 프로젝트를 시작하며 개발전 1주일간 3파트로 프로젝트 사전 준비를 하였다. (1) 프론트, 백엔드 통신방법 (2) 기술스택 선정, 협업 노하우 (3) token, django user, 소셜로그인 위의 3가지를 사전
leeceo97.tistory.com
위글에 정리를 해뒀다
- 한마디로, METHOD로 행동을 구분하고, URL에 가져올 자원과 이를 식별할 기준을 나타내며 행동에 대한 응답은 상태코드와 메시지로 응답하는 방식이다.
request GET(method) https://corin2.com/category(가져올 자원)/:id(식별자)
response 200(행동에 대한 상태코드) OK(메시지) {"Data": "Oh My God"} (데이터)
5. drf에서의 서버 동작은?
- request -> middleware -> router -> parser -> viewset(view) -> permission -> serializer -> model -> DB -> model -> serializer -> viewset(view) -> renderer -> response의 과정을 거친다
- request: 말그대로 클라이언트가 서버로 요청을 보내는과정
- middleware: 요청에 대한 전/후처리를 하고 싶은것이 있다면 미리 만들어 둔다(ex.인증)
- router: urls.py 요청을 view로 연결해줌
- parser: request의 content-type에따라 request data/ request FILES등을 처리(ex. iAmBabo-> i_am_babo)
- viewset(view): 정확하게 말하면 viewset=view의 집합이며 요청에 따른 알맞은 로직을 수행하는 곳
- permission: has_permission은 view요청이 들어오기전, has_object_permission은 view요청후 인증 확인
- serializer: model 직렬화/역직렬화
- renderer: parser와 반대되는 개념
- response: request와 반대로 서버가 클라이언트의 요청에 따른 응답을 보내는 과정
728x90
'기술 > Django' 카테고리의 다른 글
two scoops of django - django 코딩 스타일 맞춰보기(2) (0) | 2022.08.30 |
---|---|
two scoops of django - django 코딩 스타일 맞춰보기 (0) | 2022.08.29 |
drf TDD 적용하기 (0) | 2022.01.31 |
drf nginx gunicorn https적용하기(react-drf certbot) (1) | 2021.12.15 |
django 초기 프로젝트 설정(secret감추기, database감추기) (0) | 2021.06.10 |