반응형
그니_
삽질탐방기
그니_
  • 분류 전체보기 (24)
    • 개발 (15)
    • ETC (1)
    • 트러블슈팅 & 삽질기록 (7)
    • 성능개선 (1)

인기 글

최근 글

최근 댓글

태그

  • springboot
  • 마이크로소프트 ai tour
  • spring log
  • chatgpt 기록 삭제
  • chatgpt 확장 프로그램
  • chatgpt 히스토리 삭제
  • Spring
  • java
  • timeunit
  • spring docker
  • chatgpt 채팅 삭제
  • Database
  • easyrandom
  • 네트워크
  • chatgpt 정리
  • db
  • index
  • chatgpt 확장 추천
  • spring docker compose
  • GPT 플러그인
hELLO · Designed By 정상우.
그니_

삽질탐방기

Apache HTTPD 버전 업그레이드 중 MPM 이슈와 해결 과정
트러블슈팅 & 삽질기록

Apache HTTPD 버전 업그레이드 중 MPM 이슈와 해결 과정

2025. 7. 20. 23:02
반응형

최근 회사에서 보안 취약점 점검 결과, Apache HTTPD 버전 업그레이드를 진행해야 했다. 기존에 사용하던 버전은 2.4.5x였고, 2025년 초 기준으로 2.4.6x 버전으로 올려야 하는 과제가 주어졌다. 사내 환경은 httpd, Nginx, Tomcat 등등 이외에도 다양한 웹/WAS 서버로 구성되어 있는데, 서비스 영향도를 고려해 영향도가 적은 서버부터 업그레이드를 시작했다.

기존엔 nginx를 주로 쓰다보니 httpd 버전 업그레이드는 처음 해보는 작업이었다. 게다가 금융권 폐쇄망의 온프레미스 환경이라 설정 및 배포에 제약이 많았다.

평소 Docker로 편하게 작업하던 터라, 사전에 준비된 설치 파일을 하나하나 업로드 후 빌드해야 하는 상황이 좀 아쉬웠다. 폐쇄망이라 외부 레포지토리 접근도 안 되고, 모든 의존성을 미리 준비해야 하니 정신없었다.

이슈 발생: MPM 모듈 문제

업그레이드를 위해 소스 파일을 다운로드하고, 아래와 같은 configure 명령어로 빌드를 진행 후 설치를 진행했다. (참고로, 이 설정은 실제 환경과 다르며, 오류 상황을 재현하기 위해 임의로 구성한 것이다.)

./configure --prefix=/home/web/httpd \
            --enable-so \
            --enable-ssl \
            --with-included-apr \
            --enable-mpms-shared=all
            
            
make && make install

 

그런데 서버가 시작되지 않고 아래와 같은 에러 로그가 떴다.

AH00534: httpd: Configuration error: No MPM loaded.

로그를 보니 MPM(Module Process Model) 모듈을 로드하지 못했다는 메시지였다. Apache HTTPD는 요청 처리 방식을 결정하는 MPM 모듈을 필수로 로드해야 하는데, 이게 제대로 설정되지 않은 게 문제였다.

원인 파악

Apache HTTPD는 MPM을 통해 프로세스와 스레드 처리 방식을 정의한다. 주요 MPM은 prefork, worker, event 세 가지로, 각각의 특징은 아래 표와 같다.

prefork 프로세스 기반, 안정성과 CGI 호환성이 높지만 성능은 상대적으로 느림
worker 스레드 기반, 메모리 효율이 좋고 고성능을 제공
event 최신 방식, 비동기 Keep-Alive를 지원해 성능과 확장성이 뛰어남

 

우리 환경은 성능 최적화를 위해 event MPM을 주로 사용하고 있었다. 그런데 --enable-mpms-shared=all 옵션으로 모든 MPM을 공유 모듈로 빌드했음에도, httpd.conf 파일에서 어떤 MPM도 로드되지 않은 상태였다. 확인해보니 prefork, worker, event 모듈이 모두 주석 처리되어 있어 서버가 MPM을 선택하지 못한 상황이었다.

해결 방법

해결법은 생각보다(?) 간단했다. httpd.conf 파일에서 event MPM 모듈을 명시적으로 로드하도록 설정하면 됐다. 아래는 해결 과정이다.

 

1. httpd.conf 파일을 열어 MPM 관련 설정을 확인한다.

 

2. event MPM 모듈을 로드하도록 아래 줄을 추가하거나, 주석 처리된 부분의 주석을 해제한다.

LoadModule mpm_event_module modules/mod_mpm_event.so

 

3. 다른 MPM 모듈(prefork, worker)은 충돌 방지를 위해 주석 처리하거나 제거한다.

#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so

 

4. 설정을 저장한 뒤 서버를 재시작한다.

/home/web/httpd/bin/httpd -k restart

 

이렇게 하니 서버가 정상적으로 시작됐다! 

 

배운 점

이번 이슈를 통해 몇 가지 교훈을 얻었다.

  1. MPM 설정 점검 필수: httpd.conf에서 MPM 모듈을 명시적으로 로드하지 않으면 이런 에러가 발생한다. 빌드 옵션과 설정 파일을 꼼꼼히 확인해야 한다.
  2. 폐쇄망의 고충: 온프레미스 폐쇄망 환경에서는 설치 파일과 의존성을 미리 준비하는 게 중요하다.
  3. 로그: 에러 로그는 문제의 원인을 찾는 데 최고의 단서다. 메시지를 보고 바로 MPM 설정을 점검할 수 있었다.

앞으로 비슷한 작업을 할 때는 빌드 옵션과 설정 파일을 더 꼼꼼히 확인해야겠다는 생각이 든다. 이 글을 읽는 분들도 MPM 관련 에러가 발생한다면, httpd.conf에서 모듈 로드 설정을 먼저 확인해보시길 추천한다!

반응형
저작자표시 (새창열림)

'트러블슈팅 & 삽질기록' 카테고리의 다른 글

엘라스틱서치 index_closed_exception 트러블슈팅  (0) 2026.03.29
Spring Boot 3.4.3에서 Auto-configuration이 동작하지 않는 문제 해결  (0) 2025.03.09
IntelliJ 특정 버전 JDK 21 사용 시 컴파일 오류  (2) 2025.02.22
[spring] gradle build fail  (0) 2023.10.18
[mac] 문제가 발생했기 때문에 컴퓨터를 종료했습니다. 경고창 뜨는 경우 대처법  (2) 2023.09.07
    '트러블슈팅 & 삽질기록' 카테고리의 다른 글
    • 엘라스틱서치 index_closed_exception 트러블슈팅
    • Spring Boot 3.4.3에서 Auto-configuration이 동작하지 않는 문제 해결
    • IntelliJ 특정 버전 JDK 21 사용 시 컴파일 오류
    • [spring] gradle build fail
    그니_
    그니_
    머리속에서만 존재하는 내용을 글로 정리

    티스토리툴바