From Company (7) 썸네일형 리스트형 ECS Fargate에서 OpenTelemetry 자동 계측 적용 (Phase 0-2, 3, 5) 1. 개요- Spring Boot 애플리케이션에 OpenTelemetry 자동 계측을 적용하고, AWS X-Ray로 분산 트레이싱을 구축한 과정을 정리[구성 아키텍처] Spring Boot (ADOT Java Agent) ↓ OTLP (gRPC, localhost:4317) ADOT Collector (사이드카) ↓ AWS X-Ray추가로,- OTel 자동 계측(Phase 0-2) 위에 핵심 비즈니스 로직에 커스텀 Span을 추가하고, ADOT Collector에 Tail Sampling을 적용하여 비용을 최적화 - Phase 3: 커스텀 Span 적용 핵심 메서드 15개에 @WithSpan 어노테이션과 Span.current().setAttribute()를 추가- Phase 5:.. logback, log4j2 설정 충돌 방지 레거시 정리 중 log4j2-spring.xml과 logback-spring.xml두 개의 로깅 설정 파일이 동시에 발견됨. configurations.all { exclude(group: "org.springframework.boot", module: "spring-boot-starter-logging") // Logback 제거 exclude(group: "org.apache.logging.log4j", module: "log4j-to-slf4j") exclude(group: "org.slf4j", module: "slf4j-log4j12")}Q. implementation에서만 제거하면 되는데, 왜 강제로 제거했을가? spring-boot-starter-web을 쓰면 전이 의존성으로.. 블록체인 토큰 환전 로직 개선 블록체인 토큰 환전 로직 개선, 트랜잭션 분리(Propagation.REQUIRES_NEW)블록체인 기반 환전 로직에서는 온체인 소각(burn)과 오프체인 DB 갱신이 함께 이루어진다.두 작업이 하나의 트랜잭션으로 묶이지 않아서 문제 발생 [ 기존 로직 동작 방식 ]은행 잔고 증가토큰 소각(burn)거래내역 저장 [ 문제점 ]거래내역 저장 실패 시 롤백 문제거래내역 저장이 실패하면 서비스 트랜잭션이 롤백되지만, 이미 실행된 토큰 소각(burn)은 롤백되지 않아 토큰만 사라지는 현상 발생토큰 소각 실패 시 실패 기록 누락burn 실패가 발생해도 실패 이력이 남지 않아 추적 불가능[ 해결 방법 ]거래 내역 저장을 별도 트랜잭션으로 분리하여 시점 제어기존 트랜잭션에 묶여 있던 거래내역 저장을 따로 분리 (새.. NestJS는 Date, Spring은 String (역직렬화 단계에서 차이) Nest.js → SpringBoot 마이그레이션 과정 중 App에서 날짜 형식을 02.13.31Z와 같이 이상하게 표기[ Swagger 응답 값 비교 ] createdAtNest.js"2025-09-30T00:23:00.649Z"SpringBoot"2025-05-11T02:13:31.872232Z" 추측1. Postgres는 timestamptz로 받고 있어서 입력 시 LocalDateTime을 써도 결과적으로 UTC로 저장되지만 entity 측에서 잘못 변환하고 있다. LocalDateTime → Instant 타입 변경, 결과적으로 실패@CreationTimestamp@Column(name = "created_at", columnDefinition = "TIMESTAMPTZ")private In.. [node.js] 텔레그램 추가 1. @BotFather에 /start 명령어 전송 2. bot 생성 요청 3. bot 이름 지정 4. 생성한 봇에 채팅 전송 5. https://api.telegram.org/{bot_token}/getUpdates받은 token을 사용하여 JSON 객체 전송받기 여기서 받은 chat.id를 프로젝트에 사용 import TelegramBot from 'node-telegram-bot-api';import dotenv from 'dotenv';dotenv.config();const BOT_TOKEN = process.env.TELEGRAM_BOT_TOKEN;const BOT_ACTIVE = process.env.TELEGRAM_ACTIVE;const BOT_CHAT_ID = proc.. [DB 성능 강화] 인덱스 성능 정리 PostgreSQL에서는 NULL 값을 제외하고 인덱스를 걸 수 있는 부분 인덱스(Partial Index) 기능을 제공한다.NULL이 포함된 컬럼에 인덱스를 걸더라도, 그 NULL 값들 때문에 중복 오류(unique constraint violation) 가 발생하지 않는다. CREATE UNIQUE INDEX idx_unique_email ON users(email) WHERE email IS NOT NULL;예를 들어, 이메일 컬럼에 유니크 인덱스를 걸고 싶은데 NULL 값도 있을 수 있는 상황이라면 위의 코드처럼 사용할 수 있다. 이렇게 하면 email 값이 있는 경우에만 유니크하게 체크되고, NULL은 인덱스 대상이 아니기 때문에 몇 개가 있어도 상관없게 된다. Wallet 테이블 (device.. NestJS → Spring Boot 마이그레이션, PostgreSQL 컬럼명(camelCase) 유지 방법 기존 프로젝트에서는 PostgreSQL 컬럼명을 camelCase로 사용하고 있었다.ex) previewImageUrl, userName 하지만 Spring Boot + Hibernate로 마이그레이션하면서,Hibernate가 기본적으로 snake_case로 자동 변환하면서 문제 발생ex) previewImageUrl → preview_image_url 문제 해결 시도1. Hibernate의 자동 네이밍 전략 끄기 spring: jpa: hibernate: naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl 위 설정은 Hibernate가 필드명을 그대로 .. 이전 1 다음