[Python] pandas로 DataFrame 비교하여 특정 값 제거하는 방법
·
개발 (Development)/Python
Python의 pandas를 활용하다 보면, 두 개의 DataFrame을 비교하여 한쪽에 포함된 값을 다른 쪽에서 제거해야 하는 상황이 자주 발생합니다. 예를 들어, 이미 처리된 데이터를 제거하거나, 제외 대상 명단을 기반으로 전체 목록을 정리할 때 사용할 수 있습니다.이번 글에서는 이와 같은 상황에서 사용할 수 있는 isin()과 merge() 함수 활용법을 예시와 함께 소개해드리겠습니다.문제 상황 정리두 개의 DataFrame a와 b가 있다고 가정합니다. 이때 a에 포함된 값을 기준으로, 해당 값이 포함된 행을 b에서 제거하고자 합니다.단일 열 기준으로 비교하고 제거하기가장 간단한 경우는 한 개의 열(예: id)을 기준으로 비교하는 방법입니다.import pandas as pd# 예시 데이터a = ..
[Kubernetes] Kubernetes에서 컨테이너와 파드는 무엇이 다를까?
·
개발 (Development)/Kubernetes
Kubernetes를 공부하거나 실제로 운영 환경에 적용하다 보면 "컨테이너"와 "파드"라는 용어가 자주 등장합니다. 두 개념은 비슷해 보이지만, Kubernetes에서는 엄연히 다른 역할을 가지고 있습니다. 이 글에서는 컨테이너와 파드의 개념을 비교하며, 어떤 차이가 있는지 정리해보겠습니다.컨테이너란?컨테이너(Container)는 애플리케이션과 그 실행 환경을 하나로 패키징한 단위입니다. 운영체제 수준의 가상화를 통해, 어떤 환경에서도 동일하게 애플리케이션을 실행할 수 있도록 만들어줍니다. 대표적으로 Docker 컨테이너가 많이 사용됩니다.컨테이너는 다음과 같은 특징을 가집니다.애플리케이션, 라이브러리, 설정 파일 등을 포함격리된 환경에서 실행되며, 가볍고 빠르게 구동됨단독 실행도 가능 (docker ..
[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. 발생 가능한 원인다음과 같은 원인들이 있을 수 있습..
[PostgreSQL] MyBatis foreach + UNION ALL 쿼리의 성능 문제와 PostgreSQL 최적화
·
개발 (Development)/PostgreSQL
최근 프로젝트에서 MyBatis를 사용하여 여러 자산(asset) 정보를 기준으로 태그(tag) 데이터를 조회하는 기능을 구현하던 중, 성능 저하 문제가 발생했습니다. 문제의 원인을 추적해보니 foreach 루프 안에서 UNION ALL로 다수의 SELECT 구문을 반복 생성하는 방식이 주요 원인이었습니다. 본 글에서는 해당 구조의 문제점과 PostgreSQL에 적합한 최적화 방법을 실제 경험을 바탕으로 정리하였습니다.문제 상황: MyBatis foreach + UNION ALL 사용처음 작성한 쿼리는 아래와 같은 형태였습니다. SELECT item_code, tag_code, tag_name, #{item.assetId} AS asset_physical_na..