분산 메시지 큐1. 메시지 모델1. point-to-point model : 전통적인 메시지 큐. 큐에 전송된 메시지는 한 소비자만 가져갈 수 있음. 메시지를 가져갔다는 뜻으로 ACK 를 보내면, 큐에서 해당 메시지가 삭제됨. 2. publish-subscribe model : 토픽에 메세지를 보내고 토픽으로부터 메세지를 받음. 메세지는 해당 토픽을 구독하는 모든 소비자들에게 전달됨. 메세지는 토픽에 보관됨. 토픽을 여러 파티션으로 나눠서, 메시지를 균등하게 각각의 파티션에 보내어 분산 배치함. 2. 문제의 설계 요구 조건 메세지 큐의 기본 조건 : 생산자는 메시지를 큐에 보내고, 소비자는 큐에서 메시지를 꺼낼 수 있어야 한다. 기본 기능 외에도 성능, 메시지 전달 방식, 데이터 보관 기간 등을 고려해야..
Backend
Intro 비즈니스는 오래 가고, 기술은 자주 바뀐다데이터 엔지니어에서 백엔드 엔지니어로 전향하면서, 코드로 해결해야 하는 문제가 훨씬 더 많아졌다. 지금은 MAU가 꽤 나오는 글로벌 이커머스 백엔드를 만들고 있다. 트래픽도, 요구사항도, 의존하는 외부 시스템도 많다 보니 코드베이스는 빠르게 커지고 복잡도도 함께 증가한다.그래서 단순히 “기능을 구현하는 방법”이 아니라, 유지보수와 확장에 강한 구조를 더 진지하게 공부해야겠다고 느꼈다. 이 글에서는 현재 실무에서 백엔드 개발에서 자주 사용중인 Usecase 패턴을 중심으로, 실제 이커머스 도메인에서 어떻게 적용할 수 있는지 정리해보려 한다. 전통적인 Controller–Service–Repository 구조의 한계전통적인 Backend pattern 은 ..
Intro 현재 글또 9기에서 만난 팀원들과 같이 Resumait 라는 제품을 만들고 있다. CS 스터디를 진행하다가 뜻이 맞아서 사이드 프로젝트까지 개발을 하게 되었다. Resumait 은 LLM 을 기반으로, 사용자의 이력서 작성을 도와주는 서비스이다. Resumait는 특히 주니어 및 경력 개발자를 주요 타겟으로하고 있다. 개발자 채용 시장 특성상 하나의 이력서를 기반으로 여러 회사의 공고에 지원하게 되기 때문이다. 뿐만 아니라, 종종 개발자에게도 자기소개서를 요구하는 경우가 많다. Resumait 에서는 Credit 이 서비스를 사용할 수 있는 단위이다. 사용자는 본인의 이력서를 기반으로 자기소개서 글을 작성할 때 Credit 을 소비하게 된다. 그런데 유의할 점은 이 Credit은 사용자가 R..
1. entities.pyfrom uuid import UUIDfrom advanced_alchemy.base import UUIDAuditBasefrom sqlalchemy.orm import Mapped, mapped_columnfrom sqlalchemy.dialects.postgresql import UUID as psql_UUID # postgresql 에서도 string type 이 아닌 UUID type으로 관리하기 위해 importclass IdempotencyKey(UUIDAuditBase): idempotency_key: Mapped[UUID] = mapped_column(psql_UUID(as_uuid=True), unique=True, nullable=False) 2. auto..
CORS 란 무엇인가 브라우저에서는 보안상의 안전을 위해서 cross-origin HTTP 요청을 제한한다. 따라서 cross-origin 요청을 하기 위해서는 서버 측에서 허용을 해주어야 한다. 이는 HTTP-header 로 구현할 수 있으며, 이를 CORS라고 한다. CORS 가 필요한 이유는 다른 사이트에서 원래의 사이트를 흉내내서 악의적으로 사용되는 것을 방지하기 위함이다. 기존 사이트와 동일하게 동작하게 구현하여 사용자의 정보를 악의적으로 가로채는 등의 공격을 하지 못하도록 CORS를 통해 서버와 클라이언트 간 협의가 필요한 것이다. CROSS-ORIGIN 이란 cross-origin 이란 이들 중 한가지라도 다른 경우를 의미한다. 1. protocol : 프로토콜이 다른 경우이다. ex. ht..
GitHub가 2023년 3월 24일 이후로 RSA SSH host key 정책 업데이트를 하면서 생긴 이슈라고 한다. private key가 public repository에 노출이 되는 문제를 해결하기 위해서 업데이트를 했다고 한다 old host key를 다음의 명령어를 통해 다시 key를 생성해줌으로써 삭제하고, 새롭게 생성하면 된다. ssh-keygen -R github.com 그다음에 Are you sure you want to continue connecting (yes/no/[fingerprint])? 라는 질문이 나오면 yes 를 입력하면 된다.
Django 에서 회원가입 기능을 구현하기 위해 UserCreationForm 을 사용할 수 있다. Django의 UserCreationForm 클래스는 django.contrib.auth.form 패키지에 있으며, 이를 상속해서 유저 생성 form 을 쉽게 구현할 수 있다. from django import forms from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User class UserForm(UserCreationForm): email = forms.EmailField(label="email") # 장고 모델 폼은 내부 클래스로 Meta 클래스를 가져야 하며, Meta 클래스..
