본문 바로가기

Develop/Trouble Shooting21

Spring Boot Relaxed Binding 함정 - 401 에러 진짜 원인 개발 중에 예상치 못한 버그를 만났다. 마이크로서비스 환경에서 A 서비스가 B Server로 API 요청을 보낼 때마다 401 Unauthorized가 나왔다. 코드는 문제없어 보였고, API 키도 제대로 주입된 것처럼 보였는데, 삽질 끝에 알게 된 원인은 Spring Boot의 편의 기능 하나였다. Relaxed Binding. Spring Boot Relaxed Binding이란?Relaxed Binding은 Spring Boot가 제공하는 기능으로, 환경변수나 시스템 프로퍼티의 다양한 이름 형식을 자동으로 properties에 매핑해주는 것이다.예를 들어 다음은 모두 같은 설정을 가리킨다.형식예시KebabCaseservice.api-keyCamelCaseservice.apiKeyUnderScore.. 2026. 4. 5.
Kubernetes + Quartz 환경 Job 중복 실행된 원인 # 요약Kubernetes, 멀티 파드 환경에서 Quartz 스케줄러를 클러스터 모드로 잘 사용하고 있다고 생각했다. 하지만, `instanceId`가 구분되어 있지 않아, 실제로는 정상 동작하지 않고 있었다. 확인해보니 Job이 파드마다 한 번씩 실행되고 있었으며, `instanceId=AUTO`와 `clusterCheckinInterval` 설정을 통해 정상 복구하였다.---# 문제 상황Kubernetes 환경에서 Quartz 스케줄러를 다음과 같이 구성하여 사용 중이었다.- `isClustered=true`- 동일 서비스 파드 2개- 동일 DB를 사용하는 JDBC JobStoreQuartz 클러스터 모드에서는 동일 Job이 클러스터 내 한 노드에서만 실행되는 것이 정상이다.하지만 운영 중 다.. 2026. 3. 8.
DB 커넥션 관련 에러 - 트랜잭션 # 에러 메시지### Caused by: co[http://m.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException:](http://m.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException:) Lock wait timeout exceeded; try restarting transaction\### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Cann.. 2025. 3. 29.
Datagrip Data Source 연결 시, invalid fetch size 문제 해결 Maria DB를 로컬에 생성한 후, Datagrip을 통해 Data Source를 연결하는 과정에서 문제가 발생하였습니다.  Test Connection을 통해 정상적으로 연결되는 것을 확인하였습니다.OK를 눌러 Data Source 연결을 적용하려고 하니, 우측 하단에 다음과 같은 경고 문구가 떴습니다.  Data Source를 연결할 때, 디폴트 값으로 설정된 fetch size에 문제가 있나 싶었습니다.해당 Data Source의 속성 설정에 들어가 defaultFetchSize 값을 늘려서 연결해보았지만 실패했습니다.  관련해서 구글링을 해보다가 Jetbrains YouTrack에 동일한 이슈에 대해서 다루고 있었고, 해답을 찾게 되었습니다.  JDBC 드라이버의 버전 문제였고, 버전을 낮춰주니.. 2024. 6. 16.
Java 에러 - Exception in thread "main" java.util.regex.PatternSyntaxException 다음과 같이, "+"를 구분자로 split() 메서드를 이용해서 문자열을 분리하려 했다. 에러 메시지는 다음과 같았다. 구글링을 통해 확인해보니, ?, *, +, (, ), [, ], {, } 와 같은 일부 특수 문자를 replace(), replaceAll(), split() 메서드의 구분자나 기준으로 사용할 때 발생하는 에러라고 한다. 해결방안은 위 특수문자 앞에 역슬래쉬 2개(\\)를 같이 넣어주면 가볍게 해결할 수 있다. // example String str = "123+456"; String[] strArr = str.split("\\+"); // 역슬래쉬 = 원화 표시 // strArr = ["123", "456"] ++ 위 특수문자 양 옆에 대괄호([])로 감싸줘도 가능하다. // exam.. 2023. 3. 20.
Spring Boot Configuration Annotation Processor not configured 민감한 정보의 properties의 정보를 읽어오기 위해서, @ConfigurationProperties(prefix = ) 애너테이션을 사용했을 때, 발생했던 에러이다. 'Spring Boot Configuration Annotation Processor not configured' 이유는 Intellij와 Gradle 버전이 업데이트 되면서 필수적으로 추가해주어야 하는 의존 라이브러리가 생겼다고 한다. 그래서 다음과 같은 의존 라이브러리를 추가해주었다. dependencies { annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor:3.0.2' } reload를 시킨 후, 다시 보니 경고 다음과 같은 경고 문.. 2023. 1. 27.
BeanCreationException 에러 구글링을 통해서 찾아낸 해결 방법은 관련 필드에 @Autowired를 붙여주거나 @Controller, @Service 애너테이션을 빠뜨린 경우, 빈 등록이 정상적으로 되지 않아 발생한 에러였고, 해당 방법대로 진행했으나 같은 에러가 반복했다. 현 상황은 민감 정보를 application-api-key.properties라는 파일에 담아두고 호출하는 과정이었다. 기존 application.properties 파일에 다음 문구를 추가해주니, 정상적으로 해결되었다. 2023. 1. 10.
GitHub Actions .yml 파일 추가 후, 빌드 진행 시 발생한 에러 시도 1. 권한 부여하고 다시 커밋, 푸시 2. https://velog.io/@hyoreal51/Error-error-gradle-script-homerunnerworkgradlew-is-not-executable 3. .yml 파일에 직접 chmod 명령어 적용 3번째 시도로 해결!! 2022. 12. 8.
클라이언트 배포 시, AWS S3 호스팅 과정 중 에러 로컬 환경의 터미널에서 클라이언트 의존성 모듈을 설치, 환경 변수 설정을 한 후에 빌드하는 도중 다음과 같은 에러가 발생했다. nvm, node를 정상적으로 설치했기 때문에 생각치 못한 에러였다. 결국에는 nvm에서 사용하는 node의 버전을 16으로 낮추고 빌드하니 간단하게 해결되었다. $ node -v # node 버전 확인 $ nvm use 16 # 16버전의 node를 nvm에서 사용 ** npm run build 명령어로 build가 되지 않는다면, nvm이 사용하는 node의 버전을 낮추고 빌드해보자 2022. 12. 8.