큰 웹 사이트가 백엔드와 프론트 엔드에 서로 다른 언어를 사용하는 이유는 무엇입니까?


26

작은 MVC 응용 프로그램을 이해하면 HTML, JS, jQuery 등을 처리하는 프런트 엔드가 있고 컨트롤러와 모델로 구성된 백 엔드가 있다는 것을 알고 있습니다.

그러나 대기업의 개발자와 이야기 할 때 종종 프론트 엔드 계층과 백엔드 계층이 있다고 언급합니다. 때로는 C #의 프론트 엔드와 Java의 백엔드가 있다고 들었습니다. 왜 어떤 회사가 다른 언어로 된 백엔드와 프론트 엔드를 원합니까? 이것이 대규모 웹 사이트 확장에 도움이됩니까?

사람들이 그들의 프론트 엔드가 C #으로 빌드되었다고 말할 때, 이것은 프론트 엔드 (.NET과 같은)를위한 프레임 워크와 백엔드의 추가 프레임 워크 (스프링과 같은)를 사용한다는 것을 의미합니까? 아니면 완전히 다른 것을 의미합니까?


6
왜 같은 언어로 무엇을 원하십니까?!? 언어는 다르며 모두 다른 목적으로 조정되었습니다. "일반 목적 언어"와 같은 것은 없습니다.
SK-logic

33
@ SK-logic : 단일 응용 프로그램을 단일 언어로 작성하는 이점을 심각하게 생각할 수 없습니까?
back2dos

10
@ back2dos, 아니요, 단일 이점을 볼 수 없습니다. 너무 어리석어 서 의도하지 않은 언어로 언어를 사용하려고합니다. 다른 언어가 훨씬 더 적합한 지역에서 한 언어를 사용하는 것은 어리 석습니다.
SK-logic

25
@ SK-logic : 그 주장에 따라 인기있는 언어를 사용하여 시작하는 것은 어리석은 일입니다. 어떤 도메인에 대해서도 해당 지역을 위해 설계된 DSL이 있기 때문입니다. 그러나 나는 당신이 그것을 알고 있다고 생각합니다. 그래서 당신은 오늘 기분이 상쾌하다고 생각합니다. 그렇지 않으면 그 수준의 일반화와 정서적 폭발을 자제 할 것입니다.
back2dos

3
팀 / 관리자 및 플랫폼은 특정 작업 전에 언어 선택을 주도합니다. C # ASP.NET은 Java 레거시 백엔드 응용 프로그램의 웹 프런트 엔드로 선택되었습니다.이 웹 응용 프로그램에 대해 "독특한"것이기 때문에 Windows 스택에 배치하는 것이 그다지 적합하지 않았습니다.
JeffO

답변:


67

"프론트 엔드"및 "백 엔드"는 특히 엔터프라이즈 응용 프로그램에서 의미가없는 용어 일 수 있습니다. "프론트 엔드"는 UI를 의미하거나 전체 응용 프로그램 일 수 있습니다. "백엔드"는 내부를 의미하는 데 사용되거나 사용되는 데이터베이스 또는 외부 서비스 일 수 있습니다. 이 용어의 의미는 전적으로 대화하는 사람에 따라 다릅니다. "이봐, 그게 무슨 소리 야?"

대규모 엔터프라이즈 개발에 들어가면 많은 코드를 작성하는 많은 이 생길 것 입니다. 이 팀들은 다른 위치에서 다른 패러다임을 사용하여 다른 언어로 개발할 것입니다. 이 코드 중 일부는 함께 작동해야하며 대부분은 그렇지 않습니다.

나는 큰 은행에서 일합니다. 우리 팀은 C #으로 응용 프로그램을 개발합니다. 그것의 모든. 그러나 우리는 주로 Java로 작성된 웹 서비스를 소비하며, 해당 서비스는 계정 데이터를 적절한 데이터 저장소로 가져오고 해당 언어와 함께 사용되는 언어 를 알고 있는 다른 서비스와 대화하는 다른 서비스와 대화합니다 .

짧은 버전 : 사람들은 작업을 수행하는 도구를 사용합니다.


1
이제 Malbolge로 작성된 퍼블릭 웹 서비스를 사용하여 정말 간단하고 일반적인 것을 수행하고 싶습니다.
이즈 카타

이 언어 조합 효과를 어떻게 얻을 수 있습니까?
중단

17

대규모 소프트웨어 프로젝트에서 둘 이상의 프로그래밍 언어를 사용하는 이유는 무엇입니까?

가장 주목할만한 답변은 여러 가지가 있습니다.

  • 대규모 응용 프로그램은 상대적으로 독립적 인 많은 부분으로 구성됩니다. 종종 각 부분은 다른 팀이나 다른 외부 계약자에 의해 만들어집니다. 최상의 입찰을하는 것의 이점은 모든 것을 같은 언어로하는 것의 이점보다 더 큽니다.
  • 언어는왔다 갔다하며 때로는 큰 시스템의 구성 요소가 생태계보다 오래갑니다. Microsoft 세계의 예는 현재 모든 새 프로젝트에 C #을 사용하는 회사가 몇 개나 여전히 상당한 VB 코드베이스를 보유하고 있다는 것입니다. 최신 프로그래밍 언어로 프로젝트를 작성하기 위해 프로젝트를 다시 작성하는 비용은 실제로 정당화되지 않습니다.
  • 타사 구성 요소와 인터페이스 C # 에코 시스템이 Java 솔루션 만 존재하는 특정 작업을 수행해야하는 경우 솔루션을 직접 구현하거나 Java 솔루션을 사용하여 시스템에 통합하기 위해 약간의 접착제를 개발하는 두 가지 선택이 있습니다. 후자는 모든 사소한 작업에 대해 거의 저렴합니다.

고주파 트레이딩과 같이 성능이 매우 중요한 응용 프로그램을 제외하고는 성능 고려 사항이 실제로는 그 이유가 아닙니다. 이러한 영역에서 런타임 성능이 향상된 언어 (예 : C ++)로 핵심 핵심 엔진을 작성하는 것이 유리할 수 있습니다. Java 또는 C #과 같은 상위 레벨의 지원 시스템 (UI,보고 등)


6

대기업에서는 상대적입니다.
내 회사에서 스택은 대략

(html/javascript)--> (JSP on Tomcat and Java based WebCMS) -> (.Net SOA)  

따라서 웹 개발 팀의 프론트 엔드는 HTML / JS이고 백엔드는 Java입니다. 엔터프라이즈의 경우 프론트 엔드는 Java이고 백엔드는 .Net입니다.

실제로 .Net 계층은 청구 및 청구를위한 COBOL / UNIX 응용 프로그램과 작동해야하므로이 관점에서 .Net은 프론트 엔드이고 COBOL은 백엔드입니다.

그리고 다른 사람들이 언급했듯이 스택의 각 부분에서 작업하는 UX 디자이너, HTML / JS 개발자, Java 개발자, 웹 미들웨어, .Net 개발자, SQL 개발자, COBOL 개발자 팀이 있습니다.

실제로 충분히 큰 기업에서는 거북입니다.


거북이의 경우 +1 나는 프론트 엔드가 어셈블리 언어 인 거북이가 아닌 것이 기쁘다.
kmote

5

혼란스러운 의미론

의미 론적 문제입니다. 누군가가 .NET 프론트 엔드 또는 Java 프론트 엔드 개발자를 말할 때, 그들은 일반적으로 템플릿 언어와 많은 것을 알고있는 사람에 대해 이야기하고 있습니다. 원하지 않거나 적어도 모든 쓰레기에 대해 배우기를 원하지 않는 것으로 생각되는 앱 개발자의 http 월 (예 : "웹 개발")을 통한 문제 해결. 혼합 된 .NET과 Java의 경우 확실하지 않지만 MVC에서 Java가 모든 비즈니스 모델 및 모든 .NET에서 더 잘 설명되는 모든 것을 처리한다고 생각합니다. "중간 계층"으로 표시되지만 여전히 모든 서버 측입니다.

실제 분리는 서버에서 발생하는 것과 클라이언트 또는 브라우저에서 발생하는 것입니다. 프론트 엔드로 보내거나 프론트 엔드를 나타내는 HTML을 작성하는 것을 "프론트 엔드 개발"과 쉽게 혼동 할 수 있으므로, 내가하는 일을 논의 할 때 프론트 엔드와 백엔드 대신 클라이언트와 서버 측이라는 용어를 사용하여 혼동을 피하는 것이 좋습니다. (일반적으로 클라이언트 측 작업).

클라이언트 측 언어

우리가 브라우저에서 동일한 언어 세트를 사용하는 이유는 브라우저가 수신 측에 있고 대부분 (대부분 Microsoft와 Adobe의 죽음에 대한 저항이 있었기 때문에) 세 사람을 보내지 않기를 원하지 않기 때문입니다. 모든 잠재 고객을 만족 시키거나 웹이 작동하려면 독점 플러그인이 설치되어 있어야합니다. 또한 세 언어는 실제로 클라이언트 측 문제를 상당히 잘 캡슐화하여 문서 구조, 모든 모양 및 동작 방식을 느슨하게 유지함으로써 웹 앱 프런트 엔드를 신속하게 구축하고 수정할 수 있습니다. 다른 두 개를 아주 쉽게 변경하지 않고 한 개를 변경할 수 있습니다.

서버 측 언어

물론 서버 측 웹에 옵션이 많은 이유는 가능하기 때문입니다. 귀하의 서버입니다. http / ssl을 통해 통신하면 나머지는 사용자에게 달려 있습니다. JavaScript는 이제 옵션이지만 흥미로운 질문이 있습니다. 웹 응용 프로그램을 여전히 HTTP 벽의 양쪽에있는 두 개의 응용 프로그램처럼 취급해야합니다. 나는 그렇습니다. 그렇습니다. 나는 Node.js를 좋아한다는 통증에 대한 정보를 얻었습니다.


2

즉, 대규모 프로젝트가있는 경우 여러 팀의 개발자 팀이 프로젝트를 수행하고 있으며 해당 팀은 서로 다른 애플리케이션 계층을 전문화하는 경향이 있습니다.

웹 UI에 중점을두고 구현 선택에 유연성이있는 경우 C # 대신 JScript 또는 Flex와 같은 웹 UI 대상 언어를 사용할 가능성이 훨씬 높습니다.

마찬가지로, 애플리케이션의 트랜잭션 데이터 저장소 끝에있는 경우 많은 동시 작업을 한 번에 처리하면 erlang과 같은 특수 언어가 사용되는 경향이 있습니다. (또는 이러한 언어로 일부 구현 된 타사 제품)


2

그 이유는 비즈니스 위험 균형 조정입니다.

한 도시의 거대 고용주라고 가정 해 봅시다. 많은 다른 서비스를 구축하려면 많은 개발자를 고용해야합니다. 초기 평가는 Lanuage A가 귀하의 관심사에 가장 적합하며이를 시작한다고 가정합니다.

하나의 기술에 전념하면 인재 풀을 건조시킬 수 있습니다. 모퉁이 근처에 Language B 스타가있을 때 알맞은 Langauge A 녀석을 고용 하시겠습니까? 내일 Langauge A의 프레임 워크가 주요 개발자가 지원할 수 있다면 어떨까요? 내일 놀라운 언어 C가 있다면 5 년 전에 언어 A에 전념했기 때문에 무시해야합니까?

이상적으로는 현재 인재 풀과 기술 동향을 반영하는 다양한 언어의 이질적인 시스템이 이상적입니다. 인재 풀과 트렌드가 변화함에 따라이 균형이 느리게 이동하기를 원하므로 모든 시스템이 작동 가능하고 인력을 유지 관리 할 수 ​​있습니다.

... 이것은 회사가하는 일입니다.


1

프런트 엔드와 백 엔드를 모두 동일한 데이터 소스를 사용하는 별도의 응용 프로그램으로 생각하면 도움이됩니다.

소규모 사이트의 경우에도 프런트 엔드를 클라이언트와 인터페이스하는 것으로 생각하고 백 엔드를 CMS와 같은 것으로 생각할 수 있습니다. 이들은 별도의 MVC 애플리케이션 일 수 있습니다. 프런트 엔드에는 여전히 모델과 컨트롤러를 실행해야합니다. 결국 컨트롤러는 사이트 방문자의 진입 점이며 모델은 데이터베이스에서 사용자에게 데이터를 가져 오는 방식이됩니다.

백엔드에서 Django / Python을 CMS로 사용하고 프런트 엔드에서 Rails, CodeIgniter 또는 Spring MVC를 사용하는 것을 좋아합니다. 선택의 여지가없는 경우가 많습니다. 클라이언트는 이미 프런트 엔드에 일부 언어로 레거시 사이트가 설정되어 있으며 CMS 솔루션 만 원합니다. 대부분의 고객은 CMS에 알리지 않으면 CMS가 다른 언어 나 프레임 워크를 실행하고 있다는 사실조차 알지 못합니다.

실제로 구축하려는 사이트에 가장 적합한 것을 찾는 것입니다. 프런트 엔드와 백 엔드는 실제로 데이터베이스를 공유하기 만하면되므로 둘 다 작업 할 수 있으면 작업에 가장 적합한 옵션을 자유롭게 선택할 수 있습니다.


0

백엔드 언어의 예로는 스크립트 언어 인 PHP가 있습니다. PHP 페이지가 요청되면 서버는 PHP 코드를 읽고 마크 업을 렌더링합니다. 결과는 HTML로 전송됩니다. 웹 페이지 뷰어는 한 줄의 PHP 코드를 보지 못합니다. 웹 서버 관리자가 자신의 작업을 올바르게 수행했다고 가정하면 서버는 실제 PHP 코드를 보여주지 못합니다. 페이지가 제공되고 해당 코드 변환 결과가 HTML 인 경우 구문 분석됩니다.


클라이언트 쪽과 프런트 엔드를 혼합하고 있습니다. 엔터프라이즈 애플리케이션에서 백엔드는 더 큰 비즈니스 로직을 포함하여 데이터가 저장되고 주문이 처리되는 장소입니다. 프런트 엔드는 이러한 백엔드 시스템을 호출하여 웹 사이드 (기술에 상관없이), 데스크톱 앱 또는 모바일 앱을 구동하는 데 사용됩니다. 이것은 모두 프론트 엔드 코딩으로 간주됩니다. 다음은 클라이언트 쪽과 서버 쪽이지만 여기에 공간이 부족합니다.
Rob van der Veer

프론트 엔드 및 백엔드에 다른 언어가 사용되는 이유에 대한 귀하의 답변이 어떻게 귀하의 답변을 다루는 지 모르겠습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.