전체 글 8

랜덤 닉네임 중복을 어떻게 다룰까?

랜덤 닉네임 중복을 어떻게 다룰까? 들어가며수식어 + 동물 형태의 랜덤 닉네임은 가입 요청이 들어올 때마다 만들어도 될까, 아니면 가능한 조합을 미리 전부 만들어서 DB에 넣어두는 게 나을까? 지인 대상으로 MVP를 작게 열어본 뒤 약 100명 정도가 가입해 있었습니다. 실제 사용자가 생기고 나니 기본 닉네임을 계속 랜덤으로 만들어도 괜찮은지 한 번쯤 점검해야겠다는 생각이 들었습니다.신규 사용자에게는 수식어 + 동물 형태의 기본 닉네임을 자동으로 부여하고 있었습니다. 처음에는 단순하게 생각했습니다. 수식어 하나와 동물 이름 하나를 랜덤으로 뽑고, 이미 사용 중이면 몇 번 더 시도하면 된다고 봤습니다.그런데 후보 수를 계산해 보니 현재 조합은 5,325개였습니다. 수식어 71개 x 동물 75개 = 5,32..

DB 2026.05.31

Hibernate - 자동 stale detection @Version 없이도 동작하는 안전장치

Hibernate는 @Version 없이도 stale detection을 한다 — 좋아요 동시성 디버깅에서 만난 의외의 안전장치들어가며게시글 좋아요 토글(toggleLike) 기능을 보다가 동시성 문제가 있을 것 같아서 재현 테스트를 만들어 봤습니다. 처음 가설은 꽤 단순했어요."check-then-act 패턴이니까 동시 요청이 들어오면 like_count가 음수가 될 거다."그런데 막상 실측해 보니 결과가 예상과 완전히 달랐습니다. 정합성은 멀쩡한데, 10건 중 9건이 500 에러로 실패하고 있었어요. 원인을 따라가다 보니 Hibernate가 @Version 없이도 자동으로 해주는 stale detection 메커니즘을 만나게 됐습니다. 이 글에서는 그 과정을 정리해 보려고 합니다.1. 문제의 코드좋아..

JPA 2026.04.08

Cloud Map private DNS에 .local을 붙였더니 왜 조회가 실패했을까

Cloud Map private DNS에 .local을 붙였더니 왜 조회가 실패했을까"Cloud Map namespace도 만들었고 Route 53 Private Hosted Zone도 생겼는데, 왜 EC2에서 DNS 조회가 실패할까?" AWS Cloud Map private DNS를 붙이다가 이런 문제를 만났습니다. Cloud Map 리소스는 정상적으로 생성됐습니다. Route 53 Private Hosted Zone도 만들어졌고, 서비스 인스턴스도 등록되어 있었습니다. 그런데 정작 Caddy가 실행되는 EC2에서 DNS를 조회하면 실패했습니다. 결론부터 말하면, 원인은 Cloud Map이 아니라 DNS 이름 끝에 붙인 .local 이었습니다. 이번 글은 이 문제만 가볍게 정리해봅니다. 환경항목 내용S..

AWS 2026.03.02

Docker 컨테이너에서만 EC2 IAM Role 자격증명을 못 가져온 이유 IMDSv2 Hop Limit 트러블슈팅

"EC2에는 IAM Role이 붙어 있는데, 왜 컨테이너 안의 Spring 애플리케이션은 AWS 자격증명을 못 가져올까?" S3 Presigned URL을 생성하는 API에서 AWS 자격증명을 찾지 못하는 문제가 있었습니다. 처음에는 S3 권한 문제라고 생각했습니다. IAM Role에 s3:GetObject, s3:PutObject 같은 권한이 빠졌거나, 애플리케이션에 환경변수가 없어서 생긴 문제처럼 보였거든요. 그런데 EC2 호스트에서는 IAM Role 자격증명을 정상적으로 가져오고 있었습니다. 호스트에서 aws sts get-caller-identity를 실행하면 아래처럼 assumed-role ARN이 반환됐습니다.{ "UserId": "AROAXXXXXXXXXXXXX:botocore-sessio..

AWS 2026.03.01

Tasteam V2 이관기 2: DB는 무중단이었는데 왜 S3 이관은 다르게 했을까? — aws s3 sync 기반 이관기

Tasteam V2 이관기 2: DB는 무중단이었는데 왜 S3 이관은 다르게 했을까? — aws s3 sync 기반 이관기안녕하세요, Tasteam에서 Cloud 팀을 맡고 있는 clay입니다."DB는 논리 복제로 무중단 마이그레이션 했잖아요. 그럼 파일도 비슷하게 옮기면 되는 거 아닌가요?" V1에서 V2로 넘어오면서 DB는 Logical Replication 기반으로 무중단 마이그레이션을 준비했습니다. 그래서 처음에는 이미지와 파일이 들어 있는 S3도 비슷하게 생각했어요. 기존 버킷의 데이터를 백그라운드로 복사하고, 신규 업로드는 async로 두 군데에 쓰면 되지 않을까 싶었습니다.그런데 막상 구조를 뜯어보니 S3는 DB와 결이 달랐습니다. 특히 저희 서비스는 S3 Presigned POST 기반 업..

DB 2026.02.28

Tasteam V2 이관기 1: 다른 AWS 계정으로 DB를 무중단으로 옮긴 이야기

Tasteam V2 이관기 1: 다른 AWS 계정으로 DB를 무중단으로 옮긴 이야기안녕하세요, Tasteam에서 Cloud 팀을 맡고 있는 clay입니다.V1에서 V2로 인프라를 전환하면서 저희는 애플리케이션뿐 아니라 DB까지 다른 AWS 계정으로 옮겨야 했습니다.문제는 DB였습니다. 애플리케이션은 계정 B에 새로 띄우고 Cloudflare 오리진을 바꾸면 되지만, DB는 서비스가 계속 쓰고 있는 데이터라 같은 방식으로 단순히 바꿀 수 없었거든요.당시 Tasteam은 이미 외부에 공개되어 사용자 데이터가 쌓이기 시작한 상태였습니다. 그래서 이관 방식도 단순히 "옮기면 된다"가 아니라, 서비스가 살아 있는 상태에서 데이터 정합성을 어떻게 유지할지까지 함께 고민해야 했습니다.그래서 목표는 단순히 "DB를 옮..

DB 2026.02.24

외부 보안 공격 이후 EC2 네트워크가 끊긴 이야기 — DHCP 갱신 실패 장애 분석

외부 보안 공격 이후 EC2 네트워크가 끊긴 이야기 — DHCP 갱신 실패 장애 분석안녕하세요, Tasteam에서 Cloud 팀을 맡고 있는 clay입니다."dev 서버 접속이 안 돼요."장애의 시작은 백엔드 팀의 제보였습니다. dev 서버에 접속이 안 된다는 이야기를 듣고 확인하려고 SSH로 들어가려 했는데, SSH도 붙지 않았습니다.처음에는 인스턴스가 꺼졌나 싶었습니다. 그런데 EC2 콘솔에서는 인스턴스가 running 상태였어요. 서버는 실행 중인데, 웹도 안 되고 SSH도 안 되는 이상한 상황이었습니다.조금 더 확인해 보니 EC2 상태 검사가 2/3으로 떨어져 있었습니다. 이후 로그를 따라가 보니, 실제 원인은 애플리케이션보다 더 아래 계층에 있었습니다. EC2 인스턴스의 DHCP 갱신이 실패하면..

네트워크 2026.02.23

도메인은 정상인데 왜 접속이 안 될까? — ISP DNS 캐시가 만든 SERVFAIL 트러블슈팅

도메인은 정상인데 왜 접속이 안 될까? — ISP DNS 캐시가 만든 SERVFAIL 트러블슈팅안녕하세요, Tasteam에서 Cloud 팀을 맡고 있는 clay입니다. "저는 접속이 되는데, 다른 팀원은 접속이 안 돼요."인프라를 운영하다 보면 이런 제보를 종종 받게 됩니다. 도메인 설정은 분명히 끝냈는데, 특정 사용자만 접속이 안 되는 상황.가비아에서 구매한 tasteam.kr 도메인을 Cloudflare에 연결한 직후, 저희도 정확히 이 문제를 마주했습니다. 특히 KT 네트워크 환경에서 nslookup tasteam.kr을 실행하면 IP 주소를 찾지 못하고 SERVFAIL 오류를 반환했어요. 모든 설정은 정상이었는데, 대체 무엇이 문제였을까요?오늘은 이 문제를 어떻게 진단하고 해결했는지, 그 과정을 ..

네트워크 2026.02.22