Spring Boot Executable JAR에서 JSP 접근 불가 문제 해결
·
Java&Spring/차세대를 하면서...
Spring Boot Executable JAR에서 JSP 접근 불가 문제 해결배경Spring Framework 2.5.6 기반의 레거시 시스템을 Spring Boot 2.7.18로 업그레이드하는 작업을 진행했다. 기존 시스템은 EAR 파일로 패키징하여 JavaEE 스펙인 외부 JEUS에 배포하는 방식이었는데, Spring Boot로 전환하면서 Executable JAR(bootJar) 형태로 패키징해야 했다.Executable JAR를 선택한 이유외부 WAS 의존성 제거 (내장 Tomcat 사용)배포 단순화 (java -jar로 실행)컨테이너 환경(Docker/Kubernetes) 대응 용이운영 환경 표준화그러나 레거시 시스템에는 수백 개의 JSP 파일이 존재했고, 이를 당장 Thymeleaf 등으로 ..
Spring Boot 애플리케이션 실행 시 JAR 스캔 경고 문제 분석
·
Java&Spring/차세대를 하면서...
Spring Boot 애플리케이션 실행 시 JAR 스캔 경고 문제 분석문제 상황Spring Boot 애플리케이션을 gradle bootRun으로 실행하던 중 다음과 같은 경고 로그가 발생했다.2025-12-08 19:07:45.775 # WARN 40868 --- [main] o.a.t.u.s.StandardJarScanner:Failed to scan [file:/C:/Users/USER/.m2/repository/com/sun/xml/ws/jaxws-rt/2.3.1/javax.annotation-api.jar] from classloader hierarchyjava.io.IOException: java.lang.reflect.InvocationTargetException at org.apache..
[알고리즘] 백준 - PC방 요금 (9080)
·
알고리즘
1시간마다 시간을 체크하는 방식으로 문제를 푸는 방식이 편리하다. 맨처음 진입조건에서 22시 ~ 3시에 pc방 이용을 시작하고 남은 시간이 300분 이상 남았으면 정액제를 이용한다. 두번째 진입조건부터는 남은시간이 300분 이상인지만 체크하면 된다. 아니라면 일반 사용으로 계산한 후 2번 조건으로 진입하거나 남은 시간을 다 소진할 때까지 다시 반복하여 진행한다. 생각없이 문제를 풀면 어려운 문제인것 같다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; //https://..
[Java] 정규표현식 (기본)
·
Java&Spring/Java
0. 언제 쓰는가?정규식에는 다양한 기능이 있다.기본적인 기능부터 살펴보도록 하자.이번에 살펴볼 기능은 각종 코딩 테스트나 알고리즘에 자주 나오는 유형이다.해당 문자열이 내가 원하는 값들로만 이루어져 있는지 확인하고 싶을 때 사용한다.혹은 절대로 있으면 안되는 값이 포함되어 있는지 확인하고 싶을 때 사용한다.이것을 응용하면 내가 원하는 값이 포함 되어있는지 확인할 수도 있다.1. 내가 원하는 값들만 들어있는지 확인한다.public class Main { private static boolean isOnlyNumber(String string) { return string.matches("^[0-9]*$"); } private static boolean isOnlyCapital..
[Java] 람다
·
Java&Spring/STUDY HALLE
0. 학습 목표 람다식 사용법 함수형 인터페이스 variable capture 메소드, 생성자 레퍼런스 0-1. 왜 람다인가? 사과는 무게, 색의 데이터를 가진다. 그리고 여기에 다양한 사과들의 리스트가 있다고 가정해보자. Apple.java public class Apple { private Color color; private int weight; public Apple(Color color, int weight) { this.color = color; this.weight = weight; } public Color getColor() { return color; } public void setColor(Color color) { this.color = color; } public int getWe..
[실패록] EC2 카프카 메모리 리소스 부족
·
실패록/오늘의 실패록
0. 사건의 발단 평화롭게 개발을 진행하던 도중 이슈가 발생했다. 갑자기 서버가 먹통이 되었다는 소식이었다. 문제를 해결하기 위해 빠르게 ec2 인스턴스를 확인해 보았으나 cpu 사용량 및 인스턴스에는 문제가 없었다. 다음은 putty로 ec2 터미널에 접속하여 top 명령어를 사용해 서버 메모리 사용량을 확인해 보았다 결과는 놀라웠다... 내가만든 도커 이미지가 아니라 confluent가 제공하는 kafka 도커 이미지를 사용하는지라 어디서 메모리 누수가 발생하는지 파악을 할 길이 없다. 내가 할 수 있는 옵션은 무엇이 있을까? 도커 실행시 jvm heap opts를 256-256으로 설정한다. 도커이미지를 confluent에서 만든 이미지가 아닌 다른 이미지로 변경한다. 일단 당장 돌아가도록 메모리 ..
[실패록] Spring Controller 415 Error
·
실패록/오늘의 실패록
Controller에 HTTP문서로 요청할 때, body에 넣을 값이 없다면, 해당 content-type의 기본값을 넣어주자. 해당 body가 null이면 안된다. @RestController @RefreshScope @RequestMapping(path = "/sns/post", consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseBody @RequiredArgsConstructor @Slf4j public class PostController { . . . /* 즐겨찾기 게시판 불러오기 */ @GetMapping(path = "/favorite") public ResponseEntity getFavoritePosts( HttpServletRequest r..
[Java] enum
·
Java&Spring/STUDY HALLE
0. 학습 목표 자바의 열거형에 대해서 학습한다. enum 정의하는 방법 enum이 제공하는 메소드 (values()와 valueOf()) java.lang.Enum EnumSet 1. enum 정의하는 방법 자바의 enum을 정의하는법은 일반적으로 클래스를 사용하는 방법과 다르지 않다. 1-1.기본형 package study.moon.test; public enum Word { HELLO, WORLD } 말 그대로 데이터를 열거하는 방식으로 이루어져 있다. 마치 값이 채워진 배열과 같은 느낌이다. 1-2.데이터 표현형 package study.moon.test; public enum Word { HELLO("HELLO"), WORLD("WORLD"); String word; Word(String wor..