Java 17

[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

[Java Web] Eclipse에서 Tomcat 버전 불일치로 인한 실행 오류 해결

1. 문제 상황 Eclipse에서 웹 프로젝트를 실행했을 때 다음과 같은 오류가 발생했다.오류: 기본 클래스 org.apache.catalina.startup.Bootstrap을(를) 찾거나 로드할 수 없습니다.원인: java.lang.ClassNotFoundException: org.apache.catalina.startup.Bootstrap 프로젝트의 Java Build Path에는 Tomcat 8.5가 등록되어 있었고, Servers 탭에서는 Tomcat 9.0을 사용하고 있었다. 2. 원인 분석Eclipse에서 Tomcat을 사용할 때는 다음 두 설정이 동일해야 한다.설정 위치설명Java Build Path > Libraries컴파일 시 참조하는 Tomcat API 라이브러리Servers > T..

Java 2025.08.06

[Java] Null Check

1. 개요 우리가 자바로 프로그램을 개발하다보면 가장 쉽게 마주할 수 있는 오류는 NullPointerException(java.lang.NullPointerException)일 것이다. 이는 보통 객체 값이 null이거나 초기화가 안되어 있는 인스턴스를 사용할때 발생하게 된다. Null 객체에서 method를 호출하는 경우 Null 객체의 필드에 접근하거나 값을 변경하는 경우 Null 의 길이를 배열처럼 취하는 경우 Null을 throw하는 경우 Null을 통해 동기화 할 경우 public class Sample { public static void main(String[] args){ Foo foo = null; foo.toString(); // NullPointerException foo.equal..

Java 2022.11.25

[Java] JSON 변환 라이브러리 Jackson에 대해

1. Jackson이란? Java Object를 JSON으로 변환하거나 JSON을 Java Object로 변환하는 데 사용할 수 있는 Java 라이브러리이다. (jackson - Github주소) 2. Jackson의 특징 Stream API: 스트림 형식으로 데이터를 분석하고 생성하기 때문에 성능이 좋다. Tree Model: XML의 DOM처럼 Node 형태로 데이터를 다룰 수 있기 때문에 유연성이 좋다. Data Binding: POJO기반의 자바 객체들을 JSON으로 변환시킬 수 있다. 3. Jackson의 코어 모듈 Streaming("jackson-core"): 로우레벨 스트리밍 API를 정의하고 JSON관련 구현을 포함한다. Annotations("jackson-annotations"): 표..

Java 2022.11.22
반응형