| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- aop
- spring boot
- querydls
- Java
- EC2
- 프로그래머스
- Github Actions
- testcode
- rabbitmq
- elasticsearch
- Til
- algorithm
- CI/CD
- 유효성 검사
- Kafka
- 테스트 코드
- springboot
- 어노테이션
- 멀티 모듈
- 객체지향원칙
- algoritm
- tosspayment api
- Intellij
- MSA
- Redis
- DevOps
- docker
- trouble shooting
- JPA
- JWT
- Today
- Total
목록전체 글 (60)
개발노트
문제 상황 및 의문초기에는 공연 리뷰의 변경 감지 로직을 도입하여 불필요한 업데이트를 줄이는 데 집중했었다.이를 통해 성능이 개선되었다고 판단하여 TPS 3배 향상이라는 지표를 도출했었다.하지만 10,000건의 데이터를 처리하는 데 초당 처리량이 고작 10건(9.99 TPS) 내외에 머무르는 것을 보고 의문이 들었다..인메모리 DB인 Redis를 사용하는데 왜 이렇게 느릴까? 라는 생각을 시작으로 근본적인 병목 원인을 알아보기 시작했다.문제 원인단순히 코드 한 줄의 문제가 아니라 측정 방식, DB 접근 패턴, Redis 활용 방식 전반에 걸친 문제가 복합적으로 작용하고 있었다.원인 1 : 측정 지표의 부적절성오류: 백그라운드에서 대량의 데이터를 동기화하는 일괄 처리(Batch) 작업임에도, 실시간 응답성..
개요이전의 프로젝트에서 결제 도메인을 담당했었고 토스페이먼츠를 구현하는데 시간이 부족해 핵심 구현만 빠르게 진행하고 그뒤에 보수를 하지못했다. 다른 사람들이 한걸보니까 중복결제가 안되도록 헤더의 결제의 고유 값을 포함해 전달해 통신의 문제가 생겼을경우가 api 요청이 올바르게 되지않은 경우에 중복결제가 되는것을 방지하도록 한걸 보았다. 오늘은 기존의 결제 로직과 결제 엔티티를 리팩터링하는 과정을 가져보도록한다. 멱등성이란?어떤 연산을 여러 번 수행해도 결과가 단 한 번 수행한것과 같은 성질을 의미한다.간단하게 하나의 api를 몇 번을 호출해도 항상 똑같은 결과가 나오는 것을 말하낟. 결제 시스템처럼 돈과 관련된 중요한 처리에서는 멱등성이 상당히 중요하다.개요에서 설명한 거 처럼 결제 버튼을 눌렀는데 네..
추천 검색 기능 및 검색 고도화 기본적인것들은 전부 정상적으로 동작하는걸 봤다.엘라스틱 서치를 사용하면서 해보었던 추천 검색어 기능을 해볼건데 네이버네 구글처럼 사용자가 잘못된 명칭이나 오타로 입력해도원래 의도한 검색어를 찾아서 제안해주는 기능을 만들거다 검색기능을 만들 때 ElasticsearchRepository를 사용해 간단하게 구현하는 방법과 고급검색기능(자동완성, 추천 검색어, 집계 등)을 구현할때는 ElasticsearchClient를 사용하는 방법이있다. 나는 후자로 진행 ElasticsearchClient 란 무엇인가?ElasticsearchRepository를 이용해서 기본적인 CURD나 쿼리메서드 기반 검색은 가능하지만 자동완성 같은 고급 기능은 Repository 만으로는 한계가있다...
Elasticsearch를 활용한 검색 기능 구현1. 의존성 추가springboot에서는 의존성으로 엘라스틱 서치를 쉽게 연동할 수 있다.jpa처럼 엘라스틱서치repository를 구현해 데이터를 저장하고 다룰 수 있게 해주는 라이브러리이다. implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch' 2. Elasticsearch 연결을 위한 Config 설정적용을 하고나면 간단한 기본 세팅을 해줘야한다package com.onnongwa.back_end.domain.config;import org.springframework.beans.factory.annotation.Value;import org.springfram..
docker-compose.yml 작성elasticsearch을 도커 환경에서 동작 시킬거기 때문에 compose 파일을 하나 작성해준다. version: '3.8'services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.6.0 container_name: elasticsearch environment: - discovery.type=single-node - xpack.security.enabled=false ports: - "9200:9200" - "9300:9300" volumes: - esdata:/usr/share/elasticsearch/..
개요여러번의 프로젝트를 거치면서 검색기능을 자주 만들었는데 매번 조회에서 QueryDSL을 통한 검색만 구현해왔었다.Mysql, PostgreSQL같은 데이터 베이스를 사용해 검색을 하게되면 정형 데이터 검색에는 강하다. 하지만 특정 텍스트속의 단어를 찾는 경우에는 성능이 확실히 느리다고 느껴졌다. 예를 들어 이전에 진행한 티켓팅 프로젝트 takeSeat에서 공연 설명에 "감동" 이 들어간 공연을 검색하려하면 엄청나게 많은 데이터에서 SQL이 "LIKE %감동%" 연산을 통해 하나부터 끝까지 전체 조회를 하게되므로 성능이 좋지못하다. 이러한 문제를 해결할 수 있는게 엘라스틱 서치라고 지인에게 들어서 공부해보고 적용해보려한다. 엘라스틱 서치는 왜 특정 텍스트 속의 단어를 빠르게 찾는가?엘라스틱 서치는 왜 ..
문제신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다.예를 들어 7대의 컴퓨터가 과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸리게 된다. 하지만 4번과 7번 컴퓨터는 1번 컴퓨터와 네트워크상에서 연결되어 있지 않기 때문에 영향을 받지 않는다.어느 날 1번 컴퓨터가 웜 바이러스에 걸렸다. 컴퓨터의 수와 네트워크 상에서 서로 연결되어 있는 정보가 주어질 때, 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수를 출..
문제BOJ 알고리즘 캠프에는 총 N명이 참가하고 있다. 사람들은 0번부터 N-1번으로 번호가 매겨져 있고, 일부 사람들은 친구이다.오늘은 다음과 같은 친구 관계를 가진 사람 A, B, C, D, E가 존재하는지 구해보려고 한다.A는 B와 친구다.B는 C와 친구다.C는 D와 친구다.D는 E와 친구다.위와 같은 친구 관계가 존재하는지 안하는지 구하는 프로그램을 작성하시오.입력첫째 줄에 사람의 수 N (5 ≤ N ≤ 2000)과 친구 관계의 수 M (1 ≤ M ≤ 2000)이 주어진다.둘째 줄부터 M개의 줄에는 정수 a와 b가 주어지며, a와 b가 친구라는 뜻이다. (0 ≤ a, b ≤ N-1, a ≠ b) 같은 친구 관계가 두 번 이상 주어지는 경우는 없다.출력문제의 조건에 맞는 A, B, C, D, E가 ..
문제수빈이가 세상에서 가장 좋아하는 것은 소수이고, 취미는 소수를 가지고 노는 것이다. 요즘 수빈이가 가장 관심있어 하는 소수는 7331이다.7331은 소수인데, 신기하게도 733도 소수이고, 73도 소수이고, 7도 소수이다. 즉, 왼쪽부터 1자리, 2자리, 3자리, 4자리 수 모두 소수이다! 수빈이는 이런 숫자를 신기한 소수라고 이름 붙였다.수빈이는 N자리의 숫자 중에서 어떤 수들이 신기한 소수인지 궁금해졌다. N이 주어졌을 때, 수빈이를 위해 N자리 신기한 소수를 모두 찾아보자.입력첫째 줄에 N(1 ≤ N ≤ 8)이 주어진다.출력N자리 수 중에서 신기한 소수를 오름차순으로 정렬해서 한 줄에 하나씩 출력한다.문제 해석n개의 자리 수를 입력받아 1 부터 n 자리의 수 중에 10 단위로 분리해서 보아도 모..
DFS란?그래프 완전 탐색 기법 중 하나이다. 그래프의 시작 노드에서 출발해 탐색할 한쪽 분기를 정하여 최대 깊이까지 탐색을 마친 후 다른 쪽 분기로 이동해 다시 탐색을 수행하는 알고리즘이다. 자바에서 그래프 표현인접 리스트 ( List) : 간선 E가 많지 않을 때 최적인접 행렬 ( int[][] ) : 간선이 매우 빽빽할 때나 가넌 존재 검사 O(1)이 필요할 때시간 복잡도O ( V + E )V : 노트 수E : 에지 수직접 구현하면서 어떤 알고리즘인지 알아보겠다. 백준의 11724 : 연결 요소의 개수를 풀어보겠다.문제방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.입력첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. ..