
개요앞선 글(언제나 복잡한 이름 순 정렬 구현하기)에 이어서 파일 드라이브의 정책 관련 이야기들 중 하나다. 별로 재미없는 이야기인데, 내가 했던 고민들을 정리해보려고 한다. 현재 개발 중인 서비스에 파일을 관리할 때 파일들이 고유한 id를 갖게끔 구성했다. 그래서 순도 100% 백엔드 개발자 마인드로 어차피 id로 구분되니까 파일 이름이 중복되도 문제가 없지 않을까...? 란 생각을 했지만... 다른 팀원들의 생각은 달랐다. 그 결과 나는 반대했지만 결국 중복된 이름 생성을 방지하기 위한 다양한 정책이 나오기 시작했다... 어떤 문제가 있었고 이에 따른 어떤 정책들이 있었으며 어떻게 처리했는지 하나씩 알아보자. 1. 생성 시 동일한 이름이 있다면 어떻게 해야하나?이건 정책적으로 그냥 막기로 했다. ..

개요간단한 검색 기능을 넣어놨는데... iOS에서 올린 데이터가 검색이 안된다는 이슈가 올라왔다. 그래서 DB를 뒤적거려보니... 아래와 같이 저장되어 있었다. 사실 처음부터 데이터가 이렇게 저장되고 있다는건 알고 있긴했다. 그런데, 문자열 기반 검색이 아닌 단순 조회에서는 신기하게 제대로 출력되서 큰 걱정은 안하고 있었다. 그런데 문자열 기반 검색이 안되기 때문에 조치가 필요했다. 가장 쉬운 방법은 쿼리에서 데이터 마이그레이션을 하고, 클라이언트에서 NFC 방식으로 업로드하는 것을 유도하는 것이다. 그런데, 클라이언트가 바로 패치를 못하는 경우가 있다. 이 때는 서버에서 단독으로 조치를 해줘야한다. 해결 방법을 하나씩 알아보자. 1. PostgresSQL에서 NFD방식을 NFC로 마이그레이션하기특정 버..

개요기본적으로 컨텐츠 정렬은 등록일자의 역순이 일반적이다. 그런데 정책 요구사항으로 이름 순 정렬이 생겼다. 이름 순 정렬이니 별생각없이 컬럼 정렬로 order by name ASC를 한다면? 재미있는 일을 마주하게 된다. 가장 먼저 숫자 쪽에서 의도치 않은 동작을 확인하게 된다.1 5 10 20 100 1100 위와 같은 순서로 이름을 짓게 되면 아래와 같이 정렬이 된다.1 10 100 1100 20 5이건 가장 단편적으로 보이는 문제고... 그외에도 문제가 많다. 가장 먼저 떠오르는 010은 10으로 봐야하나부터 시작해서 특수문자, 이모지 등등... 정말 많은 문제가 있다. 어떻게 할지 하나씩 정리해보자. 본 포스팅은 PostgreSQL을 기준으로 작성되었다. 1. 유니코드 정렬과 언어 기준 정렬 ..

개요고유한 객체의 ID를 생성할 일이 생겼다. 그동안 ID를 만들 때, UUID나 랜덤 값으로 ID를 만들었으나 이번에는 제대로 설계를 해보려고 한다. 대부분의 경우에는 UUID로 id를 만들어도 고유성 측면에서는 큰 문제는 없지만, 그냥 사용하기엔 조금 아쉽다. 그래서 가장 많이 레퍼런스로 사용되는 트위터에서 사용되는 id 생성 기법인 스노우플레이크다. 스노우플레이크는 id가 정수로만 표현되서 다루기 쉽고 인덱스 효율성을 보장하지만, id만 가지고 무언가를 식별하긴 어렵다. 이리저리 고민하다가 새로 설계해서 만들어보기로 했다. 이번 포스팅은 설계 과정에서의 의사결정 과정을 정리해봤다. ID 생성에서 고려할 점들토스페이먼츠에서 거의 그대로 긁어옴 고유성 : 동일한 시스템 또는 전체 네트워크 내에서 두 ..

문제 상황FE에서는 그동안 CloudFront URL로 만들어진 이미지 URL을 BE로부터 전달 받아서 img 태그에 넣어주기만 했었다. 그런데 이번 개선으로 이미지를 다운로드를 받아서 사용할 일이 생겼다. 그런데 웬걸 CORS 에러가 발생하기 시작했다. FE에서는 fetch를 이용해 이미지를 blob형태로 받으려 했고, 이 과정에서 CORS가 발생했다고 한다. 이 문제의 원인을 찾아가는 과정이다. 문제 분석1. CloudFront에서 특정 HTTP Method를 막아놨나?- 이전에 CloudFront로 POST 요청이 필요한 경우가 있었는데, 이 Method가 막혀 있을 때 비슷한 에러가 났었다.그러나 fetch는 GET 방식이고, CloudFront에서 GET 방식은 무조건 열려있다. 2. S3의 ..

갑작스럽게 떨어진 오더(C레벨에서부터 내려온)로 인해 월드 ID를 이용한 인증 시스템 개발 업무가 추가됐다. 왜 이런 오더가 떨어졌냐를 생각하기전에 월드 ID가 뭐인지부터 알아보자. 월드 ID란? World ID는 영지식 증명과 고급 개인 정보 보호 암호화를 통해 사용자가 익명으로 자신의 고유성과 인간성을 증명할 수 있는 디지털 신원 솔루션입니다. World ID는 클라우드 및 온체인 앱 모두에 쉽게 통합할 수 있습니다. 유효한 월드 ID를 가진 사용자는 월드 앱과 같은 월드 ID 호환 지갑을 통해 익명으로 자신이 고유한 인간임을 몇 초 만에 확인할 수 있습니다. https://docs.worldcoin.org/world-id 굳이 인증 과정을 기존 방식이 아닌 다른 컨셉으로 해야하나?란 생각이 들지만 ..

Python으로 개발된 서비스를 배포할 일이 생겼다. 그런데 개발자가 Python 프로젝트를 아무 지식도 없이 만들어서 가상환경에서 작업하지 않고, 로컬 & 글로벌에서 모든 작업을 처리했다. 그러다보니 어떤 의존성 패키지를 썼는지 명확히 알 수가 없었다. 당연히 이 명령어도 쓸 수 없었다. pip freeze > requirements.txt 다행히 파이썬에서는 프로젝트에서 사용한 의존성을 자동 추출할 수 있는 스크립트를 제공한다. pipreqs라는 이름의 패키지다. pip install로 설치할 수 있다. 그런데 설치부터 아래와 같은 에러를 발생시킨다. > pip install pipreqs ERROR: Could not install packages due to an OSError: [Errno 2]..

혼자 쿠버네티스를 공부하려고보니 KIND(Kubernetes in Docker)를 쓰라는 말을 들엇다. KIND는 이름부터 도커가 들어가기 때문에, 당연히 도커가 필요하다. 하지만 Docker for Windows는 WSL2에서만 사용가능하다고하는데... 내 WSL은 버전이 1이었다. WSL1을 WSL2로 업데이트해보자. 들어가기전에 Windows 업데이트를 확인해야한다. WSL 2는 Windows 11 또는 Windows 10, 버전 1903, 빌드 18362 이상에서만 사용할 수 있습니다. Windows 로고 키 + R 을 선택하고 winver를 입력한 다음, 확인을 선택하여 Windows 버전을 확인합니다. (또는 Windows 명령 프롬프트에서 ver 명령을 입력합니다.) 최신 Windows 버전..
- Total
- Today
- Yesterday
- 람다
- lambda
- MySQL
- AWS
- serverless
- 스프링부트
- CloudFront
- AWS EC2
- cache
- Spring
- EKS
- OpenAI
- AOP
- elasticsearch
- java
- Elastic cloud
- docker
- S3
- Log
- JWT
- 오블완
- terraform
- 후기
- springboot
- 티스토리챌린지
- Kotlin
- ChatGPT
- GIT
- 후쿠오카
- object
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |