본문 바로가기

전체 글13

사람을 낚는 AI 자바로 UUIDv7를 만들기 위해 라이브러리를 다운받기 전,혹시 자바 17버전에서는 라이브러리 없이 UUIDv7 생성이 가능하지 않을까? 하는 생각이 들어 AI님께 질문을 드렸다. 그랬더니,Google Gemini: 자바 17버전부터는 java.util.UUID.randomUUID()의 반환값이UUIDv7입니다!자바 17버전 이하를 사용하신다면 UUID 라이브러리를 사용하시고, 17버전 이상이라면 라이브러리는 필요 없습니다! 듣고 나서 어라? 싶었다.JDK 17부터 똑같은 메서드의 반환값이 이전 버전과 달라지면 어떤 문제가 일어날까?17로 올릴 때는 크게 문제가 안 될 것 같다.하지만 다운그레이드를 해야 하는 상황이 온다면 어떨까? 라이브러리or프레임워크 호환 문제로 JDK를 다운그레이드해야 하는 상황.. 2025. 3. 3.
클라우드 저장소 만들기 - UUID PK, 어떻게 만들어서 어떻게 저장할까? 지난 이야기클라우드 저장소의 '파일' 테이블의 PK를 UUID로 만들기로 정했다.파일 식별자는 url에 직접 사용될 예정이므로, 예측 불가능하게 만들어야 하기 때문이다.이제 '어떻게 만들어서 어떻게 저장할까?'에 대해서 생각해봤다.Java 서버에 MySQL DB를 사용하는 상황.가장 간단한 방식부터 시작해서 개선해 보자. 첫째 (프로젝트 초기 세팅 상황)자바: UUID.randomUUID().toString(); 으로 UUID 생성DB: VARCHAR에 저장첫째 방식 문제점.일단 자바 애플리케이션에서의 문제를 보자.java.util.UUID.java의 randomUUID()는 UUIDv4를 반환한다. UUIDv4는 완전 랜덤이다.그리고 우리는 이 완전히 랜덤한 문자를 DB의 PK로 사용하려 한다.DB 입.. 2025. 3. 2.
클라우드 저장소 만들기 - PK 결정, UUID vs Auto Increment RDB 테이블의 PK는 무엇으로 할까? (서비스에 MySQL DB를 사용하는 상황이다.) Auto Increment로 하는 것이 가장 간단하고, 용량 차지가 적고, 숫자타입이므로 비교연산이 빠르다.(다음 편에서 이야기하겠지만, MySQL InnoDB Secondary Index의 구성을 생각해보면PK의 크기는 가능한 한 작은 게 좋을 것이다.) 그래서 기존엔 대부분의 경우 PK로 Auto Increment를 사용했다.'대부분'에 해당하지 않는 경우는 무엇일까? DB 샤딩과 관련한 문제는 내가 잘 아는 분야가 아니라 넘어가고,내가 보기엔 '예측 가능한 식별자가 문제되는 경우' 가 Auto Increment를 사용하기에 문제가 될 수 있는 상황이다. 모두가 접근할 수 있는 게시글의 식별자는 예측 가능해도 큰.. 2025. 2. 28.
클라우드 저장소 만들기 - 서버 디렉토리 구성 전략 구글 드라이브와 비슷한 웹 스토리지 서비스를 만드려 한다.서버 내부의 디렉토리 구조 설계에 대해 생각해보고, AI님과 나눈 대화를 바탕으로 간단히 정리해 보았다. 구글 드라이브와 같이 다수의 사용자가 존재할 때, 실제 파일은 서버에 어떻게 저장하는 것이 좋을까?어떤 서버를 저장소로 사용할 것인지(클라우드, 온프레미스 등...)는 논외로 한다.해당 파일 서버 내의 '디렉토리 구조'에 대해서 말하는 것. 일단 한 가지만 주제에 놓고 이야기해보자.첫째: 사용자의 UI를 그대로 따라가면 될까? 아니면 별도의 전략을 갖춰야 할까?사용자는 UI상에서 디렉토리를 만들고, 삭제하고, 위치를 옮길 수 있다.이 시각적인 경로를 서버 내에서도 그렇게 구현해야 할까?(사용자마다 루트 디렉토리 하나를 만들고, 내부 구조는 사용.. 2025. 2. 22.