기타/정처기

정보처리기사 실기 시나공 5장 서버 프로그램 구현

TheWing 2020. 12. 31. 17:34

개발 환경 구축

개발환경 구축의 개요

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

하드웨어 환경

  • 하드웨어 환경은 사용자와의 인터페이스 역할을 하는 클라이언트(Client) 그리고 클라이언트와 통신하여 서비스를 제공하는 서버(Server)로 구성된다.
    • 클라이언트에는 PC, 스마트폰 등이 있다.
    • 서버는 사용 목적에 따라 웹 서버, 웹 애플리케이션 서버, 데이터베이스 서버, 파일 서버 등으로 나뉜다.
      • 웹 서버(Web Server) : 클라이언트로부터 직접 요청을 받아 처리하는 서버로, 저용량의 정적파일 들을 제공
        • Apache HTTP Server, Microsoft Internet Information Service, Google Web Server 등
      • 웹 애플리케이션 서버(Web Application Server) : 사용자에게 동적 서비스를 제공하기 위해 웹 서버로부터 요청을 받아 데이터 가공 작업을 수행하거나, 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버사이에서 인터페이스 역할을 수행하는 서버이다.
        • Apache Tomcat, IBM WebSqhere, Oracle WebLogic등
      • 데이터베이스 서버(DB Server) : 데이터베이스와 이를 관리하는 DBMS를 운영하는 서버이다
        • MySQL Server, Oracle Server, Microsoft SQL Server등
      • 파일 서버(File Server) : 데이터베이스에 저장하기에는 비효율적이거나, 서비스 지공을 목적으로 유지하는 파일들을 저장하는 서버
        • AWS S3등

소프트웨어 환경

  • 소프트웨어 환경은 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성
  • 시스템 소프트웨어에는 운영체제(OS), 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS등이 있다.
  • 개발 소프트웨어에는 요구사항 관리도구, 설계/모델링 도구, 구현 도구, 빌드 도구, 테스트 도구, 형상관리 도구 등이 있다.
    • 요구사항 관리 도구
      • 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어
        • JIRA, Trello등
    • 설계/모델링 도구
      • UML(통합 모델링 언어)을 지원하며, 개발의 전 과정에서 설계 및 모델링을 도와주는 소프트웨어
        • DB Designer,PlantUML, ArgoUML 등
    • 구현 도구
      • 개발언어를 통해 애플리케이션의 실제 구현을 지원하는 소프트웨어
        • Eclipse, IntelliJ IDEA, Visual Studio, Netbeans, Node.js등
    • 빌드 도구
      • 구현 도구를 통해 작성된 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 소프트웨어
        • Ant, Gradel, Maven, Jenkins 등
    • 테스트 도구
      • 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어
        • CppUnit,JUnit, HttpUnit, NUnit, Spring Test등
    • 형상 관리 도구
      • 산출물들을 버전별로 관리하여 품질 향상을 지원하는 소프트웨어
        • GIT,CVS,SVN 등

개발 언어의 선정 기준

  • 적정성 : 개발하려는 소프트웨어의 목적에 적합해야 합니다.
  • 효율성 : 코드의 작성 및 구현이 효율적이여야 합니다.
  • 이식성 : 다양한 시스템 및 환경에 적용이 가능해야 합니다
  • 친밀성 : 개발 언어에 대한 개발자들의 이해도와 활용도가 높아야합니다.
  • 범용성 : 다른 개발 사례가 존재하고 여러 분야에서 활용되고 있어야 합니다.

모듈(Module)의 개요 !기출

  • 모듈은 모듈화를 통해 분리된 시스템의 각 기능들로, 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등과 같은 의미로 사용
    • 모듈은 단독으로 컴파일이 가능하며, 재사용 할 수 있다.
    • 모듈의 독립성은 결합도(Coupling)와 응집도(Cohesion)에 의해 측정되며, 독립성을 높이려면 모듈의 결합도는 약하게, 응집도는 강하게, 모듈의 크기는 작게 만들어야한다

결합도(Coupling)

  • 결합도는 모듈 간에 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계를 의미한다.
    • 결합도가 약할수록 품질이 높고, 강할수록 품질이 낮다.
    • 결합도가 강하면 시스템 구현 및 유지보수 작업이 어렵다.
    • 결합도의 종류
      • 자료 결합도, 스탬프 결합도, 제어 결합도, 외부 결합도, 공통 결합도, 내용 결합도 (약>강) 순서

응집도(Cohesion)

  • 응집도는 정보 은닉 개념을 확장한 것으로, 명령어나 호출문 등 모듈의 내부 요소들의 서로 관련되어 있는 정도, 즉 모듈이 독립적인 기능으로 정의도어 있는 정도를 의미한다.
    • 응집도는 강할 수록 품질이 높고, 약할수록 품질이 낮다.
    • 응집도의 종류
      • 기능적 응집도, 순차적 응집도, 교환적 응집도, 절차적 응집도, 시간적 응집도, 논리적 응집도, 우연적 응집도(강>약)순서

팬인(Fan-In) / 팬아웃(Fan-out) !기출

  • 팬인은 어떤 모듈을 제어(호출)하는 모듈의 수를 나타낸다
  • 팬아웃은 어떤 모듈에 의해 제어(호출)되는 모듈의 수를 나타낸다
  • 팬인과 팬아웃을 분석하여 시스템의 복잡도를 알 수 있다.
  • 팬인이 높다는 것은 재사용 측면에서 설계가 잘 되어 있다고 볼 수 있으나, 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트가 필요하다
  • 팬아웃이 높은 경우 불필요하게 다른 모듈을 호출하고 있는지 검토하고, 단순화시킬 수 있는지 여부에 대한 검토가 필요하다.
  • 시스템의 복잡도를 최적화하려면 팬인은 높게, 팬아웃은 낮게 설계해야한다.

DBMS 접속의 개요

  • DBMS 접속은 사용자가 데이터를 사용하기 위해 응용 시스템을 이용하여 DBMS에 접근하는 것을 의미한다
    • 응용 시스템은 사용자로부터 매개 변수를 전달받아 SQL을 실행하고 DBMS로 부터 전달받은 결과를 사용자에게 전달하는 매개체 역할을 수행한다.
    • 인터넷을 통해 구동되는 웹 응용프로그램은 웹 응용 시스템을 통해 DBMS에 접근한다
    • 웹 응용 시스템은 웹 서버와 웹 애플리케이션 서버(WAS)로 구성되며, 서비스 규모가 작은 경우 웹 서버와 웹 애플리케이션 서버를 통합하여 하나의 서버만으로 운용할 수 있다.

DMBS 접속 기술

JDBC(Java DataBase Connectitity)

  • JDBC는 Java 언어로 다양한 종류의 데이터베이스에 접속하고 SQL문을 수행할 때 사용되는 표준 API이다.

ODBC(Open DataBase Connectivity)

  • ODBC는 데이터베이스에 접근하기 위한 표준 개방형 API로, 개발 언어에 관계없이 사용가능하다

동적 SQL(Dynamic SQL)

  • 동적 SQL은 다양한 조건에 따라 SQL 구문을 동적으로 변경하여 처리할 수 있는 SQL 처리 방식이다.
    • 동적 SQL은 SQL문을 문자열 변수에 넣어 처리한다

서버 개발 과정

서버 개발

  • 서버 개발은 DTO/VO , SQL, DAO, Service, Controller를 각각 구현하는 과정을 통해 이루어진다
    • 구현 순서는 개발자가 임의로 변경할 수 있다.
    • 개발하려는 서버 프로그램의 목적, 개발 언어, 규모 드으이 이유로 통합되거나 세분화 될 수 있다.
    • 모든 과정에서 보안 약점이 발생하지 않도록 소프트웨어 개발 보안 가이드를 참고한다

DTO(Data Transfer Object)/VO(Value Object) 구현

  • DTO/VO 구현은 데이터 교환을 위해 사용할 객체를 만드는 과정이다,
    • 변수 및 객체를 송수신할 데이터의 자료혀에 알맞게 생성한다
    • 알고리즘 등의 로직은 구현하지 않고, 변수와 데이터를 저장하고 반환하는 메소드만 구현한다.

SQL 구현

  • SQL 구현은 데이터의 삽입, 변경, 삭제 등의 작업을 수행할 SQL문을 생성하는 과정이다.
    • SQL문은 소스 코드 내에 직접 입력하거나 , 별도의 XML 파일로 저장하여 관리한다.
    • XML 파일로 SQL문을 관리하는 경우 중복되는 SQL문을 최소화할 수 있고, 유지보수가 간편해진다.

DAO(Data Access Object) 구현

  • DAO 구현은 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현하는 과정

Service 구현

  • Service 구현은 사용자의 요청에 응답하기 위한 로직을 구현하는 과정

Controller 구현

  • Controller 구현은 사용자의 요청에 적절한 서비스를 호출하여, 그 결과를 사용자에게 반환하는 코드를 구현하는 과정

배치 프로그램의 개요

  • 배치 프로그램은 사용자와의 상호 작용 없이 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하는 것을 의미한다.
    • 배치 프로그램이 자동으로 수행되는 주기에 따라 정기 배치, 이벤트성 배치, On-Demand배치로 구분된다
      • 정기 배치 : 일, 주, 월과 같이 정해진 기간에 정기적으로 수행된다.
      • 이벤트성 배치 : 특정 조건을 설정해두고 조건이 충족될 때만 수행된다.
      • On-Demand 배치 : 사용자 요청 시 수행된다.
    • 배치 프로그램이 갖추어야하는 필수 요소는 다음과 같다.
      • 대용량 데이터 : 대량의 데이터를 가져오거나, 전달하거나, 계산하는 등의 처리가 가능해야한다
      • 자동화 : 심각한 오류가 발생하는 상황을 제외하고는 사용자의 개입 없이 수행되어야 한다.
      • 견고성 : 잘못된 데이터나 데이터 중복 등의 상황으로 중단되는 일 없이 수행되어야 한다.
      • 안정성/신뢰성 : 오류가 발생하면 오류의 발생위치, 시간 등을 추적할 수 있어야 한다.
      • 성능 : 다른 응용 프로그램의 수행을 방해하지 않아야 하고, 지정된 시간 내에 처리가 완료되어야 한다.

배치 (Batch Scheduler)

  • 배치 스케줄러는 일괄 처리(Batch Processing) 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구이다.
    • 배치 스케줄러는 특정 업무(Job)를 원하는 시간에 처리할 수 있도록 지원한다는 특성 때문에 잡 스케줄러(Job Scheduller)라고도 불린다.
    • 주로 사용되는 배치 스케줄러에는 스프링 배치, Quartz 등이 있다.

스프링 배치(Spring Batch)

  • 스프링 배치는 Spring Source 사와 Accenture 사가 2007년 공동 개발한 오픈소스 프레임워크이다.
    • 스프링 프레임워크 특성을 그대로 가져와 스프링이 가지고 있는 다양한 기능들을 모두 사용 할 수 있다
    • 데이터베이스나 파일의 데이터를 교환하는데 필요한 컴포넌트들을 제공한다.
    • 로그 관리, 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작 등의 다양한 기능을 제공한다.
    • 스프링 배치의 주요 구성 요소와 역할
      • Job : 수행할 작업 정의
      • Job Launcher : 실행을 위한 인터페이스
      • Step : Job 처리를 위한 제어 정보
      • Job Repository : Step의 제어 정보를 포함하여 작업 실행을 위한 모든 정보 저장

Quartz

  • Quartz는 스프링 프레임워크로 개발되는 응용 프로그램들의 일괄 처리를 위한 다양한 기능을 제공하는 오픈 소스 라이브러리다.
    • 수행할 작업과 수행 시간을 관리하는 요소들을 분리하여 이로갈 처리 작업에 유연성을 제공
    • Quartz의 주요 구성요소와 역할
      • Scheduler : 실행 환경 관리
      • Job : 수행할 작업의 정의
      • JobDetail : Job의 상세 정보
      • Trigger : Job의 실행 스케줄 정의

Cron

  • Cron은 리눅스의 스케줄러 도구로 crontab 명령어를 통해 작업을 예약할 수 있다.
    • 편집기에서 요일, 월, 일, 시, 분을 기준으로 수행할 명령어를 지정한다
    • 옵션
      • -e : 편집기(editor)를 호출하여 작업 추가 및 수정
      • -l : 작업 목록(List) 출력
      • -r : 작업 삭제(Remove)
      • 작업 예약 형식
        • [분][시][일][월][요일][명령어
          • 분,시,일,월,요일에 "*"를 입력하면 매시기마다 수행한다
            • *****/root/com\_1.sh > 매월 매일 매시 매분마다 com_1.sh를 실행