728x90

전체 글 30

S3 / MinIO k3s (쿠버네티스 경량화 배포판) 설치 및 Spring Boot 연동 방법

개인 프로젝트나 소규모 서비스 운영 시, 무겁고 복잡한 쿠버네티스(Kubernetes) 대신 k3s를 활용하면 훨씬 가볍게 클러스터를 구축할 수 있습니다.이번 포스팅에서는 Spring Boot 프로젝트의 첨부파일 업로드를 위해 k3s 환경에 MinIO(S3 호환 오브젝트 스토리지) 를 설치하고 연동하는 방법을 정리합니다. 1. S3와 MinIO란?S3 (Amazon Simple Storage Service)AWS에서 제공하는 오브젝트 스토리지 서비스파일, 이미지, 동영상 등 정적 자산을 안전하게 저장하고 제공REST API, SDK를 통해 업로드·다운로드 가능클라우드 애플리케이션에서 가장 많이 쓰이는 저장소 서비스 중 하나MinIOS3 호환 오픈소스 오브젝트 스토리지AWS S3와 동일한 API를 제공하므..

Jenkins Pipeline으로 프론트엔드(Node.js + Next.js) 프로젝트 Docker Image 빌드·배포 하기

이전 글에서는 로컬 Docker Registry를 설치하고 Jenkins Pipeline을 활용해 Java + Spring Boot 프로젝트를 자동 빌드·배포하는 방법을 다뤘습니다.이번 글에서는 프론트엔드(Node.js + Next.js) 프로젝트를Jenkins에서 Node.js 환경 설정npm 빌드 & 정적 파일 배포Docker 이미지 생성 후 로컬 Registry에 푸시Docker Compose로 Nginx + 프론트엔드 서비스 재시작하는 프론트엔드 전용 CI/CD 파이프라인을 구현합니다. 1. Node.js 환경 준비Jenkins에서 Node.js를 사용하려면 NodeJS Plugin이 필요합니다.Jenkins → Manage Jenkins → Plugin Manager → NodeJS Plugin..

서버/CI 및 CD 2025.08.12

Jenkins Pipeline으로 백엔드(SpringBoot) 프로젝트 Docker Image 빌드·배포 하기

이전 글에서 로컬 Docker Registry 설치와 인증 설정을 완료했습니다.이번 글에서는 그 Registry를 활용하여 Jenkins Pipeline으로코드 체크아웃JAR 빌드Docker 이미지 생성Registry 푸시Docker Compose 배포까지 자동화하는 방법을 정리합니다. 1. Jenkins 환경 변수 구성REGISTRY : 로컬 Docker Registry 주소REGISTRY_USER / REGISTRY_PASS : Jenkins Credentials에 등록한 Registry 계정 정보IMAGE_NAME / IMAGE_TAG : 빌드할 이미지 이름과 태그 2. Jenkins Credentials 설정Jenkins → Manage Jenkins → Credentials (Secret tex..

서버/CI 및 CD 2025.08.12

로컬 Docker Registry 설치 & 계정 비밀번호 인증 설정 방법

Docker Registry는 Docker 이미지를 저장·관리할 수 있는 서버입니다.공용 Docker Hub 대신 로컬 환경에 직접 Registry를 설치하면, 네트워크 속도가 빠르고 외부 노출 위험 없이 안전하게 이미지를 관리할 수 있습니다.이번 글에서는로컬 Docker Registry 설치계정·비밀번호 인증 설정Docker 로그인 & 이미지 조회 방법docker-compose로 Registry 실행까지 전 과정을 다룹니다. 1. 로컬 Docker Registry 설치 (기본)docker run -d \ --name registry \ -p 5000:5000 \ registry:2 포트 5000 : 로컬 Registry 기본 포트위 상태는 인증 없이 누구나 접근 가능하므로, 운영 환경에서는 보안 ..

서버/CI 및 CD 2025.08.12

TypeScript에서 type과 interface 차이점과 실전 사용법

타입스크립트를 처음 접하거나 리액트, 넥스트 프로젝트를 하다 보면 type과 interface의 차이점이 헷갈릴 수 있습니다.이 글에서는 TypeScript에서 type과 interface의 차이점과 사용 예제를 명확하게 비교하여 설명합니다. 1. Type과 Interface란?type: 타입 별칭(Type Alias). 새로운 이름으로 타입을 정의할 수 있습니다.interface: 구조적 계약(Structural Contract). 객체의 형태를 설명하는 데 주로 사용됩니다. 2. 기본개념interface객체의 구조(Shape) 를 정의하는 데 사용클래스, 객체 리터럴 등에 주로 사용확장(extends) 이 가능해 OOP 스타일 코드에 적합interface User { id: number; nam..

Spring @Transactional에서 왜 RuntimeException만 롤백될까?

@Transactional은 Spring에서 가장 많이 사용되는 어노테이션 중 하나입니다. 데이터베이스 트랜잭션 관리를 간단하게 처리해주지만, 의외로 많은 분들이 궁금해하는 부분이 있습니다." 왜 RuntimeException만 기본적으로 트랜잭션이 롤백되고, Checked Exception은 롤백되지 않을까요?"이번 글에서는 Spring의 트랜잭션 롤백 정책과 예외 처리 방식, 그리고 롤백 대상을 지정하는 방법까지 자세히 알아보겠습니다. Spring @Transactional 기본 롤백 정책Spring에서는 @Transactional 어노테이션이 붙은 메서드에서 예외가 발생했을 때, 기본적으로 아래 조건에 따라 트랜잭션을 롤백합니다:예외 유형트랜잭션 롤백 여부예시 RuntimeException 및 그 ..

Certbot으로 생성한 인증서 갱신 방법 (Standalone 모드 기준)

Let's Encrypt의 무료 SSL 인증서를 사용하고 있다면, 인증서의 자동 갱신 설정이 매우 중요합니다. 특히 --standalone 모드로 인증서를 발급한 경우라면, 갱신 시 주의할 점이 있습니다. 이 글에서는 certbot certonly --standalone으로 생성한 인증서를 어떻게 갱신하고, 자동화하는지 자세히 설명드립니다. Certbot Standalone 인증서 갱신이란?--standalone 모드는 웹 서버 없이 Certbot이 자체적으로 HTTP 서버를 띄워 인증서를 발급하는 방식입니다.주로 DuckDNS, 공유기 DDNS, 라즈베리파이, 간단한 웹 서비스에서 사용되며, nginx나 apache와의 연동이 없는 환경에 적합합니다.하지만 이 방식은 웹서버가 동시에 포트 80/443을..

[Spring Boot DDNS 자동 갱신] DuckDNS와 함께하는 DDNS IP 자동화 프로그램 만들기

DDNS란? DuckDNS 설정? 공인 IP가 바뀌어도 외부 접속을 유지하는 방법!이 글에서는 DuckDNS와 Spring Boot를 활용해 공인 IP 자동 갱신 프로그램을 만드는 방법을 소개합니다. DDNS란? 왜 필요한가?고정 IP가 없는 환경에서 외부 접속을 원할 때DDNS(Dynamic DNS)는 공인 IP가 자주 변경되는 환경에서도 고정된 도메인 주소로 외부 접속이 가능하게 해주는 기술입니다.예를 들어 집에서 웹서버, CCTV, NAS 등을 운영하는 경우, ISP(통신사)가 할당하는 IP는 일정 시간마다 변경될 수 있습니다. 이때 DDNS를 사용하면 example.duckdns.org 같은 고정 도메인 주소로 계속 접속할 수 있습니다.무료 DDNS 서비스: DuckDNShttps://www.du..

[Tomcat Memory Leak 해결] Spring + Quartz + JDBC 사용 시 발생하는 경고 제거 방법

문제 상황 : Tomcat 종료 시 Memory Leak 경고 발생Spring 기반 테스트 프로젝트를 실행 후 종료했을 때, 다음과 같은 Tomcat의 Memory Leak 경고 메시지가 출력되었습니다.WARNING [main] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [test] registered the JDBC driver [oracle.jdbc.OracleDriver] but failed to unregister it...WARNING [main] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The..

[Spring + MyBatis + Oracle] ORA-01861 오류 추적기: "literal does not match format string" 해결법

문제 상황 : 자바는 잘 보냈는데, 프로시저 내부에서 터지는 ORA-01861Spring 환경에서 MyBatis를 통해 Oracle 프로시저를 호출할 때 아래와 같은 오류를 만난 적 있으신가요?ORA-01861: literal does not match format string이 에러는 자바에서 전달한 값이 Oracle이 기대하는 날짜/타임스탬프 포맷과 일치하지 않을 때 발생합니다. 일반적인 경우라면 금방 해결할 수 있지만, **프로시저 내부에서 동적 SQL(String 조합으로 만든 쿼리)**을 실행하는 구조라면, 디버깅이 훨씬 어려워집니다. 현상 재연이 어려웠던 이유디버 도구(DB Visualizer, DBeaver 등)로 해당 프로시저를 호출하면 정상 동작자바 프로그램에서만 동일 입력으로 오류 발생..

728x90