본문 바로가기

전체 글

(351)
[BOJ] 3273. 두 수의 합 https://www.acmicpc.net/problem/3273 3273번: 두 수의 합 n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i 위의 방식은 시간 초과 발생 새로운 아이디어 생각해야함 - 투포인터를 활용하면? - 배열을 오름..
DRF 메가 쇼핑몰 쿠폰 발급 동시성 문제 해결 커머스 도메인을 다루는 서비스를 보면 쿠폰을 제공하는 기능이 꼭 하나씩은 존재한다. 선착순으로 진행하는 경우도 있고 그렇지 않은 경우도 있는데, 대다수의 쿠폰은 재고를 가지기 마련이다. 단순하게 생각한다면 DB에 쿠폰의 재고를 저장해두고 유저가 쿠폰을 획득할 때 마다 재고를 하나씩 차감하면 된다고 생각할 수 있는데 여기에는 큰 문제점이 하나 존재한다. 예를 들어 100개의 쿠폰을 발급할 수 있다고 가정해보자. 99개의 쿠폰이 소진되었고 재고가 1개 남은 상태이다. 이때 A라는 유저가 재고를 조회하고 데이터베이스에서는 1개의 재고가 남았다고 알려준다. 그리고 동시에 B유저가 재고 조회를 진행하고 마찬가지로 데이터베이스에서는 1개의 재고가 남았다고 알려준다. 다음으로 A가 쿠폰을 획득함과 동시에 재고를 1개..
[BOJ] 2559. 수열 https://www.acmicpc.net/problem/2559 2559번: 수열 첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기 www.acmicpc.net 1. 해결방법 """ 1. 아이디어 - 투포인터를 사용 - for문을 이용해서 처음의 k개의 값을 저장 - 다음 인덱스를 더하고, 이전 인덱스를 뺴줌 - 이때마다 최대값 갱신 2. 시간복잡도 - O(2N) == O(N) 3. 자료구조 배열 : int[] """ 2. 정답코드 import sys input = sys.stdin.readline N, K = map(int, input()...
[Django] ManyToMany Field를 이용한 태그 구현 메가 쇼핑몰 서비스에서 마켓 생성시 해시태그도 같이 생성되게끔 구현하려고 한다. 해시 태그는 ManyToMany 필드를 사용할 것이다. 아래의 사진처럼 마켓에 해시태그를 추가해서 해당 마켓이 추구하는 스타일 또는 의미를 나타내게 하는 것이다. 1. 모델 Tag 모델 # tag/models.py class Tag(models.Model): name = models.CharField('태그', max_length=30, unique=True) class Meta: db_table = 'tag' def __str__(self): return self.name Market 모델 market/models.py class Market(models.Model): name = models.CharField('마켓 이름..
[ElasticSearch] ILM 기능으로 인덱스 주기 관리 이번에는 며칠동안 삽질했던 ILM 정책을 수립하는 과정에 대해서 기록하려고 한다. 환경은 3개의 클라우드 서버 환경에서 각 1개의 노드를 설정하였다. 또한, 노드의 옵션을 hot, warm, cold로 두어서 로그를 효율적으로 관리하려고 한다. 물론 master로 설정된 노드는 키바나가 설치되어 있어야 한다. (로그스태시는 자유) 마스터 노드가 있는 서버에서 키바나 Dev Tools로 접속을 한다. # 모든 인덱스 조회 GET _cat/indices?v # 모든 노드 조회 GET _cat/nodes?v # 각 노드의 Roles 조회 GET _cat/nodeattrs?v&s=name GET _nodes?filter_path=nodes.*.name,nodes.*.roles 위의 명령어를 통해서 각 인덱스와 ..
[ElasticSearch] node 종류와 옵션 ILM 정책을 수립을 하는 도중에 hot-warm-cold 세 개로 노드를 나누어서 multi-tier 노드 아키텍처를 설정하려고 한다. 그러기 위해서는 노드의 종류와 각 노드들의 옵션이 무엇인지 알아야 하기 때문에 글을 정리하려고 한다. ElasticSearch 노드 종류 (1) Master 노드 node.master를 true로 지정하며 클러스터의 컨트롤을 통해 마스터 노드로 선택될 자격을 가지게 된다. 마스터 노드는 클러스터에서 인덱스를 만들고 지우는 행위, 클러스터에서 노드들을 트래킹하고 각각의 노드를 샤드를 할당할건지 결정한다. 데이터를 인덱싱하고 찾고 하는 작업은 CPU, Memory, I/O 자원을 많이 사용하기 때문에 큰 규모에서는 data node와 master node를 구별한다. (2..
[Django] 데이터 쿼리 스트링을 이용한 검색 및 필터링 성능 개선 ( + ElasticSearch ) 예정
[Django] 메가 쇼핑몰 인기 상품 랭킹 조회 ( + Redis or ElasticSearch ) 에이블리와 브랜디, 무신사와 같은 메가 쇼핑몰 특성상 수 십개 또는 수 백개의 마켓이 있고 굉장히 많은 상품의 데이터를 가지고 있을 때, 마켓 상관 없이 조회수와 평점이 높은 상품의 리스트를 보고싶은 경우는 어떻게 할까 라는 고민이 생겼다. 나름 개발한 경험이 좀 있어서 그런지는 모르겠지만, 쇼핑몰 특성상 상품 데이터는 RDBMS로 관리를 할 것이고, 모든 상품을 조회하면서 평점 또는 조회수를 가지고 상품 랭킹을 나타내는 것에 대해서 RDBMS를 계속 접근한다는 것은 성능적인 큰 이슈를 불러올 것만 같은 느낌이 강하게 들었다. 이 고민을 가지고 한번 테스트를 해볼 생각이다. 1. RDBMS 2. Redis 3. ElasticSearch