회고

7. 짧지만 임팩트 있었던 Python 백엔드 개발기, 두 번째 프로젝트 회고

devsean 2025. 6. 4. 14:28

들어가며

첫 번째 프로젝트를 마치고 한 달쯤 있다가 투입되었다. 다른 프로젝트의 업무 지원을 나가 슬슬 적응될 무렵이었는데, 상황이 좋지 않다는 연락을 받고 들어갔다. 프로젝트 종료 한 달 남은 시점에서 운영 오픈까지 마치고 나왔다. 그간 관련 업무 논의가 제대로 이루어지지 않았던 탓에 틀만 갖추어져 있고 거의 새롭게 개발해야 하는 수준이었다. 이런 상황에 투입되는 것을 '불 끄러 들어간다'고 표현하곤 하는데, 딱 맞는 표현이었다. 육체적으로나 정신적으로나 힘들었지만, 돌이켜보면 짧은 시간안에 많은 것들을 배웠다. 시간이 충분하면 더 잘할 수 있었는데 그럴 수 없어 아쉬웠던 프로젝트였다.

 

이번 프로젝트에서는 MLOps의 구성 요소 중 하나인 피쳐 스토어의 백엔드 개발을 수행했다. Python + FastAPI를 사용했으며, 관련 기능들을 개발하고 필요한 기능들은 OpenAPI 클라이언트를 활용하여 SDK로 만들었다. 이전 프로젝트에서는 솔루션 커스터마이징 개발을 했던 반면, 이번에는 고객사의 의뢰를 받아 새로운 서비스를 만들어드렸다. 담당하고 있는 MLOps 솔루션과도 연관성이 있기에 기존 업무에서 시야를 넓힐 수 있었다.

 

언어는 원하는 것을 구현하기 위한 도구 

Python에는 익숙했지만, FastAPI 프레임워크 그리고 Python을 활용한 백엔드 개발은 이번이 처음이었다. 다행히 공식 문서가 잘 되어있고, 사용법도 어렵지 않아서 간단한 기능들을 구현해보니 금방 감을 잡을 수 있다. Python은 Java에 비해 가독성이 탁월하고, 코드 생산성이 훨씬 높다고 느꼈다. 재밌게 코딩할 수 있었다. 컴프리헨션 문법이나, 자료구조 특성을 활용한 간단한 중복 제거(list -> set), JSON 형식과 같은 dictionary 타입, 타입 힌트, 다중 상속 등 개발자의 자유도가 높다고 느꼈다.

 

백엔드 개발을 진행하면서 결국 언어는 원하는 것을 구현하기 위한 도구라는 사실을 알게 되었다. 언어나 프레임워크는 달라도, 기존에 Java + Spring 백엔드 개발을 했을 때와 동일한 흐름으로 진행되었다. 비즈니스 로직, 코드 가독성, 예외 처리 로직, 요청-응답 규격 등 생각해야 할 내용이 크게 다르지 않았다. 그런 흐름 위에서 Python의 특성을 잘 이해하고 적절하게 코드로 구현하는 것을 추가로 고민했을 뿐이었다.

 

Java든 Python이든 언어의 장/단점과 특성을 파악한 상태에서 프로젝트에 맞춰서 적절한 스택을 고르면 된다는 사실을 알게 되었다. 그래서 이번 프로젝트에서 Python을 왜 채택했는지 생각해보면, 데이터 기반 어플리케이션이라는 점이 가장 컸던 것 같다. 데이터 처리와 ML/DL 모델을 개발하는 데에 있어서는 Python이 표준이기 때문에, 백엔드 개발 스택을 통일하는 게 합리적인 선택이지 않았을까 싶다.

 

기본기의 중요성

항상 프로젝트를 하면 느끼는 것인데, 이번에도 알고리즘과 자료구조를 비롯한 CS 기본기의 중요성을 느낄 수 있었다. 기능 구현을 위해, SQL 구문을 분석하는 오픈소스(sqlglot)를 활용할 일이 있었다. 해당 오픈소스는 SQL 구문을 AST(추상 구문 트리) 형태로 분석해주는데, 이렇게 분석된 구문을 기반으로 작성된 SQL 구문에서 적절하게 필요한 요소들을 추출해야했다. SQL 구문은 단순 SELECT ~ FROM 문만 존재하지 않고, 여러 SELECT 문이 중첩된 형태(WITH 절, UNION 절, JOIN 절 등)로 들어오기 때문에 그런 케이스들을 고려할 필요가 있었다. 그래서 예제로 받은 쿼리문들을 AST로 파싱해서 분석해보고, 모든 SELECT 문을 추출하기 위해 DFS를 활용했다.

 

SSAFY에서 알고리즘과 자료구조를 배우고, 취업 준비를 위해 알고리즘 문제들을 많이 풀었던 경험이 도움이 되었다. 트리 구조와 완전 탐색에 대한 기본 지식이 있었으니까 문제를 해결할 수 있었던 것 같다. 프로젝트 경험이 부족했을 때에는 막연히 '기본기가 중요하다'고 생각할 뿐이었는데 이렇게 직접 부딪혀보니까 더 잘 와닿았다. 어떤 기술을 '왜' 도입했는지에 대한 의문을 해결하고, 장애 상황을 해결하고, 성능을 개선할 때에 결국 탄탄한 기본기와 응용력이 중요하다. 앞으로도 이 점을 염두에 두고 공부해나가고자 한다.

 

아쉬웠던 프로젝트

충분한 기간을 가지고 논의했다면 더 나은 결과물을 냈을텐데, 주어진 기간이 짧아 아쉬웠던 프로젝트였다. 다음 프로젝트에서는 좀 더 충분한 기간을 가지고, 초기 단계부터 투입되어 개발하고 싶다. 그래도 막바지에 들어와서, 어려운 상황을 극복하고 마무리했다는 점에서 보람이 있었던 프로젝트였다.

 

관련 포스팅

6. 다양한 기술을 접할 수 있었던, 첫 프로젝트 회고

Feature Store란?