Java 20

[Troubleshooting] Maven "was cached in the local repository" — 폐쇄망 빌드 서버에서 캐시된 실패 처리

parent POM을 Nexus에 올렸는데도 빌드가 또 실패했다. 원인은 Maven이 이전에 실패한 해석 결과를 로컬 캐시에 저장해두고 계속 실패로 처리하고 있었기 때문이었다. 1. 증상parent POM을 Nexus에 올리고 다시 빌드를 돌렸는데 또 같은 에러가 떴다.[ERROR] Failed to execute goal on project my-project: Could not resolve dependencies ... Failure to find com.github.librepdf:openpdf-parent:pom:1.3.30.jaspersoft.2 in http://nexus.internal:8081/repository/maven-public/ was cached in the..

Java/Maven 2026.06.03

[Troubleshooting] Maven parent POM이 Nexus에 없어서 빌드 실패 — mvn dependency:list의 함정

폐쇄망 Nexus에 의존성을 올렸는데도 빌드가 실패했다. 원인은 mvn dependency:list가 parent POM을 출력하지 않는다는 점이었다. 이 함정과 해결 방법을 정리한다. 1. 증상로컬 .m2에서 의존성을 수집해 Nexus에 올리고 폐쇄망 TeamCity 빌드를 돌렸더니 아래 에러가 떴다.Could not resolve dependencies for project ... Could not find artifact com.github.librepdf:openpdf-parent:pom:1.3.30.jaspersoft.2 in nexus (http://nexus.internal:8081/repository/maven-public/)openpdf는 분명히 올렸는데 왜 openpdf-par..

Java/Maven 2026.06.03

[폐쇄망 CI/CD] Maven 의존성을 Nexus에 자동 업로드하기

외부 인터넷이 차단된 폐쇄망 환경에서 Maven 프로젝트의 CI/CD를 구축하면서 겪은 의존성 관리 문제와 해결 과정을 정리한다. 1. 배경회사 보안 규정상 외부 인터넷이 막힌 폐쇄망 서버에 Spring Boot 기반 사내 시스템을 배포해야 했다. TeamCity로 CI/CD 파이프라인을 구성했는데, 빌드 서버가 Maven Central에 접근할 수 없으니 의존성을 어디선가 가져와야 했다.해결 방향은 세 단계로 정리됐다.내부망에 Nexus Repository Manager 구축개발자 PC의 로컬 .m2 캐시에서 필요한 의존성만 추려서 Nexus에 업로드CI/CD 빌드 서버는 Nexus만 바라보도록 settings.xml 설정 2. 환경 정보항목값Nexus URL내부망 Nexus 서버 주소업로드 레포ho..

Java/Maven 2026.06.03

[Troubleshooting] Spring Boot 2.3 + JEUS 로그 라이브러리 충돌 해결

Spring Boot 2.3 기반 프로젝트를 JEUS에 배포하는 과정에서 로그 라이브러리 충돌 문제가 발생했다.특이한 점은 로컬에서 src 폴더를 직접 구동할 때는 아무 문제가 없었다는 것이다. 빌드된 target 폴더를 실행하거나 JEUS에 배포할 때만 문제가 생겼다. 1. 문제 상황로컬 Smart Tomcat에서 소스(src) 폴더를 직접 지정해 실행하면 정상 동작했다.그런데 빌드 결과물인 target 폴더를 실행 대상으로 잡거나 운영 서버(JEUS)에 배포하면 Multiple SLF4J bindings 에러와 함께 기동이 실패했다. SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/.../logb..

Java/Maven 2026.05.05

[Maven] 외부망에서 .m2 복사했는데 내부망 빌드 실패할 때

외부망에서 빌드를 성공시킨 뒤 .m2/repository 폴더를 통째로 내부망에 복사했다.로컬에 라이브러리가 다 있으니 문제없을 거라고 생각했다. 그런데 내부망에서 빌드를 돌리자 외부 저장소(Central)에 접속을 시도하며 Dependency Resolution 에러가 발생했다.파일은 분명히 있는데, Maven이 계속 외부로 나가려 했다. 1. 원인: _remote.repositories 파일Maven은 라이브러리를 다운로드할 때 해당 파일이 어떤 원격 저장소에서 왔는지를 기록하는 메타데이터 파일을 함께 생성한다. 파일명은 _remote.repositories 또는 _maven.repositories다. 이 파일에는 출처 저장소 정보가 기록되어 있다. 예를 들어 중앙 저장소에서 받은 파일이라면 cen..

Java/Maven 2026.05.05

[Maven] clean / package / --offline / -U 실무 정리

Maven을 쓰다 보면 아래 명령어들을 습관처럼 사용하게 된다. mvn clean packagemvn clean package -Umvn clean package --offline 그런데 각각의 의미를 정확히 모르고 쓰면 문제가 생긴다.CI/CD에서 빌드가 실패하거나, 캐시가 꼬이거나, Nexus 이슈로 이어지는 경우가 실제로 있었다.이번 글은 실제 장애 케이스 기준으로 핵심만 정리한다. 1. clean – 빌드 초기화 이전 빌드 결과를 삭제하는 옵션이다.내부적으로는 target/ 디렉토리를 통째로 지운다.이게 왜 필요하냐면, 이전 빌드의 잔여물이 남아있으면 클래스 충돌이 발생할 수 있기 때문이다.실무에서는 CI 빌드에 거의 무조건 포함한다.mvn clean package 2. package – 실제..

Java/Maven 2026.05.05

[Spring] Filter와 Interceptor의 차이 정리

1. 개요Spring MVC기반 웹 애플리케이션에서는 요청(Request)와 응답(Response)이 Controller에 도달하기 전 후로다양한 처리가 필요한 경우가 많다.(예: 로그인 세션 확인, 인코딩 설정, 접근 권한 체크, 로깅 등) 이때 사용할 수 있는 대표적인 두 가지 기술이 바로 Filter와 Interceptor이다. 2. Filter (javax.servlet.Filter)개념Servlet 표준 스펙에서 제공하는 기능이다.DispatcherServlet 이전 단계에서 모든 요청을 가로채서 전처리/후처리 가능.Spring MVC에 종속되지 않고, 톰캣/JEUS 등 Servlet 컨테이너 레벨에서 동작한다. 적용 시점Client → Filter → DispatcherServlet → C..

Java/Spring 2025.10.31

[Spring] Spring Framework vs Spring Boot 비교 정리

1. 개념과 철학의 차이Spring Framework는 개발자가 직접 조립하는 구조이다.각 설정파일을 직접 관리하고, 필요한 라이브러리 버전도 일일히 맞춰야 했다. 반면 Spring Boot는 "실행 중심 프레임워크" 이다.내장 서버와 자동 설정을 통해 실행만 하면 바로 서비스가 구동된다.구분 Spring Framework Spring Boot 핵심 철학개발자가 설정하고 조립설정 자동화 + 실행 중심실행 구조외부 WAS 기반내장 WAS 포함 (Tomcat 등)진입점web.xml → DispatcherServletmain() → SpringApplication.run() 2. 설정 구조의 진화Spring 시절에는 web.xml, root-context.xml, servlet-context.xml 등 ..

Java/Spring 2025.10.29

[Spring] 자주 사용하는 어노테이션 정리 및 예시

Spring Framework는 객체를 관리하고 계층 간 의존성을 자동 주입하기 위해 다양한 어노테이션을 제공한다.이 중 실제 개발 현장에서 자주 사용되는 핵심 어노테이션들을 중심으로 설명한다. 1. @Component, @Service, @Repository, @Controller이 네 가지는 Spring Bean 등록용 어노테이션이다.즉, Spring이 해당 클래스를 컨테이너에서 관리하도록 등록하는 역할을 한다.내부적으로는 모두 @Component를 기반으로 하며, 역할에 따라 의미만 다르다. (1) @Component가장 기본적인 Bean 등록용 어노테이션이다.Helper, Util, Validator 등 특정 계층에 속하지 않는 일반 클래스를 Bean으로 등록할 때 사용한다.import org.s..

Java/Spring 2025.10.28

[Spring] 순서 의존 AOP로 인해 파라미터 순서만 바꿔도 코드가 동작하지 않은 이유

1. 문제 상황Spring MVC 기반 프로젝트에서 로그아웃 기능을 점검하던 중, 동일한 기능을 하는 두 메서드 중 하나는 정상 동작하고 다른 하나는 아무 반응이 없었다. 두 메서드는 코드 한 줄 다르지 않았고, 단지 파라미터 순서만 달랐다. // 정상 동작@RequestMapping("/logout")public String logout(HttpServletRequest request, @ModelAttribute UserContext userContext, HttpServletResponse response) { ... }// 동작 안 함@RequestMapping("/logout")public String logout(HttpS..

Java/Spring 2025.10.21
반응형