| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 계수정렬
- github
- 인프런
- 2869
- Lock
- 큐
- static
- 우선순위
- gradle
- 정렬
- 백준
- Push
- assertj
- 클론코딩
- 백엔드
- Spring Security
- 데이터베이스
- 자바
- 로그인
- add
- Java
- todomate
- spring
- build
- 스프링
- 람다식
- 11650
- 11651
- 투두메이트
- 알고리즘
- Today
- Total
목록전체 글 (20)
여러가지 이야기
2026.01.23 - [study/Spring] - 객체 중복 생성 방지를 위한 Redis 분산 Lock 도입 객체 중복 생성 방지를 위한 Redis 분산 Lock 도입최근 진행 중인 프로젝트에서, AI를 활용하여 사용자가 원하는 주제의 요약글과 퀴즈를 생성하는 기능을 개발하는 역할을 맡았다.사용자는 원하는 목표 기간 동안 최대 하루 한 번씩 생성된 요9oongoguma.tistory.com 문제 발생이전 글에서 하루에 최대 하나만 생성되어야 할 요약글 객체가, 해당 생성 API가 여러 번 호출되며 중복되는 문제가 있었다. 이에 따라 Lock 로직을 도입하였다.// DistributedLockFacade.javapublic Optional tryExecuteWithLock(String lockKey,..
📝 모니터링 대시보드 개선 및 지표 추가 기록서비스 안정성과 장애 대응력을 높이기 위해 주요 지표들을 추가하였습니다.1. 실시간 API별 트래픽 분석표 패널 생성도입 이유기존의 Mean(평균) 지표는 소수의 사용자가 겪는 극심한 지연(Long Tail)을 반영하지 못하는 평균의 함정 발생 가능ex. 대다수 사용자가 0.1초의 응답을 받아도, 특정 요청이 10초가 걸릴 경우 평균값은 실제 사용자 경험보다 훨씬 낮게 측정되어 장애 감지가 늦어질 수 있음.요청 처리 시간 지표 고도화P95 (95th Percentile): 하위 5%를 제외한 대다수 사용자가 체감하는 최악의 속도를 모니터링기대 효과: 일시적인 네트워크 지연이나 특정 API의 성능 저하를 통계적으로 유의미하게 파악할 수 있음.2. 에러율(Err..
최근 진행 중인 프로젝트에서, AI를 활용하여 사용자가 원하는 주제의 요약글과 퀴즈를 생성하는 기능을 개발하는 역할을 맡았다.사용자는 원하는 목표 기간 동안 최대 하루 한 번씩 생성된 요약글과 퀴즈 세트를 확인 후 풀이할 수 있다. 하루 1회 요약글과 퀴즈 세트가 모두 OpenAI 모델을 활용해 생성되게끔 구현하였는데, 사용자가 그날 최초로 홈 화면에 접속 했을 때 해당 객체들이 순차적으로 생기게끔 구현하기로 했다. 하지만 실제 서버 로그와 DB를 확인했을 때는 그렇지 않았다. 그날 최초 홈화면 접속 시 하루 1회만 생성 되어야 할 요약글과 퀴즈 세트가 여러 개 생성되는 것이다. 사용자 입장에서 요약글이나 퀴즈 세트를 조회하면 그날분의 것만 볼 수 있어서 문제가 되지 않았지만, DB 비용을 낭비한다는 점..
🔗 https://www.acmicpc.net/problem/1012 문제 설명이 문제는 배추밭에 필요한 배추흰지렁이의 총 마리수를 구해야한다. 배추가 서로 인접해있는 구역 하나 당 한 마리의 배추흰지렁이가 필요하기에, 배추가 있는 구역의 수를 세어 출력하면 된다.즉 배추가 심어진 칸(1)이 상하좌우로 붙어있는 면적은 구역이 된다. 시도 1 - Comparator로 2차원 배열을 탐색하기이 코드는 Comparator로 2차원 배열을 탐색하는데, 배추가 있는 구역의 바로 오른쪽/아래가 인접하면 같은 덩어리로 간주하게끔 했다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java...
그동안 팀 협업 시 Git을 쓰긴 했지만, 보통은 각자 작업한 내용을 feature 브랜치를 만들어 push하고 develop으로 merge하는 방식이었다. 그런데 이번에 새로운 프로젝트를 진행하게 되면서, Git branch 전략 중 Git-Flow를 접하게 되었다. 사실 나는 그간 여러 브랜치를 파는 게 개발적으로 단순 작업 분리 및 통합의 기능을 한다고 생각해왔었는데, 그 이상의 것을 한다는 걸 알게 되었다!그 내용을 정리해보려 한다.본론부터 말하자면 브랜치 전략은 팀 프로젝트 코드를 작업을 나누어 개발하는 것에서 더 나아가, 검증 및 배포 후 운영하는 데 있어서 필요하다. 왜냐면 Git-Flow에서는 단순 feature, develop이 끝이 아니라 release, main 브랜치까지 존재하기 때..
Spring Security를 토대로 로그인을 구현하기 앞서, 우선 로그인용 필터를 사용한 로직을 구현하려 했다.SecurityContext 내의 Authentication 객체를 만드는 과정을 구현한 필터를 만드는 것인데, 나는 form 로그인 대신 추후 json으로 로그인하여 JWT를 활용하는 것이 목표였기에 기본적인 로그인 로직만 UsernamePasswordAuthenticationFilter에서 가져와 변형하여 코드를 짰다.username과 password를 입력받을 LoginRequestDTO, Authentication 객체를 생성하는 LoginFilter, Authentication-UsernamePasswordAuthenticationToken 내의 Principal 객체에서 쓰일 유저의..
🔗https://www.acmicpc.net/problem/1966 이 문제는 사용자에게 문서들의 중요도와 출력 순서를 알고 싶은 특정 문서를 입력 받아, 그 문서가 출력물들 중에서 몇번째로 나올지 알려주는 코드를 짜야했다. 중요한 점은 문서열 큐에서 가장 앞에 있는 것을 빼낼 때, 가장 앞의 것의 중요도보다 더 큰 것이 열에 존재한다면 앞의 것을 제일 뒤로 add해야한다는 것이다. 코드 1) 출력 순서를 알고 싶은 특정 문서의 위치를 기억하기 위해 큐에 0 삽입import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.LinkedList;import java.util.Q..
응답 통일을 위해 DTO, BaseCode, 성공 시 응답 처리 등을 코드로 작성했었다. * 💭 응답 통일을 해야하는 이유더보기내 생각: 데이터가 전달될 때 일정한 형식으로 오고 가야 CRUD 기능 내 메소드가 처리될 수 있고, 프론트단에서도 일정한 형식으로 (json 등) 제대로 정보를 받고 다시 보낼 데이터의 형식도 맞추는 등 쉽게 처리할 수 있다. 꼭 응답 통일 코드 작성을 잊지 말자!응답의 형식을 담을 BaseResponse 코드를 대략 아래와 같이 짰었다.@Getter@AllArgsConstructor@JsonPropertyOrder({"isSuccess", "code", "message", "result"})public class BaseResponse { @JsonProperty("i..