[Ⅷ] 서버 프로그램 구현

박은지·2022년 4월 24일
0

1. 개발환경 구축


🔷 개발 도구 분류

❐ 빌드 도구 : 작성한 코드의 빌드 및 배포를 수행

❐ 구현 도구 : 개발자의 코드 작성, 디버깅, 수정 등을 지원

❐ 테스트 도구 : 코드의 기능 검증과 전체 품질을 높이기 위해 사용

❐ 형상 관리 도구 : 개발자들이 작성한 코드와 리소스 등 산출물에 대한 버전 관리

🔷 개발환경 구성요소

◼ 하드웨어 개발환경

❐ 서버 하드웨어 개발환경

통상적으로 WEB-WAS-DB의 3계층 구조를 실무에서 활용

  • 웹 서버
    -  HTTP를 이용한 요청/응답 처리
    -  웹 상의 정적 콘텐츠( CSS, Javascript, Image ) 처리
    -  주로 Apache 웹 서버를 사용

  • 웹 애플리케이션 서버 ( WAS )
    -  사용자 요청 스레드를 처리, DB에 접속해 SQL 결괏값 반환
    -  동적 콘텐츠( Servlet, JSP )를 처리하기 위해 사용
    -  주로 Tomcat 등 사용

  • 데이터베이스 서버
    -  데이터의 수집, 저장을 위한 용도로 사용
    -  MySql, Oracle, MS-SQL, DB2 등 존재

  • 파일 서버
    -  파일 저장 하드웨어로 물리 저장장치를 활용 ( 대용량의 HDD, SSD )

❐ 클라이언트 하드웨어 개발환경

◼ 소프트웨어 개발환경

❐ 운영체제

  • 서버의 하드웨어를 사용자 관점에서 편리하고 유용하게 사용하기 위한 소프트웨어
  • 프로젝트의 성격에 따른 운영체제 사용

❐ 미들웨어 ( Middleware )

  • 컴퓨터와 컴퓨터 간 연결을 쉽고 안전하게 할 수 있도록 해주고, 이에 대한 관리를 도와주는 소프트웨어
  • 자바 기반 환경에서 JVM을 설치하여 컨테이너로의 기능을 주로 이용
  • JVM ( Java Virtual Machine ) : 시스템 메모리를 관리하면서 자바 기반 프로그램을 위해 이식 가능한 실행 환경 제공
  • 컨테이너( Container ) : JSP와 서블릿을 실행시킬 수 있는 소프트웨어

❐ DBMS

  • 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고, 데이터베이스를 관리해주는 소프트웨어
  • 데이터의 저장 / 활용을 위해 DBMS 설치

◼ 형상 관리 ( Configuration Management )

소프트웨어 개발을 위한 전체 과정에서 발생하는 모든 항목의 변경 사항을 관리하기 위한 활동

❐ 절차

  1. 형상 식별 : 형상 관리 대상 정의 및 식별
  2. 형상 통제 : 형상 항목 버전 관리를 위해 변경 요구 관리, 변경 제어
  3. 형상 감사 : 소프트웨어 베이스라인의 무결성 평가
  4. 형상 기록 : 소프트웨어 형상 및 변경관리에 대한 수행결과 기록

❐ 소프트웨어 형상 관리 도구

초기에는 공유 폴더 방식을 많이 사용하였으나, 현재는 클라이언트/서버 방식과 분산 저장소 방식이 많이 활용

  • 유형

    • 공유 폴더 방식 ( RCS, SCCS ) : 매일 개발이 완료된 파일은 약속된 위치의 공유 폴더에 복사

    • 클라이언트/서버 방식 ( CVS, SVN ) : 중앙에 버전 관리 시스템을 항시 동작

    • 분산 저장소 방식 ( Git ) : 로컬 저장소와 원격 저장소로 분리되어 분산 저장

  • 특징

    • CVS ( Concurrent Version System ) : 서버와 클라이언트로 구성, 다수의 인원이 동시에 접근 가능

    • SVN ( Subversion ) : 하나의 서버에서 소스를 쉽고 유용하게 관리할 수 있게 도와주는 도구

    • RCS ( Revision Control System ) : CVS와 달리 파일의 수정을 한 사람만으로 제한

    • Bitkeeper : SVN과 비슷한 중앙 통제 방식으로, 대규모 프로젝트에서 빠른 속도를 내도록 개발

    • Git : 속도에 중점을 둔 분산형 버전 관리 시스템, 대형 프로젝트에 효과적이고 유용



2. 공통 모듈 구현


🔷 공통 모듈 구현

◼ 모듈 ( Module )

그 자체로 하나의 완전한 기능을 수행할 수 있는 독립된 실체로, 모듈 간 결합도는 줄이고 응집도는 높인 공통 모듈 구현을 권장

◼ 모듈화 ( Modularity )

소프트웨어의 성능을 향상시키거나 복잡한 시스템의 수정, 재사용, 유지 관리 등이 용이하도록 기능 단위의 모듈로 분해하여 설계 및 구현하는 기법

  • 루틴 ( Routine ) : 특정 동작을 수행하는 일련의 코드로 기능을 가진 명령들의 모임

  • 메인 루틴 ( Main Routine ) : 프로그램의 주요한 부분이며, 전체의 개략적인 동작 절차를 표시

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

 소프트웨어 모듈 응집도 

응집도 ( Cohesion ) : 모듈의 독립성을 나타내는 정도로, 모듈 내부 구성요소 간 연관 정도
💡 응집도는 높을수록 좋다!!

 #우 논 시절 통 순기 

  • 우연적 ( Coincidental ) 응집도 : 내부 구성요소가 각 연관이 없을 경우

  • 논리적 ( Logical ) 응집도 : 유사한 성격, 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리

  • 시간적 ( Temporal ) 응집도 : 특정 시간에 처리되어야 하는 활동들

  • 절차적 ( Procedural ) 응집도 : 다수의 관련 기능을 갖고, 순차적으로 수행

  • 통신적 ( Communication ) 응집도 : 동일한 입력과 출력을 사용해 다른 기능을 수행하는 활동들이 모임

  • 순차적 ( Sequential ) 응집도 : 모듈 내 한 활동으로부터 나온 출력값을 다른 활동이 사용

  • 기능적 ( Functional ) 응집도 : 모듈 내부의 모든 기능이 단일한 목적을 위해 수행

 소프트웨어 모듈 결합도 

결합도 ( Coupling ) : 모듈 내부가 아닌 외부의 모듈과의 연관도 또는 상호의존성
💡 결합도는 낮을수록 좋다!!

 #내 공 외제 스자 

  • 내용 ( Content ) 결합도 : 다른 모듈 내부에 있는 변수나 기능을 사용

  • 공통 ( Common ) 결합도 : 모듈 밖에 선언된 전역 변수를 참조하고 갱신하는 식으로 상호작용

  • 외부 ( External ) 결합도 : 두 개의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜 등을 공유

  • 제어 ( Control ) 결합도 : 처리 대상만 전달되는게 아닌 어떻게 처리 해야 한다는 제어 요소가 전달되는 경우

  • 스탬프 ( Stamp ) 결합도 : 모듈 간의 인터페이스로 배열, 객체, 구조 등이 전달

  • 자료 ( Data ) 결합도 : 모듈 간에 전달되는 파라미터만을 통해 모듈 간의 상호작용이 일어나는 경우

◼ 공통 모듈 구현 절차  #DS DSC 화면 

DTO/VO → SQL → DAO → Service → Controller → 화면 구현
💡 MVC 패턴 사용

  • DTO ( Data Transfer Object ) : 프로세스 사이에서 데이터를 전송하는 객체

  • VO ( Value Object ) : 간단한 엔티티를 의미하는 작은 객체 가변 클래스인 DTO와 달리 고정 클래스를 가지는 객체

  • DAO ( Data Access Object ) : 특정 타입의 DB에 추상 인터페이스를 제공

  • MVC 패턴

    • 모델 ( Model ) : 내부 비즈니스 로직 처리
    • 뷰 ( View ) : 화면 처리
    • 컨트롤러 ( Controller ) : 모델이 어떻게 처리할 지 알려주고, 뷰에 요철 결과 전달

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

모듈을 계층적으로 분석하기 위해 팬인과 팬아웃을 활용

❐ 팬인 ( Fan-In ) : 자신을 기준으로 모듈에 들어오면 팬인 ( in )

❐ 팬아웃 ( Fan-Out ) : 자신을 기준으로 모듈에서 나가면 팬아웃 ( out )

💡 시스템 복잡도를 최적화하기 위해서는 팬인( Fan-In )은 높게 & 팬아웃( Fan-Out )은 낮게 설계한다.


🔷 공통 모듈 테스트



3. 서버 프로그램 구현


🔷 서버 프로그램 구현

◼ 개념

  • 업무 프로세스를 기반으로 개발언어와 도구를 이용해 서버에서 서비스 제공에 필요한 기능을 구현하는 활동
  • 웹 서비스 기반의 회원정보를 조회하고 등록하는 서버 프로그램을 차례로 구현한다.

◼ 서버 프로그램 구현 절차

서버 프로그램은 프론트엔드 & 백엔드로 구분하여 구현한다.

1. DTO( Data Transfer Object ) , VO ( Value Object ) 구현

2. SQL문 구현

  • 데이터베이스 테이블 정의 및 생성
  • Mybatis XML 구현

3. 데이터 접근 객체 ( DAO ; Data Access Object ) 구현

4. 서비스 ( Service ) 클래스 구현

5. 컨트롤러 ( Controller ) 클래스 구현

6. 입출력 검증 ( Validation ) 로직 구현



4. 배치 프로그램 구현


🔷 배치 프로그램 ( Batch Program )

사용자와 상호작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리

◼ 유형

  • 이벤트 배치 : 사전에 정의해 둔 조건 충족 시 자동으로 실행

  • 온디맨드 배치 : 사용자의 명시적 요구가 있을 때 실행

  • 정기 배치 : 정해진 시점( 주로 야간 )에 정기적으로 실행


🔷 배치 스케줄러(Scheduler)

일괄 처리(Batch Processing)를 위해 주기적으로 발생하거나 반복적으로 발생하는 작업을 지원하는 도구

◼ 종류

  • 스프링 배치 ( Spring Batch ) : 스프링 프레임워크의 3대 요소를 모두 사용 가능

  • 쿼츠 스케줄러 ( Quartz Scheduler ) : 오픈소스 기반 스케줄러

◼ Cron 표현식 ⭐

스케쥴러를 실행시키기 위해 작업이 실행되는 배치 수행시간을 설정할 때 Cron 표현식이 사용된다.

 #(초)분시일월요연 

❐ 리눅스 / 유닉스 크론 표현식

  • 분( Minutes ) : 0 ~ 59, 특수문자
  • 시간( Hour ) : 0 ~ 23, 특수문자
  • 일( Day ) : 1 ~ 31, 특수문자
  • 월( Month ) : 1 ~ 12, JAN-DEC, 특수문자
  • 요일( Week ) : 1 ~ 7, SUN-SAT, 특수문자
  • 연도( Year ) [생략가능] : 1970 ~ 2099, 특수문자

❐ 쿼츠 크론 표현식

  • 초( Seconds ) : 0 ~ 59, 특수문자
  • 분( Minutes ) : 0 ~ 59, 특수문자
  • 시간( Hour ) : 0 ~ 23, 특수문자
  • 일( Day ) : 1 ~ 31, 특수문자
  • 월( Month ) : 1 ~ 12, JAN-DEC, 특수문자
  • 요일( Week ) : 1 ~ 7, SUN-SAT, 특수문자
  • 연도( Year ) [생략가능] : 1970 ~ 2099, 특수문자

❐ 특수문자

  • * : 모든 수
  • ? : 해당 항목을 미사용
  • - : 기간 설정
  • , : 특정 기간 설정
  • / : 시작시간과 반복간격 설정
  • L : 마지막 긱간에 동작
  • W : 가장 가까운 평일에 동작
  • # : 몇 번째 주, 요일 설정

❐ 예제  #(초)분시일월요연 

  • 0 0 12 * * ? : 매일 12시에 실행
  • 0 15 10 * * ? : 매일 오전 10시 15분에 실행
  • 0 * 14 * * ? : 오후 14시에서 15시 사이에 매 분마다 실행
  • 0 0/5 14.20 * * ? : 매일 14시에 시작하여 14시 55분까지 5분마다 실행 & 매일 20시에 시작하여 20시 55분까지 5분마다 실행
  • 0 0 20 ? * MON-FRI : 매주 월요일과 금요일 사이 20시에 실행  ✔ 
  • 0 15 10 15 * ? : 매달 15일 10시 15분에 실행
  • 0 15 10 L * ? : 매달 마지 날 10시 15분에 실행
  • 0 15 10 ? * 6L 2020-2021 : 2020년부터 2021년 매달 마지막 토요일 10시 15분에 실행
  • 0 15 10 15 * ? : 매달 15일 10시 15분에 실행
  • 0 11 11 1 1 ? : 1월 1일 11시 11분마다 실행

🔷 배치 프로그램 설계

1. 배치 프로그램 관리대장 확인
애플리케이션 설계를 기반으로 한 프로그램 관리 대장을 읽고 구현해야 할 배치 프로그램 기능을 확인한다.

2. 배치 설계서 확인
프로그램 관리 대장의 ID와 일치하는 배치 설계서를 확인한다.
배치 설계서를 통해 작업 내역을 참고하여 배치 프로그램을 구현한다.


🔷 배치 프로그램 작성

1. DTO( Data Transfer Object ) , VO ( Value Object ) 구현

2. SQL문 구현
배치 프로그램 구현을 위해 Mybatis XML을 통해 SQL 작성

3. 데이터 접근 객체 ( DAO ; Data Access Object ) 구현

4. 서비스 ( Service ) 클래스 구현

5. 스케쥴러 등록
작성한 배치 프로그램을 정기적으로 실행하는 쿼츠 스케쥴러 등록

0개의 댓글