전체 글 25

[Postgresql] 쿼리 플랜으로 의사 결정하기

서비스를 개발하다보면 쿼리가 점차 복잡해집니다. 쿼리가 복잡해지는 만큼, 부하를 줄 가능성이 크기 때문에 쿼리 튜닝이라는 용어들이 나오는 것 같습니다.이름부터 근사한 쿼리 튜닝이라는 것을 하기 위해서는 쿼리 플랜을 볼 줄 알아야 합니다. 제가 개발한 간단한 기능을 통해 쿼리 플랜을 해석해보고, 간단하게 개선한 경험에 대해서 풀어보려고 합니다. 상황 구현하려고 했던 기능은 꽤나 간단합니다. 대출 상품을 다루는 loan_product 테이블과 대출 상품의 금리 정보를 다루는 daily_interest_rate 테이블이 존재합니다. 이름에서도 유추할 수 있지만, 금융사의 금리 정보는 매일 변경되기 때문에 매일 크론 잡이 돌면서 수집하고 있습니다. 금융사의 금리정보는 주로 영업일 기준으로 변경되기 때문에 변경되..

개발 노트 2025.03.16

전략 패턴을 도입해보자

개발을 하다 보면 디자인 패턴을 분명 들어보셨을 것 같습니다.전에 어떤 분께서 말씀해 주시길, 디자인 패턴은 선배 개발자들의 삽질이 이뤄낸 결과물이라고 해주셨던 것이 기억에 남습니다.선배들이 삽질을 통해 좋은 패턴들을 만들어냈으니,우리는 그것을 적극적으로 활용하여 효율을 높여야 한다는 것이죠.개인적으로, 일을 하다 보면 디자인 패턴을 적용할 기회가 많지 않다고 느꼈습니다.반대로, 프레임워크나 라이브러리를 뜯어보면 패턴이 눈에 들어왔던 기억이 납니다.최근 동료 개발자분께서 전략 패턴을 활용하여 새로운 시스템을 설계하고 계시다는 이야기를 해주셨습니다.그런 이야기를 듣다 보니 저도 적용해볼 수 있는 영역이 보여서 적용해보며 느낀 점에 대해 남겨보려고 합니다.전략 패턴전략 패턴은 동일한 상황에서 적용할 수 있는..

카테고리 없음 2025.03.02

대규모 시스템 설계 스터디 (1)

사내에서 가상 면접 사례로 배우는 대규모 시스템 설계 기초라는 책으로 스터디를 진행하게 되었습니다.간만에 진행하는 스터디라서 설레는 마음으로 첫 주를 진행했는데,이번 주차를 통해 배운 점에 대해서 간단히 정리해보려고 합니다.가장 기초적으로 웹 서버를 개발한다면, 다음과 같은 형태일 것입니다.수직적 확장웹 서버는 컴퓨터에서 돌아가는 하나의 프로그램입니다.많은 요청이 웹 서버로 유입되면 웹 서버는 그만큼 많은 리소스를 필요로 합니다.이러한 경우 우리가 가장 먼저 생각해볼 수 있는 방법은 컴퓨터를 더 좋은 컴퓨터로 바꾸는 것입니다.마치 고사양 게임을 하기 위해 CPU, RAM, 그래픽 카드를 업그레이드 하는 것처럼 말이지요.하지만 해보신 분들은 아시겠지만, 부품들의 스펙이 올라갈수록 가격도 천정부지로 올라갑니..

카테고리 없음 2025.02.16

Django에 애플 로그인 연동하기 (feat. Flutter)

배경이전에 Django에 구글 로그인 연동하기 (feat. Flutter)라는 글을 공유드렸습니다.이번에는 후속으로 애플 로그인을 연동하는 법에 대해 남겨보려고 합니다.앱 스토어에 앱을 올리고 싶다면 구글 로그인만 연동해서는 올릴 수 없습니다.심사 과정에서 구글 로그인만 발견된다면 반려 사유가 될 수 있습니다.따라서 모바일 앱을 운영하시는 분들이라면 구글과 애플 로그인 중 하나만 구현하는 일은 없으실 것이라고 생각합니다.저번과 동일하게 환경은 다음과 같습니다. Server: DjangoClient: Flutter이런 분들께 추천!애플 로그인을 구현해야 하는데 애플 생태계에 친숙하지 않은 분들Flutter로 애플 로그인을 구현하는 법을 빠르게 알고 싶은 분들Apple 개발자 계정먼저 애플 개발자 계정이 필..

카테고리 없음 2025.02.01

무중단 배포 적용기

오늘은 다양한 무중단 배포 전략에 대해서 알아보고 그중 하나인 blue/green 전략을 도입한 경험에 대해서 공유해 보겠습니다. 예상 독자EC2 한 대에 docker compose로 nginx와 애플리케이션을 띄우고 계신 분 무중단 배포란?가장 단순한 방법의 배포라면 기존 버전의 서버를 내리고 새로운 버전의 서버를 올리는 방법일 것입니다.그렇다면 아주 잠깐이라도 서버가 내려간 순간에는 사용자들이 응답을 받지 못하게 됩니다.이러한 중단 상태를 잠시라도 만들지 않고 배포하는 것을 무중단 배포라고 합니다. 주로 많이 사용하는 3가지 전략에 대해 알아보겠습니다.롤링 배포 (Rolling deployments)롤링 배포 전략은 인스턴스를 하나씩 새로운 버전으로 바꾸는 방식입니다.바뀔 인스턴스는 트래픽이 전달되지..

개발 노트 2025.01.19

Django에 구글 로그인 연동하기 (feat. Flutter)

배경기존에 운영하던 서비스의 인증 방식을 바꾸며 Google oAuth와 관련된 작업을 하게 되었습니다.여러 고민과 결정된 사안에 대해 기록을 남기고 공유하고자 합니다. 상황기존 방식은 클라이언트에서 Firebase 기반으로 로그인을 구현해 두었습니다.최초 인증만 자체 서버에서 실행하고, Firebase custom token을 반환하여 해당 token을 통해 인가가 수행되도록 구현했습니다.당시에는 빠르게 개발할 수 있고 custom token을 firebase 대시보드에서 관리할 수 있다는 이점으로 인해 위와 같은 결정을 했지만, 다른 oAuth 인증 공급자(ex. google, apple, kakao 등)가 추가될수록 어려움을 겪었습니다.기존 구조에서는 최초 인증 이후로 Firebase 인가 토큰이 ..

카테고리 없음 2025.01.05

AWS Lambda 마이그레이션 회고 (feat. 첫 철야 작업)

개요현재 근무하고 있는 회사에서 모바일 앱을 위한 간단한 API 서버가 필요했습니다. (통칭 “앱 서버”)PoC로 진행하던 프로젝트가 예상보다 빠르게 완성되었고, 비즈니스 요구사항을 충족한다고 판단되어 프로덕션 환경에 반영되었습니다.최근 회사에서 새벽에 서비스 점검을 진행하게 되었고, 이 참에 개발계에 존재하던 앱 서버도 운영계로 옮기면 좋겠다고 생각이 들어 진행하게 되었습니다.운영계로 옮기는 계획을 짰고, 간단하게 진행될 것으로 예상했습니다.하지만, 역시나 그렇지 않았고 쉽지 않은 과정에 대한 회고를 남기면 좋을 것 같아 이 글을 작성하게 되었습니다. 구조앱 서버의 구조는 다음과 같습니다.사용자 요청 저희 개발계서는 운영 도메인의 dev라는 키워드를 추가한 서브 도메인을 사용합니다. (이번 글에서는 ..

회고 2024.11.24

네트워크로 살펴보는 ELB

개요회사에서 새로운 서비스 인프라를 세팅할 기회가 생기면서 ELB를 사용하게 되었습니다.웹 서버를 private subnet에 배치하여 보안적 이점을 취하고자 할 때, 웹 서버를 클라이언트와 통신할 수 있도록 ELB를 퍼블릭 서브넷에 배치하고, 프라이빗 서브넷의 웹 서버와 연결했습니다.ELB를 연동하는 과정에서 저에게 2가지 선택지가 주어졌습니다.NLBALB제가 이미 알고 있던 정보는 다음과 같습니다.NLB는 L4랑 연관 있는 애고, ALB는 L7이랑 연관 있는 애잖아!NLB는 port 번호로, ALB는 http/https로 이러쿵저러쿵하는 애라던데?드문드문 주워들은 정보들은 NLB와 ALB 중 무엇을 선택할 지 고민만 길어지게 만들었습니다.이 경험을 통해 NLB와 ALB가 작동하는 방식의 차이점을 알아..

기타 2024.11.10

typing 모듈 알아보기

작성 계기파이썬을 접하게 되었는데, 파이썬은 자바스크립트와 함께 동적 타입 언어입니다.Dart를 주로 사용했던 저는 변수의 타입이 없는 것이 굉장히 불편하게 느껴졌습니다. 정적 타입 언어: 코드 작성 시 변수의 타입이 정해지는 언어  ex) C, Java동적 타입 언어: 런타임에 변수의 타입이 정해지는 언어  ex) Python, Javascript  물론 이것은 Python을 사용하는 많은 개발자도 마찬가지였을 것입니다.그래서 Python에서는 typing이라는 빌트인 모듈을 제공합니다.이것은 코드 레벨에서 Python 변수에 타입을 명시할 수 있고, IDE는 이를 통해 개발자가 코드를 더 쉽고 안전하게 작성하는 것에 도움을 줍니다. 다음과 같이 변수에 원시 타입을 정해주는 방식만 사용하다가 이는 수박..

공부/Python 2024.10.13

[글또 x 코드트리] 코드트리 대만족 한 달 사용 후기

코드트리와 첫 만남 학교에서 알고리즘 수업을 들은 것은 19년도였습니다. 무려 5년 전입니다.. 흠흠.. (어째서..) 작년 하반기부터 알고리즘의 중요성을 깨닫고 조금씩 풀고 있었습니다. 주로 백준과 Leetcode를 활용했습니다. 코딩테스트 경험이 많은 편은 아니지만, 제가 경험한 코딩테스트는 Leetcode 문제와 느낌이 다소 달랐습니다. 그래서 병행하게 된 백준, 백준은 문제를 무작위로 골라서 풀다 보니 제가 아는 개념과 모르는 개념을 분리하기가 어려웠습니다. 그렇다면 코딩테스트 관련 서적을 사서 봤으면 되지 않았을까..? 라기엔 저는 너무나 게을렀답니다.. 그러던 와중에 글또를 통해 코드트리를 체험해 볼 수 있는 기회를 얻었습니다. 글또에 참여하기를 잘했다고 느낀 여러 순간 중 하나였던 것 같습니..

기타 2024.03.02