본문 바로가기
Computer Science/네트워크

[네트워크] 하드웨어 환경, Server?, 서버 프로그램 구현은 어떻게 설계하는게 좋을까?

by SIXXXX_ 2022. 3. 4.
728x90

 

* 하드웨어 환경  : 사용자와의 인터페이스 역할을하는 클라이언트(PC, 스마트폰), 클라이언트와 통신해 서비스를 제공하는 서버로 구성

 

 

 

서버는 사용 목적에 따라

1. 웹서버(Web Server) 

클라이언트로부터 직접 요청을 받아 처리하는 서버, 저용량의 정적파일 제공

ex) Apache HTTP Server, Google Web Server

 

웹서버의 기능

 * HTTP/HTTPS 지원 : 브라우저로부터 요청을 받아 응답할때 사용되는 프로토콜

Communication Log(통신기록) : 처리한 요청들을 로그파일로 기록하는 기능

Managing Static Files(정적파일 관리) : HTML, CSS, 이미지 등의 정적 파일들을 저장하고 관리하는 기능

Bandwidth Throttling(대역폭 제한) : 네트워크 트래픽의 포화를 방지하기 위해 응답속도를 제한하는 기능

Virtua Hosting(가상 호스팅) : 하나의 서버로 여러 개의 도메인 이름을 연결하는 기능

Authentication(인증) : 사용자가 합법적인 사용자인지를 확인하는 기능

 

 

 

2. 웹 어플리케이션(WAS : Web Application Server)

사용자에게 동적서비스를 제공하기 위해 웹서버로부터 요청을 받아 데이터 가공 작업을 수행하거나, 웹 서버와 데이터베이스 서버 또는 웹서버와 파일 서버 사이에서 인터페이스 역할을 수행하는 서버

ex) Apache Tomcat, IBM WebSphere, Oracle WebLogic

 

3. 데이터베이스 서버(DB Server)

데이터베이스와 이를 관리하는 DBMS를 운영하는 서버

ex) MySQL Server, Oracle Server, Microsoft SQL Server

 

4. 파일 서버(File Server) 

DB에 저장하기 비효율적이거나 서비스 제공을 목적으로 유지하는 파일들을 저장하는 서버

ex) AWS S3

 

 

 

서버프로그램 구현: 모듈화

 

모듈 : 모듈화를 통해 분리된 시스템의 각 기능들, *서브루틴, *서브 시스템, 소프트웨어 내의 프로그램, 작업 단위 등과 같은 의미로 사용된다.

모듈 개발시, 기능적 독립성을 고려해 다른 모듈과의 과도한 상호작용을 배제함으로써 특정 모듈의 수정이 다른 모듈들에게 영향을 미치지 않아야 한다.

 

* 루틴 : 기능을 가진 명령들의 모임

* 메인 루틴 : 프로그램 실행의 큰 줄기가 되는 것

* 서브 루틴 : 메인 루틴에 의해 필요할때마다 호출되는 루틴

* 서브 시스템 : 시스템을 구성하는 요소의 하나로 단위시스템이라고 불린다.

서브 시스템 자체로도 하나의 시스템에 필요한 요소들을 갖추고 있다.

 

높은 독립성을 측정하는 지표

  • 약한 Coupling(결합도) : 모듈 간에 상호 의존하는 정도 또는 두 모듈 사이의 연관관계, 약할수록 품질이 높다.
자료 결합도 스탬프 결합도 제어결합도 외부결합도 공통결합도 내용결합도

독립성은 약>>>>>>>>>>>>>>>

 

ⓐ data coupling : 모듈간의 인터페이스가 자료요소로만 구성될 때

 다른 모듈 호출시에 매개변수나 인수로 데이터를 넘겨주고, 호출받은 모듈은 받은 데이터에 대한 처리 결과를 다시 돌려주는 방식

ⓑ stamp coupling : 모듈간의 인터페이스로 배열이나 레코드 등의 자료구조가 전달될 때의 결합도

두 모듈이 동일한 자료구조를 조회하는 경우의 결합도, 자료구조의 어떠한 변화 즉 포맷이나 구조의 변화는 그것을 조회하는 모든 모듈 및 변화되는 필드를 실제로 조회하지 않는 모듈에까지도 영향을 미치게 된다.

ⓒ control coupling : 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호를 이용하여 통신하거나 제어 요소(function code, switch, tag, flag)를 전달하는 결합도

ⓓ external coupling : 어떤 모듈에서 선언한 데이터(변수)를 외부의 다른 모듈에서 참조할때의 결합도, 참조되는 데이터의 범위를 각 모듈에서 제한 할 수 있다.

ⓔ common coupling : 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도, 공통 데이터 영역의 내용을 조금만 변경하더라도 이를 사용하는 모든 모듈에 영향을 미치므로 모듈의 독립성을 약하게 만든다.

ⓕ content coupling : 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도, 한 모듈에서 다른 모듈의 내부로 제어가 이동하는 경우에도 내용결합도에 해당된다.

 

 

  • 강한 Cohesion(응집도) : 정보 은닉의 개념을 확장한 것으로
    명령어나 호출문 등 모듈의 내부요소들의 서로 관련되어 있는 정도,
    모듈이 독립적인 기능으로 정의되어 있는 정도를 말한다. 

 

기능적 응집도 순차적응집도 교환적 응집도 절차적응집도  시간적 응집도 논리적 응집도 우연적 응집도

독립성은 강 >>>>>>>>>>>>>>>>>>

 

ⓐ functional cohesion : 모듈 내부의 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우
ⓑ sequential cohesion :
모듈 내 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우

ⓒ communication cohesion : 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성요소들이 모였을 경우

ⓓ procedural cohesion : 모듈이 다수의 관련 기능을 가질때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우

ⓔ temporal cohesion : 특정 시간에 처리되는 몇개의 기능을 모아 하나의 모듈로 작성할 경우

ⓕ logical cohesion : 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우

ⓖ coincidental cohesion : 모듈 내부의 각 구성요소들이 서로 관련 없는 요소로만 구성된 경우

 

  • 작은 모듈

 

공통모듈

여러 프로그램에서 재사용할 수 있는 모듈

매번 필요한 기능들이 공통모듈로 구성됨 ex. 사용자 인증

 

다른 개발자가 해당 기능을 명확히 이해할 수 있도록 명세기법 준수

  • 정확성 : 시스템 구현시 해당 기능이 필요하단 것을 알 수 있도록 정확히 작성
  • 명확성 : 해당 기능을 이해할 때 중의적으로 해석되지 않도록 명확하게 작성
  • 완전성 : 시스템 구현을 위해 필요한 모든 것을 기술
  • 일관성 : 공통 기능들 간 상호충돌이 발생하지 않도록 작성
  • 추적성 : 기능에 대한 요구사항의 출처, 관련 시스템 등의 관계를 파악할 수 있도록 작성

팬인(Fan-In)과 팬아웃(Fan-Out)

 

모듈이 들어오면 Fan-In, 나가면 Fan-Out

시스템 복잡도를 최적화하기 위해서는 팬인은 높게, 팬아웃은 낮게 설계한다.

 

 

재사용

재사용 규모에 따른 분류

  • 함수와 객체 : 클래스나 메소드 단위의 소스코드 재사용
  • 컴포넌트 : 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신하는 방식으로 재사용
  • 애플리케이션 : 공통된 기능들을 제공하는 애플리케이션을 공유하는 방식으로 재사용