개발자

Next.js 사용시 Spring 을 혼용해서 사용하는 경우 질문하고싶어요.

2023년 06월 20일조회 9,079

안녕하세요. spring (backend) + extjs (front) 로 개발을 하다가, 요즘 nextjs 공부를 하고 있는데요 아직 개념이 잘 안 잡혀서 궁금해서 질문 드립니다. nextjs 가 fullstack framework 로 알고있고, next에서도 backend 기능이 가능하던데요 13버전 기준 app/경로/route.js 에 GET/POST 등등 사용해서 서버 처리가 가능하던데 혹시 위처럼 사용하지 않고, spring 백엔드로 axios를 사용해서 처리하는 경우와 어떤 차이점이 있나요? 비즈니스 로직의 처리 주체가 next인지 spring인지의 차이만 있는것인지.. 혹시 next + spring 을 사용하게 되면 얻는 "이점" 이 무엇인가요? 혼용해서 사용할때 얻을수 있는 장점이 궁금합니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

인기 답변

동호님의 프로필 사진

재미있는 질문이네요! 요즘 풀스택 프레임워크들이 많아지면서 자주 받는 질문이기도 합니다. 질문해주신 부분을 되짚어보았을 때, 상황과 개발 환경, 팀의 현 위치 등등 다양한 점을 고려해보면 Next.js만 사용하는 경우와 Spring을 혼용해 사용하는 경우 모두 아주 큰 장점으로 적용될 수 있습니다. 두 프레임워크의 경우 특화된 부분이 매우 다릅니다. 우선적으로 Spring도 풀스택 프레임워크라는것. 알고 계신가요? Spring은 백엔드 프레임워크가 아닌, Web프레임워크입니다. 목적성 자체가 java기반 서버페이지인 JSP를 사용했을 때 더 생산성을 올리기 위해 만들어진 프레임워크에요 ㅎㅎ 스프링이 만들어졌을 당시, 서버 랜더링 페이지가 아주 유행하던 시절이었습니다. 가장 큰 규모와 커뮤니티를 보유했던 PHP Java EE(Enterprise Edition) 를 내세워 엔터프라이즈 생산성에 집중한 JSP .Net Core기반으로 높은 호환성과 생산성을 자랑했던 ASP 이 세 개의 서버페이지들은 당시 웹 서비스를 군림했었습니다. 다만, 사용자의 컴퓨터가 점점 발달하면서(하드웨어의 발달), 일반 사용자들도 쉽게 성능이 좋은 페이지를 랜더링 할 수 있게 됨에 따라, 개발자들은 점점 서버 비용을 줄이고, 최적화를 하는 방향으로 SSR(Server Side Rendering)에서 CSR(Client Side Rendering)으로 옮겨가게 되죠. 그렇게 Spring에서는 Boot를 통한 RestFramework를, .Net에선 ASP Core를 통한 RestFramework를, PHP는 이 시점에서 몰락하게 되었습니다. (물론 현재는 다른 프로젝트 팀원이 해당 프로젝트를 인계하면서 php8버전으로 유지중입니다 :) 그렇게 프론트에서는 jQuery와 html5 + js를 통한 DOM컨트롤을 통해 CSR이 발달하게 되죠. 이 때 Angular가 등장하며, 현재 시점의 지향성을 가진 프론트 개발의 서막이 열렸습니다. React, Vue등등.. 여러 라이브러리와 프레임워크가 등장하며 한동안 End개발자들은 생산성을 위해 둘로 나뉘어 발전해왔어요. 그런데, 발전하다보니 발전하는 부분이 전보다 더뎌지기 시작했습니다. 게다가 개발자가 비하급수적으로 늘다보니, 빠르게 만들 수 있는 ‘생산성’에 다시금 집중하게 되었어요. 회사는 다시금 생산성을 올리기 위해 풀스택 프레임워크를 활용해 ‘빠른’ mvp개발에 집중하기 시작했습니다. 이 때, 백엔드 개발자가 프론트 디자인 프레임워크를 공부하는 오버헤드보다, 프론트 개발자가 백엔드 아키텍처를 가볍게 공부하는 방향성이 조금더 쉽고 빠르다는 점이 통계로 나타났는데요, 이를 통해 Next.js같은 프레임워크가 대중적으로 많이 드러나게 되었습니다. 원래대로라면 Spring 하나만으로도 다 가능한데 말이죠! 이야기가 돌아온 것 같지만, 앞으로 설명하기 위해 이런 역사가 있었다는 점을 설명하면 더 좋을 것 같아 적었습니다. 결과적으로 정리 해보자면, 생산성을 집중하여 빠른 mvp개발이 필요하면 Next.js만 단독으로 활용하는 것이 가장 효율이 좋고 장점이 가득합니다. 반대로, Spring과 같이 ’분산처리‘나 ’동시성 제어‘ 등, 멱등성으로 많이 발전해온 부분의 장점을 살려 ‘대규모 트래픽’이나 안정성을 살리기 위해서는 Spring을 혼용해야 합니다. 아직은 Next하나만으로는 백엔드 프레임워크를 완벽히 대체하기는 어려워요. Next는 페이지 자체를 Server side rendering을 집중하기 위해 시작된 프로젝트이며 13버전의 라우팅을 통해 서버로 데이터를 받은 뒤, 서버코드에서 Spring으로 쏘는 방식을 통해 CSRF, XSR, CORS과 같은 여러 체크섬 보안들도 강화할 수 있죠. 더 담아 설명하자면, 둘이 혼용할 땐 Axios를 Spring이 아닌 Next로 쏩니다. Next router에서 해당 메소드를 통해 요청이 들어오면, 서버사이드에서 그대로 Spring으로 데이터를 바로 보냅니다. 이 과정에서 데이터를 가공해 서버로 보낼 수 있고, 혹은 그냥 프록시만 할 수 있습니다. 프론트만 봤을 땐 데이터를 무작정 던지기만 해도 되며, 같은 next프로젝트에 참여한 서버사이드 담당 개발자가 데이터를 정규화 한 뒤 Spring으로 보내죠. 아주 이상적이고 아름다운 그림입니다! 안전하고, 생산성있고(넥스트 서버사이드에서 데이터를 정규화 가공하여 보낼 수 있음), 보안이 강력하죠!(서버 주소가 노출되지 않음. 원본요청 Origin을 신경 쓸 필요가 없음) 그렇기에 규모가 큰 프로젝트는 여러 백엔드 프레임워크를 혼용합니다. Spring뿐만 아니라 Nest(node.js 백엔드 프레임워크) django(python 백엔드 프레임워크), Ruby on rails(ruby), Go(go)등등 세상에는 분산처리와 마이크로 서비스를 잘 관리할 수준높은 프레임워크가 매우 많습니다! Next는 아직 비교할 수 없을 수준이죠. 백엔드로도 쓰려면 앞으로 많이 노력해야 할 수준입니다. 물론 Next의 백엔드가 부실한 편은 아닙니다만, 특화된 부분이 다르니 서로 사용하는 부분이 다를 뿐입니다. 저는 간단한 mvp나 사이드 프로젝트라면 Spring이 아닌 Next나 SvelteKit(svelte로 만들어진 현존 최적화 킹 풀스택 프레임워크입니다. Next와 비슷하며, 백엔드는 역시나 비교적 떨어집니다 :)을 사용할 것 같네요 :) 적다보니 답변이 매우 길어졌네요... 꾸준히 그런 고민을 가져보시면서 자기개발 하길 응원합니다! 저는 요약하고 이만 마치겠습니다. 한 줄 요약 둘 다 훌륭한 장점을 가졌지만, 상황에 맞게 선택하는 능동적인 사고가 필요하다.

profile picture

익명

작성자

2023년 06월 21일

와..!! 너무 디테일한 설명 정말 감사합니다!! 맞네요 스프링도 웹프레임워크이고 저도 옛날에 jsp로 개발했던적이 있었는데 그걸 생각도 못하고 있었네요 ㅜ 너무 수준 높은 답변을 주셔서 너무 감사하고 궁금했던 부분이 명쾌하게 풀렸습니다!! 감사합니다!!!

동호님의 프로필 사진

동호

Engineer2023년 06월 21일

저도 재밌는 질문에 답변하게 해주셔서 감사합니다 :) 앞으로의 여정을 응원합니다!

문석기님의 프로필 사진

문석기

교보생명보험 프론트엔드 개발자2023년 06월 29일

넥스트는 풀스택이라 백엔드는 필요없다고 생각하는 분들은 이 답변을 필독해야합니다ㅠㅠ 넥스트는 그저 api라우팅도 지원할뿐인데 서버리스 스태틱페이지 수준일때만 풀스택으로 쓸 수 있는거죠! 웹개발의 역사를 정리해주셔서 재밋게 읽었습니다!!

신명섭님의 프로필 사진

신명섭

백앤드 프론트엔드 개발2023년 07월 06일

정말로 엄청 자세히 답변해 주셨네요.대단합니다.^^

이동철님의 프로필 사진

이동철

공유넷 소프트웨어 개발자2023년 07월 09일

댓글을 제 게시물로 옴기고 싶네요..!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!