배포 후 문제 발생 시, 재배포로 해결할 수 있을까

재배포는 문제 해결을 위한 방법 중 하나일 뿐이다

by 써니

서비스를 운영하다 보면
배포 이후 문제가 발생했을 때
이런 이야기를 자주 듣게 된다.

“다시 한번 배포를 진행하겠습니다.”

그리고 실제로 재배포 이후 문제가 해결되는 경우를 보게 된다.

그래서 나는
배포 이후 문제가 발생하면
재배포를 통해 해결될 수 있다고 생각했다.


실제로 재배포로 해결되는 경우도 있다.

그러나 운영을 하다 보니

배포 이후 문제가 발생했다고 해서
재배포가 항상 문제 해결의 답은 아니라는 것을 알게 되었다.



재배포로 문제가 해결되는 경우

재배포로 문제가 해결되는 경우는 많겠지만

내가 최근 겪었던 그리고 자주 보게되었던 상황은 아래와 같다.


1. 파일 생성 오류

한 번은 배포 이후
정상적으로 동작하던 서비스가
갑자기 정상적으로 동작하지 않는 문제가 발생했다.

배포 직후 발생한 문제였기 때문에
처음에는 배포 과정에서 문제가 생겼을 가능성을 의심했다.


로그를 확인한 뒤
배포 과정에 문제가 있었을 가능성을 고려해
재배포를 진행했다.


재배포 이후
서비스는 다시 정상적으로 동작하기 시작했다.

문제가 해결된 뒤 원인을 확인해 보니
배포를 위해 WAR 파일을 생성하는 과정에서 발생한 오류가 원인이었다.


Java 기반 웹 서비스에서는
애플리케이션을 WAR(Web Application Archive) 형태로 패키징한 뒤
WAS(Web Application Server)에 배포한다.

WAR 파일은 애플리케이션 실행에 필요한

클래스 파일, 라이브러리 파일, 설정 파일, 정적 리소스 등을

하나의 패키지로 묶은 배포 단위이다.

이 과정은 일반적으로
빌드 도구(Maven, Gradle 등)를 통해 이루어지는데
빌드나 패키징 과정에서 오류가 발생하면
정상적인 애플리케이션이 생성되지 않을 수 있다.

그 결과 서버에는 정상적인 애플리케이션이 배포되지 않았고

서비스에서 문제가 발생하게 된 것이다.


이 경우에는
정상적으로 생성된 WAR 파일을 다시 배포하면서
문제가 해결되었다.


2. 서버 반영 오류

대부분 개발 환경에서는
하나의 서버로 서비스를 운영하는 경우가 많다.

하지만 운영 환경에서는
두 대 이상의 서버로 서비스를 구성하는 경우가 일반적이다.

내가 담당했던 서비스 중 하나도
WAS 서버 두 대로 운영되고 있었다.


정상적으로 WAR 파일을 배포한 이후
서비스 상태를 확인하던 중 이상한 점을 발견했다.

어떤 사용자는 정상적으로 서비스를 이용할 수 있었지만
또 다른 사용자는 서비스에서 오류가 발생되었다.


배포 직후 발생한 문제였기 때문에
재배포를 진행하기 전에
먼저 서버 로그를 확인했다.

확인 결과
한 서버에는 정상적으로 코드가 반영되어 있었지만
다른 서버에는 배포가 제대로 반영되지 않은 상태였다.


해당 서비스는 로드밸런서(Load Balancer) 를 통해
사용자의 요청이 서버로 전달되는 구조였다.

로드밸런서는 여러 서버에
사용자의 요청을 분산시키는 장치로
트래픽을 여러 서버에 나누어 처리함으로써
서비스의 성능과 안정성을 높이는 역할을 한다.

따라서 사용자의 요청은
두 서버 중 하나로 전달된다.

이 경우 한 서버에 문제가 발생하면

어떤 사용자는 정상적으로 서비스를 이용할 수 있지만
다른 사용자는 오류가 발생한 서버로 연결되면서
서비스 장애를 경험하게 된다.


이러한 상황은

여러 대의 서버로 구성된 분산 환경에서
종종 발생할 수 있다.

배포 과정에서

일부 서버에만 코드가 반영되거나

애플리케이션이 정상적으로 재시작되지 않거나

서버 간 파일이 동일하게 반영되지 않는 경우

같은 문제가 발생할 수 있기 때문이다.

이런 경우에는 재배포를 통해

모든 서버의 상태가 다시 맞춰지면서
문제가 해결되기도 한다.


그래서 운영 환경에서는

“코드가 배포되었는가” 뿐 아니라
모든 서버에 서비스가 동일하게 반영되었는지
확인하는 과정도 중요하다.



그러나 재배포가 항상 정답은 아니다

서비스 배포 이후 문제가 발생했을 때
재배포로 해결되는 경우도 있지만
반대로 재배포로 해결되지 않는 문제도 있다.


한 번은 배포 이후
서비스에서 데이터를 정상적으로 불러오지 못하는 문제가 발생했다.

같은 DB를 사용하는 다른 서비스에서는
문제가 발생하지 않았기 때문에
DB 문제라고 생각하지 않았다.

그래서 재배포를 하면
문제가 해결될 수 있는지 개발팀에 문의했다.

하지만 개발팀의 답변은 달랐다.

“재배포 문제는 아닌 것 같습니다. DB 수정이 필요합니다.”

결국 문제의 원인은

코드나 배포가 아니라 데이터 상태였다.


운영 환경에서는
코드가 정상적으로 배포되어 있더라도

데이터 상태, 환경 설정, 서버 구성 등과

같은 요소 때문에 문제가 발생할 수 있다.


그래서 나는
문제가 발생하면 먼저 이렇게 생각하게 되었다.

이 문제는

코드 문제인가, 데이터 문제인가, 환경 문제인가.

그리고 재배포는 배포 이후 발생한 문제를 해결할 수 있는

여러 방법 중 하나일 뿐이다라고.



운영을 하며 조금씩 알게 되는 것

처음에는
배포나 서버 구조 같은 기술적인 내용은
기획자가 깊이 알 필요는 없다고 생각했다.

하지만 운영을 하다 보니 생각이 조금씩 바뀌게 된다.


서비스에서 발생하는 문제는
기획, 개발, 운영이 따로 나뉘어 생기지 않는다.

같은 시스템 안에서 함께 발생한다.

그래서 기획자에게도
어느 정도의 기술적인 이해가 필요하다는 것을 느끼게된다.


그러나 어디까지나 기술적인 이해가 필요하다는 것이지

모든 기술을 개발자처럼 깊게 알아야 하는 것은 아니다.

최소한 문제가 어디에서 발생했는지,

어떤 질문을 해야 하는지

정도는 이해하고 있어야 한다.

그래야 운영에서 발생하는 문제를
조금 더 빠르게 이해하고
팀과 함께 해결해 나갈 수 있기 때문이다.

매거진의 이전글배포를 했는데 왜 어떤 사람만 문제가 생길까