https://school.programmers.co.kr/learn/courses/30/lessons/388351 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 분석 및 핵심 로직문제의 목표는 직원들의 출근 희망 시각과 일주일간의 실제 출근 기록을 비교하여 상품 수령 대상자를 세는 것이다.핵심 조건:지각 허용: 희망 시각 + 10분까지는 인정시간 포맷: 시(Hour) * 100 + 분(Minute) 형태의 정수 (예: 10시 10분 = 1010)요일 예외: 토, 일요일은 지각해도 상관없음시간 관련 연산 최적화시간 계산에서 가장 까다로운 부분은 "60분이 넘어가면 1시간을 올려야 한다"는 점이다. 보통은 몫..
작성일: 2026년 1월 27일기술 스택: iOS Shortcuts, OpenAI API (gpt-4o-mini), Notion API1. Project Background (개발 배경)평소 노션(Notion)에 일정과 프로젝트를 꼼꼼히 기록하는 편입니다. 하지만 기록하는 과정 자체가 꽤 번거로울 때가 많았습니다. 예를 들어 길을 걷다 "다음 주 화요일 저녁 7시, 강남역에서 하준이와 회의"라는 일정이 생각나면, 폰을 켜고 앱을 실행해 페이지를 찾고, 제목과 날짜, 태그를 일일이 지정해야 합니다. 이 과정에 약 20초 정도가 소요되는데, 생각의 흐름이 끊기는 게 아쉬웠습니다. "그냥 말로 대충 던져주면 알아서 정리해 줄 순 없을까?" 이 단순한 필요에서 시작해, 단축어와 API를 활용한 자동화 작업을 시..
로그인된 줄 알고 글을 썼는데 튕겨 나가는 '좀비 세션' 문제를 해결하고, 제목과 본문은 물론 댓글 내용까지 찾아내는 통합 검색 기능을 구현했습니다. 이 과정에서 발생한 React Query의 캐시 동기화 이슈와 백엔드 쿼리 누락 문제를 바로잡아 시스템의 안정성을 확보했습니다.인증 로직 강화 및 좀비 세션 해결액세스 토큰(Access Token)이 만료되었음에도 UI상으로는 로그인 상태가 유지되는, 이른바 '좀비 세션' 현상이 사용자 경험을 해치고 있었습니다. 사용자는 글쓰기나 좋아요를 누르는 시점에야 401 에러를 마주하고 강제 로그아웃 당하는 불편을 겪었습니다.이를 해결하기 위해 Axios Interceptor를 고도화했습니다. 401 에러가 감지되면 즉시 리프레시 토큰(Refresh Token)으로..
AWS 배포 환경에서 DELETE 요청이 차단되는 CORS 문제를 해결하고, 대댓글 시스템과 낙관적 업데이트를 구현했습니다. 데이터 무결성을 위해 Soft Delete 방식을 도입했으며, DTO 분리를 통해 네트워크 페이로드를 최적화했습니다.AWS API Gateway CORS 설정 및 DELETE 메서드 허용로컬 환경에서는 정상 작동하던 댓글 삭제 기능이 AWS Amplify 배포 환경에서 405 Method Not Allowed 및 CORS 에러를 일으켰습니다. 원인은 FastAPI의 설정과 무관하게, 요청을 가장 먼저 받는 AWS API Gateway가 DELETE 메서드를 차단하고 있었기 때문이었습니다.API Gateway의 CORS 설정 목록에 DELETE 메서드를 명시적으로 추가하고, Acce..
메인 페이지의 로딩 지연 문제를 해결하기 위해 데이터베이스 반정규화와 조회 로직 분리를 수행하여 LCP(Largest Contentful Paint)를 단축했다. 또한 비회원 유입을 위한 UX 패턴을 적용하고, 낙관적 업데이트(Optimistic Update)를 도입하여 사용자의 인터랙션 지연 시간을 제로(Zero Latency) 수준으로 최적화했다.DB 반정규화 및 N+1 문제 해결을 통한 로딩 속도 단축현상 및 원인서비스 초기 로딩 시간이 평균 2.8초로 측정되어 사용자 경험 저하가 우려되었다. 프로파일링 결과, 게시글 목록 조회 시 각 객체의 좋아요 및 댓글 수를 산출하기 위해 수백 개의 연관 객체를 메모리에 로드하는 N+1 문제가 발생하고 있었다.해결 과정단순 쿼리 최적화의 한계를 극복하기 위해 ..
Windows 환경 등에서 기기 잠금(PIN, 생체인증)이 설정되지 않았을 때 발생하는 WebAuthn 에러에 대한 예외 처리를 구현했다. 불명확한 에러 메시지를 구체적인 행동 가이드로 매핑하고, 플랫폼 인증 장치의 가용성을 사전에 감지하는 로직을 추가하여 사용자 경험을 개선했다.WebAuthn 에러 코드 매핑 및 가이드 메시지 구체화현상 및 원인 Windows 환경에서 OS 차원의 잠금 설정(PIN, 비밀번호, 생체인증)이 비활성화된 상태로 패스키 가입을 시도할 경우, NotAllowedError가 발생하며 프로세스가 중단되었다. 브라우저가 반환하는 기본 에러 메시지는 기술적인 내용에 국한되어 있어, 일반 사용자가 기기 잠금 설정이 원인임을 인지하고 해결하기 어려웠다.해결 과정AxiosError 핸들링..
배포된 AWS Serverless 백엔드 API에서 발생한 접속 장애와 데이터 불일치, Cold Start 지연 문제를 해결했다. API Gateway의 호환성 설정과 CORS 정책을 수립하고, 테스트 데이터를 구축하여 프론트엔드 연동 환경을 정상화했다. 또한 EventBridge를 활용한 Warmer 트리거를 설정하여 컨테이너 초기 구동 속도 문제를 개선했다.API Gateway 호환성 확보 및 CORS 정책 수립현상 및 원인 API 호출 시 404 및 500 에러가 발생했으며, 프론트엔드 연동 시 CORS 정책 위반으로 데이터 호출이 차단되었다. 원인 분석 결과, API Gateway HTTP API(v2)의 Payload 2.0 형식을 Python 어댑터(Mangum)가 해석하지 못하는 호환성 문제..
AWS Lambda(Container) 기반의 FastAPI 서버를 배포하는 과정에서 발생한 접속 장애와 500 에러를 해결했다. API Gateway의 라우팅 설정 미비, Docker 컨테이너의 Cold Start 지연, Mangum 어댑터의 Payload 버전 불일치, 그리고 FastAPI 경로 매핑 문제를 단계적으로 수정하여 안정적인 배포 환경을 구축했다.인프라 설정 및 런타임 타임아웃 조정CI/CD 파이프라인을 통해 이미지는 정상적으로 배포되었으나, API Gateway 엔드포인트 접속 시 요청이 Lambda로 전달되지 않았다. 초기 설정 시 스테이지와 라우트가 정의되지 않은 것이 원인이었다. 명시적인 default 스테이지와 $default 라우트를 생성하여 Lambda와 통합을 완료했다.이후 ..
백엔드 인증 로직 구현 및 DB 모델링이메일 및 패스키 인증 시스템 Google SMTP를 활용한 인증번호 발송 로직과 WebAuthn 표준을 따르는 패스키 회원가입 API(/signup/options, /verify)를 구현했다. 보안 강화를 위해 python-dotenv를 도입하여 민감 정보를 환경변수로 분리했다. 데이터베이스는 User와 Passkey 테이블을 1:N 관계로 정의하고, credential_id 및 public_key 등 필수 필드에 대한 인덱싱을 완료했다.보안 모듈 리팩토링 기존 create_access_token 함수가 단일 문자열 인자만 허용하여 확장이 불가능한 문제가 있었다. 이를 딕셔너리(data: dict) 전체를 인자로 받도록 리팩토링하여, 향후 토큰 내에 역할(Role)..
프론트엔드 렌더링 중단 오류를 수정하고, 메인 페이지의 실제 로딩 속도를 측정하기 위해 모니터링 도구를 구현했다. 측정된 정량적 지표를 바탕으로 로딩 시간을 단축하기 위해 ORM 튜닝, DB 반정규화, API 통합 등 다양한 최적화를 시도했으나, 성능 저하 및 복잡도 증가 문제가 발생하여 기존 아키텍처로 롤백을 결정했다.useQuery 구조 분해 수정 및 로딩 시간 측정현상게시글 상세 페이지(PostDetail.tsx) 진입 시 'isFetching' is not defined 에러가 발생하며 렌더링이 중단되었다. useQuery 훅의 반환 객체에서 isFetching을 구조 분해 할당하지 않은 상태에서 변수로 참조하려 한 것이 원인이었다. 또한 메인 페이지와 달리 상세 페이지의 API 응답 속도에 대한..