[Java] MyBatis만 쓰던 내가 JPA를 처음 접했을 때 이해한 구조 정리
·
개발 (Development)/Java
Spring Boot 프로젝트를 진행하면서 그동안은 MyBatis로만 데이터베이스를 다뤄왔습니다. 하지만 이번 프로젝트에서는 JPA를 사용하게 되었고, 처음에는 다소 생소한 개념들이 많았지만 구조를 하나하나 정리하면서 점차 이해할 수 있었습니다. 이 글에서는 MyBatis만 사용해본 입장에서 JPA의 전체 구조를 어떻게 이해했는지 순서대로 정리해보겠습니다.JPA와 MyBatis의 가장 큰 차이점MyBatis는 SQL 중심의 프레임워크입니다. XML이나 어노테이션을 통해 SQL을 직접 작성하고, 그 결과를 Java 객체에 매핑합니다. 반면, JPA는 객체 중심으로 동작합니다. SQL은 자동으로 생성되며, 객체와 객체 사이의 관계를 바탕으로 데이터베이스와 소통합니다.즉, MyBatis는 "어떤 쿼리를 실행할..
[Kubernetes] Kubernetes Pod 간 Connection reset 오류, 원인과 해결 방법
·
개발 (Development)/Kubernetes
문제 상황내부에서 운영 중인 두 개의 API Pod A와 B가 있습니다. Pod A는 Pod B의 특정 API를 호출하여 인증 등의 기능을 위임하고 있으며, 이들은 Kubernetes 클러스터 내에서 서비스 이름을 기반으로 통신하고 있습니다.문제는 간헐적으로 다음과 같은 예외가 발생한다는 점이었습니다.java.net.SocketException: Connection reset특정 시점에서 API 호출이 실패하고, 호출하는 쪽에서 위와 같은 오류가 발생했습니다. Pod B를 재시작하면 문제가 일시적으로 해결되었지만, 원인을 명확히 파악하지 못해 대응이 어려운 상황이었습니다.원인 분석에러 메시지와 인프라 구조를 바탕으로 다음과 같은 가능성을 검토하였습니다.1. 애플리케이션이 응답하지 않는 상태Pod 내부에서..
[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/SpringBoot] Spring에서 예외를 던지지 않고 API 응답은 유지하며 로그는 ERROR로 남기지 않도록 처리하는 방법
·
개발 (Development)/Java
Spring 기반의 백엔드 개발을 하다 보면 다음과 같은 요구사항이 생길 수 있습니다.클라이언트에게는 일정한 응답 포맷을 유지하면서내부적으로는 경고 상황임을 감지해야 하며로그에는 ERROR 레벨이 아닌 WARN 또는 INFO 수준으로만 기록하고 싶다이 글에서는 위와 같은 상황에서 예외 처리 방식을 어떻게 구성하면 좋을지 실제 구현 예제를 기반으로 정리하였습니다.문제 상황예외가 발생할 때 다음과 같이 @ResponseStatus가 지정되어 있는 커스텀 예외를 사용하고 있었습니다.@ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "custom error")public class CustomException extends RuntimeException { ..
[AWS] AWS 환경에서 모델 학습 API 호출 시 Broken pipe 에러 해결 과정
·
개발 (Development)/AWS
최근 Spring Boot 기반 API 서버에서 모델 학습 요청을 처리하는 도중, IOException: Broken pipe 예외가 발생하는 상황을 경험했습니다. 문제는 AWS 환경에서 발생했고, 처음에는 에러 메시지만 보고 정확한 원인을 파악하기가 쉽지 않았습니다. 이 글에서는 해당 문제를 어떻게 진단하고 해결했는지 과정을 정리합니다.문제 상황모델 학습을 위한 POST API(/api/models/train)를 호출하면 내부에서 학습이 시작되고, 이후 클라이언트에 성공 여부를 응답하도록 구현되어 있었습니다. 그런데 간헐적으로 아래와 같은 에러가 로그에 남는 문제가 있었습니다.IOException: Broken pipeSpring Web MVC에서 발생한 에러로, 응답을 전송하는 도중 예외가 발생하며 ..