Asana에서 시작해 Discord 승인을 거쳐 AWS를 실행하는 운영 자동화 구축기“환경변수 하나만 반영해 주세요.”문장만 보면 간단한 요청처럼 보입니다. 하지만 ECS 환경변수 하나를 바꾸는 일은 생각보다 많은 단계를 거칩니다.현재 Task Definition을 확인하고, 변경할 값을 검토하고, 새 Revision을 등록해야 합니다. ECS 서비스가 새 Revision으로 롤아웃되었는지 확인한 뒤에는 실제 Running Task가 어떤 Revision을 사용하고 있는지도 다시 확인해야 합니다. 마지막으로 Target Health와 애플리케이션 로그까지 정상이어야 비로소 작업이 끝납니다.ALB 경로 하나를 추가하거나 특정 시간대의 오류 로그를 확인하는 요청도 마찬가지였습니다.요청 자체는 몇 줄이었지만,..
전체 글
암 인빈서블 화이팅!!엑셀 기반 위탁업체 파일 자동 분류 프로그램을 만들면서 UX문제를 발견했다.기능 자체는 단순했다.1. 사용자가 엑셀 파일을 선택한다.2. 엑셀의 업체 정보와 파일 경로를 읽는다.3. 업체 차수에 따라 폴더를 만든다.4. 원본 파일을 복사하고 규칙에 맞게 이름을 바꾼다.5. 결과 폴더를 zip으로 압축한다.6. 임시 작업 폴더를 삭제한다. 문제는 작업량이 조금만 늘어나도 Windows에서 프로그램이 “응답 없음” 상태로 보인다는 점이었다.파일 복사와 압축은 실제로 계속 진행 중이었지만, 사용자 입장에서는 프로그램이 멈춘 것처럼 보였다. 비개발자가 사용하는 GUI 도구에서는 치명적인 UX 문제였다. 문제상황 정의처음에는 “파일 복사가 느린가?”라고 생각했다.하지만 실제 문제는 처리 속도 자체가 아니었다. 문..
하네스 엔지니어링과 비용에 대한 고찰토큰은 새로운 운영비가 될까? AbstractAI Agent를 실무에 도입하면 단순히 “프롬프트를 잘 쓰는 능력”보다 더 넓은 설계 역량이 필요해진다. 최근에는 이를 하네스 엔지니어링(Harness Engineering) 또는 컨텍스트 엔지니어링(Context Engineering) 관점으로 설명하는 경우가 많다. Agent가 작업을 잘 수행하도록 도구, 권한, 메모리, 규칙, 실행 흐름, 검증 체계를 묶어주는 구조가 중요해졌기 때문이다.하지만 이 구조가 정교해질수록 자연스럽게 늘어나는 것이 있다. 바로 토큰 사용량이다. 시스템 프롬프트, 프로젝트 규칙, 코드베이스 요약, 작업 이력, 도구 설명, 로그, 검증 결과가 계속 컨텍스트에 포함되면 비용과 지연 시간이 증가한다..
처음에는 자산, 청약, 주문, 체결, 정산처럼 필요한 기능을 나열하면 전체 구조가 자연스럽게 잡힐 것이라고 생각했다. 하지만 실제로 설계를 시작해보니, 기능 목록만으로는 시스템의 경계를 분명하게 설명하기 어려웠다. 오히려 더 중요한 것은 각 도메인이 어떤 상태를 가지고, 어떤 이벤트를 통해 다음 상태로 이동하는지를 먼저 정의하는 일이었다. 금융 시스템은 특히 이 부분이 중요하다. 같은 데이터라도 현재 어떤 상태에 있느냐에 따라 허용되는 행위가 달라지기 때문이다. 아직 심사 중인 자산은 발행될 수 없고, 청약이 열리지 않은 상품에는 신청할 수 없으며, 검증되지 않은 주문은 체결 대상이 될 수 없다. 체결된 거래 역시 바로 끝나는 것이 아니라 정산 상태를 거쳐야 실제 보유수량과 현금 잔액에 반영된다. 결국 ..
조각투자증권 시스템을 설계하려고 마음먹었을 때, 가장 먼저 정리해야 했던 것은 화면이나 API 목록이 아니었다. 이 시스템이 어떤 흐름으로 시작되고, 어떤 상태를 거쳐, 최종적으로 무엇을 남기는지를 이해하는 것이 우선이었다. 조각투자 서비스는 단순히 상품을 등록하고 사고파는 플랫폼처럼 보일 수 있지만, 실제로는 자산이 등록되는 순간부터 투자자에게 수익이 분배되기까지 긴 LifeCycle가진다. 그리고 이 LifeCycle를 제대로 이해해야만 이후의 서브시스템 분리, 상태 전이, 원장 구조, 정산 방식까지 자연스럽게 설계할 수 있다. 이번 글에서는 조각투자증권 시스템을 하나의 흐름으로 바라보며, 전체 LifeCycle를 단계별로 정리해보려고 한다. 이 글의 목적은 세부 구현을 설명하는 것이 아니라, 앞으..
최근 금융 시스템과 거래 처리 구조에 대한 관심이 커지면서, 단순한 CRUD 서비스가 아니라 실제 금융 서비스에 가까운 시스템을 직접 설계해보고 싶다는 생각이 들었다. 그 과정에서 눈에 들어온 주제가 바로 조각투자증권 시스템이었다. 조각투자는 하나의 자산을 여러 투자자가 나누어 보유할 수 있도록 만든 구조라는 점에서 흥미롭지만, 시스템 관점에서 보면 더 매력적인 요소가 많다. 단순히 상품을 등록하고 매수·매도하는 수준이 아니라, 자산 등록과 심사, 증권 발행, 청약, 주문, 체결, 정산, 보유 원장 관리, 수익 분배, 공시, 감사 추적까지 이어지는 긴 흐름을 가진다. 즉, 하나의 서비스 안에 금융 시스템에서 중요하게 다루는 핵심 요소들이 모두 녹아 있다. 나는 이 프로젝트를 통해 “조각투자 앱”을 ..
1. 목적레포지토리의 개발 활동(PR, Push, Issue 등)을 실시간으로 Discord 채널에 전달해 팀 협업 효율을 높이기 위함이다.이전에는 Slack을 사용했지만, 메세지가 사라지는 문제가 있어서 디스코드로 사용하려고 한다.노션과 피그마도 알림 시스템 자동화를 구축하려 했지만, 유료버젼만 가능했다. 우회하는 방법이 있을지 모르겠지만, 우리 팀에게 꼭 필요하진 않아서 보류했다. 이후 서버로그 중 위험한 시그널을 디스코드로 전송하도록 추후 구축할 예정이다.스타트업은.. 비용을 아껴야해..스타트업은.. 비용을 아껴야해..2. 구현 방식A. Cloudflare Worker를 Webhook 중계 서버로 사용서버 없이 운영 가능한 Worker 환경을 사용해 GitHub Webhook 이벤트를 수신이벤트 내..
vue(404)... 무슨 에러지?Vue 기반의 자바스크립트 프로젝트를 진행하던 중, 팀원이 프로젝트를 Github에서 clone 받고 .vue 파일을 열자마자이해할 수 없는 에러를 마주했습니다. vue(404): Write global types file failed. Please ensure that "node_modules" exists and "vue" is a direct dependency, or set "vueCompilerOptions.globalTypesPath" in "tsconfig.json" manually. Write global types file failed. Please ensure that "node_modules" exists and "vue" is a direct d..
길었지만, 첫 프로젝트가 끝이 났다. 이것저것 경험해 보겠다고 학교 졸업 후에 정말 많은 일들을 했었던 것 같다. 사소한 아르바이트로 IT 회사에서 마케팅 일도 해보고, 코인 거래소, 금융권 등 다양한 곳에서 일하다 보니 결국 학교에서 들었던 C 프로그래밍의 짜릿함? 내가 만든 무언가가 잘 작동하는 그 느낌이 그리웠나 보다. 결국 개발을 다시 해보겠다고 돌아왔고, 24년 12월 웹 개발을 처음 시작했다. 우선 뭐든 만들어보자는 마인드로 인프런에서 팀원들을 찾았다. 그냥 맨땅에 헤딩해보겠다는 생각으로 무작정 백엔드로 시작했는데, 처음에는 정말 너무 힘들었던 것 같다. 무슨 소리인지도 모르겠고, 그냥 하루 종일 지피티랑 구글이랑 지냈다. 처음 맡았던 기능이 로그인, 인증/인가였으니... 지금 생각해 보면..
메인 페이지가 늦게 뜨는 문제 해결기 메인 페이지 진입 시 25초 이상 걸리는 이상 현상을 해결했던 과정을 공유합니다.SVG, 압축, lazy loading 등 단순한 이슈였지만, 초기 렌더링 시간보다 94% 단축하여 체감 성능을 10배이상 개선했습니다. 현상 요약메인 페이지 첫 진입 시 25초 이상 지연서버는 빠르게 응답했지만, 브라우저 렌더링이 한참 뒤에 완료됨DevTools -> Network 탭에서 보면, 몇몇 리소스가 수십 MB 수준의 SVG이미지 수십 개가 동시에 요청되며 렌더링 병목 발생함SVG 파일 용량이 비정상적으로 큼.svg 하나당 12~16MB벡터 그래픽이라 용량이 낮을 것으로 생각했는데, 내부에 base64 인코딩 이미지가 포함되어 있었음.실제로는 텍스트가 아닌 이미지 덩어리라 용량..