Frontend : 서비스를 편하게 이용할 수 있도록 사용자 인터페이스를 다룸(클라이언트)
Backend : 사용자들이 실질적으로 원하는 정보 또는 데이터를 관리하거나 제공(서버)
Monolithic architecture(모놀리식 아키텍쳐: 일체형 구조) 는 전통적인 소프트웨어 설계 구조다.
소프트웨어에서 구성된 컴포넌트들이 해당 소프트웨어내에서 하나로 통합이 되어있는 구조다. 결과적으로 규모가 커짐에 따라 코드량이 늘어나고 시간이 지남에 따라 관리하기 어려운 문제가 발생을 한다. + 일부분의 오류가 전체적으로 영향을 미친다.
-> 이처럼 일체형 구조에서 왜 분리가 되었을까요?
웹이 점점 더 발전을 하고 거대 서비스들이 등장하면서 자연스럽게 세분화되게 되었습니다.
2가지 프로젝트가 있다고 가정해보도록 하겠습니다.
1. 확장성
당연하지만, B 프로젝트가 확장성이 더 좋습니다.
백엔드 코드와 프론트엔드 코드로 분리가 되어있기 때문에 코드 최적화에 더 빨리 대응이 가능합니다.
A 프로젝트같은 경우에는 커지면 커질수록 빌드시간이 늘어나지만, B 프로젝트는 분리가 되어있기 때문에 상대적으로 빠른 빌드와 리소스에 대해서도 필요에 따라 늘릴수도 있습니다.
2. 자원 최적화
A 프로젝트는 요청을 받아, DB 와 통신 후 데이터를 가공하여 JSP 에 맵핑하여 이걸 렌더링하는 작업을 수행합니다. 반면에, B 프로젝트는 렌더링 과정이 없이 프론트엔드에 JSON 을 전송하고 끝납니다. 이러한 부분으로만 봤을때도 B 프로젝트에서 백엔드(서버)가 일을 덜 하므로 서버 자원 최적화가 되는걸 알 수 있습니다.
3. 순수한 API 로써의 백엔드
안드로이드, IOS, Web 이 존재하고, 같은 서비스라면 모두 동일한 정보를 제공해야줘야 할겁니다. 백엔드가 API 에 대한 책임만을 가져가면정보 전달이 유연하고 API 를 각 모듈 또는 서비스별로 분리한다던가 멀티플랫폼에서 이용이 가능한 장점이 있습니다.
4. 기술 전환이 상대적으로 쉬움
만약 A 프로젝트를 파이썬으로 바꿔야한다면..? 파이썬은 JSP 가 없는데..? 생각만해도 끔찍하죠?
A 프로젝트는 기술을 전환하는경우에는 완전히 변경을 해야합니다.
반면에 B 프로젝트는 프론트엔드와 백엔드가 별도로 유지하고 있기때문에 서로에게 영향이 없이 쉽게 기술 전환이 가능합니다.
그리고 제가 생각하는 또 이유는
프론트엔드와 백엔드가 분리되면 병렬로 작업 진행이 가능하기때문에 애자일스러운 개발이 가능하다고 생각합니다.(개발, 배포, 테스트 등)
😍 읽어주셔서 감사하고, 혹시 경험해보시면서 이런 장점?으로 이유가 될거같다라고 생각하시는게 있다면 언제나 댓글 환영입니다!