django
-
[개념 정리] Redis와 CacheOpsdjango 2022. 2. 14. 22:07
# Cache란? : 캐시 (Cache)란 자주 사용하는 데이터를 미리 복사해 놓은 저장소를 말하며, 캐싱은 자주 사용하는 데이터를 따로 저장해 놓고 해당 데이터를 사용할 필요가 있을 때에는 바로 사용하는 일련의 과정을 의미한다. 일반적으로 우리가 데이터베이스에서 데이터를 가져온다는 것은 하드디스크에서 가져온다는 뜻인데, 하드디스크는 속도로 따지면 최하위권이다. 그래서 가져올 데이터의 용량이 크다면 그만큼 로딩에 시간이 걸리게 된다. 그래서 자주 사용되지만, 잘 변경되지 않는 데이터는 캐시 메모리에 넣어놓고 쓰면 용량이 큰 데이터도 매우 빠른 속도로 로딩이 가능해진다. Django에서 사용자가 많아지면, 그만큼 DataBase에 Query를 많이 보내게 되고, DB에 부하가 많아지고 서비스가 느려진다. ..
-
[개념 정리] Celery란 무엇인가?django 2022. 2. 14. 19:52
# 동기 vs 비동기 - 동기 : 요청과 그 결과가 동시에 일어난다. 요청을 보낸 후 응답(=결과)를 받아야지만 다음 동작이 이루어지는 방식 - 비동기 : 요청과 그 결과가 동시에 일어나지 않는다. 요청을 보낸 후 응답를 받지 않아도 다음 동작을 할 수 있음 # Celery란? : Celery는 비동기적으로 작업을 처리하고 응답을 하게 해주는 파이썬 프레임워크이다. Django로 API 서버를 개발하고 운영하면서 사용자 요청에 포함될 필요가 없는 불필요한 과정이나 매우 무거운 쿼리 실행을 포함하는 경우가 있다. 예를 들어 회원 가입 축하 이메일 발송, 어드민 주문내역 엑셀 다운로드 같은 기능이 이에 해당된다. 회원가입 축하 이메일 발송은 사실 고객(client)에게 중요한 부분이 아니다. 고객은 일단 가..
-
[개념 정리] docker를 왜 사용할까?django 2022. 2. 14. 02:39
우리가 만약 새로운 서버에 기존 개발 환경을 다시 구축해야 하는 경우를 생각해보자. 언어, 웹서버, 데이터베이스, 자동 배포 툴 등 여러 가지 버전을 신경 써서 다운로드한 다음 서로 잘 맞물려 동작할 수 있도록 이것저것 설정해주어야 한다. 필자도 최근에 페이스북을 클론코딩하다가, 서버 권한 설정을 잘못 건드려 서버를 새로 파서 개발환경을 다시 구축을 했었는데 너무너무 귀찮고 번거롭던 경험이 있다. 실제로는 이런 경우 외에도 더 좋은 서버로 이전하거나, 늘어난 접속량을 처리하기 위해 서버를 여러 서버로 확장해야 하는 경우도 있다. 이때마다 동일한 개발환경을 일일이 구성해주는 것은 골치 아픈 일이다. 또한 열심히 코드를 짜서 이를 서버에 올렸는데, 내 컴퓨터는 윈도우고, 서버는 리눅스라 오류가 나 스트레스를..
-
[개념 정리] Django, Nginx 그리고 Gunicorn의 관계django 2022. 2. 13. 18:23
처음 서버를 배포했을 때, Nginx와 Gunicorn을 시키는 대로 설치해서 연동해주었는데, 실제로 이들 각각이 무슨 역할을 하는지 잘 몰랐다. 이번 포스팅에서는 서버 배포 시 Nginx와 Gunicorn의 역할에 대해 알아보고자 한다. 먼저 설명에 앞서 다음 그림을 살펴보자. # Web Server vs Web Application Server : 클라이언트가 요청을 보내면 먼저 Web Server가 이를 받는다. 웹서버는 클라이언트의 요청에 대해 html, css, 이미지 등 정적 파일 (static file)을 응답한다. WAS는 Web Application Server의 줄임말로, 클라이언트의 요청에 의해 실제 DataBase에 값들이 수정/생성되는 동적인 처리를 전문으로 한다. 웹서버가 정적인..
-
[개념 정리] django TestCase의 setUp과 tearDown, 그리고 setUpTestData?django 2022. 2. 13. 02:44
# setUp 메서드란? : 이름에서 알 수 있듯이 test_로 시작되는 메서드들을 실행하기 전에 세팅용으로 실행하는 메서드이다. setUp을 잘 활용하면 기능들을 테스트할 때 공통으로 자주 쓰이는 데이터들을 미리 database에 생성하고 재사용이 가능해 코드 수를 줄이고 더욱 깔끔하게 코드를 구성할 수 있다. # tearDown 메서드란? : tearDown은 setUp과 짝을 이루는 메서드로, 테스트 과정 중에 생긴 데이터를 제거해준다. 예를 들어 User App에서 하나의 tests에는 회원가입뿐 아니라 로그인, 팔로우 등과 같은 여러 테스트가 진행되는데, 정확한 테스트 결과를 위해서 Clean Up을 반드시 해주고 다른 테스트를 진행하는 것이 좋다. # setUp vs setUpTestData?..
-
[개념 정리] Mock란 무엇인가?django 2022. 2. 13. 01:19
# Unit Test란? : Unit Test란 이전 글에서도 설명했지만, 모듈이나 애플리케이션 안에 있는 개별적인 코드들의 가장 작은 단위에서 코드들이 원하는 대로 작동하는지 테스트하는 것으로 우리가 흔히 app마다 기능이 잘 작동하는지 점검하기 위해 tests.py에 짜는 코드들이다. # Mock? : 우리가 만약 SMS 문자, 결제 API, 소셜 로그인 등을 구현했다면, 이 외부 API를 테스트할 때마다 시간과 비용이 들어 오로지 테스트를 위해 실행하기 힘들 수도 있다. 이때 사용되는 것이 '가짜'라는 뜻의 Mock이다. 개인적으로 테스트 과정에서 가짜 데이터들을 생성하기 위해 Faker라는 모듈을 사용해본 적은 있지만, 이 unittest.mock은 처음 접해보았다. Mock은 실제 객체를 만들기..
-
[개념 정리] Multi Threading, Multi Processing 차이점django 2022. 2. 12. 02:09
오늘 아침에 있었던 기술 면접에서 django의 multi-threading에 관한 질문이 있었는데, 구체적이지는 못해도 간략하게라도 대답을 못한 게 아쉬워서 간단하게 개념을 정리해보고자 한다. # Multi-Threading, Multi-Processing 이란? : 파이썬은 기본적으로 싱글 쓰레드에서 순차적으로 동작한다. 따라서 병렬 처리를 하기 위해서는 threading이나 multiprocessing과 같은 별도의 모듈을 사용하여 구현해야 한다. process란 CPU 하나에서 진행되는 작업이며 thread는 process내에서 실제로 작업을 수행하는 주체이다. 하나의 process 는 여러 개의 thread를 가질 수 있다. 한 process의 thread들은 서로 메모리를 공유하며, proce..
-
[개념 정리] Test의 종류에는 무엇이 있을까?django 2022. 2. 11. 16:59
# Test의 중요성 : 개발에 처음 입문을 한 사람이라면 누구나, Testcase를 작성하는 것이 귀찮게 느껴졌을 것이다. 기능이 얼마 없는 웹/앱의 경우 새로운 기능을 구현할 때마다 일일이 Testcase를 코드로 추가하는 것이, 직접 수동으로 Postman 등을 이용하여 기능을 테스트하는 것보다 비효율적이라고 생각할 수도 있다. 하지만 기능들이 점점 늘어나 웹/앱의 규모가 점차 커지면 새로 구현한 기능과 기존 기능들끼리 서로 충돌이 발생하게 되고, 이 때 충돌 원인을 직접 수동으로 찾는 것은 시간도 오래 걸리고 막막하다. 따라서 개발자라면 누구나 귀찮더라도 Testcase를 꼼꼼히 작성하는 습관을 들이는 것이 미래를 생각했을 때 매우 좋다. # Test의 종류 : 바로 오늘 아침 있었던 면접에서 면..