Computer Engineering 92

Python Kafka Consumer 라이브러리 Faust PoC하기 (Feat. Django)

Kafka의 Consumer Application 사용 목적으로 몇 가지 Library를 살펴보다가 Faust라는 라이브러리를 발견했다. Consumer 안에서 Django ORM을 사용해보려고 했는데 다양한 Python Package와 integration을 지원한다고 해서 관심을 가지게 됐고, POC 해보면서 느낀 점을 정리해보려고 한다. 처음 살펴보는 라이브러리이고 아직 Kafka에 대한 지식이 많지 않아서 기록 목적으로 남기는 점 참고 부탁드립니다! 주요 살펴볼 부분은 아래와 같았다. 로컬 셋팅 및 간단한 예제 Django와 Integration 오프셋 관리 및 자동 재시도 및 오류 복구 Consumer Group 관리 및 배포 편의성 커뮤니티&사용사례 Local Setup 및 기본 테스트 로컬에..

Publish/Subscribe 와 Producer/Consumer 메시징 시스템

Publish/Subscribe(이하 Pub/Sub) 메시징 시스템과 Producer/Consumer 메시징 시스템에 대해서는 대부분 Kafka나 RabbitMQ 등 여러 메시징 시스템을 리서치 후 선택할 때 자주 본 개념일 것입니다. 하지만, Kafka 도입을 위해서 살펴볼 때 Pub/Sub 메시징 시스템인데도 불구하고 Producer와 Consumer라는 개념을 맞닥뜨리게 될 때 '내가 잘 못 알고 있었나?'라는 생각이 들면서 다시 찾아보게 됩니다. 결론부터 얘기하면 Kafka의 기본 아키텍처와 데이터 처리 모델에 주안해서 네이밍을 했기 때문입니다. Kafka는 본질적으로 Publish-Subscribe 모델을 기반으로 하지만, 그 구현 방식과 사용 사례가 전통적인 Publish-Subscribe ..

iTerm2설치 및 설정 그리고 주요 단축키

맥북을 처음에 받아서 세팅하면 맥북의 기본 터미널보다는 다양한 기능이 추가되어 있는 iTerm2를 설치해서 사용합니다. 이 글에서는 iTerm2에 대해서 간단히 설명하고 유용한 단축키를 중점적으로 설명합니다. iTerm2란? iTerm2는 macOS 운영 체제를 위한 터미널 에뮬레이터입니다. 기본적으로 macOS에 포함된 Terminal.app의 대체제로, 사용자에게 터미널 접근과 터미널 세션 관리를 제공합니다. iTerm2는 향상된 사용자 인터페이스, 세션 관리, 스플릿 팬, 탭, 고급 검색, 색상 테마, 키보드 단축키 설정 등 다양한 추가 기능을 포함하고 있어서, 개발자와 시스템 관리자 사이에서 인기가 높습니다. 간단히 말해, iTerm2는 터미널 환경을 사용자에게 제공하는 애플리케이션입니다. iTe..

DNS란 / DNS 동작 과정

DNS 란 Domain Name System는 인터넷에서 Domain의 주소에 해당하는 컴퓨터의 실제 IP를 알려주는 시스템이자, 하나의 애플리케이션 프로토콜입니다. 즉, 애플리케이션 계층에서 작동하는 시스템과 프로토콜입니다. 주로 브라우저에 domain주소를 입력했을 때, DNS 프로토콜을 이용해서 DNS 시스템에 접근해서 해당 domain 주소의 IP를 알아내는 데 사용됩니다. DNS 구성 DNS는 인터넷상에 URL로 컴퓨터 및 네트워크 장비가 이해할 수 있는 주소인 IP로 변환해주는 시스템으로 분산 데이터베이스 시스템으로 구성되어 있습니다. DNS시스템의 주요 구성 요소 도메인 네임 스페이스(Domain Name Space): 전 세계의 모든 도메인 이름을 계층적으로 구분하여 관리하는 시스템입니다...

간단한 원칙으로 좋은 HTTP API 만들기

개요 REST API라는 용어는 자주 사용하고, 면접 시에도 자주 질문을 받아서 면접 전에 해당 내용을 정리하고 가는 경우가 많습니다. 하지만, 막상 실무에서는 REST API의 복잡한 내용을 기억하기보다는 간결한 원칙들을 기억하고 지키는 것이 중요한 경우가 많습니다. 그래서 이 글에서 REST API를 간단히 훑어본 후 RESTful API는 아니지만 좋은 HTTP API를 만들기 위해 핵심적으로 기억해야 할 몇 가지를 정리하려고 합니다. REST API란? RESTful API는 아니더라도 REST API의 내용을 이해하고 필요한 부분을 이해하고 지키는 것은 중요하기 때문에 한 번 내용을 정리하고 가려고 합니다. API는 하나의 Application이나 서비스가 다른 Application의 서비스 내..

파이썬 Docstring 으로 문서화하기

Introduction Docstring은 파이썬에서 코드 문서화의 중심에 있는 기능입니다. 코드 문서화는 좋은 프로그램의 필수적 요소입니다. 아무리 성능이 훌륭한 코드여도 문서를 잘 갖추지 않는다면 사람들은 사용하지 않을 것 이기 때문입니다. Commenting vs Documenting Code Comment: 주석은 코드를 개발자들에게 설명하기 위해서 사용. "코드는 '어떻게'를 알려주고, 주석은 '왜'를 알려줍니다.” - Jeff Atwood 코드 주석을 작성하는 목적은 계획 및 검토, 코드 설명, 알고리즘 설명, 태깅 등 여러 가지 주석은 구체적인 코드 라인이나 블록 바로 근처에 존재. PEP 8에 따르면 주석은 최대 72자까지여야 합니다. Documenting Code: 코드를 문서화하는 것은..

장고는 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 토큰은 클라이언트가 서버로 요청을 보낼 때마다 서버..

BigQuery Merge Query 설명 및 사용 사례

이번 글에서는 Merge 쿼리에 대한 설명과 Merge문의 대표적 사용 사례인 Merge쿼리를 사용해서 MySQL BigQuery 간에 데이터 웨어하우징에 사용하는 사례를 함께 기록해 보려고 합니다. 계속 변경되는 데이터 소스를 기존의 데이터셋에 정기적으로 통합해야 할 때 자주 사용됩니다. Merge 쿼리 BigQuery에서 MERGE 쿼리는 SQL의 MERGE 문을 기반으로 하며, 두 개의 테이블을 결합하여 대상 테이블에 소스 테이블의 데이터를 삽입, 업데이트, 또는 삭제하는데 사용됩니다. 이것은 일종의 "upsert" 작업으로 보일 수 있으며, 즉 존재하지 않는 행은 삽입하고 존재하는 행은 업데이트하는 기능을 제공합니다. 위에서 설명한 것처럼 조건에 따라 삽입, 업데이트, 또는 삭제가 가능하기 때문에..

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

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

반응형