8장 SQL 응용

 

DDL (Data Denfinition Language)

 

  • CREATE SCHEMA 스키마명 AUTHORIZATION 사용자_id;
    CREATE SCHEMA SA AUTORIZATION 강냉;​
  • CREATE DOMAIN 도메인명 [AS] 데이터_타입
              [DEFAULT 기본값]
              [CONSTRAINT 제약조건명 CHECK (범위값)];
    CREATE DOMAIN SEX CHAR(1)
        DEFAULT '남'
        CONSTRAINT VALID_SEX CHECK(VALUE IN ('남','여'));​
  • CREATE TABLE 테이블명
              (속성명 데이터_타입 [DEFAULT 기본값][NOT NULL]. ...
              [, PRIMARY KEY(기본키_속성명, ...)]
              [, UNIQUE(대체키_속성명, ...)]
              [, FOREIGN KEY(외래키_속성명, ...)]
                        REFERENCES 참조테이블(기본키_속성명, ...)]
                        [ON DELETE 옵션]
                        [ON UPDATE 옵션]
              [, CONSTRAINT 제약조건명][CHECK (조건식)]);
    CREATE TABLE 동아리
        (이름 VARCHAR(15) NOT NULL,
        PRIMARY KEY 학번 CHAR(9),
        전공 VARCHAR(10) NOT NULL,
        성별 SEX,
        생년월일 DATE,
        전화번호 VARCHAR(30),
        FOREIGN KEY(전공) REFERENCES 학과(학과코드)
            ON DELETE SET NULL
            ON UPDATE CASCADE /*NO ACTION / CASCADE / SET NULL / SET DEFAULT*/
        CONSTRAINT 생년월일제약
            CHECK(생년월일<'2001-01-01'));​
    /*다른 테이블로 테이블 정의하기*/ 
    CREATE TABLE 프로그래밍 AS SELECT 학번, 이름, 학년, 전공 FROM 동아리;
  • CREATE VIEW 뷰명[(속성명[, 속성명, ...])]
    AS SELECT문;
    CREATE VIEW 고객(성명, 전화번호)
    AS SELECT 성명, 전화번호
    FROM 고객
    WHERE 주소 = '안산시';​
  • CREATE [UNIQUE] INDEX 인덱스명
    ON 테이블명(속성명 [ASC|DESC][,속성명 [ASC|DESC]])
    [CLUSTER]; (사용하면 인덱스가 클러스터드 인덱스로 설정)
    CREATE UNIQUE INDEX 고객번호_idx
    ON 고객(고객번호 DESC);​
  • ALTER TABLE 테이블명 ADD 속성명 데이터_타입 [DEFAULT '기본값']; (속성 추가)
    ALTER TABLE 테이블명 ALTER 속성명 [SET DEFAULT '기본값']; (속성 변경)
    ALTER TABLE 테이블명 DROP COLUMN 속성명 [CASCADE]; (속성 제거)
  • DROP SCHEMA 스키마명 [CASCADE | RESTRICTED]; 
    DROP DOMAIN 도메인명 [CASCADE | RESTRICTED];
    DROP TABLE 테이블 명 [CASCADE | RESTRICTED];
    DROP VIEW 뷰명 [CASCADE | RESTRICTED]; (RESTRICETED는 다른 개체가 제거할 요소 참조 중일 때 제거 취소)
    DROP INDEX 인덱스명 [CASCADE | RESTRICTED];
    DROP CONSTRAINT 제약조건명;

DCL (Data Control Language)

 

  • GRANT 사용자등급 TO 사용자_ID_리스트 [IDENTIFIED BY 암호];
    REVOKE 사용자등급 FROM 사용자_ID_리스트;
    • 사용자등급
      • DBA : DB 관리자
      • RESOURCE : DB 및 테이블 생성 기능자
      • CONNECT : 단순 사용자
  • GRANT 권한_리스트 ON 개체 TO 사용자 [WITH GRANT OPTION];
    REVOKE [GRANT OPTION FOR] 권한_리스트 ON 개체 FROM 사용자 [CASCADE];
    • 권한_리스트
      • ALL, SELECT, INSERT, DELETE, UPDATE, ALTER
      • WITH GRAN OPTION : 부여받은 권한을 다른 사용자에게 다시 부여할 수 있는 권한 부여
      • GRANT OPTION FOR : 다른 사용자에게 권한 부여할 수 있는 권한 취소
  • COMMIT : 트랜잭션(DB에서 하나의 논리적 기능을 수행하기 위한 일련의 연산 집합)이 성공적으로 끝나면 변경된 모든 내용을 DB에 반영하기 위해 사용하는 명령
  • ROLLBACK : 아직 COMMIT 되지 않은 변경된 모든 내용들을 취소하고 이전 상태로 되돌리는 명령
    ROLLBACK TO 세이브포인트명;
  • SAVEPOINT : ROLLBACK 할 위치 저장점을 지정하는 명령어
    SAVEPOINT 세이브포인트명;

DML (Data Manipulation Language)

 

  • INSERT INTO 테이블명([속성명1, 속성명2, ...])
    VALUES (데이터1, 데이터2, ...);
  • DELETE
    FROM 테이블명
    [WHERE 조건];
  • UPDATE 테이블명
    SET 속성명 = 데이터[, 속성명 = 데이터, ...]
    [WHERE 조건];
  • SELECT [PREDICATE][테이블명,]속성명 [AS 별칭][, [테이블명,]속성명, ...]
    [, 그룹함수(속성명) [AS 별칭]]
    [, Window함수 OVER (PARTITION BY 속성명1, 속성명2, ...
                          ORDER BY 속성명3, 속성명 4, ...)]
    FROM 테이블명[, 테이블명, ...]
    [WHERE 조건]
    [GROUP BY 속성명, 속성명, ...]
    [HAVING 조건]
    [ORDER BY 속성명 [ASC | DESC]];
    • PREDICATE : 불러올 튜플 수를 제한할 명령어 기술
      • DISTINCT : 중복된 튜플이 있으면 한 개만 검색
      • DISTINCTROW : 중복된 튜플 제거 한 개만 검색하지만 속성의 값이 아닌 튜플 전체를 대상으로 함.
    • 조건 연산자
      • 비교 연산자 : = / <> / > / < / >= / <=
      • 논리 연산자 : NOT / AND / OR
      • LIKE 연산자 : 대표 문자를 이용해 지정된 속성 값이 문자 패턴과 일치하는 튜플 검색
        • %(모든 문자 대표) / _(문자 하나 대표. 찾는 문자 길이를 알 때 사용.) / #(숫자 하나 대표)
    • GROUP 함수
      • COUNT(), SUM(), AVG(), MAX(), MIN(), STDDEV(), VARIANCE()
      • ROLLUP() : 인수로 주어진 속성들을 대상으로 그룹별 소계를 구하는 함수. n+1 레벨까지 하위에서 상위 레벨 순으로 데이터 집계
      • CUBE : 인수로 주어진 속성을 대산으로 모든 조합의 그룹별 소계를 구하는 함수. n^2 레벨까지 상위 레벨에서 하위 레벨 순으로 데이터 집계
    • WINDOW 함수
      • ROW_NUMBER() : 각 레코드에 대한 일련 번호 반환
      • RANK() : 순위 반환, 공동 순위 반영
      • DENSE_RANK() : 순위 반환, 공동 순위 미반영

프로시저

 

프로시저란? 절차형 SQL을 활용해 특정 기능을 수행하는 일종의 트랜잭션 언어. 호출을 통해 실행되어 미리 저장해 놓은 SQL 작업 수행

 

  • 생성
    • CREATE [OR REPLACE] PROCEDURE 프로시저명(매개변수명 파라미터 자료형)
      [지역변수 선언]
      BEGIN
          프로시저 BODY; (하나의 SQL문이 있어야 함)
      END;
      • OR REPLCAE : 기존에 프로시저가 존재할 경우, 대체
      • 파라미터
        • IN : 호출 프로그램이 프로시저에게 값을 전달할 때
        • OUT : 프로시저가 호출 프로그램에게 값을 반환할 때
        • INOUT : 값을 전달하고 반환 둘 다 함.
  • 실행
    • EXECUTE 프로시저명;
      EXEC 프로시저명;
      CALL 프로시저명;
      세 개 중 아무거나 선택하여 실행
  • 제거
    • DROP PROCEDURE 프로시저명;

트리거

 

이벤트가 발생할 때마다 관련 작업이 자동으로 수행되는 절차형 SQL

 

  • 생성
    • CREATE [OR REPLACE] TRIGGER 트리거명 [동작시기 옵션][동작 옵션] ON 테이블명
      REFERENCING [NEW | OLD] AS 테이블명
      FOR EACH ROW
      [WHEN 조건식]
      BEGIN
          트리거 BODY;
      END;
      • 동작시기 옵션 : AFTER / BEFORE
      • 동작 옵션 : INSERT / DELETE / UPDATE
      • NEW : 추가되거나 수정에 참여할 튜플 집합 의미 / OLD : 수정되거나 삭제 전 대상이 되는 튜플 집합 의미
      • WHEN 조건식 : 트리거를 적용할 튜플 조건 지정
  • 제거
    • DROP TRIGGER 트리거명;

사용자 정의 함수 

 

  • 생성
    • CREATE [OR REPLACE] FUNCTION 사용자 정의 함수명(매개변수명 파라미터 자료형) (파라미터는 IN만 사용)
      [지역변수 선언]
      BEGIN
          사용자 정의 함수 BODY;
          RETURN 반환값;
      END;
    • PROCEDURE와 거의 유사. RETURN만 따로 있는 형태
  • 실행
    • SELECT 사용자 정의 함수명 FROM 테이블;
      INSERT INTO 테이블명(속성명) VALUES (사용자 정의 함수명);
      DELETE FROM 테이블명 WHERE 속성명 = 사용자 정의 함수명;
      UPDATE 테이블명 SET 속성명 = 사용자 정의 함수명;

제어문

 

IF 조건1 THEN
    실행할 문장1;

ELSIF 조건2 THEN
    실행할 문장2;

ELSE
    실행할 문장3;

ENDIF;
LOOP
    실행할 문장;
    EXIT WHEN 조건;

END LOOP;
FOR 변수 IN 초기값..종료값

LOOP 
    실행할 문장;
END LOOP;
WHILE 조건

LOOP 
    실행할 문장;
END LOOP;
CONTINUE WHEN 조건;
GOTO 레이블;

《레이블》
실행할 문장;

커서

 

커서란? 쿼리문 처리 결과가 저장되어 있는 메모리 공간을 가리키는 포인터.

 

  • 묵시적 커서(Implicit Cursor) : DBMS 자체적으로 열리고 패치되어 사용이 끝나면 닫힘.
    • 속성
      • SQL%FOUND : 패치 된 튜플 수가 1개 이상이면 TRUE
      • SQL%NOTFOUND : 패치된 튜플 수가 0개면 TRUE
      • SQL%ROWCOUNT : 패치된 튜플 수 반환
      • SQL%ISOPEN : 커서가 열린 상태면 TRUE
  • 명시적 커서(Explicit Cursor) : 사용자가 직접 정의해 사용하는 커서
    • 선언 형식
      • CURSOR 커서명 (매개변수1, 매개변수2, ...)
        IS

        SELECT 문;
    • 열기 형식
      • OPEN 커서명(매개변수1, 매개변수2, ...);
    • 패치 형식
      • FETCH 커서명 INTO 변수1, 변수2 ...;
    • 닫기 형식
      • CLOSE 커서명;

어플리케이션 테스트 관리

 

어플리케이션 테스트

 

어플리케이션 테스트란 어플리케이션 잠재된 결함을 찾는 행위 또는 절차.

소프트웨어가 요구사항을 만족하는지 확인(validation), 기능을 정확히 수행하는 지 검증(verification)

 

  • 어플리케이션 기본 원리
    • 완벽한 테스트 불가능 : 완벽한 테스팅은 불가능하다.
    • 결함 집중 (Defect Clustering) : 겷마은 특정 모듈에 집중되어 있다. 
      • 파레토 법칙 : 어플의 20%의 코드에서 80%의 결함이 검출된다.
    • 살충제 패러독스 : 동일 테스트 케이스로 테스트를 반복하면 더 이상 결함이 발견되지 않는다.
      • 테스트 케이스를 계속해서 보완, 개선해야 한다.
    • 테스팅은 정황 의존 : 테스트는 정황(상황)에 따라 다르게 수행해야 한다.
    • 오류-부재의 궤변 : 결함을 모두 제거해도 요구사항 만족을 못하면 품질 높은 소프트웨어가 아니다.
    • 테스트와 위험은 반비례 : 테스트를 많이 하면 미래 위험은 적다.
    • 테스트의 점진적 확대 : 테스트는 작은 부분부터 확대해가며 진행해야 한다.
    • 테스트의 별도 팀 수행 : 테스트는 개발자와 관계 없는 별도의 팀에서 수행해야 한다.

어플리케이션 테스트의 분류

 

  • 실행 여부에 따른 테스트
    • 정적 테스트  : 프로그램을 실행하지 않고 소스 코드를 분석하는 테스트
      • 워크스루(개발자가 모집한 전문가가 검토), 인스펙션(워크스루 발전 형태), 코드 검사 등
    • 동적 테스트 : 프로그램을 실행해 오류를 찾는 테스트
      • 블랙박스 테스트(기능 테스트) : 소프트웨어가 수행할 특정 기능을 알기 위해 각 기능이 완전히 작동되는 것을 입증하는 테스트.
        • 종류
          • 동치 분할 검사/동등 분할 기법(Equivalence Partitioning Testing) : 입력 자료에 초점을 맞춰 테스트 케이스 제작, 검사. 타당한 입력 자료, 타당하지 않은 입력 자료 개수를 균등하게 해 테스트 케이스 설정.
          • 경계값 분석(Boundary Value Analysis) : 입력 조건의 경계값을 테스트 케이스로 선정하여 검사하는 기법
          • 원인 - 효과 그래프 검사(Cause-Effect Graphing Testing) : 입력 데이터 간 관계와 출력에 영향을 미치는 상황을 체계적으로 분석 후 효용성 높은 테스트 케이스를 선정해 검사하는 기법
          • 오류 예측 검사(Error Guessing) : 과거 경험이나 확인자의 감각으로 테스트. 일련의 보충적 검사 기법이며 데이터 확인 검사라고도 함.
          • 비교 검사(Comparison Testing) : 여러 버전 프로그램에 동일한 테스트 자료를 제공해 동일한 결과가 출력되는지 테스트.
      • 화이트박스 테스트 : 원시 코드의 논리적 모든 경로를 테스트해 테스트 케이스를 설계하는 방법
        • 종류
          • 기초 경로 검사 : 대표적 화이트박스 테스트 기법. 절차적 설계의 논리적 복잡성을 측정할 수 있게 해준다.
          • 제어 구조 검사
            • 조건 검사 : 모든 논리적 조건 테스트
            • 루프 검사 : 반복 구조에 초점을 맞춰 테스트
            • 데이터 흐름 검사 : 변수 정의와 변수 위치에 초점을 맞춰 테스트
        • 검증 기준
          • 문장 검증 : 모든 구문이 한 번 이상 수행되도록 테스트 케이스 설계
          • 분기 검증 : 모든 조건문이 한 번 이상 수행되도록 테스트 케이스 설계
          • 조건 검증 : 모든 조건문에 대해 조건이 True인 경우, False인 경우가 한 번 이상 수행되도록 테스트 케이스 설계
          • 분기 / 조건 검증 : 모든 조건문과 각 조건문에 포함된 개별 조건식 결과가 True인 경우와 False인 경우가 한 번 이상 수행되도록 테스트 케이스 설계+
  • 테스트 기반에 따른(무엇을 기반으로 할지에 따른) 테스트
    • 명세 기반 : 요구사항 명세를 다 테스트 케이스로 만들어 구현하고 있는지 확인
      • 동등 분할, 경계 값 분석
    • 구조 기반 : 내부 논리 흐름에 따라 테스트 케이스 작성 및 확인
      • 구문 기반, 결정 기반, 조건 기반
    • 경험 기반 : 유사 소프트웨어나 기술 등에 대한 테스트 경험을 기반으로 수행하는 테스트
      • 에러 추정, 체크 리스트, 탐색적 테스팅
  • 시각에 따른 테스트
    • 검증(verification) 테스트 : 개발자의 시각
    • 확인(validation) 테스트 : 사용자의 시각
  • 목적에 따른 테스트
    • 회복 : 일부러 결함을 줘 실패하게 한 후 제대로 복구하는지 확인
    • 안전 : 불법적 침입으로 시스템을 보호하는지 확인
    • 강도 : 과도한 정보량이나 빈도를 부과해 과부하 시 정상적으로 실행하는지 확인
    • 성능 : 실시간 성능, 전체적인 효율성 진단. 응답 시간, 처리량 등 테스트
    • 구조 : 논리적 경로, 복잡도 등 평가
    • 회귀 : 변경 또는 수정된 코드에 새로운 결함이 없을을 확인
    • 병행 : 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력하여 결과 비교
  • 개발 단계에 따른 테스트
    https://devuna.tistory.com/98
     
    • 검증(Verification) 테스트 - 개발자 단에서의 테스트
      • 단위 테스트 : 최소 단위인 모듈이나 컴포넌트에 초점을 맞춰 테스트
        • 인터페이스, 외부적 IO, 자료 구조, 독립적 기초 경로, 오류 처리 경로, 경계 조건 등 검사.
        • 방법
          • 구조 기반 테스트 : 화이트박스 테스트 시행
            • 목적 : 제어 흐름, 조건 결정
            • 주로 시행됨
          • 명세 기반 테스트 : 블랙박스 테스트 시행
            • 목적 : 동등 분할, 경계값 분석
      • 통합 테스트(Intergration Test) : 단위 테스트 완료 모듈들을 결합해 하나의 시스템으로 완성시키는 과정에서의 테스트
        • 방법
          • 비점진적 통합 방식
            • 빅뱅 통합 테스트 방식
          • 점진적 통합 방식 : 모듈 단위 단계적으로 통합하며 테스트
            • 하향식 통합 테스트 : 상위 모듈에서 하위 모듈 방향으로 통합하며(위에서 아래로) 테스트
              • 절차
                1. 주요 제어 모듈은 작성된 프로그램 사용. 종속 모듈들은 스텁으로 대체
                2. 깊이 우선 / 넓이 우선 통합 방식에 따라 하위 모듈인 스텁들이 한 번에 하나씩 실제 모듈로 교체
                3. 모듈이 통합될 때마다 테스트 실시
                4. 회귀 테스트(이미 했던 테스트 반복. 변경 사항으로 인해 오류가 있는지 확인하기 위해) 실시
            • 상향식 통합 테스트 : 하위 모듈에서 상위 모듈 방향으로 통합하며(아래에서 위로) 테스트
              • 절차
                1. 하위 모듈들을 클러스터(종속 모듈 그룹)로 결합
                2. 상위 모듈에서 데이터의 입*출력 확인을 위한 더미 모듈인 드라이버 작성
                3. 통합된 클러스터 단위 테스트
                4. 테스트 완료 시 클러스터는 프로그램 구조 상위로 이동해 결합하고 드라이버는 실제 모듈로 대체
            • 혼합식 통합 테스트(샌드위치 통합 테스트)
              • 하위에선 상향, 상위에선 하향식 통합을 사용해 최적의 테스트를 지원하는 방식.
      • 시스템 테스트 : 개발된 소프트웨어가 해당 컴퓨터 시스템에서 완벽히 수행되는가 점검하는 테스트. 실제 사용 환경과 유사하게 만든 테스트 환경에서 테스트 수행해야 함.
        • 방법
          • 기능적 요구사항 : 명세서 기반 블랙박스 테스트 시행
          • 비기능적 요구사항 : 구조적 요소에 대한 화이트박스 테스트 시행
    • 확인(Validation) 테스트 - 사용자 단에서의 테스트
      • 인수 테스트(Acceptance Test) : 개발한 소프트웨어가 사용자 요구사항을 충족하는지 중점을 두고 테스트
        • 종류
          • 사용자 인수 테스트 : 사용자가 시스템 사용 적절성 여부 확인
          • 운영상 인수 테스트 : 시스템 관리자가 시스템 인수 시 수행하는 테스트 기법.
          • 계약 인수 테스트 : 계약상 인수 / 검수 조건을 준수하는지 여부 확인
          • 규정 인수 테스트 : 소프트웨어가 정부 지침, 법규, 규정 등 규정에 맞게 개발되었는지 확인
          • 알파 테스트 : 개발자의 장소에서 사용자가 개발자 앞에서 행하는 테스트. 통제된 환경(개발자가 있는)에서 개발자와 사용자가 함께 확인하며 오류와 문제점 기록
          • 베타 테스트 : 선정된 최종 사용자가 여러 명 사용자 앞에서 행하는 테스트 기법. 제어되지 않은 환경에서 실 업무를 갖고 직접 테스트. 오류와 문제점을 주기적으로 개발자에게 보고

어플리케이션 테스트 프로세스

 

  1. 테스트 계획 : 프로젝트 계획서, 요구 명세서 등 기반으로 테스트 목표 정의 및 테스트 대상 및 범위 결정
    • 절차
      1. 테스트 대상 시스템 구조 파악
      2. 테스트에 투입되는 조직 및 비용 산정
      3. 테스트 시작 및 종료 조건 정의
      4. 테스트 계획서 작성 
  2. 테스트 분석 및 디자인 : 테스트 목적과 원칙을 검토하고 사용자 요구 사항 분석
  3. 테스트 케이스 및 시나리오 작성 : 테스트 케이스 설계 기법에 따라 테스트 케이스 작성, 검토 및 확인 후 테스트 시나리오 작성.
  4. 테스트 수행 : 테스트 환경 구축 후 테스트 수행
  5. 테스트 결과 평가 및 리포팅 : 테스트 결과 비교 분석해 테스트 결과서 작성
  6. 결함 추적 및 관리 : 테스트 수행 후 결하밍 어디에서 발생했는지, 어떤 종류 결함인지 추적 및 관리
    • 결함 관리 프로세스
      1. 에러 발견
      2. 에러 등록
      3. 에러 분석
      4. 결함 확정
      5. 결함 할당
      6. 결함 조치
      7. 결함 조치 검토 및 승인
    • 결함의 원인이 되는 것이 오류. 일반적으로 사람에 의해 발생한 실수 의미. 오류로 인해 소프트웨어 제품에 발생한 것이 결함.

 

  • 최종 산출물 : 테스트 계획서, 테스트 케이스, 테스트 시나리오, 테스트 결과서

테스트 케이스 / 테스트 시나리오 / 테스트 오라클

 

  • 테스트 케이스 : 구현된 소프트웨어가 요구사항을 준수했는지 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성된 테스트 항목에 대한 명세서.
    • 작성 순서
      1. 테스트 계획 검토 및 자료 확보
      2. 위험 평가 및 우선순위 결정
      3. 테스트 요구사항 정의
      4. 테스트 구조 설계 및 테스트 방법 결정
      5. 테스트 케이스 정의
      6. 테스트 케이스 타당성 확인 및 유지 보수 : 소프트웨어 기능 또는 환경 변화에 따라 테스트 케이스 갱신
  • 테스트 시나리오 : 테스트 케이스 적용 순서에 따라 여러 테스트 케이스들을 묶은 집합. 테스트 적용 구체적 절차를 명세한 문서. 순서를 기입해 테스트 항목 빠짐없이 수행 가능
  • 테스트 오라클 : 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입해 비교하는 기법 및 활동
    • 특징
      • 제한된 검증 : 모든 테스트 케이스에 적용 불가
      • 수학적 기법 : 값을 수학적 기법을 이용해 산출 가능
      • 자동화 기능 : 테스트 대상 프로그램 실행, 결과 비교, 커버리지 측정 등 자동화 가능
    • 종류
      • 참 오라클 : 모든 테스트 케이스 입력 값에 대해 기대하는 결과를 제공하는 오라클. 모든 오류 검출 가능
      • 샘플링 오라클 : 특정한 몇몇 테스트 케이스 입력 값들에 대해서만 기대하는 결과를 제공하는 오라클
      • 추정(Heuristic) 오라클 : 샘플링 오라클 개선 오라클. 특정 테스트 케이스 입력값에 대해 기대하는 결과 제공, 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클
      • 일관성 검사(Consistent) 오라클 : 애플리케이션 변경이 있을 때 테스트 케이스 수행 전과 후의 결과 값이 동일한지 확인하는 오라클

테스트 자동화 도구

 

스크립트 형태로 구현하는 자동화 도구를 적용해 쉽고 효율적으로 테스트 수행. 휴먼 에러를 줄이고 테스트 정확성을 유지하며 테스트 품질 향상 가능

 

  • 유형
    • 정적 분석 도구 : 프로그램을 실행하지 않고 분석하는 도구. 코딩 표준, 코딩 스타일, 코드 복잡도 및 남은 결함 등을 발견하기 위해 사용
    • 테스트 실행 도구 : 스크립트 언어를 사용해 테스트를 실행하는 방법
      • 데이터 주도 접근 방식 : 스프레드시트에 테스트 데이터를 저장해 이를 읽어 실행하는 방식
      • 키워드 주도 접근 방식 : 스프레드시트에 테스트를 수행할 동작을 나타내는 키워드와 테스트 데이터를 저장하여 실행하는 방식
    • 성능 테스트 도구 : 인위적으로 적용한 가상의 사용자를 만들어 테스트 수행. 성능 목표 달성 여부 확인
    • 테스트 통제 도구 : 테스트 계획 관리, 테스트 수행, 결함 관리 등 수행
    • 테스트 하네스 도구 : 어플리케이션 컴포넌트 및 모듈 테스트하는 환경의 일부분. 테스트를 지원하기 위해 생성된 코드와 데이터를 의미.
      • 구성 요소 - 테스트 드라이버, 테스트 스텁, 테스트 슈트(순서가 없는 테스트 케이스 집합), 테스트 케이스, 테스트 스크립트(순서가 있는 테스트 케이스 집합), 목 오브젝트(사전에 사용자 행위를 조건부 입력해두면 상황에 맞는 예정된 행위를 수행하는 객체)

결함 관리

 

결함의 정의 : 소프트웨어가 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생되는 것

 

  • 결함 관리 프로세스
    1. 결함 관리 계획 : 전체 프로세스에 대한 계획 수립
    2. 결함 기록 : 발견된 결함을 결함 관리 DB에 등록
    3. 결함 검토 : 등록된 결함을 검토하고 결함을 수정할 개발자에게 전달
    4. 결함 수정 : 개발자 결함 수정
    5. 결함 재확인 : 수정한 내용 확인, 다시 테스트 수행
    6. 결함 상태 추적 및 모니터링 활동 : 결함 관리 DB를 이용해 프로젝트별 결함 유형, 발생률 등을 한 눈에 볼 수 있는 대시보드 또는 게시판 형태 서비스 제공
      • 결함 관리 측정 지표 (결함의 상태 변화에 대해 관리, 측정)
        • 결함 분포 : 모듈 또는 컴포넌트의  특정 속성에 해당하는 결함 수 측정
        • 결함 추세 : 테스트 진행 시간에 따른 결함 수 추이 분석
        • 결함 에이징 : 특정 결함 상태로 지속되는 시간 측정
      • 결함 추적 순서
        1. 결함 등록 
        2. 결함 검토 
        3. 결함 할당
        4. 결함 수정
        5. 결함 조치 보류
        6. 결함 종료
        7. 결함 해제
    7. 최종 결함 분석 및 보고서 작성 : 발견된 결함에 대한 정보와 이해관계자들의 의견이 반영된 보고서를 작성하고 결함 관리 종료
  • 결함 분류
    • 시스템 결함 : 시스템 다운, 어플 작동 정지, 종료, 응답 시간 지연, DB 에러 등
    • 기능 결함 : 사용자 요구사항 미반영 / 불일치, 부정확한 비즈니스 프로세스, 스크립트 오류, 타 시스템 연동 시 오류 등
    • GUI 결함 : UI 비일관성, 데이터 타입 표시 오류, 부정확한 커서 / 메시지 오류 등
    • 문서 결함 : 사용자 요구사항과 기능 요구사항의 불일치로 인한 불완전한 상태의 문서, 사용자의 온라인/오프라인 매뉴얼 불일치 등
  • 결함 심각도 / 우선순위 : Critical - High - Medium - Low
  • 결함 관리 도구 : Mantis, Trac, Redmine, Bugzilla

어플리케이션 성능 분석

 

  • 성능 측정 지표 : 처리량(Throughput), 응답 시간(Response Time), 경과 시간(Trun Around Time), 자원 사용률(Resource Usage)
  • 성능 테스트 도구 : 어플에 부하나 스트레스를 가해 성능 측정 지표 점검
    • JMeter, LoadUI, OpenSTA
  • 시스템 모니터링(Monitoring) 도구 : 어플이 실행됐을 때 시스템 자원 사용량 확인 및 분석
    • Scouter, Zabbix

어플리케이션 성능 개선

 

  • 소스 코드 최적화 : 나쁜 코드 배제, 클린 코드로 작성하는 것.
    • 클린 코드 작성 원칙 : 가독성, 단순성, 의존성 배제, 중복성 최소화, 추상화
    • 유형
      • 클래스 분할 배치 : 하나의 클래스는 하나의 역할만. 응집도는 높이되, 크기는 작게
      • 느슨한 결합(Loosely Coupled) : 인터페이스 클래스를 이용해 추상화된 자료 구조와 메소드를 구현함으로써 클래스 간 의존성 최소화. 결합도 낮추기
      • 코딩 형식 준수 : 줄 바꿈 사용 / 개념적 유사성 높은 종속 함수 사용 / 호출하는 함수는 선배치, 호출되는 함수는 후배치 / 지역 변수는 함수 맨 처음에 선언
      • 좋은 이름 사용
      • 적절한 주석문 사용
  • 소스 코드 품질 분석 도구
    • 정적 분석 도구 : 실행하지 않고 분석
      • pmd, cppcheck, SonarQube, checkstyle, ccm, cobertura
    • 동적 분석 도구 : 코드를 실행하여 코드 속 메모리 누수, 스레드 결함 등 분석
      • Avalanche, Valgrind

'그 외 공부 > 정처기-실기(완)' 카테고리의 다른 글

9장 소프트웨어 개발 보안 구축  (0) 2021.07.06
8장 SQL 응용  (0) 2021.07.06
6장 화면 설계  (0) 2021.07.02
5장 서버 프로그램 구현  (0) 2021.06.29
4장 통합 구현  (0) 2021.06.27

사용자 인터페이스(User Interface, UI)

 

UI란, 사용자와 시스템 간 상호작용이 원활히 이뤄지도록 도와주는 장치나 소프트웨어.

 

  • 분야
    • 물리적 제어
    • 콘텐츠의 상세적 표현과 전체적 구성
    • 기능
  • 특징
    • 사용자 만족도에 가장 큰 영향을 미침
    • 작업 시간을 단축, 업무에 대한 이해도 높여줌
    • 최소한 노력으로 원하는 결과
    • 수행 결과 오류 줄임
    • 작업 기능에 대한 구체적 방법 제시
    • 정보 제공자 - 공급자 간 매개 역할
    • 소프트웨어 아키텍처를 숙지해야 함.
  • 구분
    • CLI(Command Line Interface) : 명령과 출력이 텍스트형태로 이뤄짐
    • GUI(Graphical User Interface) : 아이콘이나 메뉴를 마우스로 선택해 작업을 수행하는 그래픽 환경 인터페이스
    • NUI(Natural User Interface) : 사용자의 말이나 행동으로 기기를 조작하는 인터페이스
  • 기본 원칙
    • 직관성 : 누구나 쉽게 이해하고 사용
    • 유효성 : 목적을 정확하고 완벽하게 달성해야 함
    • 학습성 : 누구나 쉽게 배우고 익혀야 함
    • 유연성 : 사용자 요구사항을 최대한 수용하고 실수를 최소화해야 함.
  • 설계 지침
    • 사용자 중심 : 사용자가 쉽게 이해하고 편리하게 사용할 수 있는 환경을 제공, 실사용자에 대한 이해가 바탕이 되어야 함.
    • 일관성 : 조작 방법 등을 일관성있게 제공하여 사용자가 쉽게 기억하고 습득할 수 있게 설계해야 함.
    • 조작 방법을 단순화시켜 인지적 부담을 감소시켜야 함.
    • 결과 예측 가능 : 작동시킬 기능만 보고도 결과를 예측할 수 있게 설계해야 함
    • 가시성 : 주요 기능을 메인에 노출시켜 조작을 쉽게 설계해야 함.
    • 표준화 : 기능 구조와 디자인을 표준화해 한 번 학습한 이후 쉽게 사용할 수 있도록 설계해야 함.
    • 접근성 : 다양한 계층이 남녀노소 설계해야 함.
    • 명확성 : 사용자가 개념적으로 쉽게 인지하게 설계해야 함.
    • 오류 발생 해결 : 오류가 발생하면 사용자가 쉽게 인지하게 설계해야 함.
  • UI 설계 도구
    • 와이어프레임
      • 개략적 레이아웃이나 UI 요소 등에 대한 뼈대를 설계하는 것
    • 목업
      • 와이어프레임보다 좀 더 실제 화면과 유사하게 만든 정적 모형
    • 스토리보드
      • 와이어프레임 + 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등
    • 프로토타입
      • 와이어프레임이나 스토리보드 등 인터랙션을 적용
    • 유스케이스
      • 사용자 측면 요구사항. 

UI 표준 및 지침

 

UI 표준 : 전체 시스템에 포함된 모든 UI에 공통적으로 적용될 내용

UI 지침 : UI 개발 과정에서 꼭 지켜야 할 공통의 조건

 

  • 웹의 3요소
    • 웹 표준 (Web Standards) : 웹에서 사용되는 규칙 또는 기술
    • 웹 접근성 (Web Accessibility) : 누구나 어떤 환경에서도 웹 사이트에 제공하는 모든 정보를 접근해 이용할 수 있도록 보장하는 것
    • 웹 호환성 (Cross Browsing) : 하드웨어나 소프트웨어 등이 다른 환경에서도 모든 이용자에게 동등한 서비스를 제공
  • UI 스타일 가이드
    • 구동 환경 정의
      • 프레임 세트 : 화면을 Top, Left, Contents 등 영역으로 프레임을 구분해 적용
    • 레이아웃 정의
      • 화면 구조 정의, 각 영역 메뉴 구성. Top, Left, Contents, Footer가 있음.
    • 네비게이션 정의
      • 네비게이션 메뉴 타입을 선택해 적용
    • 기능 정의
      • 시스템에 적용할 업무 과정에서 일어나는 모든 활동(프로세스 모델링 정의)이나 필요한 데이터 간 관계(데이터 모델 정의)를 논리적 모델로 상세화
    • 구성 요소 정리
      • 화면에 표시할 그리드(테이블 형식으로 쉽게 데이터 표시)나 버튼(기능 / 검색 / 그리드 관련 / 기타) 정의

UI 요구사항 확인

 

  1. 목표 정의
    • 사용자들 대상 인터뷰 진행. 사용자들의 의견이 수렴된 비즈니스 요구사항 정의
  2. 활동 사항 정의
    • 조사한 요구사항을 토대로 앞으로 해야 할 활동 사항 정의
  3. UI 요구사항 작성
    1. 요구사항 요소 확인
      • 데이터 요구
      • 기능 요구
      • 제품 / 서비스 품질
      • 제약 사항
    2. 정황 시나리오 작성
      • 사용자의 요구사항을 도출하기 위해 작성하는 것. 사용자 관점 시나리오.
    3. 요구사항 작성

UI 프로토타입 제작 및 검토

 

  • 장점
    • 사용자 설득, 이해가 쉬움
    • 혼선 예방. 개발 시간 단축
    • 사전 오류 발견
  • 단점
    • 사용자 모든 요구사항을 반영하기 위한 프로토타입 개선 및 보완 작업 때문에 작업 시간 증가, 필요 이상 자원 소모 가능성
    • 중요한 작업이 생략될 수도 있음
  • 종류
    • 페이퍼 프로토타입
    • 디지털 프로토타입
  • 개발 단계
    • 사용자 요구사항 분석
    • 프로토타입 작성. 핵심 기능 중심 개발
    • 요구사항을 잘 수행하는 지 확인
    • 프로토타입 기반 수정과 합의

UI 흐름 설계

 

  1. 기능 작성
    • 기능적 / 비기능적 요구사항 정리
  2. 입력 요소 확인
    • 화면에 표현되어야 할 기능 확인 후 화면에 입력할 요소 확인
    • 기능 확인 - 입력 요소 확인 - 화면 확인 - 화면 간 흐름 확인
  3. 유스케이스 설계
    • UI 요구사항 기반 UI 유스케이스 설계
  4. 기능 및 양식 확인
    • 텍스트 박스, 콤보 박스, 라디오 박스, 체크 박스 확인 및 규칙 정의

UI 상세 설계

 

  1. 요구사항 확인
    • UI 상세 설계를 위한 요구사항 최종 확인
  2. UI 설계서 표지 및 개정 이력 작성
    • 표지엔 시스템이나 프로젝트명 포함해 작성
    • UI 설계서가 수정될 때마다 버전으로 0.1씩 높임. 초안 버전은 1.0
  3. UI 구조 설계
    • UI 요구사항과 UI 프로토타입에 기초해 UI 구조 설계
  4. 메뉴 구조 설계
    • 사이트 맵 구조를 통해 사용자 기반 메뉴 구조 설계
      1. 사이트에 표시할 콘텐츠를 한 눈에 알아 볼 수 있게 메뉴별 구분한 사이트 맵 구조 설계
      2. 작성한 사이트 맵 상세 내용을 표 형태로 작성
      3. 사용자 요구 프로세스들에 대해 작업 진행 순서에 맞춰 프로세스 정의서 작성
  5. 화면 설계
    • UI 프로토타입과 UI 프로세스 참고해 필요한 화면을 페이지별로 설계

 

'그 외 공부 > 정처기-실기(완)' 카테고리의 다른 글

8장 SQL 응용  (0) 2021.07.06
7장 어플리케이션 테스트 관리  (0) 2021.07.05
5장 서버 프로그램 구현  (0) 2021.06.29
4장 통합 구현  (0) 2021.06.27
3장 데이터 입*출력 구현  (0) 2021.06.27

개발 환경 구축

 

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

 

  • 하드웨어 환경
    • 클라이언트 : 사용자와의 인터페이스 역할
      • PC, 스마트폰
    • 서버 : 클라이언트와 통신해 서비스 제공
      • 웹 서버(Web Server) : 클라이언트로부터 직접 요청을 받아 처리하는 서버. 저용량 정적 파일(ex)html, css) 제공
        • 기능
          • HTTP/HTTPS 지원 : 브라우저로부터 요청을 받아 응답할 때 사용하는 프로토콜
          • 통신 기록(Communication Log) : 처리한 요청들을 로그 파일로 기록
          • 정적 파일 관리(Managing Static Files) : HTML, CSS, 이미지 등 정적 파일들을 저장하고 관리
          • 대역폭 제한(Bandwidth Throtting) : 네트워크 트래픽 포화 방지하기 위한 응답 속도 제한
          • 가상 호스팅 : 하나의 서버로 여러 개 도메인 이름 연결
          • 인증(Authentication) : 사용자가 합법적 사용자인지 확인
      • 웹 어플리케이션 서버(WAS; Web Application Server) : 사용자에게 동적 서비스(사용자의 입력에 따라 다른 결과를 보여주는 서비스)를 제공하기 위해 웹 서버로부터 요청을 받아 데이터 가공 작업을 수행하거나, 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이 인터페이스 역할을 수행하는 서버
      • 데이터베이스 서버 : 데이터베이스와 이를 관리하는 DBMS를 운영하는 서버
      • 파일 서버 : 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장하는 서버
  • 소프트웨어 환경
    • 시스템 소프트웨어 : 클라이언트와 서버 운영을 위함
      • 운영체제, 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS
    • 개발 소프트웨어 : 개발에 사용
      • 요구사항 관리 도구 : 요구사항 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어
        • JIRA, IBM DOORS, inteGREAT, Reqtify, Trello 등
      • 설계 / 모델링 도구 : UML(통합 모델링 언어)을 지원하며 개발의 전 과정에서 설계 및 모델링을 도와주는 소프트웨어 
        • DB Designer, PlantUML, ArgoUML 등
      • 구현 도구 : 개발 언어를 통해 어플리케이션 실제 구현을 지원하는 소프트웨어
        • Eclipse, IntelliJ IDEA, Visual Studio, Netbeans, Node.js 등
        • 적정성, 효율성, 이식성, 친밀성, 범용성
      • 빌드 도구 : 구현 도구를 통해 작성된 소스 빌드 및 배포, 라이브러리 관리를 지원하는 소프트웨어
        • Ant, Gradle, Maven, Jenkins 등
      • 테스트 도구 : 모듈들이 요구사항에 적합하게 구현됐는지 테스트하는 소프트웨어
        • CppUnit, JUnit, HttpUnit, NUnit, SpringTest 등
      • 형상 관리 도구 : 산출물들을 버전별로 관리해 품질 향상을 지원하는 소프트웨어
        • GIT, CVS, Subversion, Mercurial 등

모듈(Module)

 

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

결합도는 약하게 응집도는 강하게 모듈의 크기는 작게 만들어야 한다.

 

  • 결합도(Coupling)
    • 모듈 간 상호 의존하는 정도 또는 두 모듈 사이 연관 관계를 의미한다.
    • 종류
      • 자료 결합도(Data) : 모듈 간 인터페이스가 자료 요소로만 구성될 때 결합도이다. 모듈 간의 내용을 전혀 알 필요가 없는 상태로, 한 모듈의 내용을 변경해도 다른 모듈에는 전혀 영향을 미치지 않는다.
      • 스탬프 결합도(Stamp) : 모듈 간 인터페이스로 배열이나 레코드 등의 자료 구조가 전달될 때의 결합도이다. 두 모듈이 동일한 자료 구조를 조회하는 경우의 결합도이며, 포맷이나 구조의 변화는 그것을 조회하는 모든 모듈 및 변화되는 필드를 실제로 조회하지 않는 모듈에까지 영향을 미치게 된다.
      • 제어 결합도(Control) : 어떤 모듈이 다른 모듈 내부의 논리적 흐름을 제어하기 위해 제어 신호를 이용해 통신하거나 제어 요소를 전달하는 결합도이다. 하위 모듈에서 상위 모듈로 제어 신호가 이동해 하위 모듈이 상위 모듈에게 처리 명령을 내리는 권리 전도현상이 발생하게 된다.
      • 외부 결합도(External) : 어떤 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때의 결합도이다. 참조되는 데이터 범위를 각 모듈에서 제한할 수 있다.
      • 공통 결합도(Common) : 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도이다. 공통 데이터 영역을 조금만 변경해도 이를 사용하는 모든 모듈에 영향을 미쳐 모듈의 독립성을 약하게 만든다.
      • 내용 결합도(Content) : 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도이다. 한 모듈에서 다른 모듈의 내부로 제어가 이동하는 경우에도 내용 결합도에 해당한다.
  • 응집도 (Cohesion)
    • 정보 은닉 개념을 확장한 것으로, 명령어나 호출문 등 모듈이 독립적인 기능으로 정의되어 있는 정도를 의미한다.
      • 기능적 응집도(Functional) : 모듈 내부 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우 응집도
      • 순차적 응집도(Sequential) : 모듈 내 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우 응집도
      • 교환적 응집도(Communication) : 동일한 입*출력을 사용해 서로 다른 기능을 수행하는 구성 요소들이 모였을 경우 응집도
      • 절차적 응집도(Porcedural) : 모듈이 다수 관련 기능을 가질 때 모듈 안 구성 요소들이 그 기능을 순차적으로 수행할 경우의 응집도
      • 시간적 응집도 (Temporal) : 특정 시간에 처리되는 몇 개 기능을 모아 하나의 모듈로 작성할 경우 응집도
      • 논리적 응집도 (Logical) : 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우 응집도
      • 우연적 응집도 (Coincidental) : 모듈 내부 각 구성 요소들이 서로 관련 없는 요소로만 구성된 경우 응집도

팬인 / 팬아웃

 

팬인이란 모듈을 제어(호출)하는 모듈 수

팬아웃은 모듈에 의해 제어(호출)되는 모듈 수

 

시스템의 복잡도를 최적화하려면 팬인은 높게, 팬아웃은 낮게 설계해야 한다.


공통 모듈

 

공통 모듈이란 여러 프로그램에서 공통적으로 사용할 수 있는 모듈을 의미한다.

 

  • 공통 모듈을 구현할 때 명세 기법
    • 정확성(Correctness) : 시스템 구현 시 해당 기능이 필요하다는 것을 정확히 작성
    • 명확성(Clarity) : 해당 기능을 명확히 이해할 수 있도록 작성
    • 완전성(Completeness) : 시스템 구현을 위해 필요한 모든 것 기술
    • 일관성(Consistency) : 공통 기능들 간 상호 충돌이 발생하지 않도록 작성
    • 추적성(Traceability) : 기능에 대한 요구사항 출처, 관련 시스템 등의 관계를 파악할 수 있도록 작성

재사용

 

재사용이란 비용과 개발 시간 절약을 위해 이미 개발된 기능을 파악하고 재구성해 새로운 시스템 또는 기능 개발에 사용하기 적합하도록 최적화 시키는 작업을 말한다.


DBMS 접속

 

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

 

  • DBMS 접근 순서
    • 인터넷을 통해 구동되는 웹 응용 프로그램은 웹 응용 시스템(웹 서버 + WAS)을 통해 DBMS에 접근한다. 
  • DBMS 접속 기술 : DBMS에 접근하기 위해 사용하는 API 또는 API의 사용을 편리하게 해주는 프레임워크를 의미0
    • JDBC(Java DataBase Connectivity)
      • Java 언어로 다양한 종류의 데이터베이스에 접속하고 SQL 문을 수행할 때 사용되는 표준 API이다. 
      • 접속하려는 DBMS에 대한 드라이버가 필요하다.
    • ODBC(Open DataBase Connectivity)
      • 데이터벵시ㅡ에 접근하기 위한 표준 개방형 API. 개발 언어에 관계 없이 이용 가능.
      • 마이크로소프트에서 출시했다.
      • DBMS의 종류를 몰라도 알아서 드라이버를 설치해준다.
    • MyBatis
      • JDBC 코드를 단순화해 사용할 수 있는 SQL Mapping 기반 오픈 소스 프레임워크이다.
      • SQL 거의 그대로 사용할 수 있다.
  • 동적 SQL
    • SQL 구문을 다양한 조건에 따라 동적으로 변경해 처리할 수 있는 SQL 처리 방식.
    • 응용 프로그램을 실행시킨 후 입력란에 SQL을 직접 입력해 결과를 확인할 수 있는 것.
    • ex) Select 문장에서 조회되는 컬럼명이나  테이블, 조건절에서의 컬럼명등이 상황에 따라 변할 때 사용

서버 개발

 

서버 개발은 웹 어플리케이션 로직을 구현할 서버 프로그램을 제작해 웹 어플리케이션 서버(WAS)에 탑재하는 것을 의미. 이는 웹 서버로부터 받은 요청을 처리해 결과를 반환하는 역할을 수행한다.

 

  • 서버 개발 프레임워크
    • Spring
      • JAVA 기반 프레임워크. 전자정부 표준 프레임워크 기반 기술로 사용
    • Node.js
      • JavaScript 기반으로 만들어진 프레임워크. 비동기 입*출력 처리와 이벤트 위주 높은 처리 성능을 가져 실시간으로 입*출력이 빈번한 어플에 적합
    • Django
      • Python 기반 프레임워크. 컴포넌트 재사용과 플러그인화를 강조해 신속한 개발이 가능하도록 지원
    • Codeigniter
      • PHP 기반 프레임워크. 인터페이스가 간편해 서버 자원을 적게 사용.
    • Ruby on Rails
      • Ruby 기반 프레임워크. 테스트를 위한 웹 서버 지원. 데이터베이스 작업 단순화, 자동화시켜 개발 코드의 길이가 짧아 신속 개발 가능
  • 서버 개발 과정(순서는 개발자 임의로 변경 가능. 소프트웨어 개발 보안 가이드 참고)
    • DTO(Data Transfer Object)/VO(Value Object) 구현
      • 데이터 교환을 위해 사용할 객체를 만드는 과정. 변수와 데이터를 저장하고 반환하는 메소드만 구현.
      • DTO는 데이터 교환을 위해 생성되는 객체. VO는 DTO와 동일하나 읽기만 가능. 변경 불가능.
    • SQL 구현
      • 데이터 삽입, 변경, 삭제 등의 작업을 수행할 SQL문 생성 과정.
      • 소스 코드 내 직접 입력하거나 별도 XML 파일로 저장해 관리.
    • DAO(Data Access Object)
      • 데이터베이스에 접근하고, SQL을 활용해 데이터를 실제로 조작하는 코드 구현 과정. 실제 SQL문이 작동하는 곳.
    • Service 구현
      • 사용자 요청에 응답하기 위한 로직 구현 과정
    • Controller 구현
      • 사용자 요청에 적절한 서비스를 호출해(위에서 구현한 Service 중 사용자 요청에 해당하는 Service) 그 결과를 사용자에게 반환하는 코드 구현
  • 서버 각 구성 요소 진행 과정

배치 프로그램(Batch Program)

 

배치 프로그램이란 사용자와 상호 작용 없이 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하는 것을 의미

 

  • 수행되는 주기에 따른 배치 프로그램
    • 정기 배치 : 정해진 기간에 정기적 수행
    • 이벤트성 배치 : 특정 조건이 충족될 때만 수행
    • On-Demand 배치 : 사용자 요청 시 수행
  • 배치 프로그램 필수 요소
    • 대용량 데이터 : 대량의 데이터를 가져오거나, 전달하거나, 계산하는 등의 처리가 가능해야 함.
    • 자동화 : 심각한 오류가 발생하는 상황 제외, 사용자 개입 없이 수행되어야 함.
    • 견고성 : 잘못된 데이터나 데이터 중복 등 상황으로 중단되는 일 없이 수행해야 함
    • 안전성 / 신뢰성 : 오류가 발생하면 오류 발생 위치, 시간 등을 추적 가능해야 함
    • 성능 : 다른 응용 프로그램 수행 방해하면 안되고, 지정된 시간 내 처리 완료되어야 함.
  • 배치 스케쥴러(Batch Scheduler / Job Scheduler)
    • 일괄 처리(Batch Processing0 작업이 설정된 주기에 맞춰 자동으로 수행하도록 지원해주는 도구
    • 종류
      • Spring Batch
        • 스프링 프레임워크 특성을 그대로 가져와 스프링이 갖고 있는 다양한 기능 모두 사용 가능
          • DB나 파일 데이터 교환하는데 필요한 컴포넌트 제공
          • 로그 관리, 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작 등 다양한 기능 제공 
        • 구성 요소
          • Job : 수행 작업 정의
          • Job Launcher : 실행 인터페이스
          • Step : Job 처리 위한 제어 정보
          • Job Repository : Step 제어 정보 포함 작업 실행을 위한 모든 정보 저장
      • Quartz
        • 스프링 프레임워크로 개발되는 응용 프로그램들의 일괄처리를 위한 다양한 기능을 제공하는 오픈소스 프레임워크
        • 수행할 작업(Job)과 수행 시간을 관리하는 요소(Trigger)들을 분리해 일괄 처리 작업에 유연성 제공
        • 구성 요소
          • Scheduler : 실행 환경 관리
          • Job : 수행 작업 정의
          • JobDetail : Job 상세 정보
          • Trigger : Job 실행 스케줄 정의
      • Cron
        • 리눅스 스케줄러 도구. crontab 명렁어를 통해 작업 예약.
        • 편집기에서 [분][시][일][월][요일]을 기준으로 수행 명령어 지정
        • 옵션
          • -e  : 편집기 호출. 작업 추가 및 수정
          • -l : 작업 목록 출력
          • -r : 작업 삭제
        • 작업 예약 형식
          • [분][시][일][월][요일][명령어]
          • * 입력 시 매 시기마다 수행
            • * * * * * /root/hello.sh -> 매월 매일 매시 매분마다 /root/hello.sh 실행하라.
          • 시기 우측에 /[단위] 입력하면 시기를 단위로 나눈 나머지가 0일 때마다 수행
            • * * * */3 * /root/hello.sh -> 매월 매시 매분 3일마다 /root/hello.sh 실행하라.
          • [시작 시기]-[종료 시기]를 통해 특정 구간에만 반복해 명령어 실행
            • * 18-23 * * * /root/hello.sh -> 매월 매일 오후 6시부터 11시 사이 매분마다 /root/hello.sh 실행하라.
          • [시기1], [시기2], [시기3], ... 을 통해 특정 시기에 명령 실행 가능
            •  15,30,45 * * * * /root/hello.sh -> 매월 매일 매시 15분, 30분, 45분에 /root/hello.sh을 실행하라.

'그 외 공부 > 정처기-실기(완)' 카테고리의 다른 글

7장 어플리케이션 테스트 관리  (0) 2021.07.05
6장 화면 설계  (0) 2021.07.02
4장 통합 구현  (0) 2021.06.27
3장 데이터 입*출력 구현  (0) 2021.06.27
2장 요구사항 확인  (0) 2021.06.26

+ Recent posts