자격증/정보처리기사 📌 [정보처리기사] 서버프로그램 구현 - 개발환경 구축/서버 개발
  • 728x90
    반응형

     

     

    프로그래밍 언어활용 - 서버 프로그램 구현


     

     

     

    목차

       

       

      ✨ 주요 키워드 ? 웹 서버, 웹 애플리케이션 서버, 개발 언어 선정 기준, 프레임워크, 소프트웨어 개발 보안, API, 배치 프로그램, 스프링 배치, Quartz, 패키지 소프트웨어

       

       

      개발 환경 구축의 개요

      📌 개발 환경 구축은 응용 소프트웨어 개발을 위해 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축하는 것을 의미한다.

       

      • 개발 환경은 응용 소프트웨어가 운영될 환경과 유사한 구조로 구축한다.
      • 개발 프로젝트의 분석 단계의 산출물을 바탕으로 개발에 필요한 하드웨어와 소프트웨어를 선정한다.
      • 하드웨어와 소프트웨어의 성능, 편의성, 라이선스 등의 비즈니스 환경에 적합한 제품들을 최종적으로 결정하여 구축한다.

       

      하드웨어 환경

      📌 하드웨어 환경은 사용자와의 인터페이스 역할을 하는 클라이언트(Client) 그리고 클라이언트와 통신하여 서비스를 제공하는 서버(Server)로 구성된다.

       

      • 클라이언트에는 PC, 스마트폰 등이 있다.
      • 서버는 사용 목적에 따라 웹 서버, 웹 애플리케이션 서버, 데이터베이스 서버, 파일 서버 등으로 나뉜다.
        • 웹 서버(Web Server) : 클라이언트로부터 직접 요청을 받아 처리하는 서버로, 저용량의 정적 파일들을 제공한다.
          • 예) Apache HTTP Server, Microsoft Internet Information Service, Google Web Server 등
        • 웹 애플리케이션 서버(WAS; Web Application Server) : 사용자에게 동적 서비스를 제공하기 위해 웹 서버로부터 요청을 받아 데이터 가공 작업을 수행하거나, 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행하는 서버이다.
        • 데이터베이스 서버(DB Server) : 데이터베이스와 이를 관리하는 DBMS를 운영하는 서버이다.
          • 예) MySQL Server, Oracle Server, Microsoft SQL Server 등
        • 파일 서버(File Server) : 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장하는 서버이다.
        • 웹 서버(Web Server)의 기능
      HTTP/HTTPS 지원 브라우저로부터 요청을 받아 응답할 때 사용되는 프로토콜
      통신 기록(Communication Log) 처리한 요청들을 로그 파일로 기록하는 기능
      정적 파일 관리
      (Managing Static File)
      HTML, CSS, 이미지 등의 정적 파일들을 저장하고 관리하는 기능
      대역폭 제한
      (Bandwidth Throttling)
      네트워크 트래픽의 포화를 방지하기 위해 응답 속도를 제한하는 기능
      가상 호스팅(Vitual Hosting) 하나의 서버로 여러 개의 도메인 이름을 연결하는 기능
      인증(Authentication) 사용자가 합법적인 사용자인지를 확인하는 기능

       

      💡 정적 파일(Static File) : 정적 파일은 인터넷 브라우저와 같은 클라이언트에서 별도의 처리 과정 없이 다운로드 하여 사용자에게 보여주는 파일로 HTML, CSS, 이미지 파일 등이 있다.
      💡 동적 서비스(Dynamic Service) : 사용자의 입력에 따라 다른 결과를 보여주는 서비스를 의미한다. 쇼핑몰을 예로 들면 상품들을 인기 순으로 정렬하기 위해 클릭을 했을 때 나오는 화면은 미리 만들어져 있는 페이지가 아닌 클릭한 순간 상품들을 정렬하여 페이지를 구성한 후 표시하는 동적인 화면이다.

      💡 HTTP/HTTPS(Hyper Text Transfer Protocol [Secure]) : HTTP는 하이퍼텍스트 문서를 전송하기 위해 사용하는 프로토콜이고, HTTPS는 HTTP에 보안 모듈을 결합시킨 프로토콜이다.
      💡 네트워크 대역폭(Bandwidth) : 네트워크 대역폭은 네트워크가 단위 시간 내 전달할 수 있는 최대 크기의 전달 용량을 의미한다. 대역폭이 높을수록 많은 데이터가 네트워크에 실려서 전달하고 전달받을 수 있다.
      💡 트래픽 : 인터넷상에서 송수신 되는 모든 통신의 양을 의미한다.

       

       

       

      소프트웨어 환경

      📌 소프트웨어 환경은 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성된다.

       

      • 시스템 소프트웨어에는 운영체제(OS), 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS 등이 있다.
      • 개발 소프트웨어에는 요구사항 관리 도구, 설계/모델링 도구, 구현 도구, 빌드 도구, 테스트 도구, 형상 관리 도구 등이 있다.
        • 요구사항 관리 도구 : 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어
          • 예) JIRA, IBM DOORS, Reqtify, Trello 등
        • 설계/모델링 도구 : UML(통합 모델링 언어)을 지원하며, 개발의 전 과정에서 설계 및 모델링을 도와주는 소프트웨어
          • 예) DB Designer, PlantUML, ArgoUML 등
        • 구현 도구 : 개발 언어를 통해 애플리케이션의 실제 구현을 지원하는 소프트웨어
          • 예) Eclipse, IntelliJ IDEA, Visual Studio, Netbeans, Node.js 등
        • 빌드 도구 : 구현 도구를 통해 작성된 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 소프트웨어
          • 예) Ant, Gradle, Maven, Jenkins 등
        • 테스트 도구 : 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어
          • 예) CppUnit, JUnit, HttpUnit, NUnit, Spring Test 등
        • 형상 관리 도구 : 산출물들을 버전별로 관리하여 품질 향상을 지원하는 소프트웨어
          • 예) GIT, CVS, Subversion, Mercurial 등
        • 개발 언어의 선정 기준
          • 개발 언어를 선정할 때는 다음과 같은 5가지 특성이 고려되어야 한다.
      적정성 개발하려는 소프트웨어의 목적에 적합해야 한다.
      효율성 코드의 작성 및 구현이 효율적이어야 한다.
      이식성 다양한 시스템 및 환경에 적용이 가능해야 한다.
      친밀성 개발 언어에 대한 개발자들의 이해도와 활용도가 높아야 한다.
      범용성 다른 개발 사례가 존재하고 여러 분야에서 활용되고 있어야 한다.

       

      💡 JIRA : 짧은 주기의 개발단위를 반복하여 프로젝트를 완성시켜나가는 에자일 방식의 프로젝트 관리 협업 툴
      💡 IBM DOORS : 업계에서 가장 널리 사용되는 요구사항 관리 도구 중 하나로, 개발 팀이 전체 개발 라이프사이클에서 요구사항을 캡처 추적 및 분석할 수 있도록 한다.
      💡 Reqtify : 포괄적인 추적 기능을 구현할 수 있는 개방적이고 유연하며 사용하기 쉬운 추적 솔루션이다. 100개 이상의 커넥터를 통해 추적 가능한 정보(요구사항, 구현 결과물, 테스트, 결함 등)를 쉽게 해주는 툴이다.
      💡 트렐로(Trello) : 프로젝트를 관리하는 툴이다. Boards에 마치 포스트잇을 붙여놓은 것처럼 일정 및 프로젝트 관리를 해주는 툴이다.
      💡 UML : 시스템 분석, 설계, 구현 등 시스템 개발 과정에서 시스템 개발자와 고객 또는 개발자 상호 간의 의사소통이 원활하게 이루어지도록 표준화한 대표적인 객체지향 모델링 언어이다.

      💡 IntelliJ IDEA : JetBrains이 개발한 자바를 포함한 다양한 프로그래밍 언어를 위한 통합 개발 환경(IDE)으로 프로그래머의 생산성을 향상시키기 위해 설계되었으며, 코드 작성, 디버깅, 리팩토링, 테스트, 버전 관리 등의 개발 작업에 필요한 다양한 기능을 제공한다. 기존 Eclipse/Netbeans 등과 다르게 사용자 편의성에 집중하고 있다.
      💡 NetBeans : 주로 Java 용 인기 소프트웨어 개발 플랫폼으로, 개발자가 응용 프로그램을 빠르고 쉽게 작성할 수 있도록 마법사와 템플릿을 제공한다. 광범위한 도구 전반에 걸쳐 모듈식 구성 요소가 포함되어 있으며 개발자가 GUI를 사용하여 응용 프로그램을 만들 수 있는 IDE(통합 개발 환경)가 있다. NetBeans는 주로 Java 개발자를 위한 도구이지만 PHP, C 및 C++ 및 HTML5도 지원한다.
      💡 Node.js : Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임이다. 즉, 노드를 통해 다양한 자바스크립트 애플리케이션을 실행할 수 있으며, 서버를 실행하는 데 제일 많이 사용된다.
      💡 Spring Test : 스프링 프레임워크에서 제공하는 통합 테스트 및 스프링 MVC 통합 테스트를 지원한다. Java 코드에 대해서 스프링 컨테이너 생성, 트랜잭션, DB와 연동 관리를 지원하며 웹 관련 테스트를 위한 객체를 지원한다.
      💡 Mercurial : 소프트웨어 개발을 위한 크로스-플랫폼 분산 버전 관리 도구이다.

       

       


       

       

      서버 개발의 개요

      📌 서버 개발은 웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 애플리케이션 서버(WAS)에 탑재하는 것을 의미한다.

       

      • 웹 애플리케이션 서버에 구현된 서버 프로그램은 웹 서버로부터 받은 요청을 처리하여 결과를 반환하는 역할을 수행한다.
      • 서버 개발에 사용되는 프로그래밍 언어에는 Java, JavaScript, Python, PHP, Ruby 등이 있다.
      • 각 프로그래밍 언어에는 해당 언어로 프로그램을 개발할 수 있도록 지원하는 프레임워크가 있다.

       

      💡 루비는 간결함과 생산성을 강조한 동적인 오픈 소스 프로그래밍 언어이다. 루비의 우아한 문법으로 자연스럽게 읽히고 쓰기 편한 프로그램을 만들 수 있다.
      💡 프레임워크(Framework) : 프레임워크는 사전적으로 '뼈대', '골조' 를 의미하는데 소프트웨어에서는 특정 기능을 수행하기 위해 필요한 클래스나 인터페이스 등을 모아둔 집합체를 의미한다.

       

       

       

      서버 개발 프레임워크

      📌 서버 개발 프레임워크는 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어를 의미한다.

       

      • 서버 개발 프레임워크에 따라 지원하는 프로그래밍 언어가 제한적이므로 선정할 수 있는 프레임워크도 제한적이다.
      • 서버 개발 프레임워크의 대부분은 모델-뷰-컨트롤러(MVC) 패턴을 기반으로 개발되었다.
      • 대표적인 서버 개발 프레임워크의 종류는 다음과 같다.

       

      프레임워크 특징
      Spring JAVA를 기반으로 만들어진 프레임워크로 전자정부 표준 프레임워크의 기반 기술로 사용되고 있다.
      Node.js JavaScript를 기반으로 만들어진 프레임워크로 비동기 입/출력 처리와 이벤트 위주의 높은 처리 성능을 갖고 있어 실시간으로 입/출력이 빈번한 애플리케이션에 적합하다.
      Django Python을 기반으로 만들어진 프레임워크로 컴포넌트의 재사용과 플러그인화를 강조하여 신속한 개발이 가능하도록 지원한다.
      Codeigniter PHP를 기반으로 만들어진 프레임워크로 인터페이스가 간편하며 서버 지원을 적게 사용한다.
      Ruby on Rails Ruby를 기반으로 만들어진 프레임워크로 테스트를 위한 웹 서버를 지원하며 데이터베이스 작업을 단순화, 자동시켜 개발 코드의 길이가 짧아 신속한 개발이 가능하다.

       

      💡 서버 개발 프레임워크는 웹 프레임워크라고도 불리며, 이러한 프레임워크는 기능 구현을 위한 기본적인 형태를 지원할 뿐 필수적인 요소는 아니다. 하지만 사용 여부에 따라 생산성의 차이가 크다는 점을 기억해 두자.
      💡 모델-뷰-컨트롤러(MVC) : 모델-뷰-컨트롤러는 시스템을 세 부분으로 분리하여 서로 영향 받지 않고 개발할 수 있는 디자인 패턴을 의미한다.

       

       

       

      서버 프로그램 구현

      📌 서버 프로그램은 응용 소프트웨어와 동일하게 모듈 및 공통 모듈을 개발할 후, 모듈들을 통합하는 방식으로 구현된다.

       

      • 모듈은 모듈화를 통해 분리된 시스템의 각 기능들로, 서브 루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등과 같은 의미로 사용된다.
      • 모듈 개발 시 기능적 독립성을 고려하여 다른 모듈과의 과도한 상호작용을 배제함으로써 특정 모듈의 수정이 다른 모듈들에게 영향을 미치지 않아야 한다.
      • 모듈의 독립성은 결합도(Coupling)와 응집도(Cohesion)에 의해 측정되며, 독립성을 높이려면 모듈의 결합도를 약하게 하고 응집도를 강하게 하며 모듈의 크기를 작게 만들어야 한다.
      • 공통 모듈은 여러 프로그램에서 재사용(Reuse)할 수 있는 모듈을 의미하며, 자주 사용되는 계산식이나 매번 필요한 사용자 인증 같은 기능들이 공통 모듈로 구성될 수 있다.

       

      💡 루틴(Routine) : 기능을 가진 명령들의 모임
      💡 메인 루틴(Main Routine) : 프로그램 실행의 큰 줄기가 되는 것
      💡 서브루틴(Subroutine) : 메인 루틴에 의해 필요할 때마다 호출되는 루틴
      💡 결합도(Coupling) : 모듈 간에 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계를 의미
      💡 응집도(Cohesion) : 정보 은닉 개념을 확장한 것으로 명령어나 호출문 등 모듈의 내부 요소들의 서로 관련되어 있는 정도 즉 모듈이 독립적인 기능으로 정의되어 있는 정도를 의미

       

       

       

       

       

      728x90
      반응형
    상단으로