일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 약속 장소 추천
- JPA
- 큐시즘
- 백엔드
- java
- 이펙티브자바
- 객체지향 쿼리 언어
- GitHub Actions
- 자바 ORM 표준 JPA 프로그래밍
- RESTClient
- kusitms
- K3S
- Spring
- 한국대학생it경영학회
- Domain Driven Design
- Spring Batch
- 쿠버네티스
- Container Registry
- ddd
- 최범균
- springboot
- 모이삼
- 도메인 주도 개발 시작하기
- 불변객체
- 중간 지점 추천
- 중간 장소 추천
- redis
- 모임 장소 추천
- JPQL
- cicd
- Today
- Total
목록분류 전체보기 (84)
코딩은 마라톤

🤦🏻♂️ 문제 : 외부에서 DB 접속이 되지 않음 최근 모이삼 프로젝트 git이 꼬여 제거하고 다시 clone 하여 로컬 환경 설정을 진행했다.IDE에서 DB를 연결하는 도중, 위와 같은 에러가 발생했다. RDS를 사용하고 있어 확인해 보니 "현재 활동"의 연결 수가 72개였다. 현재 활동이란 Connection 연결 수를 의미한다. 로그를 확인해 보니 위 에러가 반복적으로 발생했음을 알 수 있었다. DB가 허용하는 최대 연결 수(Max Connections)가 완전히 꽉 찼으며, 일반 사용자를 위한 연결 슬롯은 0개입니다. 이제 남은 연결 자리는 AWS가 DB 관리를 위해 확보해 둔 비상용 슬롯뿐입니다. 즉, AWS가 아닌 우리(사용자)는 DB 연결을 할 수 없음을 의미한다.왜 이런 문제가 발생했..

현재 82개의 글을 써오면서 대다수는 기술, 개발에 관한 글이고 나의 얘기는 거의 없었다.2025년 그리고 10달이 지난 지금, 지난날들의 감상을 작성하고 부족했던 부분을 소해하고자 이른 회고를 적는다.회고라 쓰고 월기(月記)라 부른다. 2025년 1월 : 큐시즘 31기 교육기획팀원1월은 신기했다. 숫기 없고, 부끄럼이 많던 내가 큐시즘 31기 교육기획팀원이 되었다.30기 할 때 운영진 생각이 있는지에 대한 물음에 고개를 좌우로 젓던 나는, 어느샌가 교육기획팀원이 되어 우수한 사람들 곁에서 미약한 시작을 일궈내기 시작했다.지금 생각해 보면 고개를 젓던 와중, 마음속의 나는 끄덕이고 있지 않았을까.큐시즘 31기의 교육기획팀원을 시작할 수 있도록 도와준 름, 현수에게 고마울 따름이다. 교육기획팀원을 하게 되..

최근 외부 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 사용 ..

데이터 클래스란?코틀린의 데이터 클래스는 컴파일러가 사용자가 정의하지 않은 equals, hashcode, toString 메서드를 자동으로 대신 생성한다. data class Person(val name: String) { var age: Int = 0} 사용 방법은 클래스 생성 방식과 유사하며, class 앞에 data 변경자만 붙이면 데이터 클래스를 사용할 수 있다. 🧐 [Kotlin] 데이터 클래스 == [Java] 레코드코틀린을 처음 학습할 때, 데이터 클래스는 자바의 레코드(record) 클래스와 동일하다고 생각했다. 레코드는 불변 객체를 생성할 때 사용하고, 보통 DTO(Data Transfer Object)나 밸류 타입에서 주로 사용했다.코틀린 프로젝트를 찾아보니 자바 프로젝트의 레..

들어가며 엔티티를 설계하다 보면 기계적으로 붙이는 애노테이션이 있다.@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 및 운영, 스테이징 네임서버 분리 그리고 스프링 애플리케이션 파드와 레디스 파드를 ..