| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 최범균
- GitHub Actions
- 도메인 주도 개발 시작하기
- 쿠버네티스
- 약속 장소 추천
- java
- Container Registry
- 중간 장소 추천
- 불변객체
- 이펙티브자바
- JPQL
- redis
- 큐시즘
- 자바 ORM 표준 JPA 프로그래밍
- 한국대학생it경영학회
- RESTClient
- 백엔드
- JPA
- springboot
- 중간 지점 추천
- Spring
- 객체지향 쿼리 언어
- Spring Batch
- cicd
- 모임 장소 추천
- K3S
- ddd
- Domain Driven Design
- kusitms
- 모이삼
- Today
- Total
목록Backend (41)
코딩은 마라톤
중간지점 찾기 서비스인 모이삼에서는 중간지점 산출 및 출발지에서 중간지점까지의 상세 경로를 알려준다.https://www.moisam.kr/ 모이삼최적의 중간장소 찾기, 약속장소 추천www.moisam.kr 중간지점은 최대 3개까지 산출되며, 출발지마다 경로를 보여주는 만큼, 응답 데이터의 크기는 중간지점 수와 출발지 수에 비례한다.그래서 모이삼은 응답 시간을 줄이기 위해 응답 데이터 캐싱과 멀티 스레드를 사용해 외부 API에서 경로를 가져오는 등 여러 처리를 진행했다. 위 과정을 통해 비약적으로 속도 개선을 이뤘지만, 응답 데이터의 크기는 줄이지 못했다. 줄일 수 있는 방법을 찾아보던 와중, 응답 데이터를 압축할 수 있는 포맷인 gzip을 알게 되었다. 🏠 gzip이란?gzip은 파일 압축 및 압축 ..
최근 외부 API 장애를 대응하기 위해 Timeout, Retry, Circuit Breaker을 적용했다.특히 Retry, Circuit Breaker는 Resilience4j를 활용해 application.yml에 값을 설정함으로써 개발을 진행했다.하지만 막상 적용해 보니 우여곡절을 겪어, 이번 글에서는 문제점과 해결 과정에 대해 공유하고자 한다.이번에 사용한 Resilience4j dependenciesimplementation 'io.github.resilience4j:resilience4j-spring-boot3'implementation 'org.springframework.boot:spring-boot-starter-aop'1️⃣ configs VS instances// configs 사용 ..
들어가며 엔티티를 설계하다 보면 기계적으로 붙이는 애노테이션이 있다.@Entity@NoArgsConstructor(access = AccessLevel.PROTECTED) 항상 위 2개의 애노테이션을 붙이면서 엔티티 관련 문제가 발생한 적이 없고, 잘 쓰고 있었다. NoArgsConstructor를 사용하는 이유는 JPA에서 엔티티 생성 시 Reflection 방식을 사용하는데 이때 기본 생성자가 필요하기 때문이다. 또한 지연로딩(Lazy Loading)을 사용해 연관된 엔티티를 조회할 때 실제로 사용하기 전까지는 프록시 객체를 사용하는데, 이때 기본 생성자가 private으로 선언되어 있다면 해당 엔티티를 상속한 프록시 객체를 사용할 수 없어 이를 방지하기 위해 public이나 protected를 사용..
SPOT(스팟)의 서비스명이 모이삼으로 변경되었습니다!모이삼도 많은 관심 부탁드려요~! 시작하기 앞서https://developer-anxi.tistory.com/79https://developer-anxi.tistory.com/80 앞선 두 개의 글에서 운영·스테이징 환경으로 분리하는 과정을 알아보았습니다. Git-flow는 분리 이전에도 사용했습니다.하지만 운영, 스테이징으로 분리됨으로써 메인 브랜치(prod, develop)와 보조 브랜치(release)가 추가되었고,develop에서 prod로 작업 커밋을 옮기는 과정 또한 정했어야 하기 때문에 이번에 Git-flow 기반으로 모이삼의 방식을 만들었습니다!모이삼의 Git-flow 전략 Git-flow는 메인 브랜치인 master, develop과 ..
중간 지점 추천 서비스인 SPOT(스팟)은 에러 발생 시, 팀에서 어떤 에러인지 문의가 들어오고 이때 터미널에 들어가 로그를 확인했다.다만, 아직 미흡한 로깅 처리와 에러 추적에 대한 시스템을 마련해두지 않아서 매번 예외 로그만 확인하는데 시간이 꽤 걸렸다. 팀 SPOT은 디스코드를 협업 툴로 사용하고 있고, 디스코드 웹훅을 이용해 에러 발생 시 신속하게 대응할 수 있을 것으로 판단하여 스팟-에러 알림 채널을 만들었다. 웹훅을 어떻게 연동하고 처리하는지 알아보자! 1. 디스코드 웹훅 생성하기 디스코드 알림 채널을 만들고, 서버 설정 -> 연동을 통해 웹훅을 만들 수 있다.웹훅을 만들고 연결할 알림 채널과 이름을 설정하고 웹후크 URL을 복사한다. 웹훅 URL에 요청을 보내 디스코드에 알림을 보내는 방식..
https://developer-anxi.tistory.com/79 [Kubernetes] K3s로 운영·스테이징 환경을 단일 서버에서 분리하기 (1)나는 현재 중간 지점 추천 서비스인 "스팟(SPOT)"을 디벨롭하고 있으며 8월 중에 릴리즈 예정이다.지금은 UI 개선과 API 로직 개선 등 다방면에서 개선하고 있다. SPOT은 릴리즈 전인 지금도 사용할developer-anxi.tistory.com 1부에서는 K3s로 단일서버에서 운영·스테이징 환경으로 분리한 이유를 적어보았다.이번에는 단일서버에서 분리한 방식을 적어보려 한다. 쿠버네티스를 적용한 아키텍처 기존 아키텍처와 바뀐 부분은 쿠버네티스를 적용해서 Ingress 및 운영, 스테이징 네임서버 분리 그리고 스프링 애플리케이션 파드와 레디스 파드를 ..
나는 현재 중간 지점 추천 서비스인 "모이삼"을 디벨롭하고 있으며 8월 중에 릴리즈 예정이다.지금은 UI 개선과 API 로직 개선 등 다방면에서 개선하고 있다. 모이삼은 릴리즈 전인 지금도 사용할 수 있고, 서울·경기·인천 지역에서 친구들과 어디서 만날지 확인할 수 있다.https://moisam.kr/ 모이삼최적의 중간장소 찾기, 약속장소 추천www.moisam.kr 운영 서버 단일 구성의 한계: API와 UI 불일치로 인한 리스크 존재출시 전인 지금도 사용할 수 있는 만큼, 기능 개발/수정 후 배포된다면 운영 서버에 바로 적용되어 프론트에서 사용하는 값과 백에서 제공하는 값이 틀어질 수 있다. 즉, 기존의 모이삼은 운영 서버 하나로만 관리되어 백엔드에서 배포하면 의도치 않은 에러가 발생하고, 항상 ..
https://developer-anxi.tistory.com/76 [Redis] 외부 API Rate Limiter를 만들어보기 (with. AOP)SPOT은... 외부 API 호출이 많다. SPOT의 메인 기능은 애플리케이션 레벨에서 최적의 중간 지점(역)을 계산하고, 이후 여러 출발지부터 중간 지점까지의 경로를 보여주는 것이다.이때 출발지 ~ 중간developer-anxi.tistory.com 위 글과 이어지는 내용이라서 먼저 읽어주시면 좋을 거 같습니다 🙏🙏🙏 문제 인식 : 멀티스레드 환경에서 Race Condition이 발생@Testvoid 멀티스레드_환경에서_RedisRateLimiter_원자성을_보장한다() throws InterruptedException { // given ..
