본문 바로가기

전체 글66

User Model 커스텀 하기 회원 가입, 로그인 기능을 구현하기 위해 인증 기능이 필요하고 이 인증 기능을 구현하기 위해 `User` 정보가 필요하다. 기본적으로, Django에서는 User모델을 제공한다. 하지만, User 정보에 전화 번호나 생년월일을 추가하고 싶을 때가 있다. 이렇게 직접 User 클래스를 생성하는 커스텀 유저 모델을 생성하기 위해 몇가지 방법이 존재한다. AbstractUser : 해당 User 클래스의 필드에서 추가 필드만 생성하는 방식 AbstractBaseUSer : 완전히 User 클래스를 커스터마이징 하는 방식 이외에도, 모델 그대로를 상속받는 Proxy Model과 1:1 관계를 유지하는 OnetoOne 모델이 있지만 1:1은 두가지 모델을 서로 참조하기 때문에 느리다는 단점이 있다. 프로젝트를 시.. 2023. 11. 28.
이터레이터? 제너레이터? 이터레이터(Iterator)와 제너레이터(Generator)는 알고도 가끔 헷갈릴 때가 있습니다. 먼저, 결론부터 말하자면 다음과 같습니다. iterable 객체 : `iter` 함수에 인자로 전달이 가능한 반복 가능한 객체 ex. List, Dict, Set, String, range() iterator(이터레이터) : 그 반복 가능한 객체를 `iter` 함수에 인자로 전달해 순회할 수 있는 객체 generator(제너레이터) : Iterator 객체를 만들 수 있는 함수 (메모리 절약!) 어떤 의미인지는 간략하게 알았으니 코드를 보면서 자세히 확인해봅시다. 🌱 iterable & Iterator 앞서 나왔듯, iterable한 객체는 iter가 가능(able)한 객체를 말합니다. 대표적인 iterab.. 2023. 11. 28.
Static 파일 관리하기 with AWS S3 연동하기 Static Files 웹사이트를 구현하려면 이미지나 CSS, Javascript 파일도 같이 제공해야한다. Django에서는 이런 파일을 staticfile이라고 하는데 통상적으로도 정적파일(Static File)이라 부르는 건 마찬가지다. 그럼 정적 파일은 어떻게 관리해야 할까? 정적파일 구성에 관해서는 `settings.py` 하단 쯤에 다음과 같이 정의된 코드들을 볼 수 있다. `STATIC_URL`은 정적 파일이 저장된 경로를 의미한다. 만약 template 태그로 `{% static 'css/style.css' %}`라고 설정해두면 `static/css/style.css` 경로로 호출될 것이다. # Static files (CSS, JavaScript, Images) # https://docs.. 2023. 11. 27.
[프리온보딩] Docker의 기본 개념, 어떻게 사용하는지 컨테이너 기술은 무엇인가? 컨테이너 기술은 애플리케이션과 이에 대한 종속성 라이브러리를 일관된 환경(런타임 환경)으로 패키징하는 기술을 의미한다. 컨테이너는 어떠한 환경에서든 자유롭게 실행 및 이동을 할 수 있다. 대표적인 컨테이너 기술로 도커(Docker)가 있다. 도커는 컨테이너를 생성하여 독립된 환경에서 애플리케이션을 배포하거나 실행하기 위한 오픈소스 플랫폼이다. 도커를 사용하면 호스트 OS, 컨테이너와도 독립된 공간이 보장되니 충돌이 발생하지 않아 협업에 많이 사용되는 기술이다. 💡 `venv`와 Docker는 무슨 차이가 있는가? 프로젝트를 진행하다보면 `venv`라는 가상환경을 자주 사용하게 된다. 그렇다면 도커(docker)나 `venv`는 가상환경을 구축해 의존성과 패키지를 격리시키는데 같.. 2023. 11. 25.
소프트웨어 개발 사이클 개인 프로젝트를 했었던 경험들을 보면서, 한가지 놓치고 있었던 점이 있었다. 그것은 기능정의 없이 냅따 맨바닥 헤딩식을 개발을 해왔던 경험이다. 나중에 다른 개발자와 협업을 했을 때, 혼란이 올 것이라는 생각이 있었다. 그래서 오늘은 개발을 하기 전 기능 정의를 어떻게 진행하는가에 대해 알아보려고 한다. 무조건 아래의 Step을 따르라는 법은 없지만, 대부분 사용하고 있는 순서이기 때문에 참고해서 적용하길 바랍니다. Step1. 아이디에이션 먼저, 프로젝트의 목적과 목표를 설정해야한다. 팀원들의 아이디어를 모아 브레인스토밍과 같은 아이디어 기법으로 무슨 프로젝트를 할 것인지 생각하고 백엔드와 프론트엔드의 기술 요구사항을 고려해 프로젝트를 기획해본다. 보통 이 단계에서도 툴이나 스택을 결정하는 경우도 있다.. 2023. 11. 23.
[Django] 개발환경 세팅하기 Django? django는 파이썬을 기반으로하는 웹 풀 스택 개발 프레임워크다. 기본적으로 제공되는 기능이 많고 풀스택 기능을 제공하기 때문에 편리하게 웹 페이지를 개발할 수 있다. 또한, React, Flutter, Vue와 같은 프론트 엔트 프레임워크와 같이 연동하면 ORM, Admin등의 백엔드 기능으로 좀 더 완성도 있는 플랫폼을 만들 수 있다. 개인적인 기준으로 다른 프레임워크보다 많은 기능과 자료들이 있어 올인원하기 좋은 프레임워크인 것 같다. 다만 단점도 있다. 기능이 많은 만큼 무겁고 복잡하며 Flask나 FastAPI 보다 자유도가 떨어진다. Django 공식 문서 를 참고 MVT 패턴 시스템 Django는 어떤 시스템으로 동작을 하게 되는 것일까? 기본적으로 Django는 요청이 들어.. 2023. 11. 22.
파이썬 함수 Deep-Dive 함수 함수를 사용하는 것은 코드를 재사용하는 측면 혹은 가독성 측면에서 이득을 준다. 실제로, 파이썬에서 함수로 정의한 코드와 그렇지 않은 코드를 비교했을 때 함수로 정의한 코드가 훨씬 속도가 빠르다고 한다. 파이썬에서 함수는 다음과 같은 특징을 갖는다. 일급객체(First Class Citizen) : 함수를 변수나 데이터 구조에 직접 담을 수 있고 매개변수로 전달이 가능하며 리턴 값으로 사용할 수 있다는 특징이 있다. 함수를 작성할 땐 camel_case로 작성한다. 함수 외부에 선언된 변수는 전역 변수(Global Variable)이라 하며 내부에 선언된 변수를 로컬 변수(Local Variable)라고 한다. 만약, 전역변수를 내부에 접근하고자 하는 경우 `global` 키워드를 사용해 액세스 할.. 2023. 11. 22.
[Django] 애플리케이션 요청 및 처리 django 웹 애플리케이션에서의 요청 처리는 일반적으로 View함수를 사용해 이루어진다. 뷰는 CBV와 FBV 두가지의 형태로 구성이 되는데 사용자가 직접 모든 기능을 정의하는 FBV와 다르게 CBV는 Generic View를 상속 받아 구성한다. Views : CBV와 FBV CBV(Class Based View) : Generic View을 사용할 때 쓰이며 총 16가지의 Generic View를 만들 수 있다. 클래스 형태로 구현한다. FBV(Function Based View) : 사용자 정의 함수에 의해 웹페이지를 구성할 때 사용하며 Request를 받으면 함수 내 필요한 기능을 수행하고 render()를 통해 웹 페이지를 반환한다. 사실 CBV방식과 FBV방식의 차이는 함수냐 클래스냐의 차이.. 2023. 11. 21.
즐거웠던 첫 파이콘 2023 후기 이번 달 8월에 저는 파이콘(Pycon Korea 2023) 이라고 하는 큰 규모의 파이썬 행사를 다녀왔습니다. 워낙 이렇게 큰 컨퍼런스는 처음이라 두근거렸는데요. 가장 기억에 남았던 지식 공유를 뽑아 후기를 작성해보았습니다. Cpython으로 보는 파이썬의 심층 세상 처음 제가 들었던 세션은 파이썬이 작동하는 방식을 Deep Dive하게 알아가는 시간이었습니다. 제가 가장 깊이있게 들었던 내용은 아무래도 파이썬에 GIL(Global Interpreter Lock) 정책이 왜 도입이 되었는지 이를 통해 파이썬 인터프리터가 단일 쓰레드로 성능을 낼 수가 밖에 없는지와 하나의 쓰레드로 동시처리를 할 수 있는 비동기(Async) 처리에 관한 이야기를 깊게 들을 수 있었습니다. 깊이 있는 설명을 위해 Cpyth.. 2023. 11. 20.