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


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.