Next.js 를 사용해야 할 이유

프로젝트 진행 중 새로운 상태 관리 라이브러리를 도입해야 하는 상황이다.
보통 서드파티 라이브러리 중 하나를 고를텐데. 이 때 보통 하는 것이 아래 사항들을 검토하는 것이다.
- 필요성: 직접 구현보다 라이브러리를 쓰는 게 명확히 이점이 있는가?
- 안정성: 최근까지 활발히 유지보수되고 있는가?
- 커뮤니티: 이슈 대응 속도와 커뮤니티 지원이 활발한가?
- API 안정성: 업데이트 시 Breaking Change 위험이 낮은가?
- 유지보수 용이성: 라이브러리 교체/제거가 쉽게 가능하도록 구조화했는가?
- 그 외 호환성, 번들 크기, 성능 영향 등.
검토 이유, 항목 별 우선순위는 상황마다 다르지만 근본적인 이유는 개발 조직이 이 라이브러리를 도입하여 얻는 실직적인 이득이 있는가? 이겠다.
그런데 유독 이런 조건을 빡빡하게 따지지 않는 경우가 있다. 바로 nextjs, angular와 같은 프론트엔드 프레임웍들이다.
보통 nextjs가 선택되는 이유
- react 기반이다
- ssr 을 쉽게 구현할 수 있다
- seo 최적화, 첫 페이지 로딩 속도 개선
- 간단한 백엔드 구현 가능 -> 서버리스 및 엣지
- 뛰어난 DX 및 생태계, 호스팅
- 유지보수 및 채용
- 최근 트렌드임
보통 위의 조건으로 nextjs 가 선택된다. 개발 조직 입장에서는 꽤 합리적인 조건이라고 생각할 수 있다.
누락된 검토 사항
어떤 프론트엔드 프레임웍을 선택하는가에 따라 구현가능한 기술, 구현이 어려운 기능, 지불해야하는 비용 등이 천차만별로 달라진다.
따라서 선택 조건에는 위 개발조직 입장에서의 항목 뿐만 아니라 이런 부분도 반영되어야 한다.
자본금을 관리하는 재무 부서, 제품 퀄리티를 최종적인 입장에서 챙겨야 하는 마케팅, 기획 부서의 요구사항도 반영할 수 있는가가 중요하다는 것이다.
사실 다른 부서들은 프론트엔드 개발팀에 이런 부분을 알고 요구할 수 없다. 거의 대부분은 그냥 믿고 맞기는 것이다.
고객은 본인이 뭘 원하는 지 본인도 모른다라는 말이 있지 않은가? 비슷한 맥락이라 볼 수 있다.
불필요한 서버비 지출
nextjs 는 nodejs를 실행할 수 있는 웹 서버가 필요하다. aws 기준으로 ec2 or lambda, alb 여기에 오토 스케일까지 고려할 경우 그 비용은 엄청 늘어난다.
반면 CSR 정적 호스팅은 어떤가. S3, CloudFront 사용료만 내면 되고 인스턴스같은 건 없다.
그럼 여기서 따져봐야 할 것은. 그 압도적인 비용 차이를 납득시킬만 한 가치를 제공할 수 있는가 이다.
최소 10배 이상의 서버비를 납부하며 얻은 서버 측 렌더링 혹은 그 부수적인 가능성을 통해 회사가 목표로 하는 임팩트를 만들거나, 그에 가까워질 수 있나?
잠깐 스켈레톤 보였다 내용이 천천히 나오는 것을 로딩 없이 보여주도록 변경한 것이. 저 위의 비용과 맞먹는 임팩트를 주는 건가?
추가로 로딩이 없어 지는것이 맞는가?
요구사항 구현의 어려움

nextjs 는 웹 앱 기획에서 거의 필수적으로 요구하는 페이지 이동 취소 기능을 공식적으로 제공하지 않고 있다.
trick 을 사용하면 가능한데. 이 경우 주소창의 경로와 보이는 페이지가 달라지는 문제가 발생할 수 있다.
보통 고맙게도 노운이슈 처리하여 개별 안내하거나 하는 등으로 넘어가는데, 한편으로는 안타깝기 그지 없다.
이 기능은 고객이 정보를 한창 입력하다 실수로 페이지를 벗어나버려 입력된 정보를 날리는 문제를 해결하기 위해 추가되는데. 상황에 따라 큰 문제가 될 수 있다.
입력값을 세션에 담아 주면 되지 않느냐란 의문이 있을 수 있는데, 그렇게 해서 해결이 되는 곳이 있고 아닌 곳이 있다.
그래서 어떻게 하라고
당연히 위의 내용은 구성원 혹은 구성 조직의 방향성에 따라 전혀 문제가 되지 않을 수 있다.
이런 부분들도 함께 고려하여 조직이나 회사에 기여하는것이 진정한 값어치를 하는 것이다.
nextjs 를 쓰지 말라는 이야기도 더더욱 아니다. 이왕 쓸것이라면 사용 방법과 주의사항, 문제가 될 수 있는 부분에 대한 대비를 충분히 해야 한 다는 것이다.
라우팅 경로 별 렌더링 전략을 달리 할 수 있는 것은 정말 멋진 기능이긴 하다. 멋진 기능이긴 하다.