Computer Engineering/Django 10

장고는 DB connection을 어떻게 관리할까?

! 이 글은 Django 5.0을 기준으로 작성됐습니다. 내부 코드를 분석한 부분은 저의 해석으로 잘못 이해한 부분이 있을 수 있습니다. DB Connection in Django Django를 사용하다가 다른 Framework를 사용하면 귀찮은 부분 중 하나가 명시적으로 DB Connection을 관리하는 부분입니다 예를 들어, Flask를 사용하여 SQLAlchemy를 적용할 때는 다음과 같이 데이터베이스 연결을 생성하고 관리해야 합니다. app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db' db = SQLAlchemy(app) # 사용자 추가 API @app.route('/user', methods=['POST']) def add_user(..

Django에서 CSRF 공격을 막기 및 CSRF 토큰의 이해와 활용

웹 보안에 있어서 중요한 공격 유형 중 하나인 CSRF(Cross-Site Request Forgery)는 사용자의 의도와 무관하게 공격자가 준비한 악의적인 요청을 보내게 만드는 기법입니다. 사용자가 로그인 상태에서 공격자가 조작한 웹페이지에 접속할 경우, 그 페이지는 사용자가 인지하지 못하는 사이에 위조된 요청을 보내게 됩니다. 이를 통해 공격자는 사용자의 인증을 악용할 수 있습니다. Django는 이러한 CSRF 공격을 방지하기 위한 강력한 메커니즘을 기본적으로 제공합니다. 그 핵심 중 하나는 'CSRF 토큰'이 있습니다. (또 다른 방법은 CORS와 관련된 설정으로 궁금하신 분은 이 포스팅을 보셔도 좋을 것 같습니다.) CSRF 토큰이란? CSRF 토큰은 클라이언트가 서버로 요청을 보낼 때마다 서버..

Django CORS 관련 설정하기 / django-cors-headers

웹 개발을 하다보면 CORS(Cross-Origin Resource Sharing)와 같은 보안 이슈들이 흔히 발생합니다. 이는 브라우저가 서로 다른 호스트(도메인) 간의 자원 공유를 제한함으로써, 웹 애플리케이션의 보안을 강화하는 중요한 기능입니다. 이러한 제한의 근본적인 이유는 보안 취약점을 방지하기 위함인데, 예를 들어, CSRF(Cross-Site Request Forgery)와 같은 공격에서는 악의적인 웹사이트가 사용자의 브라우저에 저장된 인증 정보를 이용하여 다른 사이트에 요청을 보내는 행위를 막기 위함입니다. 데이터 엔지니어로 전향한 후에 오랜만에 서버 개발을 하려고 했더니 개념이 정확히 기억도 안 나고 사실 오랜만에 세션으로 인증을 구현할 일이 있어서 조금 헤맸습니다. CORS, CSRF,..

Python/Django NewRelic 셋업 및 환경 분리하기.

Introduction 이번 글에서는 Python 및 Django에서 NewRelic을 셋업하고 환경 별로 분리하는 방법을 소개합니다. NewRelic은 대표적인 APM (Application Performance Monitoring) 서비스 중 하나입니다. NewRelic을 설치해서 쉽게 어플리케이션의 병목을 확인할 수 있습니다. 대부분의 내용은 공식 문서에 명시되어 있는 내용이고 제 기준으로 이해하기 쉽도록 정리한 글이라고 생각하시면 될 것 같습니다. Set up newrelic 셋업은 굉장히 간단한 편입니다. 대부분의 웹 프레임워크(Django, Flask 등) 및 호스팅 프로그램(WSGI, Gunicorn, uWSGI)등은 기본 Python Agent 설정만 해주면 됩니다. 웹이 아닌 단순 스크립..

Django DB Transaction 3편 - DB Transaction Test 코드 작성하기.

Introduction 안녕하세요. 1편과 2편에 이어서 마지막 편으로 Django에서 DB Transaction과 관련된 코드들의 테스트 코드를 작성하는 방법에 대해서 포스팅 해보려고 합니다. 아직 1편과 2편을 읽지 않으신 분이 계신다면 먼저 읽고 오시는 것을 추천드립니다. Django에서 DB Transaction을 어떻게 사용하는지 그리고 실제 DB에서 어떤 동작이 일어나는지를 이해하시고 이번 글을 읽으시면 이해하기 쉽고 더 도움이 될 거라고 생각합니다. 지난 글 Django DB Transaction(트랜잭션) 1편 - Request와 DB Transaction 묶기(Feat. ATOMIC_REQUESTS) Django DB Transaction 2편 - 명시적으로 transaction 활용하기..

Django DB Transaction 2편 - 명시적으로 transaction 활용하기. (feat. savepoint)

Introduction 안녕하세요. 1편 Django Transaction(트랜잭션) 1편 - Request와 DB Transaction 묶기(Feat. ATOMIC_REQUESTS) Django Transaction(트랜잭션) 1편 - Request와 DB Transaction 묶기(Feat. ATOMIC_REQUESTS) Introduction - Django DB Transaction 안녕하세요. 새해에는 Django와 관련된 글들을 많이 다뤄 보려고 합니다. 첫 번째로 Django에서 DB Transaction을 다루는 방법에 대해서 공부하고 글을 써보려고 합니다... blog.doosikbae.com 에 이어서 2편으로 명시적으로 Django에서 DB transaction을 활용하는 방법에 대해..

Django DB Transaction 1편 - Request와 DB Transaction 묶기(Feat. ATOMIC_REQUESTS)

Introduction - Django DB Transaction 안녕하세요. 새해에는 Django와 관련된 글들을 많이 다뤄 보려고 합니다. 첫 번째로 Django에서 DB Transaction을 다루는 방법에 대해서 공부하고 글을 써보려고 합니다. 해당 글은 데이터베이스의 Transaction에 대한 기본적인 지식이 있다라는 가정으로 글을 작성했기 때문에 개념이 조금 헷갈리시는 분들은 DB Transaction에 대한 글을 한 번 먼저 읽고 오시는 것을 추천드립니다. 이번 시리즈는 총 아래와 같이 4편으로 나눠서 작성할 생각입니다. Request와 DB Transction 묶기 명시적으로 DB Transaction 활용하기 Savepoint 살펴보기 Transaction과 관련된 테스트 케이스 작성하..

Django 오픈소스 contributing 하기!

Django에 기여하는 방법은 여러가지 있습니다. 기여하는 방법 Writing code Writing documentation Localization Donation Bug report 이번 포스팅에서는 writing code로 기여하는 방법에 대해서 적어보려고 합니다. Django에서도 first patch를 하는 사람들을 위해서 문서(https://docs.djangoproject.com/en/dev/intro/contributing/)를 만들어 두었지만, 제 나름대로 했던 방법을 정리해서 공유 하려고 합니다. 1.해결 할 티켓 찾기 or 만들기 장고에서는 ticket 시스템을 통해서 버그나 기능 개선들을 tracking합니다. 그래서 혹시 bug를 발견하셨으면 bug를 reporting하는 것도 c..

같은 Django model class에서 다른 schema가?(feat. Django는 이중인격?)

(Update) Django에 해당 bug를 repoorting하고, PR을 올려서 merge되었습니다! https://github.com/django/django/pull/13982 Fixed #32425 -- Fixed adding nullable field with default on MySQL. by baidoosik · Pull Request #13982 · django/django ticket link: https://code.djangoproject.com/ticket/32425#ticket Hi, team. I wanna fix some picky issue. I suggest below code for solving this problem. (same code creates differe..

Django Orm Query 최적화하기 1편.

WAS (Web Application Server)의 가장 큰 역할은 DB에서 데이터를 효율적으로 가져와서 Client에게 전달하고, Client에게 받은 데이터를 저장하는 것이라고 생각합니다. 개인적으로 농구에 관심이 많아서 아마추어 선수들도 프로선수들 처럼 자신의 대회기록을 제공하는 사이트를 사이드 프로젝트로 진행하고 있습니다. 아직 개발 중이라서 홍보는 하고 있지 않습니다. 아무래도 기록과 관련된 서비스이다보니 Query를 많이 사용하는 서비스입니다. Team 의 상세페이지를 구현하면서 query 응답속도를 줄인 경험을 공유하려고 합니다. 아직 사용자가 많지 않은 서비스이다 보니 많은 시간을 할애 하지는 않았습니다. 그래서 혹시 부족한 부분이 있고, 조언해주실 부분이 있으면 정말 환영합니다.(사실 ..

반응형