코테만 풀다가 오랜만에 느낀 개발자 감각 - 참가 취소 기능 개발기
·
Projects
참가 취소 기능, 별거 아닌 줄 알았다요즘 코딩테스트 대비한다고 알고리즘 문제만 계속 풀었다.문제 읽고, 조건 파악하고, 풀이 짜고, 제출하는 루틴을 반복하다 보니 어느 순간 이런 생각이 들었다.내가 서비스를 만들고 있나, 문제집을 풀고 있나?그래서 오랜만에 프로젝트 레포를 다시 열었다. 알고리즘 문제에는 없는 것들 실제로 돌아가는 서비스, 기존 코드와의 정합성, 상태 하나 잘못 바꾸면 다른 기능이 깨지는 긴장감 그런 걸 다시 느끼고 싶었다.그렇게 골라잡은 게 참가 취소 기능이다. 신청은 이미 되는데 취소가 안 되는, 반쪽짜리 기능이었던 부분이다.얼핏 보면 CRUD에서 D 하나 추가하는 수준이라 금방 끝날 줄 알았다. 실제로는 설계 방향을 한 번 뒤집고, 버그 세 개를 순서대로 만난 뒤에야 끝났다. 오랜..
홈 서버 구축기(1) - 미니PC, 서버 환경으로 만들어 보자
·
홈 서버
AWS 무료티어 기간이 전부 소모되어 갈쯤 미니PC를 사서 서버를 마이그레이션 해보고자 해서 중고나라에서 구매하였다.가격은 46만원... ryzen 5700u, ram 32GB, m.2 512GB요새 램값이며 ssd값이며 AI 돌풍 덕분에 엄청 가격이 올랐다. 그거 치고는 잘 산듯! 먼저 우리집 환경(?)을 살펴보자면메인 pc는 집에서 개발 및 서핑용으로 사용하고 있다미니PC는 서버 겸 넷플릭스나 유튜브 보기용으로 사용할 예정마침 구매한 미니PC가 윈도우 버전이 pro이기도 하고, linux를 바로 깔기에는 좀 아깝다고 생각했다. 제일 처음 생각 프로세스는 이거였다.미니PC가 윈도우 프로니까 pro버전은 윈도우 원격(MSTSC)가 가능함wsl이라고 윈도우에서 리눅스기능을 파워쉘에서 사용할 수 있게 해주는..
[Troubleshooting] Nginx 설정이 배포만 하면 초기화되는 현상 (Docker & GitHub Actions)
·
Docker
1. 문제 상황 (Issue)현상: API 호출 시 400 Bad Request조치 내용: 운영 서버(EC2)에 접속해 Nginx 컨테이너 설정을 수동으로 수정하여 정상 작동을 확인.재발: GitHub Actions를 통해 자동 배포를 진행하면 수정한 설정이 사라지고 다시 에러 발생. 어제 고쳤는데 오늘 다시 터지는 '무한 루프' 상황 발생.2. 원인 분석 (Root Cause)🔍 기술적 원인: 잘못된 Nginx 설정400 에러: proxy_set_header Connection ""; 설정 때문. SSE(Server-Sent Events)를 위해 추가했으나, Spring Boot(Tomcat)는 Connection 헤더가 비어 있으면 보안상 비정상 요청으로 판단해 입구를 차단함.🔍 구조적 원인: G..
[Troubleshooting] 도커 배포 중 발생한 Redis 연결 오류 해결 (쿠키 문제인 줄 알았으나 인프라 문제였던 건에 대하여)
·
Docker
최근 프로젝트를 EC2 운영 환경에 배포하던 중 로컬에서는 정상적이던 로그인이 배포 서버에서만 실패하는 현상을 겪었다. 결론부터 말하면 사소한 포트 번호 오타와 도커 컴포즈의 환경변수 주입 시점 문제였으며 그 해결 과정을 기록으로 남긴다.1. 문제 발생: "로컬은 되는데 배포 환경만 안 된다?"본인은 로컬 개발 시 빠른 피드백과 디버깅을 위해 Spring Boot와 React는 로컬 호스트(Localhost)에서 직접 실행하고 Redis와 DB만 도커 컨테이너로 띄워 사용한다.로컬에서는 Spring이 도커에 뜬 Redis 포트(6379:6379 매핑)를 통해 localhost:6379로 바로 접속하므로 아무런 문제가 없었다. 하지만 모든 서비스를 도커 컨테이너화하여 올린 배포 환경에서는 상황이 달랐다.로..
Docker에서만 API가 401로 실패한다면 꼭 확인해야 할 것
·
Docker
React, Spring Boot, MySQL을 Docker Compose로 묶고 Nginx를 리버스 프록시로 두는 구조를 구성했다.로컬 환경에서는 정상적으로 동작하던 API가 Docker 환경에서 실행하자마자 프론트엔드 요청에 대해 계속 401 에러를 반환했다.백엔드 서버는 분명 실행 중이었고 Spring Security 설정도 permitAll()로 열어둔 상태였다.그래서 처음에는 자연스럽게 이런 생각이 들었다. “401이면 권한 문제잖아?”“그럼 Security 설정이 문제 아닌가?” 401 에러를 보고 처음 들었던 생각내가 알고 있는 401 에러는 명확했다.인증이 안 되었을 때토큰이 없거나 잘못되었을 때권한이 없는 요청일 때그래서 이 상황이 더 이상했다. JWT도 아직 적용하지 않음, 모든 요..
Nginx 기본 개념
·
Nginx
Nginx의 주요 역할웹서버 (Web Server): 사용자의 요청(Request)을 받아 정적인 파일(HTML, CSS, 이미지 등)을 전달(Serve)하는 기본 역할이다.리버스 프록시 (Reverse Proxy): 사용자의 요청을 받아서, 그요청을 대신 내부의 다른 서버(Node.js, Java 애플리케이션)로 전달하고 응답을 다시 사용자에게 보내주는 중개자 역할이다. 이 역할이 핵심 강점이다.로드 밸런서(Load Banancer): 요청이 폭주할 때, 여러 개의 서버에 요청을 균등하게 나누어 분산시켜주는 역할이다.Nginx의 장점: 비동기 이벤트 기반 아키텍처Nginx가 빠르고 강력한 이유는 비동기 이벤트 기반 아키텍처 덕분이다.동시성 처리: 대부분의 서버들은 요청마다 새로운 프로세스나 스레드를 생..
도커(Docker)란?
·
Docker
도커란?도커(Docker)는 애플리케이션을 실행하는 데 필요한 환경을 **컨테이너(Container)**라는 형태로 묶어 언제 어디서나 동일한 환경에서 실행할 수 있게 만들어주는 플랫폼이다.즉 “내 컴퓨터에서는 되는데?” 같은 문제를 해결해주는 강력한 개발·배포 도구다. 도커는 운영체제를 통째로 가상화하지 않고 필요한 실행 환경만 가볍게 격리해서 실행한다는 점에서 기존의 VM과 큰 차이가 있다.Virtual Machine vs Docker도커를 이해하려면 먼저 기존 가상화 방식인 **Virtual Machine(버추얼머신)**과 비교하는 것이 가장 쉽다.Virtual Machine(버추얼머신)버추얼머신은 하드웨어 위에 또 하나의 운영체제(OS)를 통째로 올리는 방식의 가상화 기술이다.구조[Hardware..
TIL : POST 요청에서도 Response에 데이터를 포함하는 이유
·
TIL
API 설계를 하면서 POST 요청에서 Response에 데이터를 포함하는 것에 대해 중요한 깨달음을 얻었다.처음에는 회원가입이나 글 작성 같은 POST 요청에서는 "회원가입 완료", "글 작성 완료" 같은 단순 메시지만 반환하면 충분하다고 생각했다. GET 요청에서는 데이터를 포함해서 반환하는 것이 당연하지만 POST는 결과 자체만 알면 된다고 설계 초기에는 판단했기 때문이다. 고민하면서 깨달은 점은 POST 요청에서도 데이터를 함께 반환하면 클라이언트 입장에서 효율성이 크게 증가한다는 것이다.예를 들어 회원가입을 생각해보자.사용자가 회원가입 폼에 정보를 입력하고 완료한 뒤 로그인을 하는 플로우가 있을 때 POST Response에 새로 생성된 회원 정보를 포함하면 클라이언트는 추가적인 GET 요청 없..