"개발자의 초기 설계는 종종 너무나 이상적이다. 그리고 현실은 늘 그 이상을 배신한다."안녕하세요! 주니어 백엔드 개발자입니다.오늘은 제가 '당근마켓'을 클론한 CodeB Market을 개발하면서 겪었던 아키텍처 대격변의 역사를 공유하려 합니다.단순히 "이 기술을 써서 빨라졌습니다"가 아니라, "왜 처음의 설계가 실패했는지", "어떻게 사고의 전환이 일어났는지"에 대한 2개월간의 삽질기입니다. 🎬 Chapter 1. 순진했던 출발: "홈 화면과 검색은 다르잖아?" (2025. 12. 초)1-1. 문제의 발단초기 MVP 모델에서 홈 화면 로딩 속도는 1,946ms였습니다. PostgreSQL에서 25만 개의 상품을 JOIN 하고 Haversine 공식으로 거리를 계산하니 당연한 결과였죠.목표는 동시접속..
코딩
처음 Claude Code를 접했을 때는 마법 같았습니다. 하지만 프로젝트 규모가 커지고 복잡해지자 문제가 터지기 시작했습니다. AI는 옛날 문서를 보고 엉뚱한 코드를 짜거나, UI와 DB가 맞지 않는 기능을 만들어냈죠.이 문제를 해결하기 위해 제가 정립한 3가지 핵심 전략을 소개합니다. 1. 개발 순서 뒤집기: "DB 먼저"는 망하는 지름길가장 먼저 부딪힌 벽은 '작업 순서'였습니다. 보통 백엔드 개발을 배울 때 DB 설계 → API 구현 → UI 연동 순서로 배우잖아요? 저도 그렇게 Taskmaster에게 시켰습니다. 결과는 처참했습니다.❌ 실패한 방식: 수평적 분할 (Horizontal Slicing)저는 AI(Taskmaster)에게 다음과 같이 작업을 시켰습니다."상품 테이블 만들어줘." (DB..
128.46 달러 = 한화 약 17만 8천원 과금 철회 승인 받았습니다....휴우....아래는 문제 원인과 해결방안을 자세히 풀어서 적어놓았습니다문제 발생어느날 잘 되던 오토스케일링이 잘 작동하지 않았다. 분명 인스턴스 최소 용량을 1로 설정해두었는데, 0 -> 1로 새롭게 생성하는데, 계속 문제가 생기는 것이었다.상단의 스크린샷에서 url 링크에 들어가보니,AWS측에서 액세스키의 비정상적인 접근이 발견되었다고 연락이 왔다. 이것을 확인하자마자 액세스 키를 비활성화한후, 삭제했다.그리고, 놀라운 상황을 맞이하게 되는데...바로 과.금.폭.탄이다..내가 쓰고 있는 서울 리전이외에, 버지니아 북부, 아일랜드, 시드니, 싱가폴 리전에서 인스턴스를 생성하여 가동했고,이것은 외부 침입자의 흔적이었다.거의 한화 ..
세상에는 다양한 방법론이 있다(1) 목표를 정하고 단거리 달리기(2) 목표를 정하고 장거리 달리기(3) 될것 같은지? 안될것 같은지? 지켜보면서 목표를 슬금슬금 정하기 CTO로서 난이도가 높은 기술을 구현할때는 (AI, 블록체인 등) 3번이다.왜 3번인가?개발은 노력만으로 되는게 아니라데이터 수집, ai 모델, 서버 구축 등 여러가지 도구 및 시스템이 갖춰져야 함도구와 시스템이 없다면 개발자의 노력이 있어도 기대 이하의 결과가 나올 수 있음3번적 사고를 기르려면1. 어떻게 만들건데?이 질문을 달고 살아야 한다2. 장기목표를 신중히 정해야 한다= 장기목표를 나중에 정해야 한다장기 목표를 냅다 지르는게 아니라돌다리 두드려보듯 하나씩 두드려보면서 단기목표1, 단기목표2, 단기목표3이런식으로 세우면서오히려 기획..
AI의 발전은 세 차례에 걸쳐 크게 변화해왔습니다. 1차 AI 붐에서는 규칙 기반 시스템이 주목받으며 AI의 기초가 다져졌습니다. 이후 2차 AI 붐에서는 머신러닝의 등장과 역전파 알고리즘 덕분에 신경망 학습이 가능해지면서 AI 연구가 다시 활기를 띠었습니다. 3차 AI 붐에 이르러서는 딥러닝과 생성형 AI가 발전하여 다양한 산업에서 혁신적인 성과를 내고 있습니다.위의 사진을 보면, 머신러닝이 등장하고나서 순차적으로 딥러닝이 등장할 것 같다고 생각할 수 있지만, 실제로는 동시에 발전해왔습니다. 머신러닝과 딥러닝의 상호발전과 계층구조예를들어,1980년대 역전파 알고리즘의 도입은 머신러닝의 중요한 발전이었습니다.이를 통해 비선형 문제를 해결할 수 있게 되었고, 딥러닝은 더 깊은 신경망으로 복잡한 패턴을 인..
더보기 ubuntu@ip-172-31-46-103:/var/www/html$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer..
우리가 php server에서 fcm server로 알림 데이터를 보낼때는, php server에서 server key를 첨부해서 데이터를 보내줘야 한다. server key는 모두가 알듯이 파이어베이스 콘솔에서 발급받은 후 확인할 수 있다 다음 링크는 서버키 발급이 완료된 후, 확인할 수 있는 링크이다. https://console.firebase.google.com/project/tiki-taka-22f76/settings/cloudmessaging 로그인 - Google 계정 이메일 또는 휴대전화 accounts.google.com 그런데, 이 링크에서 서버키를 확인할 수 없는 경우가 있다.... 서버키를 파일로만 가지고 있고, 홈페이지에 따로 서버키가 안뜨는 경우이다. 해결방법 Cloud Mess..
public class FirebaseCloudMessageService { // 알림 메시지와 데이터 페이로드 포함 public static void sendMessage(String registrationToken, String content, int messageId, int roomId, String name, String userProfile) throws Exception { // 데이터 메세지 // 포그라운드, 백그라운드에서는 직접 일관되게 처리 Message message = Message.builder() // 메시지 구성을 시작할 수 있는 Builder 객체가 반환 .putData("title", name) // 알림 제목을 데이터 페이로드에 추가 .putData("userProfile..