[Java] MyBatis foreach에서 빈 배열이 들어올 경우 예외를 방지하는 방법
·
개발 (Development)/Java
Java에서 MyBatis를 사용할 때, foreach 구문에 빈 배열이나 리스트가 들어오는 상황은 종종 발생합니다. 이때 적절한 처리를 하지 않으면 SQL 문법 오류나 의도치 않은 전체 조회와 같은 문제가 생길 수 있습니다.저는 최근 IN 절을 동적으로 구성하기 위해 태그를 사용하던 중, 전달받은 리스트가 빈 배열일 경우 SQL 오류가 발생하는 문제를 겪었습니다. 이 문제를 해결하기 위해 어떤 방식들이 있는지 조사하고, 실제로 적용해 보면서 가장 적합한 해결 방법을 찾게 되었습니다.문제 상황: 빈 배열이 들어오면 SQL 오류 발생예를 들어 아래와 같이 idList라는 리스트를 기반으로 사용자 정보를 조회하는 SQL을 구성한다고 가정합니다. SELECT * FROM users WHERE id IN ..
[Java/SpringBoot] 서버 간 API 호출 오류: Connection reset 에러 분석 및 해결 방법
·
개발 (Development)/Java
1. 에러 개요다음과 같은 에러 메시지가 로그에 출력되었습니다.org.springframework.web.client.ResourceAccessException: I/O error on POST request for [내부 서버 주소]: Connection reset이는 시스템 A에서 내부 시스템 B의 인증 API를 호출하려 했지만, 상대방 서버 측에서 연결을 강제로 종료시켜 발생한 네트워크 오류입니다.2. 에러의 의미Connection reset은 클라이언트가 요청을 보냈지만, 상대 서버가 응답을 주지 않고 연결을 끊어버린 상황을 의미합니다.보통 이는 응답 처리 중 문제가 발생했거나, 서버가 아예 요청을 수신하지 못한 경우에도 발생할 수 있습니다.3. 발생 가능한 원인다음과 같은 원인들이 있을 수 있습..
[Java] LinkedHashMap에서 특정 값을 가진 항목 제거하는 방법
·
개발 (Development)/Java
Java에서 LinkedHashMap을 사용할 때, 특정 값을 가진 항목을 제거하고자 하는 경우가 있습니다. 하지만 for-each 문을 사용해 직접 제거할 경우 ConcurrentModificationException이 발생할 수 있기 때문에, 안전한 방법으로 처리하는 것이 중요합니다. 이 글에서는 특정 값(ex. 0, null, 혹은 사용자 정의 값)을 가진 항목을 안전하게 제거하는 방법을 소개합니다.특정 값을 가진 항목 제거: Iterator 사용LinkedHashMap은 순서를 유지하는 특성이 있어 반복자(Iterator)를 사용하는 것이 가장 안전합니다.예제 코드import java.util.Iterator;import java.util.LinkedHashMap;import java.util.M..
[Java] printStackTrace() 경고 해결 및 로깅 적용하기
·
개발 (Development)/Java
Java 코드를 작성하던 중, printStackTrace()에 노란색 경고 줄이 생기는 것을 발견했습니다. 단순히 예외 정보를 콘솔에 출력하는 방식은 실제 서비스 코드에 적절하지 않다는 것을 의미하는 경고였습니다. 이에 따라 로깅 프레임워크를 적용하여 문제를 개선한 과정을 정리해 보았습니다.문제 상황다음은 기존 코드입니다:HashMap thresholds = new HashMap();try { thresholds = getThresholds();} catch (Exception e) { e.printStackTrace(); // 여기서 경고 발생}이 코드는 getThresholds() 메서드에서 예외가 발생할 경우 콘솔에 에러 스택을 그대로 출력합니다. 이는 개발 단계에서는 유용할 수 있지..
[Java/Spring Boot] AWS 환경에서 DB 직접 접근이 어려운 경우: Java 애플리케이션에서 SQL 파일을 실행하여 데이터 삽입하기
·
개발 (Development)/Java
회사 프로젝트 중 AWS에 배포된 서비스 환경에서는 보안상의 이유로 데이터베이스에 직접 접근할 수 없었습니다. 운영 서버에서 PostgreSQL DB를 직접 수정하거나 삽입 쿼리를 실행하는 것이 제한되었고, SSH나 DB 툴 접속도 허용되지 않았습니다.이러한 제약을 해결하기 위해, Java 애플리케이션 내부에 SQL 파일을 포함시키고 애플리케이션 실행 시 이를 실행하도록 구성하는 방식을 선택했습니다. 과정 중 삽입 대상 데이터에 문자열로 포함된 세미콜론(;) 때문에 실행 오류가 발생하는 중요한 시행착오도 있었기에, 그 내용을 중심으로 아래와 같이 단계별로 정리합니다.1. Python으로 CSV 파일을 읽어 INSERT SQL 생성우선 삽입할 데이터는 CSV 형태로 정리되어 있었습니다. 이를 기반으로 Py..