개발 과정에서 우리는 여러 문제를 마주하게 됩니다. 때로는 문제가 복잡하게 얽혀 있어 해결 과정에서 비효율적인 시도를 하게 되기도 합니다. 이 글에서는 제가 경험한 몇 가지 사례를 바탕으로, 문제를 효과적으로 분석하고 해결하는 방법에 대해 이야기합니다.
핵심문제를 구조적으로 분석하기
어떤 기능이든, 다양한 요소가 조립되어 하나의 '동작'을 만들어냅니다. 이를 피라미드 구조로 비유할 수 있습니다:
핵심 요소: 가장 근본적인 원인 (예: DB 서버 설정)
중간 요소: 핵심과 끝점을 연결하는 부분 (예: 데이터 처리 로직)
끝점 요소: 최종적으로 사용자와 상호작용하는 부분 (예: 애플리케이션 코드)
문제가 발생했을 때, 끝점 요소만을 집중적으로 살펴보면 불필요한 시간이 소요될 수 있습니다.
예를 들어, SQL 서버가 4바이트를 차지하는 이모지(이모티콘)를 지원하지 않는 구성상의 문제가 있는 상황입니다.
만약 잘못된 판단으로 연결 문자열의 설정상의 원인이라고 생각하며 문제해결을 시도하면 해결되지 않습니다.
결국, 핵심 요소에서 원인을 찾아 올라가는 방식이 효율적인 경우가 많습니다.
사례 1: 4바이트 이모지와 MySQL 서버 설정
문제:
이모지(🙏)가 있는 글을 블로그 관리 DB에 저장하려고 했을 때 아래와 같은 메세지와 함께 오류가 발생했습니다:
Incorrect string value: 'xF0x9FxABx96 ' for column
분석 및 해결:
문제 원인 파악:
해결 과정:
MySQL 서버의 charset 설정을 utf8mb4
로 변경.
그러나 기존 테이블의 charset은 여전히 utf8
로 설정되어 있었습니다.
테이블 및 컬럼의 charset을 utf8mb4
로 명시적으로 변경하여 문제를 해결.
교훈:
처음에는 문제의 원인을 서버 설정이 아닌 오류 메시지만 보고 단편적으로 문자열 관련해서 문제가 없나 찾아보려 했습니다.
제대로 파악하지 못하고 연결 문자열에 불필요한 옵션을 추가하는 등의 실수를 했었습니다.
이로 인해 문제의 근본 원인을 탐구하는 것이 중요하다고 생각했습니다.
문제를 다양한 관점에서 파악하기
문제가 발생했을 때, 다양한 원인을 꼼꼼하게 누락하지 않고 점검해 보아야 합니다.
다양한 환경과 변수를 고려하는 것도 중요합니다.
어느 한 측면에서만 원인을 찾으려 하면 시간이 누수될 우려가 있습니다.
사례1:
C# Interop 라이브러리를 이용해 엑셀 파일을 생성하는 프로그램을 개발했습니다.
로컬 환경에서는 정상적으로 동작했지만, 서버에서는 엑셀 생성 과정에서 오류가 발생했습니다.
분석 및 해결:
원인 분석:
해결 과정:
결과:
교훈:
처음에는 로컬 환경에서는 잘 작동했기 때문에 서버에 잘못된 빌드의 프로그램이 올라갔을거라 추정하는 실수를 했습니다.
로컬과 배포서버와의 차이를 생각해보며 원인을 추정해가던 중 두 환경 사이의 차이를 발견하게 되었습니다.
해결하며 느낀점은 개발 환경과 운영 환경 간의 차이를 항상 염두에 두고 테스트를 진행하는 것이 중요하다는 점입니다.
사례2:
SMS 알림 서비스를 구축하던 중, 로컬에서는 정상적으로 문자 전송이 되었지만, 서버에서는 동작하지 않았습니다.
오류 메시지도 없어서 원인 파악이 어려웠습니다.
분석 및 해결:
원인 분석:
해결 과정:
로컬의 프로그램을 다시 배포하여 실행.
이후 문제없이 작동.
교훈:
단순히 서버 환경 문제가 아닐 수 있습니다.
다양한 접근 방식을 통해 문제를 해결해야 한다고 생각했습니다.
문제 해결 능력의 중요성
위 사례들을 통해 얻은 교훈은 다음과 같습니다:
근본 원인 파악:
환경 간 차이 인식:
다양한 경험의 축적: