본문 바로가기
[Naver Cloud Camp 7] 교육 정리

네이버 클라우드 캠프 51일차 230706

by 우기37 2023. 7. 6.

#1 교육정리

1) Client 와 Server 개념 2

 

 

 

#2 Client 와 Server 개념 2

 

클라이언트/서버'는 컴퓨터간의 관계를 역할로 구분하는 개념이다. 서버(server)는 서비스를 제공하는 컴퓨터(service provider)이고, 클라이언트(client)는 서비스를 사용하는 컴퓨터(service user)가 된다.

 

일반적으로 서버는 다수의 클라이언트에게 서비스를 제공하기 때문에, 고사양의 하드웨어를 갖춘 컴퓨터이지만, 하드웨어의 사양으로 서버와 클라이언트를 구분하는 것이 아니기 때문에, 하드웨어의 사양에 관계없이 서비스를 제공하는 소프트웨어가 실행되는 컴퓨터를 서버라 한다.

 

서비스는 서버가 클라이언트로부터 요청받은 작업을 처리하여 그 결과를 제공하는 것을 뜻하며 서버가 제공하는 서비스의 종류에 따라 파일서버(file server), 메일서버(mail server), 어플리케이션 서버(application server) 등이 있다. 예를 들어 파일서버(file server)는 클라이언트가 요청한 파일을 제공하는 서비스를 수행한다. 서버에 접속하는 클라이언트의 수에 따라 하나의 서버가 여러 가지 서비스를 제공하기 하고 하나의 서비스를 여러 대의 서버로 제공하기도 한다.

 

서버가 서비스를 제공하기 위해서는 서버프로그램이 있어야 하고 클라이언트가 서비스를 제공받기 위해서는 서버프로그램과 연결할 수 있는 클라이언트 프로그램이 있어야 한다. 예를 들어 웹서버에 접속하여 정보를 얻기 위해서는 웹브라우저(클라이언트 프로그램)가 있어야 하고, FTP 서버에 접속해서 파일을 전송받기 위해서는 알FTP와 같은 FTP클라이언트 프로그램이 필요하다.

 

일반 PC의 경우 주로 서버에 접속하는 클라이언트 역할을 수행하지만, FTP Serv-U와 같은 FTP서버프로그램이나 Tomcat과 같은 웹서버프로그램을 설치하면 서버역할도 수행할 수 있다.

 

파일공유프로그램인 소리바다나 푸르나와 같은 프로그램은 클라이언트프로그램과 서버프로그램을 하나로 합친 것으로 이를 설치한 컴퓨터는 클라이언트인 동시에 서버가 되어 다른 컴퓨터로부터 파일을 가져오는 동시에 또 다른 컴퓨터에게 파일을 제공할 수 있다.

 

네트워크를 구성할 때 전용서버를 두는 것을 서버기반모델(server-based model)이라 하고 별도의 전용서버없이 각 클라이언트가 서버역할을 동시에 수행하는 것을 P2P모델(peer-to-peer)이라 한다.

 

글 출처 : https://arabiannight.tistory.com/150 & 자바의 정석

 

 

1.요청정보) Client 와 Server 통신규칙 - protocol)

다음과 같이 client가 server에 요청정보를 먼저 보내면 server에서 client에 응답하기 전에 작업수행을 한 후에 client에 응답정보를 호출해줍니다.

 

요청정보는 Json 문자열로 요청됩니다.

저희 프로젝트에는 다음과 같이 "command"에는 데이터이름/명령으로 입력하고, "data"에는 json 문자열로 입력해줍니다.

 

 

 

예시 내용)

게시글 등록하기를 예시로 아래와 같이 요청 정보 보내기 입니다.

아래와 같은 방법은 객체 지향 설계의 5원칙인 SOLID 중 O(OCP : Open Closed Principle - 개방 폐쇠 원칙)에 해당하는 원칙이 적용 되었습니다.

 

 

 

 

2.응답정보)

응답정보를 보낼 때는 "status"는 실행결과를, "result"는 json 문자열을 입력받습니다.

아래와 같은 예시 코드를 통해 성공 : "success" / 실패 : "failure"를 호출하게 됩니다.

 

 

데이터 전송/수신 기능을 캡슐화 하기)

이렇게 구현된 데이터 전송, 수신 기능이 현재는 네트워크 프로토콜이 변경되면 변경된 규칙에 따라서 데이터를 입출력 하도록 DAO 안의 모든 메서드를 변경해야 한다는 불편함이 있습니다.

이를 개선하기 위해서는 캡슐화해서 별도의 클래스로 분리하면 유지/보수하기에 훨씬 수월해집니다.

아래와 같이 NetworkDriver에 요청 전송, 응답 수신, JSON 변환 기능을 구현합니다.

 

 

서브 프로젝트를 만들어서 아래와 같이 요청 / 응답의 기능을 각각의 클래스로 분리하여 공유하는 방법으로 인해 client는 RequestEntity만 사용하면 되고, Server는 ResponseEntity만 사용하면 됩니다.