며칠 전 사내 신규 프로젝트 킥오프에서 인증 방식 얘기가 나왔다. 주니어 한 명이 "요즘 누가 세션 쓰나요, JWT 가야죠"라고 했고, 나는 잠깐 고민하다가 "이 프로젝트는 세션이 맞을 것 같은데"라고 답했다. 회의가 끝나고 그 친구가 따로 물어보러 왔다. 왜 JWT가 아니냐고. 그때 했던 얘기를 정리해서 글로 남긴다. 15년 넘게 백엔드를 하면서 JWT로 인증을 구현해 장애도 겪어봤고, 세션으로 돌아간 프로젝트도 있고, 결국 둘 다 쓰는 프로젝트도 있다. 이론은 간단한데 실무는 간단하지 않았다.세션 인증과 JWT, 교과서 설명은 이렇다복습부터 하자. 세션 인증은 로그인에 성공하면 서버가 세션 ID를 만들어 저장소(메모리, Redis, DB)에 보관하고, 브라우저에는 그 ID만 쿠키로 내려주는 방식이다...
OpenAPI 문서와 실제 API가 어긋날 때 먼저 잡을 기준Swagger UI에는 분명 email이 필수라고 적혀 있는데, 실제 응답에는 가끔 빠집니다. 문서에는 status가 active | blocked라고 되어 있지만 운영 데이터에는 pending이 섞여 있습니다. 프론트엔드는 타입을 믿고 배포했는데, 어느 날 특정 고객 계정에서만 화면이 깨집니다.이런 문제는 OpenAPI를 "문서 자동 생성" 정도로만 보면 계속 반복됩니다. OpenAPI는 예쁜 API 문서가 아니라, 클라이언트와 서버가 함께 지키는 계약으로 다뤄야 합니다. 계약이 깨지는 순간은 대개 큰 리팩토링 때가 아닙니다. 필드 하나를 optional로 바꾸거나, 에러 응답 형식을 급하게 추가하거나, 테스트 데이터에 없는 케이스가 운영에서..
홈서버나 개인 프로젝트에 도커 컨테이너를 여러 개 띄워두면 이미지 업데이트를 챙기는 게 일이 된다. docker pull 하고 컨테이너 지우고 다시 띄우는 걸 컨테이너 수만큼 반복해야 한다.이걸 자동으로 해주는 게 Watchtower다.실행docker run -d \ --name=watchtower \ -e TZ=Asia/Seoul \ -v /var/run/docker.sock:/var/run/docker.sock \ --restart=always \ containrrr/watchtower --cleanup각 옵션의 의미는 이렇다.-v /var/run/docker.sock:/var/run/docker.sock : 호스트의 도커 소켓을 마운트해서 다른 컨테이너를 제어할 수 있게 한다. Watcht..
PhpStorm이나 IntelliJ에서 한글 언어팩을 켰는데 UI가 그대로 영어인 경우가 있다. 캐시를 지워도, IDE를 재시작해도 안 바뀐다.원인은 단순한데 찾기가 어렵다. 언어팩을 enable 하는 것과, 실제로 사용할 언어를 고르는 것이 별개가 됐기 때문이다.무엇이 바뀌었나예전에는 한글 언어팩이 마켓플레이스에서 설치하는 플러그인이었다. 설치하면 곧바로 적용됐다.그런데 언어팩이 IDE에 기본 번들로 들어오면서 설치/삭제가 아니라 enable / disable 방식으로 바뀌었다. 여기서 함정이 생긴다. enable은 "이 언어팩을 쓸 수 있게 해달라"는 뜻이지 "이 언어로 바꿔달라"는 뜻이 아니다.해결 순서1. 언어팩을 enable 한다Settings (Preferences) > Plugins > In..
스캔한 옛날 사진이나, 카메라 시계가 잘못 맞춰진 상태로 찍은 사진들의 메타데이터를 한 번에 고쳐야 할 때가 있다. ExifTool을 쓰면 명령 한 줄로 끝난다.설치brew install exiftool명령어위치만 변경exiftool -gpslatitude=37.6534 -gpslongitude=126.8321 \ -gpslatituderef=N -gpslongituderef=E \ -overwrite_original /경로/사진_폴더/*.jpg날짜만 변경exiftool "-AllDates=2024:08:24 12:34:56" \ -overwrite_original /경로/사진_폴더/*.jpg둘 다 변경exiftool "-AllDates=2024:08:24 12:34:56" \ -gpslatitu..
개발을 몇 년 하다 보면 오히려 기초를 대충 넘어가게 된다. HTML 태그도 그렇다. 화면에 똑같이 보이니까 아무거나 쓰게 되는데, 사실 각각 의미가 다르다.예전에 정리해뒀던 메모를 다시 꺼내 보충한다.이탤릭체: em vs i : 강조하고 싶은 부분을 이탤릭체로 표시 : 단순히 이탤릭체로 표시둘 다 화면에서는 기울어져 보인다. 차이는 의미가 있느냐다.은 emphasis, 즉 문장에서 강세를 두어 읽어야 할 부분이다. 스크린 리더는 이 부분의 억양을 실제로 다르게 읽는다. "나는 오늘 간다"와 "나는 오늘 간다"는 의미가 다른데, 그 차이를 마크업으로 표현하는 것이다.는 강조가 아니라 결이 다른 텍스트를 나타낸다. 학명, 외국어 단어, 배 이름, 생각을 나타내는 문장 같은 것이다.<!-- 강조: 읽을..
