SideProject 7

Docker 기반 웹 푸시 알림 시스템 - 4.5

소스 형상관리 및 사내 Git 서버(Gitea) 연동이번 단계에서는 프로젝트 소스 형상관리를 위해 Git을 도입하고,초기 GitHub 연동 이후 사내 Git 서버(Gitea) 로 이전한 과정을 정리한다.1. Git 도입 배경Spring Boot 기반 웹 푸시 알림 서버를 개발하면서 다음과 같은 필요성이 있었다.코드 변경 이력 관리기능 단위 버전 관리협업 및 추후 확장 대비회사 내부 정책에 맞는 형상관리 체계 구축초기에는 사이드 프로젝트 개념으로 GitHub Private Repository로 관리했으나,추후 내부적으로 활용이 가능할 것으로 판단되어 사내 보안 정책에 따라 내부 Git 서버(Gitea)로 이전하게 되었다.2. gitignore 구성기존 연동했던 Github에선 IDE 설정 파일, 빌드 산출..

SideProject 2026.02.12

Docker 기반 웹 푸시 알림 시스템 - 4

Web Push 알림 시스템 구현 (DB 설계 변경 이후 실제 코드 중심) 앞선 글에서는 Web Push 시스템의 DB 설계를 사용자 중심 → 구독(endpoint) 중심으로 변경한 배경을 정리했다.이번 글에서는 그 설계가 실제 코드에서 어떻게 구현되었는지, Web Push 기술 특성과 어떤 식으로 맞물리는지를 코드 중심으로 정리해보았다.전체 흐름 요약 (기술 관점)관리자 --(발송 요청)-> Controller --> SendService --> PushSender --> FCM/PushServer --> Browser Service Worker 큰 변경점은 사용자가 아니라 구독 단위로 발송이 이뤄진다는 점이다.1. 구독 정보 도메인 (BDomain)/* * 편의성을 위하여 Lombok 사용 * Web..

SideProject 2026.02.02

Docker 기반 웹 푸시 알림 시스템 - 3.5

DB 설계 변경에 대한 정리 (현실 로직 우선)초기 설계에서는 푸시 구독 정보를 사용자 테이블(A)와 연계하여 관리하는 구조를 고려했다.다만 실제 구현 단계에서 아래와 같은 현실적인 제약 사항을 확인했다.사용자 정보 연계를 위해서는 기존 통합로그인(SSO) 시스템 연동이 필요해당 시스템 연동에는 별도의 라이선스 및 행정 절차가 요구됨단순 푸시 알림 PoC 및 운영 검증 단계에서 즉시 적용하기에는 비용과 일정 측면에서 비효율적이러한 이유로 지금 시점에서 현실적으로 구현 가능한 로직부터 우선 반영하는 방향으로 설계를 조정했다.변경된 방향성사용자 중심 → 구독(endpoint) 중심 설계Web Push 특성상, 실제 푸시 발송의 최소 단위는 사용자 계정이 아닌 브라우저의 endpoint이다.현재 단계에서는 로..

SideProject 2026.01.29

Docker 기반 웹 푸시 알림 시스템 - 3

Spring Boot 기반 웹 푸시 알림 서비스 - DB 테이블 설계1. DB 테이블 설계아래와 같은 요구사항 충족을 위해 푸시 발송 로직보다 먼저 DB 구조를 설계했다.누가 알림을 받았는지어떤 메시지가 언제 발송되었는지발송 성공/실패 여부특정 사용자 또는 전체 발송 이력 조회향후 재발송, 통계, 로그 관리2. 전체 테이블 구성 개요4개의 핵심 테이블로 구성 (테이블명은 대외비)테이블명역할A알림 대상 사용자 정보B웹 푸시 구독 정보C발송할 알림 메시지D알림 발송 이력 각 테이블은 역할을 명확히 분리하여 확장성과 유지보수성을 고려하여 설계했다.3. 알림 대상 사용자 테이블(A)알림을 받을 수 있는 사용자 정보를 관리하는 테이블설계 포인트USER_NUMB를 기준 키로 사용학생 / 직원 / 일반 등 사용자 유..

SideProject 2026.01.27

Docker 기반 웹 푸시 알림 시스템 - 2

컨테이너 GUI 관리 도구 Portainer 도입이전 글에서는 Docker 기반으로 웹 푸시 알림 서비스를 설계한 전체 구성과 아키텍처 개요를 정리했다.이번 글에서는 실제 프로젝트를 시작하며 Docker 컨테이너를 효율적으로 관리하기 위해 Portainer를 도입한 이유와 설치 과정을 정리한다.1. Portainer 도입 이유이번 프로젝트는 다음과 같은 특징을 가진다.단일 서버 환경Docker 기반 서비스 운영서비스별 컨테이너 분리향후 컨테이너 수 증가 가능성 고려이런 환경에서 명령어로만 관리하는 데에는 한계가 있다.특히 운영 관점에서는 다음과 같은 불편함이 발생할 수 있다.실행 중인 컨테이너 상태를 한눈에 보기 어렵고 CLI로 로그를 하나하나 확인해야함컨테이너 재시작·중지 작업의 번거로움이러한 문제를 ..

SideProject 2026.01.19

Docker 기반 웹 푸시 알림 시스템 - 1

Docker (Spring Boot + PWA) 기반 웹 푸시 알림 시스템 설계 및 구현 개요1. 프로젝트 개요홈페이지나 기타 시스템들을 운영하다 보면 '공지사항을 올려도 사용자들이 잘 보지 않는다'는 문제가 반복적으로 발생한다.이 프로젝트는 이러한 문제를 해결하기 위해모바일 앱 없이도, 웹(PWA)만으로 실시간 알림을 제공하는 웹 푸시 시스템을 Docker 기반 구축하는 것을 목표로 한다. 아래와 같은 조건을 전제로 설계함.Docker 기반 서비스 분리Spring Boot 내장 WAS 사용1만명 이상 푸시 발송 가능운영 및 유지보수 고려2. 프로젝트 목적Docker 기반 서비스 구성Spring Boot 내장 Tomcat 사용푸시 알림 + 큐 처리관리자 페이지에서 공지 작성 → 즉시 발송최소한의 인프라로..

SideProject 2026.01.14

단축URL 구현하기 (네이버 me2.do 서비스 종료)

서론기존 홈페이지에서 무료로 사용하던 네이버 단축URL API가 피싱 사례의 급증, 도메인 시행사의 엄격한 피싱 대응 가이드로 인해, 2024년 12월 02일부로 me2.do 단축URL서비스를 종료했다.(공지 내용은 아래 링크 참조)https://developers.naver.com/notice/article/17062기존 생성된 단축URL의 연결은 2026년 2월 말까지 유지될 예정으로 자체적인 단축URL 서비스 개발이 필요했다. 본론1. 주요 기능1-1. 긴 URL을 단축된 형태로 변환1-2. 단축 URL이 원래 URL로 리다이렉트1-3. 단축 URL 저장 및 조회 (DB연동) 2. 구체적인 설계2-1. URL 단축 로직 - 서칭해보니 단축 URL은 보통 Base62 인코딩이나 Hashing 알고리즘..

SideProject 2025.01.20