본문 바로가기

분류 전체보기

(22)
Grafana + Slack 알림 설정하기 🙋 들어가며이전 글에서 구축한 모니터링 스택(Prometheus + Loki + Grafana)을 활용해 장애 상황을 실시간으로 Slack으로 알림받는 방법을 공유합니다.이 글에서 다룰 내용은 아래와 같습니다.Slack Webhook 연동 (Contact Point 설정)서버 다운 알림 (Prometheus Alert)ERROR 로그 알림 (Loki Alert)추가하면 좋을 알림 모음🔔 1. Slack 알림 설정Grafana의 Alert Rules에서 조건을 설정하고, Contact Points에서 Slack Webhook URL을 등록하면 알림을 받을 수 있습니다.Slack 에서 Webhook URL 발급받기Slack Marketplace 접속incoming webhook 검색Slack에 추가 클릭..
Spring Boot 모니터링 스택 직접 구축하기 — OTEL Collector + Grafana + Loki + Tempo 🙋 들어가며안녕하세요! 이번 글에서는 서비스에서 도입한 관측성(Observability) 스택 구축기를 공유합니다.별도의 Cloud MSP 없이도 Docker Compose 한 파일로 메트릭 + 로그 + 트레이싱을 모두 구축할 수 있습니다. 이 글에서 다룰 내용은 아래와 같습니다.전체 스택 구성과 데이터 흐름 설계OTEL Collector 허브 패턴으로 데이터 라우팅각 컴포넌트 설정 파일 상세 설명Spring Boot 연동 설정Grafana 대시보드, Slack 알림, Loki 로그, Tempo 트레이싱 활용🤔 1. 왜 이 스택을 선택했나?모니터링 도구를 선택할 때 가장 먼저 고려한 건 비용과 운영 부담이었습니다. 단일 Oracle Cloud 인스턴스에서 서비스를 운영하고 있었기 때문에 Datadog..
단일 서버에서 무중단 배포 구현하기 — Jenkins + Docker + Nginx Blue-Green 전략 🙋 들어가며안녕하세요! 이번 글에서는 서비스의 단일 Oracle Cloud 인스턴스에서 다운타임 없이 배포하는 방법을 공유합니다.클라우드 비용 최적화를 위해 단일 인스턴스를 사용하고 있었는데, 배포할 때마다 서비스가 잠시 중단되는 문제가 있었습니다. 이를 해결하기 위해 8080 / 8081 포트를 번갈아 사용하는 Blue-Green 전략과 Nginx 심볼릭 링크 전환 방식을 도입했습니다.이 글에서 다룰 내용은 아래와 같습니다.단일 서버 Blue-Green 배포의 원리Jenkins Multibranch Pipeline 설정 및 브랜치별 자동 배포Jenkins Pipeline 전체 흐름Nginx 심볼릭 링크 전환 방법헬스체크 기반 자동 롤백🏗️ 1. 전체 배포 흐름GitHub Push (develop /..
Oracle Cloud로 구축한 Spring Boot 서비스 인프라 아키텍처 — Active-Standby, VCN Peering, CI/CD 자동화 🙋 들어가며안녕하세요! 이번 글에서는 아이돌 굿즈 중고거래 서비스를 개발하면서 구축한 Oracle Cloud Infrastructure(OCI) 기반의 전체 서버 인프라를 소개해드리려 합니다.처음에는 AWS를 고려했지만, 프리 티어 제한과 비용 문제로 Oracle Cloud의 Always Free 인스턴스를 선택했습니다. 4 OCPU + 24GB 메모리까지 무료로 사용할 수 있다는 점이 가장 큰 이유였습니다.이 글에서 다룰 내용은 아래와 같습니다.전체 인프라 구조 (VCN, 서브넷, Active-Standby 운영 서버)네트워크 보안 설계 (Security List, NSG, Bastion)CI/CD 파이프라인 (Jenkins 자동화)모니터링 스택 구성🏗️ 1. 전체 인프라 구조 한눈에 보기전체 인프..
🎯 Spring Security + GitHub OAuth 연동 및 API 호출하기 🔍 전체 흐름1. GitHub 로그인 인증 과정/oauth2/authorization/github 요청 → GitHub 로그인 → Access Token 발급 → 사용자 정보 획득2. Access Token으로 GitHub API 호출Access Token을 이용해 /repos/{owner}/{repo} API를 호출✅ 직접 WebClient를 통해 GitHub REST API를 호출하는 방식 ⚙️ 깃허브 OAuth Apps 추가 Settings > Developer Settings > OAuth Apps > New OAuth App 클릭 내가 사용할 어플이름, 어플을 실행할 서버 url, 인증 후 콜백할 url을 적어주는데 spring security를 사용할 예정이어서 {serverURL}/logi..
[spring boot/배포] AWS EC2 인스턴스 생성 및 배포 과정 이전에 ncp를 통해 배포를 했던 적이 있었는데 aws도 대략적인 사용법을 알면 좋을 것 같아서 공부 겸 ^무료^ 서버를 빌려서 배포해보았다. EC2 접속 및 인스턴스 시작무료 사용 가능한 이미지 중에서 Ubuntu사용인스턴스 유형은 프리티어 사용 가능이라 써있는걸로....새 키 페어 생성이름 정하고(아무거나 괜찮음) 키페어생성그러면 key.pem 파일이 다운로드 되는데 어디에 저장되어있는지 자알 기억해야함. 보안 그룹 생성http, https, mysql, ssh을 위해 80,443,3306,22 포트를 열어주고 + 배포할 프로젝트가 운영될 포트도 열어준다.스토리지 구성 30GB까지 가능하다니 30GB로 생성.  서버 접속cmd창 접속 아까 받은 key.pem파일이 있는 곳으로 이동.ssh -i "ke..
[Springboot/React] #2 웹소켓과 STOMP로 실시간 채팅 구현하기 웹소켓과 STOMP를 함께 사용한 이유 WebSocket은 효율적인 저수준 양방향 통신을 제공하여 실시간 응답성을 보장하고, STOMP는 고수준 메시징 프로토콜로, 메시지의 전송, 구독, 관리 등을 간편하게 만들어 준다.따라서 좀 더 효율적이고 편리하게 관리하기위해 WebSocket에 STOMP를 결합하여 실시간 채팅을 구현하였다.  STOMP 실시간 메시지 송수신 과정 사용자는 '/sub' 엔드포인트를 통해 채널을 구독하고, '/pub' 엔드포인트를 통해 메시지를 발행할 수 있다. 발행된 메시지는 동일한 주제를 구독하는 사용자들에게 서버에서 즉시 전송되어 사용자들의 실시간 채팅이 가능하게 한다. 서버(Springboot)1. WebSockConfig 수정@Configuration@EnableWebSoc..
[Springboot] #1 웹소켓과 STOMP로 실시간 채팅 구현하기 - spring boot에 웹소켓 연결 실시간 채팅을 구현하기 위해 웹소켓과 STOMP를 이용하여 구현하였다. 1. 웹소켓의 통신 과정웹소켓의 연결(1) 클라이언트 요청: 클라이언트가 웹소켓 연결을 시작하기 위해 서버에 HTTP 요청을 보낸다.(2) 서버 응답: 서버는 클라이언트의 HTTP 요청(웹소켓 업그레이드 요청)을 수신하고, 이를 확인한 후 웹소켓 연결을 수락한다. 서버는 HTTP 응답을 보내며, 이는 웹소켓 업그레이드를 승인하는 내용을 포함하게 된다.(3) 프로토콜 업그레이드 완료: 이러한 과정을 거치면 HTTP에서 웹소켓 프로토콜로 업그레이드가 완료되며, 지속적인 연결을 통해 양방향 통신이 활성화된다. 데이터 전송클라이언트와 서버는 텍스트 또는 바이너리 메시지를 주고받게되는데, 이 과정에서 각 메시지는 웹소켓 프레임으로 캡슐화되어 ..