썸네일 [TroubleShooting] S3 업로드 시 한글 파일명 깨짐과 NFC/NFD 정규화 완벽 정리 1. 핵심 요약 (TL;DR)문제: macOS와 Windows/Linux는 한글을 처리하는 유니코드 방식이 다르다. (NFC vs NFD)현상: 로컬(macOS)에서 올린 파일을 Lambda(Linux)에서 찾으려 하면 404 NoSuchKey 에러가 발생한다.해결:S3 조회 시: 방어적 코딩으로 NFC와 NFD 포맷을 모두 조회한다.DB 저장 시: 검색 일관성을 위해 NFD(혹은 NFC)로 포맷을 하나로 통일하여 저장한다.2. 배경 지식: 유니코드 정규화 (Unicode Normalization)문제의 시작한글 "한"이라는 글자는 컴퓨터 입장에서 두 가지 방법으로 표현될 수 있습니다. 사람 눈에는 똑같아 보이지만, 컴퓨터는 이를 완전히 다른 문자열로 인식합니다.구분설명형태바이트 길이(예시)주요 사용 O..
썸네일 [Troubleshooting] S3와 DB 데이터 불일치 해결: Single Source of Truth(SSOT)의 중요성 AWS S3와 DB를 연동할 때 '무엇'을 기준으로 삼아야 할까?삭제 버튼을 눌렀는데 삭제가 안 되는 경우는 무엇일까? S3와 DB 데이터 불일치하여 생기는 Troubleshooting 문제를 해결하기 위한 Single Source of Truth(SSOT) 개념을 정리하려고 한다. 0. 들어가며: 데이터의 기준은 어디인가?최근 프로젝트에서 AWS S3(파일 저장소)와 RDS(메타데이터 저장소)를 함께 사용하는 기능을 개발하면서 겪은 문제와 해결 과정을 공유하려 합니다.UI에는 분명히 데이터가 존재해서 '삭제'를 눌렀는데, "파일을 찾을 수 없습니다"라는 에러와 함께 삭제가 되지 않는 현상이 발생했습니다. 이 문제를 해결하며 배운 Single Source of Truth(단일 진실 공급원)의 개념과 적..
썸네일 [AWS/GitHub Actions] 배포 실패! "name unknown: The repository with name..." 에러 해결 및 ECR 개념 정리 AWS Lambda를 Docker 이미지 기반으로 배포하기 위해 GitHub Actions를 돌리던 중, 빌드 파이프라인이 실패하는 상황을 마주했습니다.CI/CD 구축 중 흔히 겪을 수 있는 ECR 리포지토리 누락 문제와 이를 해결하기 위한 핵심 개념들을 정리해 봅니다. 🚨 발생한 오류 상황GitHub Actions 워크플로우 실행 중 docker push 단계에서 다음과 같은 에러가 발생하며 프로세스가 종료되었습니다. name unknown: The repository with name 'data-processor' does not exist in the registry with id '***'Error: Process completed with exit code 1.해석하자면 "네가 이미지를 밀어 ..
썸네일 [Git] Merge/Pull이 안 될 때? Stash로 작업 내용 임시 저장하기 📦 [Git] Merge/Pull이 안 될 때? Stash로 작업 내용 임시 저장하기 📦개발을 하다 보면 아직 작업이 끝나지 않았는데 급하게 다른 브랜치로 넘어가거나, git pull / git merge를 해야 하는 상황이 생깁니다.이때 그냥 진행하면 Git은 "커밋하지 않은 변경사항이 있어 덮어씌워질 수 있다" 며 에러를 뱉습니다.error: Your local changes to the following files would be overwritten by merge:...Please commit your changes or stash them before you merge.이때 유용한 기능이 바로 Git Stash입니다. 1. Git Stash란? 🤔작업 중인 코드(변경된 파일)를 잠시 "서랍(S..
썸네일 JSON과 Python 딕셔너리 이해하기 안녕하세요! 백엔드 개발, 특히 API를 만들다 보면 프론트엔드와 데이터를 주고받을 일이 정말 많은데, 이때 'JSON'과 '파이썬 딕셔너리(dict)'의 용어가 미묘하게 달라 헷갈리거나 커뮤니케이션에 혼동을 겪는 경우가 종종 있습니다.이 둘은 매우 비슷하게 생겼지만, 그 본질과 사용되는 시점이 다릅니다.핵심을 먼저 말씀드리면, "JSON은 데이터를 교환하기 위한 '문자열(text) 형식'"이고, "파이썬 딕셔너리는 메모리상에 존재하는 '데이터 구조'"입니다.오늘은 이 두 가지 개념을 명확히 비교하고, 파이썬에서 어떻게 변환해서 사용하는지 확실하게 정리해 보겠습니다.1. 🔀 JSON과 Python 용어 비교 (치트 시트)프론트엔드 개발자와 소통하거나 API 문서를 볼 때, 머릿속에서 아래 표와 같이 변..
썸네일 [1탄] 백엔드 기초 개념 핵심 정리 1강: 백엔드란 무엇인가? (핵심 개념과 역할)1.1. 프론트엔드(Frontend) vs. 백엔드(Backend)웹 서비스는 사용자와 직접 만나는 부분과 보이지 않는 뒷부분으로 나뉩니다.• 프론트엔드 (Frontend): 사용자가 직접 보고 상호작용하는 영역입니다. (예: 웹 페이지 디자인, 버튼, 앱 화면). 주로 HTML, CSS, JavaScript 등의 기술이 사용됩니다.• 백엔드 (Backend): 사용자에게 보이지 않는 서버 측 영역입니다. 데이터 저장 및 관리, 핵심 기능(비즈니스 로직) 처리, 보안 등을 담당합니다. Java, Python, Node.js, 데이터베이스 등 다양한 기술이 사용됩니다.이 둘을 분리하는 이유는 전문성 강화, 효율적인 협업, 쉬운 유지보수를 위해서입니다.1.2. ..
썸네일 DB 데이터와 S3 파일 불일치 문제 해결하기 (트랜잭션 순서) 🐛 발생한 에러 분석개발 과정에서 발생한 에러와 코드 리팩토링을 기록합니다. 1️⃣ 첫 번째 에러: 500 Internal Server Error증상:HTTP 500 Internal Server Error 원인:# 서버 로그 (CloudWatch 등)[ERROR] column "user_name" does not exist 문제 코드:sql = f""" DELETE FROM {db.USERS_TABLE} WHERE user_id = '{user_id}' AND user_name = '{username}' # ❌ 잘못된 컬럼명""" 실제 DB 테이블 구조:-- app.users 테이블┌─────────────┬──────────┬─────────┐│ Column Name │ Type ..
썸네일 파이썬 함수 사용을 위한 객체 지향 프로그래밍(OOP) 관련 개념 이 개념들은 객체 지향 프로그래밍(OOP)을 더 깊게 활용하고, 함수의 기능을 확장하며, 복잡한 프로그램의 흐름을 제어하는 데 필수적입니다.📚 목차__init__: 객체의 탄생을 알리는 생성자__call__: 객체를 함수처럼 부르는 마법데코레이터 (Decorator): 코드를 감싸는 우아한 포장지제너레이터 (Generator): 메모리를 아끼는 현명한 데이터 생산자traceback: 오류의 뿌리를 찾는 탐정async/await: 기다림의 미학, 비동기 프로그래밍 1. __init__: 객체의 탄생을 알리는 생성자__init__은 "initialize" (초기화하다)의 약자입니다. 이름 그대로, 클래스(설계도)에서 객체(제품)를 처음 만들 때 자동으로 호출되는 특별한 메소드(함수)입니다. 역할: 객체가 ..
썸네일 [익숙해지고 싶은 개념] URI, Endpoint, Path Parameter, Query String 저는 이 개념들이 왜 아직도 헷갈릴까요...? ㅎㅎ헷갈리는 내용을 '온라인 쇼핑몰'을 비유로 삼아 정리한 글입니다. [개발 용어] API 주소, 아직도 헷갈리시나요? (쇼핑몰 비유로 5분 만에 끝내기)안녕하세요! 백엔드 개발을 공부하거나 API를 다루다 보면, URI, 엔드포인트(Endpoint), Path Parameter, Query String 같은 비슷한 용어들을 만나게 됩니다.이 용어들은 서버와 클라이언트 간의 '약속'에서 굉장히 중요하지만, 처음에는 그 차이가 모호하게 느껴질 수 있습니다.오늘은 이 4가지 핵심 용어를 '온라인 쇼핑몰에서 물건 찾기'에 비유하여 명확하게 구분해 보려 합니다!🛒 '쇼핑몰'로 비유하기우리가 만들 API가 두 개 있다고 가정해 봅시다.A API: /shop/user..
썸네일 AWS Lambda와 Docker: "No module named 'db'" 에러부터 멀티 스테이지 빌드까지 로컬에서는 잘 실행되던 파이썬 코드가 AWS Lambda에 Docker 이미지로 배포만 하면 ModuleNotFoundError: No module named 'db' 에러를 뿜어내는 경우가 있습니다.분명 main.py와 db.py 파일 둘 다 멀쩡히 존재하는데 말이죠.이 문제의 원인은 99% Dockerfile에 있습니다. 이 글에서는 Docker 이미지와 Dockerfile의 기본 개념, ImportError 해결법, 그리고 더 나아가 빌드 속도를 높이고 이미지 크기를 줄이는 심화 팁까지 모두 다뤄보겠습니다.1. 🐳 Docker 이미지란 무엇인가? "얼려둔 스냅샷"가장 쉽게 비유하자면, Docker 이미지는 **"실행 환경을 통째로 얼려서 박제해둔 스냅샷"**입니다.이 "스냅샷" 안에는 내 코드가 ..
썸네일 GitHub Actions와 AWS Lambda 배포, CI/CD 파이프라인 개념 1. 💻 개발 (Development) - '내 컴퓨터'모든 것의 시작입니다. 개발자가 자신의 컴퓨터(로컬)에서 코드를 작성합니다.핵심 도구: Git프로세스:main 또는 development 브랜치에서 새로운 기능 브랜치(예: feature/login)를 만듭니다.새로운 기능을 구현하거나 버그를 수정하는 코드를 작성합니다.작업이 완료되면 코드를 저장(Commit)합니다. (git commit)2. 🚀 푸시 & CI (Push & Continuous Integration) - '자동화의 시작'개발자가 작성한 코드를 중앙 저장소(예: GitHub)로 밀어 올리면서(Push) CI/CD 파이프라인이 시작됩니다.트리거: git pushCI (지속적 통합): 여러 개발자의 코드를 '지속적으로 통합(Integ..
썸네일 [Github] 실수로 다른 branch에 커밋했을 때 PUSH 전 되돌리는 방법 (feat. git reset --soft) 오늘도 정신없이 코드를 수정하고 테스트를 마쳤습니다.그리고 익숙하게 터미널에 git add . 와 git commit을 입력했죠. 그런데...(venv) my-project % git statusOn branch developmentYour branch and 'origin/development' have diverged,and have 1 and 6 different commits each, respectively....아뿔싸! 😱 브랜치를 확인해 보니 feature 브랜치가 아니라 development 브랜치였습니다.development나 main 브랜치에 바로 커밋하는 것은 팀 전체의 룰을 깨뜨리는 위험한 행동입니다.다행히 아직 git push는 하지 않았습니다.이럴 땐 어떻게 이 커밋을 올바른 ..