| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 투포인터
- System.currentTimeMillis()
- express
- Redis
- Instant.now().toEpochMilli()
- idempotency
- BFS
- API명세 작성
- PREFECT
- Queue테이블
- 선착순 보장
- 범위클래스
- 웹어플케이션서버
- Port/Adpater
- 안드로이드 스튜디오
- 딥러닝
- Queue
- cs50
- 코틀린
- 백준
- 개발 기술환경 파악
- Kotlin
- 알고리즘
- 텍스트전처리
- 멱등한 API
- gensim
- 서버구조 설계 시 고려할점
- 정보처리기사
- 인프라 구성도
- 파이썬
- Today
- Total
목록전체 글 (86)
THINK HARD
생성형 AI를 공부하다 보면 텍스트 생성뿐 아니라 이미지 생성도 자연스럽게 접하게 된다.이번에는 Google Cloud 학습 영상 내용을 바탕으로, 이미지 생성 모델의 흐름과 그중에서도 많이 사용되는 디퓨전 모델(Diffusion Model) 이 무엇인지 정리해봤다. 원문 강의에서는 이미지 생성의 대표적인 방식들을 간단히 소개한 뒤, 디퓨전 모델의 핵심 원리를 설명한다. 이미지 생성 모델에는 어떤 방식이 있을까이미지 생성은 최근에 갑자기 등장한 개념은 아니다.디퓨전 모델 이전에도 여러 방식의 생성 모델이 연구되고 활용되어 왔다. 1. VAE(Variational Autoencoder)VAE는 이미지를 한 번 압축된 표현으로 바꾼 뒤, 다시 원래 이미지로 복원하는 구조를 가진다.이 과정에서 단순히 이미지를..
대기열 로직을 구현하면서 한 가지 문제가 있었다.서비스 로직이 Redis에 직접 붙기 시작하면 테스트가 어려워진다는 점이다.예를 들어 QueueService 내부에서 곧바로 StringRedisTemplate을 사용하게 되면,테스트를 실행할 때마다 Redis 환경이 필요해진다.이렇게 되면 단위 테스트의 장점이 사라진다.그래서 QueueService는 Redis를 직접 알지 않도록 하고,중간에 QueueStore라는 인터페이스를 두었다.public interface QueueStore { void enqueue(Long concertId, Long userId, double score); Optional findRank(Long concertId, Long userId); long getG..
대기열에서 가장 중요한 기능은 순번 관리다.누가 먼저 들어왔는지 정렬할 수 있어야 하고,특정 사용자의 현재 순번도 빠르게 조회할 수 있어야 한다.이 요구사항에 가장 잘 맞는 자료구조가 Redis의 ZSET이다.ZSET은 다음 두 값을 함께 저장한다.memberscore그리고 score 기준으로 자동 정렬된다.대기열에서는 이 구조를 다음과 같이 사용했다.member = userIdscore = 사용자가 대기열에 진입한 시간예를 들어 다음과 같이 데이터를 넣으면,redis.opsForZSet().add("queue:1", userId.toString(), score);Redis 내부에서는 score 기준으로 정렬된 집합이 만들어진다.즉, 먼저 들어온 사용자가 앞 순번을 가지게 된다.이후 특정 사용자의 순번은..
대기열을 처음 구현하려고 하면 자연스럽게 이런 생각을 하게 된다.“queue 테이블을 만들고, status 컬럼을 두면 되지 않을까?”나도 처음에는 비슷하게 접근했다.하지만 조금만 생각해보면 대기열은 일반적인 CRUD 데이터와 성격이 다르다.대기열에서 중요한 것은 다음 두 가지다.누가 먼저 들어왔는가지금 입장 가능한가즉, 대기열은 “저장”보다 “순서 계산”이 핵심이다.특정 사용자의 상태를 테이블에 계속 저장하고 갱신하는 방식은 가능은 하지만,상태 동기화와 갱신 비용이 커지고 구조도 불필요하게 무거워진다.그래서 대기열을 상태 저장형 모델이 아니라계산형 도메인 모델로 보게 되었다.예를 들어 “대기중”, “입장가능” 같은 상태는 DB 컬럼에 저장하는 값이 아니라,현재 순번과 gate 값을 비교해서 매 요청마다..
콘서트 예약이나 한정 수량 판매 시스템은 특정 시점에 트래픽이 집중된다.문제는 단순히 사용자가 많다는 점이 아니라, 같은 자원에 동시에 접근한다는 점이다.예를 들어 좌석 예약 시스템을 생각해보면, 오픈 직후 다수의 사용자가 동시에 같은 좌석을 조회하고 선점하려고 한다.이 상황에서는 다음과 같은 문제가 발생한다.동일 좌석에 대한 동시 요청DB Lock 경쟁 증가응답 지연일부 요청의 실패 또는 타임아웃전체 시스템 부하 증가이 문제를 해결하기 위해 서버 스펙을 올리거나 인스턴스를 추가할 수는 있다.하지만 요청이 한 시점에 몰리는 구조 자체를 바꾸지 않으면 근본적인 해결이 어렵다.이때 필요한 것이 대기열이다.대기열의 핵심은 요청을 바로 처리하는 것이 아니라,처리 가능한 수만큼만 순서대로 통과시키는 것이다.구조를..
멱등성이란?멱등(Idempontant)멱등하다는 것은 첫 번째 수행을 한 뒤 여러 차례 적용해도 결과를 변경시키지 않는 작업 또는 기능의 속성을 뜻한다. 멱등한 작업은 여러번을 해도 결과가 동일해야 된다.멱등성 메서드는 통계 기록등을 제외하면 어떠한 부수효과(side effect)가 존재해서는 안된다는 뜻이다.멱등성을 따질 때는 실제 서버의 백엔드 상태만 보면 되며, 각 요청에서 반환하는 응답코드는 다를 수 있다.(ex. 첫번째 DELETE 요청이 200을 반환한다면, 그 이후는 404를 반환해야할 것이다.)HTTP 메서드에서의 멱등성메서드멱등성CONNECTXDELETEOGETOHEADOOPTIONSOPOSTXPUTOPATCHXTRACEOGET, PUT 은 리소스를 조회하거나 대체하는 메서드이기에 멱등하..
서버구조 설계 시 고려할점예시) 공연 예매서버 구조 설계의 흐름무조건 있을 수 밖에 없는 기능이 무엇일까?결국에 서비스 이기 때문에 반드시 필요한 기능이 있다.유저공연 정보공연 예매 단위(ex. 예약가능한 개별좌석) → 공연 상품에 대한 재고예매 행위 → 공연 예매 단위 소유권을 유저 가 점유하게 된다.API 명세 작성인터페이스 (Rest API 기본 → 선택이유 : 범용적이기 때문)getUser유저의 이름유저의 성별 (’M’ | ‘F’)ERDUSERUSER_ID(고유해야함)USER_NAME ← 무조건 STRINGUSER_GENDER ← STRING인프라 구성도DNS 서비스 (AWS Route 53)앱(인스턴스) → 무엇으로 만들지어떤 기술을 선택할지(spring으로할지 어떤걸로 할지)팀의 성격을 고려해..
Jmeter란Apache Jmeter는 웹 서비스나 서버의 성능테스트(부하 테스트, Stress test)를 할 때 사용하는 오픈소스다.Jmeter를 통한 테스트웹서비스가 몇 명까지 버틸지동시에 1000명이 접속한다면 얼마나 빨리 수행되는지응답속도는 괜찮은지와 같이 테스트 해볼 수 있다.API 성능 테스트REST APISOAP APIGraphQL 등서버 부하 테스트 / 스트레스 테스트CPU를 얼마나 사용하는지메모리 부담은 어떠한지TPS(초당 트랜잭션)을 체크분산 부하 테스트한 대가 아니라 여러 서버에서 동시에 부하를 걸어 테스트 가능특징라이선스 : 무료 오픈소스사용법 : GUI + CLI확장성 : 플러그인 많음지원 프로토콜 : HTTP, HTTPS, FTP, JMS, DB 등동작 방식Thread(Work..