본문 바로가기

Etc/개발 경험 공유

Python3.6 지원 종료 한달 전 실무에서는 어떻게 대응할까?

728x90
반응형

안녕하세요. 스타트업에서 Backend 개발자로 일을 하고 있는 김성민입니다.

 

오늘은 Python3.6 버전이 지원 종료 한 달 정도 남은 상태에서 실무에서 어떻게 대응하고 했는지에 대한 경험을 공유하고자 합니다.

(본 글은 회사 업무 중 진행했던 일이고 주니어 개발자로서 실무에서 처음으로 버전 업그레이드를 진행했던 경험이기 때문에 해당 방법이 정답은 아닐 수 있습니다.)

들어가며

Python3.6 버전은 2021년 12월 23일을 기점으로 지원 종료를 하여 현재로부터 약 한 달 정도 앞두고 있습니다.

현재 제가 재직중인 회사는 API 서버로 Node.js을 사용하고 있고, Node서버에서 Python으로 작성된 채점 및 산식 코드를 호출하여 사용자가 제출한 파일에 대해 채점을 처리하고 있습니다.

 

따라서 서버에서는 Node코드와 Python코드가 함께 돌아가는 구조이며, Python 3.6.8버전을 사용하여 채점을 진행하고 있습니다.

버전 업데이트 무조건 최신? 아니면 안전하게?

Python 3.6은 앞서 말했듯 올해 12월 23일자로 지원이 종료됩니다.

따라서 보안적 이슈가 발생 할 수도 있기 때문에 Python에 대한 버전 업데이트가 필요하였습니다.

 

하지만 실무에서 버전을 올리는 과정은 쉽지 않고 많은 테스트가 필요합니다.

또한 고려해야 하는 사항도 많이 있습니다.

버전 업데이트에 앞서 고려했던 사항은 다음과 같습니다.

1.  버전 업데이트 진행 시 현재 사용하고 있는 환경에 큰 변화가 필요한가?
2.  현재 사용하고 있는 코드가 정상적으로 사용 가능한가?
3.  코드상에서 사용하고 있는 라이브러리들이 정상적으로 돌아가는가?

이외에도 많은 고려 사항이 있었지만 3가지의 조건을 모두 만족하는 버전을 선택해야만 했으며, 버전 업데이트와 함께 사용하는 Python 라이브러리 또한 버전 업데이트를 진행하기로 하였습니다.

 

 

현재 2021년 11월 기준 Python은 3.10 버전까지 출시되어 있으며, 선택할 수 있는 버전은 3.7 버전부터3.10까지 다양했습니다.

하지만 3.10 버전의 경우 2021년 10월에 첫 릴리즈가 되었기 때문에 많은 이슈가 존재할 수 있을 수 있고, 리스트가 큰 도전이라고 생각하게 되어 3.10 버전은제외하였으며, 3.7버전 또한 2023년 6월 종료로 인해 버전 업데이트 이후 1년 뒤 다시 한번 버전 업데이트 이슈가 발생하여 2가지 버전은 제외하였습니다.

그렇다면 어떠한 버전을 선택해야 할까?

앞서 말했듯 서버는 Node.js를 사용하는 API 서버에서 Python 코드를 호출합니다.

 

Python 코드 호출  예시

 

이런 이야기를 들으면 개발자라면 다들 Python코드를 Node서버에서 분리하여야 하지 않을까?라는 생각을 하 실 수 있습니다.

네 맞습니다 저 역시도 입사하고 해당 코드를 보고 놀랐습니다. Node서버에서 Python코드가 돌아간다면 컴퓨터 자원을 많이 사용한다는 리스크가 있고, 해당 부분은 과금 비용과 연관되기 때문에 무조건 분리해야 한다고 생각하였습니다.

 

또한 이 부분은 개발팀 내부에서도 많은 동의를 하였고, Python 버전업과 관련하여도 많은 영향을 주었습니다. 차후 작성할 글이지만 현재는 Python코드를 AWS Lambda를 사용하여 분리하는 과정을 진행하고 있습니다.

 

그렇기 때문에 저희가 선택한 Python버전은 차후 분리될 코드를 생각하여 Lambda에서 사용하는 Python버전과 동일하게 진행해야겠다고 생각하였습니다.

 

그 결과 Python 3.8.11 버전으로업그레이드를 진행해야겠다 결정하게 되었고, 기존 사용 중인 3.6버전에서 3.8버전까지의 Releases log을 보며 버전 업그레이드를 준비하였습니다.

그 많은 라이브러리들... 어떻게 대응하지?

사실 Python버전 업그레이드 보단 사용하는 라이브러리들을 업데이트하는 게 가장 많은 시간과 고민을 하였습니다.

 

가장 먼저 현재 사용하고 있는 Python 코드들을 살펴보며 사용 중인 외부 라이브러리들을 조사하였고 약 30개 정도의 라이브러리가 사용되고 있음을 확인하였습니다.

 

해당 라이브러리들은 서비스 초기부터 사용해왔기 때문에 많게는 2.0 버전 이상의 업그레이드가 진행된 라이브러리들이 존재하였고, 오픈소스로 공개가 되어 있지만 2020년 8월부터 버전 릴리즈가 안 되는 라이브러리 또한 존재하였습니다.

 

어떠한 언어든 다 똑같겠지만 라이브러리의 경우 단독으로 사용되는 것이 아닌 외부 라이브러리를 참조하여 사용하는 라이브러리들이 굉장히 많이 있습니다.

 

특히, 저희가 사용하는 라이브러리들은 대부분 PandasNumpy를 가장 많이 사용하고 있으며, 그에 맞는 최적의 버전을 찾는 것이 큰 고민이었습니다.

 

또한 최소한의 중복 설치가 안되도록 하는 것이 큰 목표였으며, 현 서비스에 크게 무리가 없어야 한다는 점 또한 큰 고려 사항이었습니다.

라이브러리 버전 업데이트 과감해질까?

사실 30개의 라이브러리들의 Releases log를 보는 것은 많은 시간과 노력이 필요로 했고, 빠르게 서비스를 성장시키는 게 우선인 스타트업에서는 해당 부분에 많은 시간을 소요하기에는 다소 어려운 환경입니다.

 

따라서 과감하게 pip install 명령어를 사용하여 우리가 사용하는 라이브러리들을 설치해보고 현재 구현된 코드를 빠르게 하나하나 돌려보면서 정상적으로 작동되는지 테스트를 진행하기로 하였으며, 특정 문제가 발생하는 라이브러리들만 뽑아서 대응을 하자고 결정하여 진행하였습니다.

 

그 결과 다행히도 특별한 오류 없이 모든 코드가 정상 작동 되는 것을 확인하였고 약 1주일간 진행했던, Python 버전 업데이트 프로젝트는 특이사항 없이 완료 하게 되었습니다.

결론

신입 백엔드 개발자로 성장하면서 실무에서 지원 종료로 인한 언어 버전 업그레이드를 처음으로 진행하면서, 많은 것을 배우고 느끼게 된 과정이었습니다.

아직은 Lambda로 분리하는 과정을 진행하고 있지만, 현지 90% 정도 완성된 시점에서 100%가 완료되면 Lambda로 분리하게 된 경험 또한 작성해보도록 하겠습니다.

감사합니다.

728x90
반응형