풀스택 개발자
안녕하세요, 풀스택 개발자에 대해 궁금한 점이 있습니다.
사실 저는 대부분의 개발자 분들이 그렇듯이 한국에서 통용되는 풀스택 개발자라는 단어에 회의감을 가지고 있습니다.
어감 자체는 거창하지만, 사실 실속 없는 경우가 대부분이며 개발을 모르는 외부인(특히 경영진)들에 의해 오용되는 경우가 많으니까요.
그런데 문득 저 스스로 풀스택 개발자인가 하는 궁금증이 들어서 오랜만에 okky 에 들어와 글을 쓰게 되었습니다.
저는 개발일을 5년정도 해왔는데, 스타트업 근무나 제가 창업을 하면서 개발한 경험이 대부분입니다.
이미 이 대목에서 직감하실텐데 저는 그리 실력이 좋은 개발자는 아닐 것입니다. 그냥 여러 개발 경험을 두루 가지고 있는 정도이고
소위 네카라쿠배 개발자나 깊이 있는 실력을 가진 개발자 입장에서 봤을 때 전 우물 안의 개구리라고 할 수도 있겠습니다.
그런데 굳이 이 글을 쓰는 것은 제 개발 경력이 의미 있는 것이었나, 하는 궁금증이 들었기 때문입니다.
그리고 풀스택 개발자에 대한 많은 비판 의견을 접하면서, 저 역시 그러한 비판의 대상에 속하는지 궁금하기도 했습니다.
결론은 후술할 저의 개발 척도 현황이 풀스택 개발자라고 칭할 수 있냐, 없냐가 궁금했습니다.
저의 개발 관련 능력 현황은 다음과 같습니다.
웹 환경의 client-side
html/js/css 를 이용하여 퍼블리싱을 할 수 있습니다. 브라우저의 환경과 프로젝트의 자바스크립트 표준안 환경을 고려하여 개발하는 것은 가능합니다. 기본적인 Dom tree 구조나 렌더링에 대해 이해하고 있지만 브라우저의 자세한 동작 원리에 대한 이해는 부족합니다.
React, Vue 와 같은 라이브러리를 사용하여 CSR 환경의 웹사이트를 개발할 수 있습니다. Vue 에 대한 이해도는 낮은 수준입니다. React 를 사용할 땐 리액트가 생성하는 가상 돔에 대해 대략적으로 이해하고 있으며, 웹사이트의 성능을 모니터링 하고 일정 수준의 렌더링 최적화를 수행할 수 있습니다. Context API 에 대해 이해하고 응용하여 활용할 수 있습니다. 상황에 따라서는 Redux 나 zustand 같은 상태관리 라이브러리를 주어진 목적과 범위에 맞게 활용할 수 있습니다.
Next 프레임워크를 사용해서 웹사이트를 개발할 수 있습니다. node 를 함께 사용하여 SSR 환경의 웹사이트를 개발할 수 있습니다. React 만 쓸 때도 마찬가지지만, 외부 API 호출 및 응답 데이터 관리를 최적화 할 수 있습니다. (예전에는 외부 라이브러리인 react-query를 사용하기도 했고 요즘은 주로 SWR 을 사용합니다.)
웹사이트의 SEO 최적화를 수행할 수 있습니다. (기본적인 SEO 지식이 있습니다.)
웬만한 UI/UX 구현은 가능합니다. 기본적인 요즘 대부분의 웹(앱) 서비스의 client side 는 구현 가능하며, 개발할 일은 거의 없지만 3D 렌더링이나 복잡한 인터렉션의 구현이 가능합니다. (사실 chat gpt 시대에 의미 없다고 생각하긴 합니다)
npm packiging 을 통해 모듈 분리가 가능합니다.
웹 어셈블리에 대한 이해도는 없습니다. 웹 어셈블리를 사용한 구현은 불가능합니다.
앱 환경의 client-side
kotlin Android, swift iOS 를 사용해 앱 구현 자체는 가능합니다. 기술적인 이해도는 낮습니다.
React Native 를 사용한 하이브리드 앱 개발이 가능합니다. 필요시 Native Bridge 를 통한 커스텀 구현이 가능합니다.
요즘은 React 웹페이지를 만들고, RN 웹뷰로 포팅하여 웹뷰앱 방향으로 많이 작업을 하고 있습니다. 아무리 code push 가 있어도, 기술적인 요구사항 수준이 높지 않은 서비스는 웹뷰앱의 업데이트 및 테스팅이 더 원활하기 때문입니다.
웹뷰앱의 고질적인 문제 (ios/android 플랫폼에 따른 소프트 키보드 동작 문제, 웹뷰를 사용했을 때 보안의 이유로 종종 구글 로그인 등 third-party 기능이 막히는 문제, deeplinking - 외부 앱에서 돌아올때 앱이 아닌 브라우저에서의 웹사이트로 돌아가는 문제 등..)가 있습니다만, 나름대로의 해결책(우회)은 구비해둔 상태입니다. 하지만 말그대로 임시방편일 뿐입니다.
Flutter 를 활용한 앱 개발이 가능합니다. 가장 최근에 진행했던 앱 프로젝트를 flutter 로 진행했으며, 숙련도는 높지 않습니다.
server-side
python fast-api, typescript node 를 사용한 실서비스 개발 및 유지보수 경험이 있습니다. (fast-api 는 기존 flask 로 되어있던 것을 리팩토링했었고, MAU 5000명 정도 되는 서비스였습니다. node 는 MAU 2만정도 되는 서비스였습니다.)
Spring boot 프레임워크를 사용한 서버 개발을 주력으로 하며, 혼자 개발할 때엔 kotlin을 사용하고 팀 프로젝트에서는 팀원들 성향에 맞게 java 나 kotlin 을 사용합니다. kotlin에서 부분적으로 monad 에 기반한 함수형 패러다임에 대한 이해도가 있습니다.
Spring 의 AOP 개념을 이해하고 있으며 필요에 따라 커스텀 Aspect 모듈을 개발하여 활용할 수 있습니다.
Spring Security 를 '적절하게' 사용할 수 있습니다.
auth server, resource server 기반의 인증 처리 전략을 수립할 수 있습니다.
spring security 의 각종 filter, interceptor 를 커스터마이징 하고, 확장 가능한 구조를 설계할 수 있습니다.
멀티 모듈 패키징에 대한 이해가 있으며 일정 규모 이상의 프로젝트에서 적극 도입하는 편입니다.
일정 수준의 트래픽 관리 및 부하 분산에 대한 이해도가 있습니다. (현X카드와 제휴해서 현카 서버와 자사 서버측 연동 작업을 리딩하고 모니터링한 경험이 있습니다.)
JPA 를 '적절하게' 사용할 수 있습니다. Mybatis 활용 경험은 거의 없습니다.
쿼리 최적화를 수행할 수 있습니다. RDB 에 대한 기본적인 이해도가 있습니다. 상황에 따라 custom dialect 를 구성할 수 있습니다.
Criteria API 를 이해하고 복잡한 쿼리 처리를 코드 레벨로서 처리할 수 있습니다.
트랜잭션 관리에 대한 이해도가 있습니다.
분산 환경에서의 데이터 정합성 및 무결성 보존 전략을 수립할 수 있습니다.
성능 최적화를 수행할 수 있습니다. 트래픽에 따라 이벤트 기반 CQRS 환경을 의사결정하고 구축할 수 있습니다. 메시징 시스템(Redis, kafka) 에 대한 기본적인 이해도가 있습니다.
테스팅에 대한 이해도가 중하 입니다. 기본적인 TDD 방식으로 프로젝트를 진행할 수 있으나, mock 의 활용 정도나 테스팅 커버리지에 대해 명확한 의사 결정이 어렵습니다.
모니터링 툴에 대한 이해도가 낮습니다. Datadog 이나 Sentry, Newrelic 을 연동해 지표를 확인할 수 있으나 깊이 있게 사용하지 못합니다.
dev ops
Docker 에 대한 이해도가 있습니다.
빌드 캐싱 전략을 수립할 수 있습니다.
이미지 용량 최적화를 수행할 수 있습니다. 예를 들면 spring 프로젝트를 도커로 빌드할 때, 빌드 결과물 (jar 등)의 핵심 실행 파일들만을 추출하여 실제 이미지 구성 시 해당 파일만을 포함하도록 하는 등의 작업을 수행할 수 있습니다.
도커를 활용한 기본적인 배포 파이프라인을 구축할 수 있습니다.
CPU 아키텍처에 대한 이해도가 낮습니다.
최근에는, 개인 토이 프로젝트를 github action 을 사용해 ec2 로 Docker 이미지를 배포하는 과정을 자동화 하였는데, EC2는 t4g.micro 인스턴스를 사용했습니다(ARM64). 이때 빌드 환경을 github action러너 ubuntu 환경으로 설정하였는데(AMD64), CPU 아키텍처가 달라서 docker build 시 qemu 를 사용한 multi-platform build 가 이루어졌습니다. CPU 집약적 환경에서 빌드 시간이 7배까지 증가하였습니다. 따라서 Self-hosted 환경으로 빌드 환경을 바꾸었습니다.
AWS 배포 및 환경 설정 (네트워크, 배포 파이프라인, IAM 설정 등) 을 코드로 관리할 수 있습니다. 다만 기술 자체에 대한 이해도가 낮습니다.
Kubernetes 에 대한 이해도가 낮습니다. 단순히 클러스터를 구성하고, pod 과 서비스 등을 구성 후 k9s 로 관리한 경험은 있으나, 기술 자체에 대한 이해도가 낮습니다.
전체적으로 인프라에 대한 숙련도는 낮습니다.
생각나는대로 쓰다보니 글이 너무 길어졌는데, 사실 제 생각은 '이정도면 어느 한 분야로 깊이있지는 않아도, 적어도 풀스택 개발자 비판글에 등장하는 노가다 잡부 느낌은 아니지 않나?' 입니다.
물론 위에 서술한 내용은 표면적이고, 저의 글솜씨가 미숙하여 판단의 근거가 되기엔 내용 자체가 부실할 수 있다는 생각은 듭니다.
또 제가 자만함의 언덕 위에 있는 것 같기도 합니다.
사실 그리 심각하게 여쭤볼 내용은 아니지만, 궁금증에 글이 너무 길어진 것 같아 죄송합니다.
만약 여기까지 읽어준 분이 계시다면 정말 감사합니다..