분류 전체보기 23

[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 등)로 해당 프로시저를 호출하면 정상 동작자바 프로그램에서만 동일 입력으로 오류 발생..

[CI/CD 서버 구축 #5] Maven deploy 시 자동 생성된 pom.xml로 인한 문제와 해결법

폐쇄망 환경에서 mvn deploy:deploy-file 명령어로 외부 라이브러리를 Nexus Repository에 수동 업로드할 때, 종종 발생하는 문제가 있습니다. 바로 자동 생성된 pom.xml이 실제 배포된 라이브러리의 메타 정보와 다를 경우 발생하는 의존성 충돌 또는 빌드 실패입니다.이 글은 이전글인 [이 글]과 이어진 글이므로 같이 보시면 좋습니다. 문제 : Maven이 생성한 POM이 원본과 다를 때 mvn deploy:deploy-file 명령어는 .jar 파일만 있으면 기본적으로 groupId, artifactId, version 등의 메타 정보만을 바탕으로 간이 POM 파일을 자동 생성합니다. 하지만, 실제 Maven Central에 배포된 라이브러리의 pom.xml에는 다음과 같은 중..

서버/CI 및 CD 2025.04.23

[CI/CD 서버 구축 #4] 폐쇄망 환경에서 오픈소스 라이브러리를 Nexus에 업로드하는 3가지 방법

기업 내부망이나 보안 상의 이유로 인터넷 접속이 제한된 환경에서도 개발에 필요한 오픈소스 라이브러리를 활용해야 하는 경우가 많습니다. 이럴 때 Sonatype Nexus Repository Manager를 이용해 외부 라이브러리를 내부망으로 안전하게 가져오는 3가지 주요 방법을 소개합니다.설치에 관해 궁금하시면 이전 글인 [이 글]을 참고 하시기 바랍니다. 1. 프록시 리파지토리 등록 (인터넷 가능 환경에서 미리 캐시)Nexus는 외부 저장소를 프록시(Proxy) 리파지토리로 설정하여 필요한 라이브러리를 자동으로 가져오고 로컬에 캐시할 수 있습니다. 인터넷이 가능한 세팅 초기 단계에서 이 방법을 활용하면 수많은 라이브러리를 자동으로 확보할 수 있습니다.설정 방법Nexus Repository Manager..

서버/CI 및 CD 2025.04.23

Java에서 암호화된 ZIP 파일 푸는 방법 (Zip4j 라이브러리 사용법)

Java로 개발을 하다 보면 종종 ZIP 압축 파일을 다뤄야 할 일이 생기는데, 그중에서도 비밀번호가 걸린 ZIP 파일을 해제해야 하는 경우가 있습니다.하지만 기본 Java API나 아파치 라이브러리로는 이를 처리하기 어렵습니다.이 글에서는 Java환경에서 비밀번호가 설정된 ZIP 파일을 안전하게 해제하는 방법과, 이를 위한 Zip4j 라이브러리의 사용법을 정리해드립니다. Java에서 비밀번호 ZIP 파일을 해제하려면?Java의 기본 java.util.zip 패키지는 암호화된 ZIP 파일을 지원하지 않습니다.그렇기 때문에 다음과 같은 서드파티 라이브러리를 사용하는 것이 필요합니다. 추천 라이브러리: Zip4jZip4j는 Java에서 가장 널리 사용되는 ZIP 라이브러리 중 하나로, 비밀번호 해제, AES..

PuTTY 키 기반 로그인 설정 가이드 (Windows 기준)

설정 저장 SSH 접속을 자동화하고 보안성을 강화하는 법이 설정을 하기 전에 접속하려는 서버에 키 로그인 설정을 해야 하는데 그 부분은 [이 글]을 참고 하시면 됩니다. 이 글에서 다루는 내용PuTTY에서 OpenSSH 키 변환 방법키 기반 인증을 사용하는 SSH 로그인 설정접속 자동화 및 인증 오류 해결 팁 PuTTY 키 변환 (OpenSSH → PPK)PuTTY는 .ppk 형식의 키 파일을 사용합니다. Linux나 Jenkins 환경에서 생성한 id_rsa (OpenSSH) 키를 PuTTY에서 사용하려면 변환 과정이 필요합니다.변환 절차1. PuTTYgen 실행설치된 PuTTY 폴더 내 PuTTYgen을 실행합니다.2. OpenSSH 키 불러오기메뉴에서 File > Load private key 선택..

Java XML 파서 비교 분석 – JAXB vs StAX vs SAX vs DOM

XML은 여전히 다양한 시스템 통신과 설정 파일에 널리 사용되는 데이터 형식입니다. Java에서는 XML을 처리하기 위해 여러 가지 파싱 방식이 존재하며, 그 중 대표적인 방식은 JAXB, StAX, SAX, DOM입니다.이번 글에서는 Java XML 파서 4종을 비교 분석하여, 언제 어떤 파서를 선택하면 좋을지 명확하게 알려드리겠습니다. 1. JAXB (Java Architecture for XML Binding)JAXB는 XML과 Java 객체 간의 자동 바인딩을 제공하는 프레임워크입니다. 애너테이션 기반으로 XML ↔ 객체 간 매핑을 자동으로 처리해줍니다.특징Java 클래스와 XML 간의 마샬링/언마샬링 자동화애너테이션 사용XML 스키마(XSD) 기반 클래스 생성 가능 장점코드가 간결하고 직관적객체..

Java로 DNS 서버 만들기 – 모바일 테스트를 위한 자체 DNS 구축 방법

모바일 웹 개발을 하다 보면 실제 모바일 환경에서 도메인 접속 테스트가 필요할 때가 있습니다. 하지만 네트워크 환경상 도메인을 강제로 매핑해 테스트하는 것이 어려울 경우, 자체 DNS 서버를 만들어 활용하면 큰 도움이 됩니다. 이번 포스팅에서는 Java로 DNS 서버를 구현하는 방법을 단계별로 소개합니다. DNS 서버란?DNS(Domain Name System) 서버는 사용자가 입력한 도메인 이름(www.example.com 등)을 실제 IP 주소(192.0.2.1)로 변환해주는 시스템입니다. Java로 DNS 서비스를 만들기 위해서는 다음 요소들을 이해해야 합니다:UDP/TCP 소켓 프로그래밍DNS 패킷 구조 (RFC 1035 기반)도메인 ↔ IP 매핑을 위한 Map 또는 데이터베이스 Java DNS ..

Java에서 Telegram 봇 만들기 – telegrambots 라이브러리 사용법 & 메시지 수신 및 삭제 예제

개인 프로젝트를 진행하면서 Telegram을 이용한 메시지 연동 기능이 필요하게 되었습니다.카카오톡 등 일부 메신저는 연동이 제한되거나 유료 API를 제공하는 경우가 많아, Telegram 봇을 직접 등록하고 구현해 보기로 했습니다.이번 포스트에서는 Java(Spring Boot) 환경에서 telegrambots 라이브러리를 사용해 간단하게 메시지를 받고, 삭제하는 예제를 소개합니다. 예제 주요 기능 Telegram 메시지 수신수신 메시지 로그 출력메시지 자동 삭제 사용 라이브러리Gradle 기준 build.gradle 파일에 아래 디펜던시를 추가합니다dependencies { implementation 'org.telegram:telegrambots-springboot-longpolling-sta..