[1권] 5. 서버 프로그램 구현

jyoon·2021년 3월 15일

[개발 환경 구축]

응용 소프트웨어 개발을 위해 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축하는 것
응용 SW가 운영될 환경과 유사한 구조로 구축
개발에 필요한 하드웨어와 소프트웨어 선정
환경에 적합한 제품들을 최종적으로 결정해 구축

  • 하드웨어 환경
    사용자와의 인터페이스 역할하는 클라이언트, 그와 통신해 서비스를 제공하는 서버로 구성
    1) 웹서버 : 클라이언트로 부터 직접 요청을 받아 처리하는 서버, 저용량의 정적파일
    2) 웹 애플리케이션 서버(WAS) : 동적서비스를 제공하기위해 웹 서버로 부터 요청받아 데이터 가공, 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일서버 사이에서 인터페이스 역할을 수행하는 서버
    3) 데이터베이스 서버 : 데이터베이스와 이를 관리하는 DBMS를 운영하는 서버
    4) 파일서버 : DB에 저장하기엔 비효율적이거나 서비스 제공을 목적으로 유지하는 파일들을 저장하는 서버

웹서버의 기능
HTTP/HTTPS 지원 - 요청을 받아 응답할 때 사용되는 프로토콜
통신기록 - 처리한 요청들을 로그파일로 기록하는 기능
정적 파일 관리 - 정적 파일들을 저장하고 관리하는 기능
대역폭 제한 - 응답속도를 제한
가상호스팅 - 하나의 서버로 여러개의 도메인 이름을 연결하는 기능
인증 - 사용자가 합법적인 사용자인지를 확인하는 기능

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

개발언어의 선정기준 : 적합성, 효율성, 이식성, 친밀성, 범용성

[모듈]

모듈화를 통해 분리된 시스템의 각 기능들, 단독 컴파일이 가능하고 재사용 가능
독립성이 높을 수록 모듈 수정시 다른 모듈에세 영향 X, 오류가 발생해도 쉽게 해결
모듈의 독립성은 결합도(Coupling)와 응집도(Cohesion)에 의해 측정
독립성을 높이려면 모듈의 결합도는 약하게, 응집도는 강하게, 모듈의 크기는 작게 만들어야 함

  • 결합도(Coupling)
    모듈 간에 상호 의존하는 정도 또는 두 모듈 사이의 연관관례를 의미
    결합도가 약할수록 품질 높고, 강할수록 품질 낮음
    결합도가 강하면 구현 및 유지보수가 어려움

결합도 (강한 순서대로, 외워야 할 것 알아서 적기)
내용 - 공통 - 외부 - 제어 - 스탬프 - 자료





  • 응집도(Cohesion)
    모듈의 내부 요소들의 서로 관련되어있는 정도, 모듈이 독립적인 기능으로 정의되어 있는 정도
    응집도가 강할수록 품질이 높고, 약할수록 품질이 낮음

응집도 (강한 순서대로, 외워야 할 것 알아서 적기)
기능적 - 순차적 - 교환적 - 절차적 - 시간적 - 논리적 - 우연적




  • 팬인 / 팬아웃
    팬인은 어떤 모듈을 제어하는 모듈의 수
    팬아웃은 어떤 모듈에 의해 제어되는 모듈의 수
    팬인과 팬아웃을 분석하여 시스템의 복잡도를 알 수 있음
    복잡도 최적화 : 팬인은 높게, 팬아웃은 낮게

[DBMS 접속]

사용자가 데이터를 사용하기 위해 응용 시스템을 이용하여 DBMS에 접근하는 것을 의미

웹 응용 프로그램 - 웹 서버 - WAS - DBMS

  • DBMS 접속 기술
    DBMS에 접속하기 위해 사용하는 API 또는 API의 사용을 편리하게 도와주는 프레임워크 등을 의미
    1) JDBC - java언어로 다양한 종류의 db에 접속하고 sql문을 수행하는 표준 API, 접속하려는 DBMS 드라이버 필요
    2) ODBS - DB에 접근하기 위한 표준 개방형 API로 개발 언어에 관계 없이 사용 가능
    3) My Batis - JDBC 코드를 단순화 하여 사용할 수 있는 SQL Mapping기반 오픈 소스 접속 프레임워크
       SQL 문장을 분리해 XAML파일을 만들고 Mapping을 통해 SQL을 실행

  • 동적 SQL
    다양한 조건에 따라 SQL 구문을 동적으로 변경하여 처리할 수 있는 SQL처리방식
    사용자로부터 SQL문의 일부 또는 전부를 입력받아 실행할 수 있음
    값이 입력되지 않을 경우 사용하는 NVL 함수를 사용할 필요가 없음
    정적에 비해 속도가 느리지만 상황에 따하 다양한 조건을 첨가 가능해 유연한 개발이 가능

정적 SQL vs 동적 SQL (표 그려보기)




[서버 개발 과정]

DTO/Vo, SQL, DAO, Service, Controller를 각각 구현하는 과정을 통해 이루어진다.
구현 순서는 개발자가 임의로 변경할 수 있다.
개발하려는 서버 프로그램의 목적, 개발언어, 규모 등의 이유로 통합되거나 세분화될 수 있음
소프트웨어 개발 보안가이드를 참고

(코드 참고 하기 .. ㅠ)

  • DTO 구현
    데이터 교환을 위해 사용할 객체를 만드는 과정
    송 수신할 데이터의 자료형에 알맞게 생성
    변수와 데이터를 저장하고 반환하는 메소드만 구현
  • SQL 구현
    데이터의 삽입, 변경, 삭제 등의 작업을 수행할 SQL문을 생성하는 과정
    XML파일로 SQL문을 관리하는 경우 중복되는 SQL문을 최소화할 수 있고 유지보수가 간편해짐
  • DAO 구현
    DB에 접근하고 SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현하는 과정
  • Service 구현
    사용자의 요청에 응답하기위한 로직을 구현하는 과정
  • Controller 구현
    사용자의 요청에 적절한 서비스를 호출하여 그 결과를 사용자에게 반환하는 코드를 구현하는 과정

각 구성요소의 진행과정 (그려보고 적기 p492)





[배치 프로그램]

사용자와의 상호작용 없이 여러작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하는 것
정기배치 - 정기적으로 수행 / 이벤트성 배치 - 조건 충족 시 수행 / On-Demand 배치 - 사용자 요청 시 수행

배치 프로그램이 갖춰야 할 필수요소
대용량 데이터, 자동화, 견고성, 안정성/신뢰성, 성능

  • 배치 스케줄러(잡 스케줄러)
    일괄처리 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
    특정업무를 원하는 시간에 처리
    ex) 스프링 배치, Quartz
  1. 스프링 배치
    스프링 프레임워크의 특성을 가져와 스프링이 가지고 있는 다양한 기능들을 모두 사용 가능
    DB나 파일의 데이터를 교환하는데 필요한 컴포넌트들을 제공
    Job - 수행할 작업 정의
    Job Launcher - 실행을 위한 인터페이스
    Step - Job처리를 위한 제어정보
    Job Responsitory - Step의 제어 정보를 포함하여 작업 실행을 위한 모든 정보 저장

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

  3. Cron
    리눅스의 스케줄러 도구
    -e : 편집기를 호출하여 작업 추가 및 수정
    -l : 작업목록 출력
    -r : 작업 삭제

0개의 댓글