필자는 프로젝트 매니저로써 "첫 번째 OO홈페이지" 프로젝트를 오픈하며 발생했던 이슈들, 이슈 해결방법 들에 대해 공유해보고자 한다. 분명 기획자로 회사에 입사했는데 PM일을 하게 될 줄이야.. 현재 다니고 있는 회사에서 다양한 일을 경험해보는 것 같다.
문제가 뭐였는데? (feat. 1 클라우드 및 인프라 환경 설정 편)
(1). 단순한 유지보수 사업에서 서버 이관까지 이어진 ing..
💭 🙋♀️ 서버를 사용하려면 매년 계약해야 한다구요?@!
때는 바야흐로 기능개선 및 고도화 사업을 마치고 연간 운영사업을 논의하던 회의에서..
👩 (나) : "서버업체는 어디와 계약되어있으신가요? "
🙋♀️ " 서버는 한번 계약을 진행하면 계속해서 사용할 수 있는 것 아니었나요?!!" 😭
👩(나) : "?!!!!<!!?!?!<네? 매달 일정 금액을 지불하면서 해당 OTT, 클라우드 서비스와 마찬가지로 서버도 연간 단위로 계약을 진행하셔야 합니다."
이때부터 국내 클라우드 3사에 견적을 요청했고, 견적요청하는 방법부터 인프라 환경에 대해 공부할 수 있었다..!
해당 내용은 아래 포스팅에서 확인 할 수 있다. 😊👇
무사히 클라우드 계약이 진행될 수 있도록 도움을 드리며 마무리된 문제였다. ( 해결까지 3달이나 걸렸던 문제였다. )
(2). 물리서버 한대의 웹호스팅환경에서 클라우드 이중화 환경으로 이관했을때 발생한 문제
💭 서버 내의 애플리케이션 설치 버전으로 종속성 이슈
이번 프로젝트는 이전업체가 구축한 소스와 파일을 그대로 가지고 와서 신규 기능 개선 및 고도화를 진행했기 때문에, 개발환경 또한 이전 업체에서 사용한 환경으로 세팅하는 것이 필수였다. 하지만, 너무 예전 버전을 사용하고 있어 클라우드 환경에서 애플리케이션을 설치 시 '종속성 이슈'가 발생했다고 한다.
👉 설치를 요청한 개발 환경 버전
Apache 1.3.37
PHP 5.3.13
DB 5.3
(아파치의 경우 2006년도에 지원가능했던 버전으로, 버그 및 기술 지원이 끝난 상태였다. )
하지만, PHP 개발 언어의 버전을 업그레이드 하게 되면 개발 소스에 엄청난 오류를 범하게 될 것이고.. 해당 오류를 해결하기 위해서는 엄청난 고통이 동반되는 것을 경험해본 사수님께서, 개발환경의 경우는 '무.조.건' 동일하게 가야한다라고 말씀해주셨다.
클라우드 업체에서 결국 요청 드린 버전에 맞추어 환경을 세팅해주셨다.
💭 서버 설치는 해주셨는데.. '서버 환경 설정은 모두 개발사에서 진행해주셔야 합니다.'
클라우드 유지운영 협력업체에서는 인프라 환경 및 보안, 네트워크, 통신문제에 관해서만 기술지원이 가능하다고 한다.
그렇기 때문에 개발환경에 필요한 애플리케이션을 버전에 맞추어 설치해주는 작업까지만 지원을 해주셨고, 이외에
DB 권한 설정, DB 서브계정 설정, DB 연결, 웹서버 부팅 시 아파치 실행되도록 설정 등 기존 환경세팅에 맞추어 설정하는 부분이 필요했고, 웹호스팅팀에 도움을 요청하여 해결 할 수 있었다.
💭 동일한 환경설정, 세팅의 필요
web1 서버와 web2서버의 폴더 경로를 도메인 명으로 설정했는데, web2 서버의 폴더 경로가 동일하게 설정되지 않아 로드밸런서가 web2 서버를 찾지 못한다고 하셨다.
home/ tXXXXXX.co.kr → or.kr 로 서버 두대의 폴더경로를 동일하게 설정하여 해결할 수 있었다.
💭 소스코드 배포시 동기화 문제
web1 서버와 web2 서버 내에 동일한 소스코드가 배포, 반영되어야 모든 사용자들이 화면과 기능을 동일하게 사용할 수 있다. 그렇게 되면, 개발자는 소스코드를 수정하고 반영할 때 서버 두대에 각각 반영해야한다는 번거로움과, 다르게 반영할 수 있는 문제를 발견했다.
이중화된 서버에 동일한 소스코드가 배포되기 위해서는 배포 자체를 git과 같은 형상관리 툴로 진행해야 한다고 하셨다. 해당 방법으로 문제를 해결 할 수 있었다.
💭 웹서버 이중화로 인한 세션관리 문제
사용자 페이지 내에서는 회원 로그인 기능이 없어서 발견하지 못했던 문제였다. 관리자 페이지에서 로그인하여 업무를 보던 중 일정 시간이 지나거나 세션을 가지고 있지 않은 서버로 자동인입되는 경우, 세션이 끊기는 문제였다.
세션을 관리하기 위해서는 어떻게 해야하는지 찾아보던 중 세가지 방법을 발견했다.
첫 번째 방법은 개발단에서 로그인 여부를 DB로 저장, 후에 DB를 읽어서 동기화 처리를 진행하는 방법( 개발 시간 소요💦..)
두 번째 방법은 WAS 단에서 설정하여 클러스터링 하는 방법 (PHP 환경으로 WAS 서버가 없는 우리는 ❌ )
세 번째 방법은 서버 이중화를 위해 세팅되어있는 LB(로드밸런서)에 Sticky session을 설정하여 고정 세션을 사용할 수 있도록 해주는 방법 (외부 협력업체에서 진행해주실 수 있는 빠른 방법 👌)
로드밸런서의 스티키 세션설정으로 고정된 세션을 유지하도록 설정함으로써 해결했다.
💭 서버 이중화 환경에서 스토리지를 Block Volume으로 구성한 문제
맨 처음 클라우드 환경을 구성·설계할 때, 사용자 페이지에서 사진 및 첨부파일 등록이 많을 것으로 예상된다는 내용을 포함하여 견적을 요청했다. 클라우드 계약 미팅에서 '파일을 저장할 스토리지 구성'에 대해 여쭤보았을때 DB 서버에 BlockVolume (서버 내에 저장 공간)으로 구성해주시겠다는 것을 NAS로 생각함으로써 의사소통에 오해가 생겼었다..^^;;
BlockVolume과 NAS의 역할 및 저장되는 data
BlockVolume : Web/DB 서버 내에 할당되어 붙어있는 개별 저장장치
✏ 웹서버 Block Volume : 소스코드, 메모리 등이 저장된다.
✏ DB 서버 Block Volume : 사용자들이 입력, 저장한 데이터와 로그가 저장된다. 첨부파일을 저장할 수 없다.
✏ NAS : 별도의 개별 저장장치로, 첨부파일등이 저장된다.
이부분은 클라우드 환경을 설정하는 과정에서 한번 더 짚고 넘어간 문제였다.
환경세팅을 도와주신 엔지니어분께서 보통 이중화 환경에서는 두개의 웹서버가 NAS 저장장치를 바라보게 환경설정을 진행하는데 계약이 Block Volume으로 잡혀있다. NAS를 구성하려면 별도의 계약이 필요해 보인다. 라고 말씀하셨다. 하지만 계약의 주체가 '클라이언트'이었기에 금액적인 부분이 추가되는 문제로 일단은 패스 했다.
"첨부파일이 저장되지 않는다."
개발이 완료되어 개발서버에서 테스트를 진행하던 도중, 다른 text 데이터들은 모두 저장되지만 첨부파일과 같은 데이터들이 저장되지 않는 문제를 발견했다. 처음에는 서버 두대가 첨부파일을 공유하여 받지 못해 생기는 문제인 줄 알았는데,
서버 이중화 환경에서 두개의 서버가 NAS를 바라보도록 설정되어있지 않아 생기는 문제였다.
[해결]
클라우드 업체측에 해당 상황을 공유하고, DB 스토리지의 800GB 를 NAS로 구성하도록 변경이 가능한지 문의드렸다.
다행히도 가능하다고 하셨고, 금방 환경설정을 진행해주셔서 빠르게 문제를 해결 할 수 있었다.
다음 포스팅으로 "문제가 뭐였는데? (feat. 2 개발 이슈 편)" 으로 돌아오겠다..!
엄청나게 머리 아픈 일들을 좌르르륵 적다보니 그만큼 성장한 것 같아서 뿌듯하기도 하면서
그 간 있었던 일들이 주마등처럼 지나갔다. 경험한 만큼 성장하는 것 같다. 값진 시간이었다고 할 수 있다.