정보처리기사 실기 (2020 개정) 제대로 배우기 Part.1
이예솔의 프로필 사진 이예솔
프로그래밍 언어 활용
프로그래밍 언어 활용 A

c언어 연산자 우선순위

단항 > 산술 > 쉬프트 > 관계 > 비트 > 논리 > 조건 > 대입 > 순서

  1. 단항: !  ~  ++  --  sizeof(비트크기 반환)
  2. 산술: +  -  *  /  %
  3. 쉬프트:  <<  >>
  4. 관계: <  <=  >  >=  ==  !=
  5. 비트: &(and)  ^(xor)  |(or)  
  6. 논리: &&  ||
  7. 삼항연산자(조건): (조건)?참:거짓
  8. 대입: =  +=  -=  *=  /=  %=  <<=  >>=  &=  ^=  |=
  9. 순서: , 

비트 쉬프트 연산 >> <<

int a = 10;
printf("a shift = %d\n", a>>2); // 10 -> 1010(2) ->10(2) -> 2

증감 연산자 위치

int a = 4;
printf("%d\n", 10 % a++); // 10%4 =2
printf("%d\n", a); // a++가 나머지 연산 끝난 후 적용됨 ->5
프로그래밍 언어 활용 B

goto 변수명

변수명의 위치로 코드 되돌아가는듯

sizeof(변수 or 값)

괄호 안 값의 비트 수를 반환

int main(void) {
	int exint[] = { 3, 4, 5, 77, 6, 4, 7, 2, 3, 4, 7};
	printf("%d\n%d\n", sizeof(exint), sizeof(int)); // int형 4비트, int 11개인 배열 44비트
}
프로그래밍 언어 활용 C

 C언어 포인터

c언어 포인터 선언

int a = 100;
*b = &a; // a의 주소값을 b에 저장
print("%d", *b); // 100

*b에는 a의 주소값이 저장되어 있다. print와 같이 *b변수가 호출되면 저장된 주소를 따라 변수a에 다다르게 되고, 해당 주소값을 값을 반환해서 최종적으로 *b = 100이 된다.

배열의 포인터

int main(void) {
	int a[] = {3, 4, 5, 6};
	void change(int *p) {
		printf("%d\n", *p); // a[0] =3
		printf("%d\n", *p+1); //a[1] =4
		printf("%d\n", a[*p]); //a[a[0]] = a[3] =6
	}
	change(a); // 3
}

배열을 포인터 변수에 저장하면 배열의 첫 번째 값을 가리키게 된다.

JAVA 클래스와 메서드

Python

표준 입출력

name = input("name: ") // 입력
print(name) // 출력

python 리스트

List.sort() -> 순방향 정렬

List.reverse() -> 역방향 정렬

python for

for i in range(5):
	print(i)

range(초기값, 최종값, 증가값): i = 초기값부터 최종값 직전까지 증가값만큼 증가

python 클래스

class Person:
	name = "lee"
	age = 20
	
	def introduce(self):
		print(self.name)

a = Person()
a.introduce()

파이썬 클래스의 메소드를 만들 때 메소드 인자로 self (함수 주인인 클래스 인스턴스)를 반드시 넣어준다.

기타

123456,789E-3 = 123456.789 * 10의 -3승

프로그래밍 언어 활용 D

언어별 대표 표준 라이브러리

c언어

  • stdio.h: 입출력 (scanf, printf)
  • math.h: 수학 함수 (sqrt, pow, abs)
  • string.h: 문자열 처리
  • stdlib.h: 자료형 변환, 난수발생, 메모리할당
  • time.h: 시간처리

Java

  • java.lang: 기본 내장 기능
  • java.util: 날짜, 난수, 문자열
  • java.io: 입출력
  • java.net: 네트워크
  • java.awt: 사용자 인터페이스

python

  • 내장함수: 기본 함수
  • os: 운영체제 상호작용
  • re: 문자열
  • math: 수학연산
  • random: 무작위 선택
  • statistics: 통계값 산출
  • datatime: 날짜, 시간

절차적 프로그래밍 언어

  • 개요:절차를 문법에 따라 순서대로 기술
  • 종류: C, ALGOL(계산), COBOL(사무용, 4 division), FORTRAN

절차적 프로그래밍 언어 장점

실행 속도 빠름/ 같은 코드는 호출로 사용/ 모듈화 / 구조적 프로그래밍

절차적 프로그래밍 언어 단점

프로그램 분석 어려움 / 유지, 보수, 수정 어려움

객체지향 프로그래밍 언어

  • 개요: 현실 세계의 개체를 하나의 객체로 만듦.
  • 상속으로 코드 재사용, 재활용
  • 분석, 설계 용이
  • 소프트웨어에 대한 이해, 개발, 유지보수 용이
  • 구현 시간 지연
  • 종류: Java, C++(c언어에 객체지향), smalltalk(최초 GUI제공)
  • 특징: 캡슐화-정보은닉(데이터-함수 묶기), 추상화(생략->중요한것만), 상속성, 다형성

객체

객체 = 속성 + 메소드

스크립트 언어

  • 개요: html 문서 안에 직접 프로그래밍 언어 삽입하여 사용하는 것
  • 데이터베이스 처리 작업 수행을 위해 주로 사용
  • 서버용: ASP, JSP, PHP, 파이썬
  • 클라이언트용: javascript

장점

  • 컴파일(번역)없이 실행 -> 수정 결과 즉시 확인가능
  • 문법 쉬움
  • 개발 소요시간 짧음
  • 쉽게 수정가능

단점

  • 코드를 한줄한줄 읽고 실행해서 속도 느림
  • 런타임 오류 자주 발생

선언형 언어

  • 선언형: 수행할 문제를 기술 / 알고리즘 명시하지 않고 목표 명시 => 함수형 / 논리형
  • 명령형: 문제 해결 방법 기술 / 알고리즘 명시하고 목표 명시 안함

함수형(적용형): 수학적 함수 조합, 재귀호출 많음, 병렬 처리 용이

논리형: 기호논리학 (ex. prolog). 반복문x, 조건문x

선언형 언어 장점

  • 가독성, 재사용성
  • 작동순서 구체적 작성 안해서 오류 적음
  • 프로그램 동작 변경 없이 관련 값 대체 가능

 

프로그래밍 언어 활용 E

예외처리

파이썬

# try
#     실행할 코드
# except:
#    예외가 발생했을 때 실행
# else: 
#    예외가 발생하지 않았을 때 실행
# finally:
#    무조건 실행할 코드

java

"\t" = 일정 간격 띄우기 (아마 탭인 듯?)

"\u0041" = 유니코드0041 = A

숫자를 char에 저장하면 -> 숫자에 해당하는 문자열 출력

0으로 시작하는 정수 -> 8진수 (012(8) - 10(10) )

0x로 시작하는 정수 -> 16진수 (0xA(16) -> 10(10) )

float의 기본 자릿수: 소수점 아래 8자리 까지 <-> double은 더 긴 소수 표현 가능

 

요구사항 확인
요구사항 확인 A

1. 현행 시스템 파악 절차

  1. 1단계: 시스템 구성(기간업무, 지원업무), 기능(주요->하부 계층), 인터페이스(주고받는 데이터 종류, 프로토콜 등) 파악
  2. 2단계: 아키텍처(계층별 어떤 기술 사용-> 구성도), 소프트웨어 구성 파악(사용 중인 sw의 용도, 라이센스 등)
  3. 하드웨어(서버 상황->추가비용 필요한지), 네트워크 구성 파악

2. 개발 기술 환경 파악

운영체제

  • 컴퓨터 시스템 자원들의 효율적 관리와 사용환경을 제공
  • 고려사항: 가용성(언제나 사용가능) / 성능(대규모 트래픽) / 기술지원 / 주변기기 호환 / 구축 비용

DBMS

웹 애플리케이션 서버(WAS)

  • 사용자 요구에 따라 변하는 동적 콘텐츠 처리하기 위해 사용되는 미들웨어
  • 데이터 접근, 세션 관리, 트랜잭션 관리 등을 위한 라이브러리 제공
  • 주로 데이터베이스 서버와 연동해서 사용

오픈소스

  • 오픈소스 소프트웨어는 공개적으로 액세스할 수 있게 설계되어 누구나 자유롭게 확인, 수정, 배포할 수 있는 코드
  • 라이센스 종류, 사용자 수, 기술 지속 가능성 고려

3. 요구사항

  • 개념: 제공하는 서비스에 대한 설명, 운영에 필요한 제약조건
  • 유형: 기능 요구사항(시스템이 반드시 수행할 기능) / 비기능 요구사항(시스템 장비 구성, 시스템 성능, 인터페이스, 데이터, 테스트, 보안, 품질, 관리, 지원 요구사항 등) / 사용자 요구사항(사용자 관점에서 본 시스템 요구사항) / 시스템 요구사항(개발자 관점에서 시스템이 다른 시스템에 제공할 것=소프트웨어 요구사항)

요구사항 개발 프로세스

  1. 도출: 의견, 이해, 인터뷰, 설문, 유스케이스, 프로토타이핑
  2. 분석: 명확, 타당성, 비용, 일정
  3. 명세: 문서화
  4. 확인: 명세서 검토

요구사항 분석 기법

요구사항 분류: 기능/비기능, 제품관련/과정, 우선순위, 영향 등의 기준에 따라 분류

  1. 개념 모델링: 현실 세계의 단순화시켜서 이해하기 쉽게 모델링 (ex. 유스케이스, 데이터흐름, 상태, 목표기반, 사용자 interaction, 객체, 데이터모델)
  2. 요구사항 할당: 구성요소 식별
  3. 요구사항 협상: 요구사항 충돌 해결(우선순위)
  4. 정형 분석: 요구사항 분석 내용을 정형화된 수학적 기호로 표현, 검증
요구사항 확인 B

요구사항 확인 기법

문서화된 요구사항 관련 내용 확인, 검증

종류

  1. 요구사항 검토: 불분명한 부분, 기준 벗어나는지 등 확인
  2. 프로토타이핑: 모형물 만들어서 확인 (정식 출시 전 일부분 구현한 모형)
  3. 모델 검증: 요구사항 분석 때 개발한 모델 검증->정적 분석(문서로 확인) (<->동적 분석: 실행으로 확인)
  4. 인수 테스트: 사용자 입장에서 확인 (사용자 인수, 운영자 인수, 계약 인수, 규정 인수, 알파검사(회사내부), 베타검사(외부인 베타테스트) 등)

UML (unified model language)

  • 개요: 대표적 객체지향 모델링 언어
  • 구성요소: 사물, 관계, 다이어그램
  • 구조적 다이어그램(6): 클래스, 객체, 컴포넌트, 배치, 복합체 구조, 패키지 / 주로 정적 모델링에서 사용
  • 행위 다이어그램(7): 유스케이스 시퀀스, 커뮤니케이션, 상태, 활동, 상호작용개요, 타이밍 / 동적모델링에서 사용

1. 클래스 다이어그램

클래스 내부의 정적인 내용(속성, 메소드)이나 클래스 사이 관계 표현

2. 객체 다이어그램: 객체 간 관계

3. 컴포넌트(모듈화된 자원) 다이어그램

컴포넌트 간 인터페이스

4. 배치 다이어그램

결과물, 프로세스, 컴포넌트 등 물리적 위치 

5. 복합체 구조

클래스, 컴포넌트 등이 복합적 구조 가진 경우

6. 패키지 다이어그램

 

Use case 

프로그램 사용자 입장에서 그린 다이어그램

 

시퀀스(순서) 다이어그램

개체 간 작동 순서

 

커뮤니케이션

메시지, 객체 간 연관까지 표현

 

상태 다이어그램

상태 변화를 나타냄

 

활동 다이어그램 (activity)

활동 사이 제어 흐름 나타냄

 

상호작용개요

타이밍 다이어그램

 

요구사항 확인 C

기능 모델링

사용자의 요구사항 분석 -> 필요 기능 정리 -> 개발자, 의뢰자가 공유할 수 있게 표현 (유스케이스 다이어그램, 액티비티 다이어그램)

유스케이스 다이어그램

개발될 시스템/외부 시스템 있음. 사용자가 사용가능한 기능을 사용자 관점에서 표현

(시스템범위, 액터, 유스케이스, 관계)

유스케이스 구성요소 1: 시스템범위 , 시스템

표현: 사각형

유스케이스 구성요소 2: 액터 (사용자 및 모든 외부 요소)

주로 왼쪽에 배치

주액터: 이득 얻는 대상 (사람)

부액터: 외부시스템, 조직, 기관 등

구성요소3: 유스케이스(서비스, 기능)

타원으로 표시

액터에 의해 수행되는 기능

구성요소 4: 관계

액터 - 유스케이스 / 유스-유스

관계 종류: 포함, 확장(기존 use---확장된use), 일반화(큰 범주<-작은범주)

유스케이스 명세서

활동 다이어그램 (activity diagram)

use-case 사이 처리흐름 표현 (알고리즘 순서도같음)

구성요소: 액션/액티비티, 노드, 스윔레인

구성요소1: 액션/액티비티

액션: '버튼 클릭'과 같은 단순한 행위

액티비티: 여러 개의 액션으로 구성. 분리가능한 기능 구성. 타원으로 표시

화살표: 제어흐름(방향)

구성요소2: 노드

시작/종료 노드: 검정색 원

조건판단노드: 마름모 (들어오는 흐름 1개, 나가는 흐름 여러 개)

병합노드:  2개 이상 흐름 합쳐지는 부분

Fork노드: 굵은 가로선. 들어오는 액티비티 여러 개, 나가는 액티비티 여러 개일 때

조인노드: 굵은 가로선. 들어오는 액티비티 여러 개, 나가는 액티비티 1개일 때

구성요소3: 스윔레인(swim lane)

전체 순서도에서 액티비티 수행 담당 주체 구분. 가로 or 세로선 구분

정적 모델링

기능 구현에 필요한 자료들의 논리적 구조 표현

종류: 클래스 다이어그램

클래스 다이어그램

시스템 구성요소에 대해 작성한 구조적 다이어그램. 문서화, 모델링에 자주 사용됨

구성요소: 클래스, 제약조건, 관계 등

구성요소1: 클래스

객체의 속성, 오퍼레이션(메소드, 동작, 함수) 정의

구성요소2: 제약조건

속성 데이터타입, 값 제한 등

구성요소3: 관계

연관(선수-경기), 집합(선수-팬), 포함(팀<-선수), 일반화(선수<-주전, 후보, 의존(선수->연봉)

동적모델링

시스템 내부 구성요소들 간 이루어지는 동작(시간에 따른 변화)이라는 관점에서 표현

종류: 시퀀스 다이어그램, 커뮤니케이션 다이어그램, 상태 다이어그램

시퀀스 다이어그램

시스템이나 객체들이 메시지를 주고받으며 시간 흐름에 따라 
상호작용하는 과정 표현

구성요소: 액터, 객체, 메시지

구성요소1: 액터(사람, 외부시스템)

구성요소2: 객체(메시지 주고받는 객체명: 클래스명)

구성요소3: 메시지

검은화살표 + 실선: 동기 (메시지 보낸 후 답신 기다림. ex비밀번호 체크)

줄 화살표 + 실선: 비동기 (답신 안기다림 ex.로그인 버튼 누르면 바로 로그인페이지 이동)

줄화살표 + 점선: 생성(새로운 객체 생성)

검은 화살표 + 점선: 응답 (동기 메시지에 대한 수행결과 답신)

라이프라인

객체가 메모리에 존재하는 기간 (소멸은 x로 표시)

활성상자 (Activation box)

직사각형 표현. 객체가 메시지 주고받는 활동 중임을 표시

프레임

커뮤니케이션 다이어그램

동작에 참여하는 객체들이 주고받는 메시지와 객체 간 관계 표현. 

커뮤니케이션-시퀀스 큰 차이점: 시퀀스(메시지만)<->커뮤니케이션(메시지, 객체간 관계인 링크도 표현)

클래스 다이어그램 관계가 제대로 표현됐는지 점검 가능

초기: 협업 다이어그램이라고 불림

구성요소: 액터(사람, 외부시스템), 객체(메시지 주고받는 주체), 링크(객체 관계 표현, 실선), 메시지

상태 다이어그램 (state)

어떤 이벤트에 의해 객체 자신이 속한 클래스의 상태변화 or 객체가 다른 객체와 상호작용하는 과정에서의 상태 변화 표현

상태변화 확인할 필요 있는 객체만 대상으로 그림

구성요소: 상태, 이벤트, 상태전환

상태

둥근 사각형

이벤트

상태변화 일으키는 이벤트

종류: 조건, 외부신호, 시간흐름 등

상태 전환

다른 상태로 변하는 경우 화살표로 연결

시작, 종료: 검은색 원

데이터 입·출력 구현
데이터 입·출력 구현 A

데이터 모델

구성요소: 개체(표현대상), 속성, 관계 (개체 간 관계)

데이터모델 종류

개념적: ER모델(개발자-고객 간 의사소통)

논리적: 관계형 모델(테이블), 계층모델(트리), 네트워크 모델(그래프)

물리적

데이터 모델에 표시할 요소

구조, 연산(조작방식), 제약조건

이상 (Anomaly)

테이블 조작 시 문제 발생하는 현상: 삽입 이상, 삭제 이상, 갱신 이상

  • 삽입이상
  • 삭제이상
  • 갱신이상

함수적 종속

X(결정자) -> Y(종속자) : X가 Y를 함수적으로 결정함

ex. 학번이 기본키 -> 이름, 학년, 학과 결정

정규화 (Nomalization)

이상 발생 방지하기 위해 하나의 테이블을 여러 개로 분리하는 작업

목표: 테이블 간 중복 데이터 없애서 무결성(integrity) 유지

정규화의 종류

제 1 정규형

도메인값이 원자값으로만 이루어지도록 정규화

ex. 이예솔-음악, 쇼핑 -> 이예솔-음악, 이예솔-쇼핑

제 2 정규형

부분함수 종속 제거 -> 완전 함수 종속 만족: 기본키의 부분집합이 결정자가 되어서는 안 된다.

ex. 학번  - 강의명 - 강의실 - 성적: (학번, 강의명) -> 성적, 강의실

그런데 강의명만 있어도 강의실 결정 가능 -> 테이블 분리

학번 - 강의명 - 성적 // 강의명 - 강의실

제 3 정규형

이행적 함수 종속 제거: a->b, b->c이면 a->c 만족하는것이 이행적 함수. 이걸 없애야 한다고 함. 제 2 정규화 진행한 테이블에 실행

ex. 학번 - 강의명 - 수강료 -> 학번-강의명 // 강의명-수강료

BCNF

모든 결정자가 후보 키가 되어야 한다.

ex. 학번 - 특강명 - 교수이름: (학번-특강명)-> 교수 결정

교수이름 -> 특강명 결정 가능한 결정자인데 후보 키 아님

특강신청: 학번-교수 // 특강 교수: 특강명-교수

제 4 정규형

다치 종속 제거

제 5 정규형

조인종속성 이용: 분리한 테이블을 join해서 기존 테이블 생성 가능하면 만족

문제

컬럼 A, B가 있고 A->B 하나씩 연관됨.

B는 A에 함수적 종속 (A->B 라고 표시)

A는 결정자(determinant), B는 종속자(Dependent)

데이터베이스 용어 정리

  • 릴레이션(relation)/테이블: 관계형 데이터모델에서 테이블 == 릴레이션
  • 속성(attribute) == 필드(field) == 컬럼(column): 릴레이션의 각 열
  • 튜플(tuple), 레코드(record), 행(row): 릴레이션의 각 행. 하나의 튜플은 하나의 데이터 객체
  • 도메인(domain): 각 필드에 입력 가능한 값들의 범위를 미리 정해놓는 것. 필드가 가질 수 있는 모든 값들의 집합. 도메인의 각 값은 더이상 분리할 수 없는 원자값이어야 함
  • 원자값 (atomic value): 더이상 분리되지 않는 값. 하나의 레코드의 각 필드에는 원자값만 정의될 수 있음
  • 복합 키(composite key): 두 개 이상의 필드로 구성된 키
  • 수퍼 키(super key): 아무 제약 조건 없이 레코드 식별 가능한 필드 집합. 모든 테이블은 적어도 하나의 수퍼키 가짐. 따라서 테이블 내 존재하는 모든 필드 집합도 하나의 수퍼 키가 된다.
  • 후보 키(candidate key): 레코드를 식별할 최소한의 필드만으로 구성된 키. 어떠한 필드라도 제외하면 키가 될 수 없는 필드 집합
  • 기본 키(primary key): 후보 키 중 하나만을 식별자로 정한것. null이 될 수 없다.
  • 외래 키(foreign key): 두 테이블 간 관계에서 다른 테이블의 기본키를 참조하는 키. 참조하는 기본 키를 가진 테이블은 참조되는 테이블(referenced table), 기본키를 참조해서 외래 키로 쓰는 테이블을 참조하는 테이블(referencing table)이라고 한다
데이터 입·출력 구현 B

테이블 (table)

구성: 행(row), 열(column), 기본 키(Primary key), 외래 키(foreign key)

엔티티-> 테이블

논리데이터 모델 엔티티-> 물리 데이터 모델의 테이블로 변환

엔티티->테이블, 속성->컬럼, 주식별자->기본키, 외부식별자->외래키, 관계->관계

슈퍼타입/서브타입 테이블로 변환

  • 슈퍼타입 기준 테이블 변환: 서브타입들을 슈퍼타입 안에 넣어 하나의 테이블로 합치기
  • 서브타입 기준: 슈퍼타입 속성을 각 서브타입 속성에 추가해 개별 테이블 만들기
  • 개별타입 기준: 슈퍼타입, 서브타입 각각 테이블 만들기

속성을 컬럼으로 변환

관계를 외래 키로 변환

주식별자(primary UID) -> 기본 키

secondary UID -> 유니크 키

관계 -> 외래 키

반정규화 (Denormalization)

의도적으로 정규화 원칙 위배하는 행위

방법: 테이블 통합, 테이블 분할(수직, 수평), 중복 테이블 추가, 중복속성 추가

  • 수평분할(레코드): 레코드 별 사용빈도차이 클 때
  • 수직분할(속성): 하나의 테이블에 속성 너무 많을 때

중복 테이블 추가 이유: 작업 효율성 향상 (정규화로 인해 여러 테이블 가져와서 수행속도 느려질 때)

반정규화 장점: 성능 향상, 관리 효율 향상 / 정보 일관성 떨어짐

인덱스 (index)

데이터 레코드에 빠르게 접근하기 위해 <키 값, 포인터> 쌍으로 구성되는 데이터 구조

  • clustered index: 레코드 물리적 순서 == 인덱스 엔트리 순서
  • 종류: 트리기반, 비트맵, 함수 기반, 비트맵 조인, 도메인

트리기반 인덱스

트리 모양 블럭에 인덱스 저장. B트리, B+트리

  • B트리: (일반적) 루트노드->단말노드 순으로 검색해서 데이터 위치 검색. 오름차순 저장. 모든 leaf 노드 같은 깊이
  • B+트리: 상용 DBMS에서 사용. 순차세트(단말노드), 인덱스세트(경로)

비트맵 인덱스

  • 인덱스 컬럼 데이터를 비트맵 0 or 1로 변환해서 사용
  • 논리연산 가능, 저장공간 적음

함수기반 인덱스

  • 컬럼 속성에 특정 함수 적용해 인덱스 생성
  • 시간 소모, 부하
  • 사용 함수: 산술식, 사용자정의함수, sql function, package 등

비트맵 조인 인덱스

  • join된 객체로 이루어진 인덱스. 

도메인 인덱스

  • 개발자가 필요한 인덱스 직접 생성 (=확장형 인덱스)

 

데이터 입·출력 구현 C

뷰 (View)

  • 접근이 허용된 자료만 보여주기 위해 생성된 가상테이블
  • 하나 이상의 기본테이블(원본)에서 유도됨
  • 저장장치 내 물리적으로 존재하지 않음

뷰의 특징

뷰를 통해서만 데이터에 접근하면 데이터 안전하게 보호할 수 있음

뷰의 장단점

  • 장점: 논리적 독립성, 사용자 입장에서도 데이터 관리하기 간단함, 보안
  • 단점: 독립적인 인덱스 가질 수 없음. 뷰 정의 변경 불가. 삽입, 삭제, 갱신에 제약 있음

 

클러스터 (Cluster)

  • 동일한 성격의 데이터를 동일한 데이터 블록에 저장하는 물리적 저장 방법
  • 단일 테이블 클러스터링, 다중 테이블 클러스터링(다수 join)

클러스터 대상 테이블

분포도가 넓은 테이블, 대량의 범위(여러 테이블 조인)를 자주 조회하는 테이블, 입력/수정/삭제 자주 발생하지 않는 테이블.  order by, group by, union 등 자주 발생 시

파티션 (Partition)

  • 데이터베이스에서 테이블이나 인덱스를 작은 논리적 단위인 파티션으로 나누는 것
  • 목적: 쿼리 성능 향상, 디스크 성능 향상, 수행속도 향상, 장애 시 손상 정도 최소화, 데이터 가용성(항상 사용가능) 향상
  • 파티션별 백업, 포맷, 입출력 분산 가능
  • 종류: 범위 분할, 해시분할, 조합분할

범위 분할

  • 주어진 열의 값을 가지고 분할 (ex 일별, 월별 분기별 분할)

해시분할 (hash partitioning)

  • 특정 파티션에 데이터 집중되는 것 보완 -> 데이터 고르게 분산
  • 고객번호, 주민번호 등 데이터가 고른 컬럼에 효과적
  • 해시함수 적용 -> 수식 -> 특정 데이터 위치 바로 알 수 없고 계산으로 알아내야 함.

조합분할

  • 1차 범위분할 ->여전히 클 때 -> 2차 해시분할

데이터베이스 용량 설계

  • 데이터가 저장될 공간 정의
  • 테이블에 저장할 데이터양, 인덱스, 클러스터 등이 차지하는 공간 예측 반영

데이터 접근성 향상

  • 테이블 / 인덱스 분리
  • 테이블 / 임시 테이블 분리
  • 테이블 -> 아스터 / 트랜잭션 분리

용량 분석 절차

  1. 기초자료 수집하여 용량 분석
  2. DBMS에 이용될 용량 산정
  3. 테이블 스페이스 용량 산정
  4. 디스크 용량 산정

 

통합 구현
통합 구현 A

통합 구현

  • 송신 시스템 - 네트워크 - 중계 시스템 - 네트워크 - 수신 시스템
  • 송, 수신 모듈과 중계 모듈 간 연계 구현
  • 사용자 요구사항과 구축환경에 따라 설계

구성: 송수신 시스템, 모듈, 중계시스템, 연계데이터, 네트워크

  • 송신 시스템: 데이터 전송 (송신모듈, 모니터링)
  • 수신 시스템: 데이터 받아 정제-> DB에 적절한 형식으로 변환 (수신모듈, 모니터링)
  • 중계 시스템: 내외부, 내부 시스템 간 연계. 송신 데이터 오류 처리, 수신 시스템에 맞는 데이터로 변화
  • 연계 데이터: (속성, 길이, type) 등
  • 네트워크: 연결 통신망

연계 요구사항 분석 절차

  1. 하드웨어, 소프트웨어 구성 및 네트워크 현황 확인
  2. 테이블 정의서, 코드 정의서 등 문서 확인
  3. 체크리스트
  4. 인터뷰, 설문조사
  5. 요구사항 분석서 작성

연계 데이터 식별 및 표준화

연계 데이터 식별 -> 식별된 데이터 표준화 -> 그걸 기반으로 연계 정의서 (인터페이스) 작성

절차

  1. 연계 범위 및 항목 정의: 송, 수신에서 어떤 데이터 주고 받을지 정의, 확인 / 송수신 연계범위 다를 시 수신 기준
  2. 연계 코드 변환 및 매핑: 송수신 코드 매핑
  3. 연계 데이터 식별자와 변경 구분 추가: 송신 -> 수신 연결 시 식별자(pk)추가해서 연결 / CRUD시 어떤 활동 했는지 구분 추가
  4. 연계 데이터 표현 방법 정의: DB table, DB 파일 (tag, 콤마,콜론 , 세미콜론 등)
  5. 연계 정의서 및 명세서 작성: (시스템명, 인터페이스 방식, 주기, 송수신 인터페이스 현황), (각 인터페이스 별 세부 설정 작성)

연계 메커니즘

  • 송신체계와 수신체계로 구성연계방식 (사이에 중계시스템 있을수 있음)
  • 송신 체계: DB table, DB file등 데이터 생성, 송신)
  • 수신체계: 송신에서 받은 데이터를 수신에 맞게 변환, 운영 DB에 반영

연계 메커니즘 방식

직접연계: 송수신 사이 매개체없이 연결

  • 장점: 구현 단순, 성능 뛰어남, 비용 저렴, 개발기간 단축
  • 단점: 송수신 결합도 높아 시스템 변경 시 오류발생 확률 높음
  • 종류: DB Link, API, OpenAPI, DB Connection(수신WAS->송신 웹 연결), JDBC(Java DB Connect~)

간접연계: 송수신 사이 중간매개체로 연계

  • 장점: 송신, 수신이 서로 다른 네트워크, 환경에 있어도 중간 매개체로 연계 통합 가능. 
  • 단점: 구조 복잡, 성능 저하될수도 있음, 개발 기간 증가
  • 종류: 연계 솔루션(EAI서버), ESB, Socket, Web Service(특정 프로토콜 사용)
  • 특정 프로토콜: WSDL(Web Service 표준기술), UDDI(universial~), SOAP(객체 간 통신 규약)

구성

  • 연계 데이터 생성 또는 추출
  • 코드 매핑 및 데이터변환
  • 인터페이스 테이블 또는 파일 생성: 송신(암호화,Encryption)->수신(복호화, Decryption)
  • 로그 기록
  • 연계 서버 또는 송수신 어댑터: 송신, 수신에 각각 어댑터 설치
  • 전송
  • 운영 DB에 연계 데이터 반영

연계 장애 및 오류 처리

오류 발생 시점

  • 송신 시스템: 데이터 생성 및 추출 시, 코드 매핑 및 데이터 변환 시, 인터페이스 테이블 또는 파일 등록 시
  • 수신 시스템: 연계 데이터 로드 시, 코드 매핑 및 데이터 변환 시, 운영 DB에 반영 시
  • 연계 서버: 연계 데이터 로드 및 전송 형식으로 변환 시, 연계 데이터 송수신 시, 수신 시스템 데이터 형식으로 변환 및 로드 시

장애 및 오류 유형과 처리 방안

  • 송신 연계: 권한 없음 / 예외 처리 빠짐 / 구현 오류 -> 로그
  • 수신 연계: DB접근권한 / 예외처리/구현 -> 로그
  • 연계 서버: 서버 실행/송수신 형식 변환 오류 -> 서버 재시작, 서버로그 확인
  • 연계 데이터: 송신에서 생성 및 추출한 데이터가 유효하지 않음 -> 송신 연계 로그 확인-> 데이터 보정->재전송

장애 및 오류의 정의와 설계

  • 장애 및 오류 관리 대상
  • 관리 장애 및 오류 코드와 메시지: 주제별 분류,
  • 장애 및 오류 코드와 메시지 관리 방식: (메시지 다수)테이블, 파일
  • 장애 및 오류 기록 방식: 인터페이스 테이블, 파일 , 데이터
통합 구현 B

연계 데이터 보안

  • 송신 -> 수신 전송되는 연계 데이터는 보안에 취약할 수 있으므로 데이터 중요성 고려해 보안 적용
  • 전송 구간에서 암호화, 복호화 & 데이터의 암, 복호화

전송 구간 보안

  • 패킷: 전송되는 데이터를 담은 패키지
  • 암호화 프로토콜 사용 + 패킷 내용 자체 암호화

데이터 보안

  • 송신에서 데이터 생성, 추출 시 & 수신에서 받은 데이터 DB에 반영할 때 데이터 암호화, 복호화

암호화, 복호화 적용대상 선정

  • 개인정보: 주민번호, 운전면허번호 등 개인정보보호법 기반

암호화 알고리즘

  • 단방향: hash
  • 양방향(기본): DES 알고리즘(개인 키, 비밀 키, 대칭 키: 암, 복호화 키 동일), RSA 알고리즘(공개 키, 비대칭 키: 암, 복호화 키 다름)

연계 모듈의 구현 환경

연계 메커니즘에 따라 구현된 연계 시스템 환경 및 모듈 구현 환경

구분

  • EAI(Enterprise Application Integration): 트리거방식. point to point(일대일) / Hub&Spoke(중앙집중형) / Message Bus(미들웨어) / Hybrid(hub 그룹 내부+bus 그룹 간)
  • ESB(Enterprise Service Bus): 트리거방식. 서비스 중심 통합 지향. 앱 간 결합도 낮게 유지해서 어떤 서비스에도 범용적으로 사용할 수 있도록 함
  • 웹 서비스 방식: 배치 프로그램 인터페이스 사용. 네트워크 정보를 표준화된 서비스 형태로 만들어 공유 -> SOAP(http, https, smtp로 xml공유), UDDI(WSDL(웹서비스에 대한 정보 xml) 등록)

트리거: DB에서 지정된 이벤트 발생마다 작업 자동으로 수행하는 절차형 SQL

미들웨어: 운영체제가 제공하는 기능 외 다른 기능 제공하는  프로그램

 XML (eXtensible markup language)

  • 웹브라우저 간 호환 문제 해결을 위한 다목적 마크업 언어
  • 유니코드(국제 표준) 기반 다국어 지원
  • 사용자가 직접 문서 태그 정의 가능
  • 트리 구조로 작성
  • 모든 태그는 종료 태그 필요
  • 속성값은 큰 따옴표
  • 대소문자 구분
  • 첫 문장은 ?로 시작

SOAP

  • 단순 객체 접근 프로토콜 (Simple object access protocol)
  • 인터넷을 통해 웹서비스가 통신할 수 있고, XML 기반 메시지를 컴퓨터 네트워크 상에서 교환하는 역할
  • http, https, smtp 이용해 xml 교환하는 통신규약
  • xml근간으로 header, body 조합하는 패턴

WSDL

  • 웹서비스 기술언어 (web service description language)
  • 웹서비스 프로토콜, 서식을 표준 규칙으로 작성
  • xml로 작성
  • UDDI의 기초

UDDI

  • 전역 비즈니스 레지스트리 (universal description discovery and integration)
  • 기업이나 단체, 개인이 자신들의 서비스 내용을 인터넷상에 등록할 수 있게 하는 XML 기반 등록처

 

연계 테스트

구축된 연계 시스템과 그 구성요소의 정상 동작 확인

진행 순서

테스트 케이스 작성 -> 환경 구축 -> 실행 -> 결과검증

  1. 연계 테스트 케이스 작성: 테스트 필요한 항목 리스트 작성
  2. 연계 테스트 환경 구축: 일정, 방법, 절차, 소요시간
  3. 연계 테스트 수행
  4. 연계 테스트 수행 결과 검증: 운영 DB 데이터 건수 확인, 테이블 데이터 확인, 파일 생성 여부, 파일 크기 확인, 모니터링 현황 및 시스템 로그 확인

 

서버 프로그램 구현
서버 프로그램 구현

개발환경 구축

하드웨어 환경

  • 웹서버
  • WAS: 웹서버 요청받아 데이터 가공해서 사용자에게 동적 서비스 제공
  • 데이터베이스 서버
  • 파일 서버

소프트웨어 환경

  • 시스템 소프트웨어: 운영체제, 웹서버, WAS를 운영하기 위한 소프트웨어
  • 개발 소프트웨어: 요구사항 관리도구, 설계 모델링 도구(UML지원), 구현도구, 빌드 도구, test 도구, 형상관리도구

개발언어 선정 기준

  • 적정성
  • 효율성
  • 이식성: 여러 시스템, 환경에 적용가능한지
  • 친밀성: 개발자의 이해도
  • 범용성: 다른 개발 사례 존재 여부

모듈 (Module)

  • 모듈: 프로그램을 일정한 단위로 분할한 것
  • 결합성: 모듈 간 유사성
  • 응집도: 모듈 내부 기능 간 유사성
  • 결합성은 낮고 응집도는 높아아 독립적인 프로그래밍

결합도 (Coupling)

  1. 내용 결합도 (강)
  2. 공통 결합도
  3. 외부 결합도
  4. 제어 결합도
  5. 스탬프 결합도: 모듈 간 자료구조 전달
  6. 데이터 결합도(약): 데이터를 다른 모듈 인수로 전달

응집도

  1. 기능적 응집도(강): 모든 기능이 단일 문제 관련
  2. 순차적 응집도: 한 기능 산출물이 다음 기능 인수로 입력
  3. 통신적(교환적 응집도): 동일한 입출력 사용-> 서로 다른 기능 수행
  4. 절차적 응집도: 다수의 관련 기능 순차적으로 수행
  5. 시간적 응집도: 특정 시간에 수행되는 기능
  6. 논리적 응집도: 유사한 성격의 기능
  7. 우연적 응집도(약): 서로 관련 없는 기능

Fan in vs Fan out

  • fan in: 대상을 제어하는 모듈의 수
  • fan out: 대상이 제어하는 모듈의 수

공통 모듈

  • 여러 프로그램에서 공통적으로 사용하는 모듈
  • 자주 사용되는 계산식, 기능 등
  • 다른 개발자도 이해하기 쉽게 명세 기법 지키기

명세 기법

  • 정확성(Correctness): 해당 모듈의 필요성 정확히
  • 명확성(Clarity): 해당 기능이 중의적 해석되지 않음
  • 완전성(Completeness): 시스템 구현을 위해 필요한 모든 것 기술
  • 일관성(Consistency): 기술 충돌x
  • 추적성(Traceablity): 출처, 관계 파악할 수 있게 기술

재사용성

비용, 시간 절약하기 위해 기존 프로그램 적절히 수정해서 쓰기

결합도 낮고 응집도 높은 프로그램

DBMS 접속 (Connection)

  • 응용 시스템: 사용자로부터 매개변수 전달받아 SQL실행, DBMS로부터 전달받은 결과를 사용자에게 전달하는 매개체
  • 웹 웅용 시스템: 웹 서버와 웹 애플리케이션 서버(WAS)로 구성
  • 접속기술 역할: 소스 코드 내에 SQL 직접 입력하여 DBMS의 데이터에 접속하는 기술

DBMS 접속기술

  • JDBC (Java Database Connectivity) : Java로 DB 이용할 수 있게 해주는 API
  • ODBC(Open Database Connectivity): DB에 접근하기 위한 표준 개방형 인터페이스
  • MyBatis: JDBC의 코드 단순화시켜 사용하는 SQL 매핑 ORM(Object relational mapping) 프레임워크

동적 SQL (Dynamic SQL)

다양한 조건에 따라 SQL 구문 동적으로 변경하여 처리할 수 있는 SQL 처리방식

서버 개발

웹 어플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 애플리케이션 서버(WAS)에 탑재하는 것

서버 개발 프레임워크

  • 서버 프로그램 제작 시 다양한 네트워크 설정, 요청 및 응답처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스, 인터페이스 등을 제공하는 소프트웨어
  • 대부분 모델-뷰-컨트롤러(MVC) 패턴 기반 개발

Spring

  • java 기반
  • 전자정부 프레임워크의 기반

Node.js

  • javascript 기반
  • 비동기 입출력 처리, 이벤트에 대한 높은 처리 성능
  • 실시간 입출력 빈번한 서비스에 적합

Django

  • python 기반

Codeigniter

  • PHP 기반
  • 인터페이스 간편 -> 서버 자원 적게 소모

Ruby on Rails

  • ruby 기반
  • 테스트를 위한 웹서버 지원, 데이터베이스 작업 단순화, 자동화 -> 신속개발 가능

서버 개발

DTO/VO, SQL, DAO, Service, Controller를 각각 구현하는 과정

DTO(Data transfer object)/VO (value object)

  • 데이터 교환 시 데이터 담을 객체
  • 로직 구현x, 변수, 데이터 저장 및 반환 메소드만 구현

SQL

  • DB에 데이터 CRUD 수행할 SQL 코드 수정
  • 소스코드 내 삽입 or 별도 XML 파일

DAO (data access object)

  • DB에 접근, SQL활용해 실제 데이터 조작하는 코드 구현

Service

  • 사용자 요청에 응답하는 로직 구현

Controller

  •  사용자 요청이 오면 적절한 서비스 호출 -> 그 결과를 사용자에게 반환

배치 프로그램 (Batch Program)

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

배치 프로그램 수행되는 주기에 따른 구분

정기배치, 이벤트성 배치(특정 조건 충족 시), On-Demand 배치(사용자 요청 시)

배치 프로그램이 갖추어야 하는 필수 요소

대용량 데이터(처리가능), 자동화(사용자 개입없이), 견고성, 안정성/신뢰성(오류 추적가능), 성능

배치 스케줄러 (batch scheduler)

배치 프로그램이 일괄 처리 작업(batch)를 설정된 주기에 맞춰 원활히 수행되도록 지원하는 도구

스프링배치, Quartz(오픈소스), Cron(리눅스)