서버 측 프로그래밍과 클라이언트 측 프로그래밍의 차이점은 무엇입니까?


104

이 기본 지식이 부족한 질문 (주로 스택 오버플로)을 보았습니다. 이 질문의 요점은 그것을 찾는 사람들과 그것을 참조하는 사람들에게 좋은 정보를 제공하는 것입니다.

웹 프로그래밍과 관련하여 서버 측 프로그래밍과 클라이언트 측 프로그래밍의 차이점은 무엇입니까? 어떤 언어가 어느 언어에 속하며 언제 각 언어를 사용합니까?


5
서버 측 프로그래밍은 서버에서 지원하는 언어 (예 : Java, PHP, C #)를 사용하여 서버에서 실행되는 코드를 작성합니다. JavaScript는 서버 측에서 실행되는 코드를 작성할 수 있습니다. 클라이언트 측 프로그래밍은 클라이언트에서 실행될 코드를 작성하며 JavaScript와 같이 브라우저에서 실행할 수있는 언어로 수행됩니다.
FrustratedWithFormsDesigner

1
이 사람은 아주 좋은 것입니다 : programmers.stackexchange.com/questions/138561/...
JeffO

7
나는 현재 양식에서 답변이 완전하지 않기 때문에 웹 프로그래밍 만 언급한다는 질문에 포함시켜야한다고 생각합니다. 예를 들어, 서버-클라이언트 통신은 HTTP로 수행 할 필요가 없습니다. 클라이언트 측은 브라우저 등을 사용하지 않을 수 있습니다.
K.Steff

@KSteff 당신은 그것을 추가하기 위해 내 질문을 편집하는 것을 환영합니다.
Madara Uchiha

2
웹이 어렸을 때 대부분의 로직을 서버 측에 올려 놓고 (java / c ++) 브라우저 로직을 의도적으로 얇게 유지하는 것이 좋았습니다. 특히 브라우저는 이전에는 준비가되지 않았기 때문입니다. 이제는 브라우저 기반 도구 (Angular.js)가 웹 응용 프로그램 무거운 리프팅 논리의 대부분이 점점 더 많이 존재하는 위치로 자리 잡고 있습니다. 이는 매우 빠른 자바 스크립트 엔진을 실행하는 현대 산업 브라우저 (대량의 네이티브 코드 내에서)에 의해 촉진되었습니다.
Scott Stensland

답변:


123

배경

웹 개발은 커뮤니케이션에 관한 것입니다. 이 경우 HTTP 프로토콜을 통한 두 당사자 간의 통신 :

  • 서버 -이 파티에 대한 책임이 제공하는 페이지.
  • 클라이언트 -이 파티 요청 으로부터 페이지를 서버 , 사용자에게 표시합니다. 대부분의 경우 클라이언트는 웹 브라우저 입니다.
    • 사용자 - 사용자가 사용 클라이언트 등, 웹 서핑 양식을 작성하여 온라인 동영상을 시청하기 위해

각 측면의 프로그래밍은 특정 시스템, 서버 또는 클라이언트에서 실행되는 코드를 말합니다.

기본 예

  1. 사용자가 자신의 웹 브라우저합니다 (열립니다 클라이언트 ).
  2. 사용자 를 탐색 http://google.com .
  3. 클라이언트 (의 대신하여 사용자 )에 요청 전송 http://google.com 합니다 ( 서버를 자신의 홈 페이지).
  4. 서버는 그 요청을 인정, 일부 메타 데이터 (전화로 클라이언트를 응답 헤더 페이지의 소스 다음).
  5. 클라이언트는 다음 페이지의 소스를 수신하고 렌더링 사람이 볼 수있는 웹 사이트에 그것을.
  6. 사용자 유형의 Stack Overflow검색 창에, 그리고 프레스Enter
  7. 클라이언트가 받는 데이터를 전송 서버 .
  8. 서버는 데이터를 처리하고, 검색 결과와 일치하는 페이지에 응답한다.
  9. 클라이언트는 , 다시 한번 해당 페이지 렌더링 사용자가 보는합니다.

프로그램 작성

서버 측 프로그래밍

서버 측 프로그래밍은 서버에서 실행되는 프로그램 종류의 일반적인 이름입니다 .

용도

  • 사용자 입력을 처리합니다.
  • 페이지를 컴파일합니다.
  • 웹 애플리케이션 구조.
  • 영구 저장소 (SQL, 파일)와 상호 작용합니다.

언어 예

  • PHP
  • 파이썬
  • C #, C ++ 또는 Visual Basic의 ASP.Net
  • 거의 모든 언어 (C ++, C #, Java) 이들은 작업을 위해 특별히 설계되지 않았지만 이제는 종종 응용 프로그램 수준 웹 서비스에 사용됩니다.

클라이언트 측 프로그래밍

서버 측과 마찬가지로 클라이언트 측 프로그래밍은 클라이언트에서 실행되는 모든 프로그램의 이름입니다 .

용도

  • 대화 형 웹 페이지를 만듭니다.
  • 웹 페이지에서 작업을 동적으로 수행하십시오.
  • 임시 저장소 및 로컬 저장소 (Cookies, localStorage)와 상호 작용합니다.
  • 서버로 요청을 보내고 서버에서 데이터를 검색하십시오.
  • 소프트웨어 등록, 컨텐츠 전송 또는 원격 멀티 플레이어 게임과 같은 클라이언트 측 응용 프로그램을위한 원격 서비스를 제공합니다.

언어 예

  • 자바 스크립트 (주로)
  • HTML *
  • CSS *
  • 원격 서비스와 상호 작용하는 클라이언트 장치에서 실행되는 모든 언어는 클라이언트 측 언어입니다.

* HTML과 CSS는 실제로 "프로그래밍 언어"가 아닙니다. 이들은 클라이언트사용자에 대한 페이지를 렌더링하는 마크 업 구문 입니다.


8
사용 예제 를 통해 좋은 답변 얻으려면 +1 하십시오! 간단히 말해 : HTML과 CSS는 실제로 프로그래밍 언어가 아니기 때문에 아마도 "PHP, ASP 및 거의 모든 언어 (C ++, C #, Java)"와 비교해서는 안됩니다. ActionScript는 클라이언트 측 언어의 또 다른 좋은 예일 수 있습니다.
FrustratedWithFormsDesigner

5
서버가 서버이고 클라이언트가 클라이언트 인 이유 를 식별하지 못했습니다 . 서버는 클라이언트에 대해 알려져 있지만 다른 방법은 아닙니다. 서버는 항상 실행될 것으로 예상되며 클라이언트 기대치는 없습니다.
Chris McCall

3
서버 환경이 더 제어된다는 사실을 덧붙일 것입니다. 당신은 클라이언트가 무엇인지 전혀 모른다. 또한 클라이언트 측에서 일할 때 보안 문제 (양 당사자 모두)가 있습니다.
stonemetal

1
추가하고 자유롭게 느끼십시오.
Madara Uchiha

1
@ChrisMcCall의 정의에 동의하지 않습니다. 서버가 작업을 완료하기 위해 서버가 데이터를 처리하거나 서버에 서비스를 제공하기 위해 서버가 클라이언트에 의존하는 경우와 같이 해당 규칙에 예외가있을 수 있습니다. 또한 클라이언트는 SPA와 같이 확장 성과 성능을 위해 점점 더 많은 부하를 공유하고 있습니다. 이러한 기술은 그 정의를 흐리게합니다. 더 나은 정의는 최종 사용자와 클라이언트가 동의어 일 수 있습니다. 최종 사용자는 클라이언트 장치에 존재하는 반면 다른 모든 노드는 서버 측으로 간주됩니다.
RyanJMcGowan

27

평신도의 말로 :

여기서는 웹 프로그래밍에 대해서만 이야기하겠습니다.

클라이언트 측 프로그래밍은 주로 사용자가 상호 작용하는 사용자 인터페이스와 관련이 있습니다. 웹 개발에서 코드는 코드를 실행하는 브라우저이며 사용자 컴퓨터에서는 주로 자바 스크립트, 플래시 등에서 수행됩니다 .이 코드는 다양한 브라우저에서 실행해야합니다.

주요 작업은 다음과 같습니다.

  • 입력 유효성 검사 (서버에서 유효성 검사를 수행해야합니다. 속도가 매우 중요한 경우 클라이언트에서 중복 유효성 검사를 사용하여 서버 호출을 피할 수 있습니다.)
  • 생기
  • UI 요소 조작
  • 스타일 적용
  • 페이지를 너무 자주 새로 고치지 않으려는 경우 일부 계산이 수행됩니다.

담당자 프론트 엔드 프로그래밍은 알고 있어야합니다 :

  • 자바 스크립트
  • CSS
  • HTML
  • 기본 그래픽 디자인
  • 아약스
  • 어쩌면 플래시
  • JQuery와 같은 타사 자바 스크립트 라이브러리
  • UI 디자인
  • 정보 디자인 등

서버 측 프로그래밍은 동적 컨텐츠 생성과 관련이 있습니다. 서버에서 실행됩니다. 이러한 서버 중 다수는 "헤드리스"입니다. 대부분의 웹 페이지는 정적이 아니며 사용자에게 업데이트 된 개인 정보를 표시하기 위해 데이터베이스를 검색합니다. 이면은 데이터베이스와 같이 백엔드와 상호 작용합니다.

이 프로그래밍은 많은 언어로 수행 할 수 있습니다.

  • PHP
  • 자바와 JSP
  • asp
  • 파이썬
  • 루비 온 레일즈 등

이 코드는 다음과 관련이 있습니다.

  • 데이터베이스 쿼리
  • 데이터를 html로 인코딩
  • 데이터베이스에 정보 삽입 및 업데이트
  • 비즈니스 규칙 및 계산

서버 측 프로그래밍 담당자는 다음을 알아야합니다.

  • 위에서 언급 한 일부 언어
  • HTML
  • SQL,
  • 리눅스 / 유닉스 쉘 스크립팅
  • 죄송합니다
  • 비즈니스 규칙 등

"프런트 엔드 프로그래밍 담당자가 알아야합니다" HTML, CSS, Javascript 및 Ajax만으로도 완벽하게 생존 할 수 있다고 말하고 싶습니다. 서버 측 프로그래밍이 동적 컨텐츠를 생성하는 것과 관련이 있으며 클라이언트 측에 대해 동일하게 말하지 않으면 아마도 잘못된 직관을 제공 할 것입니다.
nbro

"대부분의 웹 페이지는 정적이 아니며 사용자에게 업데이트 된 개인화 된 정보를 표시하기 위해 데이터베이스를 검색합니다.이면은 데이터베이스와 같이 백엔드와 상호 작용합니다." "일반적으로 데이터베이스에서 가져온 가변 컨텐츠로 동적 부분을 채워 페이지가 동적으로 생성됩니다. 백엔드는 이미 서버 측 프로그래밍, IMO와 관련된 모든 것입니다.
nbro

다시 말하지만, 일반적으로 "... 사람은 알아야합니다 ..."라고 말하고 "필수"가 아닙니다 ...
nbro

@nbro 왜 자신 만의 답을 쓰지 않습니까?

@ColeTrumbo 내 의견과 귀하의 의견은 어떤 관계입니까? 사람들이 다른 사람들의 대답을 비판하기 위해 비난 할 수 있습니까?
nbro

14

다른 답변이에 집중 한 것을 클라이언트 측 및 서버 측 프로그램입니다 : 주로 사용하는 언어를, 달성해야 할 어떤 작업 등

이것은 절대적으로 맞지만 웹 프로그래밍의 맥락에서 두 가지 유형의 프로그래밍 의 차이점대해서는 약간의 초점 이 없습니다 . 그 문제를 해결하려고 노력하겠습니다.

보안 및 권한

클라이언트 측 프로그래밍에서는 보안 문제로 인해 전체 시스템에 액세스 할 수 없습니다. 사용자는 웹에서 다운로드하여 자신의 컴퓨터에서 실행되는 각각의 모든 코드를 반드시 신뢰할 필요는 없으며 이것이 클라이언트 환경 (브라우저 및 JavaScript 엔진)의 주요 설계 목표입니다. 격리 된 환경 제공 여기서 클라이언트 코드는 실행할 수 있지만 허용 된 범위를 벗어난 것은 액세스 할 수 없습니다.

서버 측 프로그래밍에서는 각 응용 프로그램의 액세스를 기본 시스템으로 제한하는 것이 좋습니다. 그러나 결국에는 귀하 또는 회사가 해당 시스템을 제어하기 때문에 사용자에게 훨씬 덜 적용됩니다. 이 '격리 케이지'디자인은 서버 측 프로그래밍 도구 및 언어에 내장되어 있지 않지만 설치 설정 (권한이 제한된 전용 사용자 사용, 루트 권한이 필요하거나 필요없는 포트 선택 등)을 통해 수행됩니다.

배포 및 플랫폼

서버 측 프로그래밍에서 배포는 코드 외부에서 일종의 도구를 사용하여 ( make install또는 경우에도 git clone) 수행해야하며,이 배포는 일반적으로 수동 또는 최소한 반 감독에서 수행 될 것으로 예상됩니다. 방법. 배포하는 시스템 (OS를 의미)은 일반적으로 여러 컴퓨터에서 균일하지만 필요에 따라 크게 사용자 지정할 수 있습니다.

클라이언트 측 프로그래밍에서는 서버 측 코드에서 배포가 이루어지며,이 코드는 자동으로 감독없이 클라이언트에 서비스를 제공합니다. 기본 시스템 (주로 브라우저를 의미 함)은 훨씬 더 많은 컴퓨터에서 매우 다를 수 있습니다. 배포를 가능하게하려면 표준을 유지해야하며 단일 언어 및 환경에 대한 경향이 훨씬 더 강합니다.

따라서 한 시스템에서 다른 시스템으로 서버 측 코드를 복사하는 데 몇 주가 걸리는 반면 클라이언트 측 코드는 일반적으로 다른 시스템에서 실행하기가 쉽지 않습니다.

상태 및 보조 효과

(면책 조항 : 이것은 지금까지 가장 주관적인 요점입니다. 아마도 내 주장에는 많은 잘못된 측면이있을 것입니다. 그것은 내 생각에 흥미로운 가설 일뿐입니다.)

서버 측 프로그래밍에서 상태는 사용자의 요청에 따라 동시성으로 인한 충돌 가능성이있는 데이터를 검색하고 업데이트하는 방법을 의미하는 훨씬 더 큰 관심사입니다. 이러한 복잡성의 대부분이 데이터베이스 서버로 오프로드 되어도 데이터베이스가 인터페이스를 올바르게 사용하여 데이터 무결성을 보장하도록하는 것은 서버 측 코드의 책임입니다 (예 : 서버 측 코드의 목표이기도하지만 작업에 데이터베이스를 오버로드하지 않고 사용자가 응답을 기다리는 것을 유지하십시오.

클라이언트 측 프로그래밍에서 결과를 사용자에게 제시하는 것이 훨씬 더 큰 관심사이며 이는 보조 효과 (대부분 화면에 인쇄)를 의미합니다. 이는 관련된 상태 (예 : 쿠키)가 없으며 코드의 주요 목표는 실제로 사용자와 실제로 인터페이스하는 것이므로 이차적 인 영향 없이는 발생할 수 없습니다.

그렇기 때문에 클라이언트 측 프로그래밍에서는 일반적으로 데모를 통해 화면을보고 모든 색상과 레이아웃이 올바른지 확인해야하며, 서버 측 프로그래밍은 거의 자동화 된 텍스트 중심 환경에서만 발생할 수 있습니다. 테스트는 로직이 여전히해야 할 일을하고 있는지 확인합니다.


3

이것은 결코 받아 들일만한 대답이 아닙니다. 오히려 나는 when do you use each of them지금까지 다른 답변에서 언급되지 않은 보완 질문으로 (질문 에 대한 응답으로 ) 제공합니다.

지적 재산의 보호

클라이언트 측에있는 소스 코드 (예 : Javascript 등)는 난독 처리 된 경우 쉽게 읽거나 리버스 엔지니어링 할 수 있습니다.

그러나 서버 측에있는 소스 코드는 독점 알고리즘을 안전하게 보호하고 결과 만 반환 할 수 있습니다. 일종의 블랙 박스.


예,하지만 실제로 가장 중요한 것은 아닙니다. 서버가 서버에 있고 클라이언트가 수신해야합니다. 일부 논리는 쇼핑 카트와 같이 클라이언트에서 가장 잘 이루어지며 슈퍼마켓은 쇼핑 카트를 항상 추적하지 않습니다. 그렇지 않습니까? 일부는 서버에서 가장 잘 수행됩니다 (데이터베이스에서 정보 얻기).
Madara Uchiha

@MadaraUchiha, 따라서 서문 : "이것은 결코 받아 들여지지 않는 답변이 아니며 보완적인 포인트로 제공합니다"
Kosta Kontos

이것은 다른 게시물의 일부가되어서는 안됩니까? 나는 여기에 처음이지만 흩어져있는 것보다 하나의 완전한 대답을 갖는 것이 바람직하지 않습니까?
Julix
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.