자격증/정보처리기사

[정보처리기사_실기] Chapter 4. 서버프로그램 구현

ZZJJing 2020. 10. 10. 18:50

■ 개발 환경 구축 도구 (하드웨어) 

- 웹 서버 (정적 파일들을 제공) 

- 웹 애플리케이션 서버 (WAS : Web Application Server - 동적 서비스를 제공)

- 데이터베이스 서버 (DB Server - 데이터베이스와 이를 관리하는 DBMS를 운영)

- 파일서버 (File Server - DB에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장하는 서버)

 

■ 개발 환경 구축 도구 (개발 소프트웨어) 

- 구현 도구 : 코드의 작성, 편집, 디버깅 등  ex) Eclipse / Visual Studio Code / InteliJ / NetBeans 등  

  * IDE (Integrated Development Environment) : 통합 개발 환경 

- 테스트 도구 :  xUnit / Spring Test 등 

- 형상관리 도구 : CVS / Subversion / Git 등 

CVS SVN GIT
파일단위 커밋 
안정적이며 백업용량적게 차지 
커밋실패싯 롤백불가 
느린처리속도 
파일이름 변경불가 
CVS 단점보안 
중앙 저장소형태 
커밋 실패시 롤백가능 
.svn 디렉토리로 지저분 
이진파일은 머지불가 
개별 개발자 이력기록이 불가 
분산저장소 타입 (분산형 버전관리 시스템)
오프라인 작업가능 
개발자별 History 가능 
수많은 기능으로 사용이 복잡 
사용미숙시 Conflict 발생 잦음 

- 빌드 도구  : Ant, Maven , Gradle 등 

- 설계/모델링 도구 : StarUML / DB Designer / ArogoUML 등 

- 요구사항 관리도구 : Trello / OSRMT / JFeature 등 

 

 

■ CI (Continuous Integration) 

지속적인 통합 / 일련의 작업을 특정 시점이 아닌, 지속적으로 수행하는 것을 뜻함

CI도구는 형상관리도구, 빌드도구, 테스트 도구와 호환이 중요하다 

대표적인 CI도구로는 Jenkins(오픈소스), Bamboo(상용) 등이 있다. 

- CI는 모든 개발을 완료한 뒤에 통합하고 품질을 고려하는 고전적인 방법을 대체하는 방법으로서 소프트웨어의 질적 향상과 소프트웨어를 배포하는데 걸리는 시간을 줄이는데 초점이 맞추어져 있다. 

 

 

■ 시스템 소프트웨어 

운영체제OS / JVM / Web Server / WAS (Web Application Server) / DBMS 

 

형상관리 (SCM : Software Configuration Management) 

[개념] 소프트웨어 개발에 있어 모든 변경사항을 체계적으로 추적, 통제, 감사, 기록하는 활동 

형상항목을 식별하여 그 기능적, 물리적 특성을 문서화하고, 그러한 특성에 대한 변경을 제어하며, 변경처리 상태를 기록 및 보고하고, 명시된 요구사항에 부합하는지 확인하는 기술적이고 관리적인 감독, 감시활동

 

■ 형상관리 절차 4단계 [ 식 통 감 기 ]

형상 별 (베이스라인 기준을 정하는 활동)

-> 형상 제 (의 개념을 쓰라 -20년 3회출제)

   : (=변경 관리) 형상 변경 제안을 검토, 승인하여 현 baseline에 반영할 수 있도록 통제

-> 형상 사 (무결성을 평가하기위해 확인(Validation), 검증(Varification)과정을 통해 공식적으로 승인하는 작업)

-> 형상 록/보고 (결과를 기록 및 관리하고 보고서 작성)  

 

상관리 특징 

프로젝트 생명주기 모든 단계에서 수행 되며 유지보수 단계에서도 수행된다. 

개발 전체의 비용을 줄이고, 개발 과정 중 여러 문제발생을 최소화하도록 보증학는 것이 목적이다. 

 

■ 공통 모듈이란?

정보 시스템 구축 시 자주 사용하는 기능들로써 재사용이 가능하게 패키지로 제공하는 독립된 모듈을 의미 

 

■ 공통 모듈 명세작성 원칙 [ 정 명 완 일 추 ]

확성 : 실제 시스템 구현시 필요여부를 알 수 있도록 정확히 작성

확성 : 해당 기능에 대해 일관성있고 명확하게 하나로 해석할 수 있도록 작성 

전성 : 시스템 구현 시 요구사항과 필요한 모든 것을 기술 

관성 : 공통 기능 사이에 충돌이 발생하지 않도록 작성 

적성 : 해당 기능에 대한 유기적 관계에 대한 식별이 가능하도록 작성 

 

■ 공통 모듈 테스트 

(1) 테스트케이스 (Test Case) 개념 

요구사항을 준수하는지 검증하기 위해 테스트 조건, 입력 값, 예상 출력 값 및 수행한 결과 등의 테스트 조건을 명세한 것 

  테스트 기반에 따른 테스트 

    - 명세기반 테스트 : 명세를 테스트케이스로 만들어 Test

    - 구조기반 테스트 : 내부의 논리 흐름에 따라 test 

    - 경험기반 테스트 : 유사 SW나 기술들의 test 

(2) 테스트 프로세스 

 

 

< 결합도는 낮을 수록 응집도는 높을 수록 좋다.

- 외운 순서는 결합도 낮-> 높 / 응집도 높 -> 낮 > 

■ 결합도 [ 자 스 제 외 공 내 ] 

료 결합도 (Data Coupling) : 모듈간 전달되는 파라미터를 통해서만 상호작용 발생 

탬프 결합도 (Stamp Coupling) : 모듈간 배열이나, 객체, 구조 등이 전달되는 경우 (배열이나 오브젝트, 스트럭쳐)

어 결합도 (Control Coupling) : 단순처리값만이 아니라 어떻게 처리해야하는지 명시된 제어요소가 전달 

부 결합도 (External Coupling) : 어떤 모듈에서 반환한 값을 다른 모듈에서 참조 사용 

통 결합도 (Common Coupling) : 파라미터가 아닌 모듈밖의 전역변수를 참조하고 갱신하는식으로 상호작용

용 결합도 (Content Coupling) : 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용 (직접 참조, 사용) 

 

■ 응집도 [ 기 순 통 절 시 논 우 ] 

능적 응집도 (Functional Cohension) : 하나의 기능만 수행하는 모듈 

차적 응집도 (Sequential Cohension) :모듈 내에서 한 활동으로 부터 나온작업 결과를 -> 다른 모듈의 입력값으로 사용

신적 응집도 (Informational Cohension) : 동일한 입력과 출력을 사용해 다른 기능을 수행하는 활동이 모여있을 경우

차적 응집도 (Procedual Cohension) : 모듈안의 구성요소들이 그 기능을 순차적으로 수행하는 경우 

간적 응집도 (Temporal Cohension) : 같은 시간대에 처리되어야 하는 활동들을 한 모듈에서 처리 

리적 응집도 (Logical Cohension) : 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우

연적 응집도 (Coincidental Cohension) : 관련 없는 작업들을 한 모듈에 모은 경우 

 

■ 모듈화의 목표 

정의 : 소프트웨어의 성능을 향상시키거나 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 분해하는 것으로 아래가 목표다. 

(1) 모듈간 결합도 최소화 (Loose Coupling) 

(2) 모듈내 응집도 최대화 

 

■ 팬인(Fan-In) / 팬아웃(Fan-Out)

모듈에 들어오는거 / 아웃은 나가는거

 

■ 프로세스란? 

한 개 이상의 정보 자원을 입력을 통해 가치있는 산출물을 제공하는 모든 관련 활동들의 집합 

 

■ 프레임워크의 특징 [ 모 재 확 제 ]

듈화  / 사용성  / 장성 / 어의 역흐름 (IoC - Inversion of Control) 

* 모듈화 = 캡슐화 

* 재사용성 : 프로임워크는 재사용 가능한 모듈들을 제공함으로써 개발자의 생산성 향상 

* 확장성 = 다형성 

* 제어의 역흐름 : 개발자가 관리하고 통제해야하는 객체들의 제어권한을 프레임워크에 넘김으로써 생산성을 향상시킴 

 

■ DBMS 접속(Connection) 기술 

- JDBC (Java DataBase Connectivity) : 자바에서 데이터베이스를 사용할 수 있도록 연결해주는 응용 프로그램 인터페이스

- ODBC (Open DataBase Connectivity) : 윈도우즈 응용프로그램에서 다양한 DBMS에 접근하여 사용할 수 있도록 개발한 표준 개방형 응용 프로그램 인터페이스 규격 / 개발 언어에 관계없이 사용할 수 있음 

- MyBatis : JDBC 코드를 단순화하여 사용할 수 있는 SQL Mapping 기반 오픈 소스 접속 프레임 워크 / SQL을 거의 그대로 사용가능 

 

 

■ 영속계층의 이해 

- DAO (Data Access Object) : DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담 

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

(스스로의 데이터를 저장 및 회수하는 기능을 제외하고 아무기능도 없다는 것이 DAO와의 차이) 

- VO (Value Object) : 간단한 독립체를 의미하는 작은 객체 

(DTO와 동일한 개념이지만 read only 속성을 가짐) 

 

■ 서버 개발 과정 (내가하던거랑 반대로하네.ㅋㅋ) 

DTO/VO 구현(데이터 교환객체 만듬)

-> SQL 구현(데이터 SQL문 생성)

-> DAO 구현(데이터 실제조작코드만들기)

-> Service 구현(사용자 요청응답로직구현)

-> Controller 구현 (사용자의 요청에 적절한 서비스 호출해 그 결과를 사용자에게 반환하는 코드 구현 )

 

 

■ 배치 스케쥴러 특징 [ 대 자 견 신 안 성 ] 

용량 데이터 / 동화 / 고성 / 뢰성 / 전성 / 

* 자동화 : 심각한 오류 상황 이외는 사용자 개입없이 동작해야한다.

* 견고성 : 유효하지 않은 데이터 처리에도 비정상적인 동작이 발생해서는 안된다.  

* 안정성 : 어떤 문제, 언제 발생했는지 추적이 가능해야한다. 

 

■ 배치 프로그램 - 주요배치 스케줄러 

(1) 스프링 배치 

(2) Quartz : 스프링 프레임워크로 개발되는 응용프로그램 일괄처리를 위한 다양한 기능을 제공하는 오픈소스 라이브러리 

- Scheduler, Job, Job Detail, Trigger 

(3) Cron : 리눅스의 스케쥴러 도구로 Crontab 명령어를 통해 작업을 예약할 수 있음 

 

출처를 모르겠습니다...ㅠㅠ

 

■ 디버그 (Debug) = 디버깅(Debugging) : 논리적인 오류를 찾아내는 과정 

■ 디버거 (Debugger) : 버그를 참조 수정하기 위한 필수적인 도구 

 

■ 배포 프로세스 

빌드내용 식별 -> 패키징 도구식별(=패키징 도구선정) -> DRM 흐름을 확인하여 패키징 수행 -> 패키징 도구설치 -> 배포 작업 -> 정상 배포확인

 

 

■ 인터페이스 Interface 특징

1) 멤버변수를 가질 수 없다. 

2) 함수는 선언만 할 수 있고, 구현은 불가능 

3) 자체로 객체를 생성할 수 없다. (인터페이스를 구현한 클래스를 참조하는 것은 가능) 

- 구현객체에서는 implements 사용

 

■ 추상클래스 abstract 특징 

1) 직접 객체로 만들 수 없다. 

2) 자식 클래스들이 공통으로 사용하는 기능을 구현하여 상속받을 수 있게한다. 

3) 자식 클래스에게 구현하도록 강제한다.

[개념] 공통 사용 부분은 부모클래스(추상클래스)에서 구현하고 상세구현이 다른 메소드는 자식클래스에서 각각 정의

 

 

■ 접근제한자 

public : 모든 범위 

protected :  상속관계 또는 동일 패키지

default : 동일 패키지

private : 동일 클래스 

 

[클래스 다이어그램에서 표기법] 

+ : public

# : protected 

~ : default (이름은 package)

-  : private

 

 

■ 정보처리기사에서 가장 자주 출제되는 정렬 

(1) 버블 정렬 : "앞의 수가 뒤의 수보다 크다면, 둘의 위치를 바꿔라"

int temp; 
for(int i=0; i<n; i++){
	for(int j=0; j<n-1; j++){
		if(a[j+1] < a[j]){
        	temp = a[j];
            a[j] = a[j+1];
            a[j+1] = temp;
        }
	}
}

(2) 선택 정렬(Selection Sort) : 최소값을 저장하는 코드 

for( int i=0; i<n-1; i++{
   int min = i;

   for(int j = j+1; j<n; j++){
      if(a[j] < a[min){
         min = j;
      }
   }


   if(min != i){
      int temp = a[i]; 
      a[i] = a[min];
      a[min] = temp;
   }
}

(3) 삽입 정렬 (값을 시프트하는 정렬은 삽입정렬이 유일)

int n;
for(int i=1; i<n; i++){
	int temp = a[i];
    int j = i-1;

   while(j >=0 && a[j] > temp){
      a[j+1] = a[j]; 
      j--; 
   }
   a[j+1] = key;

}         // → 우측으로 시프트(Shift)하라는 의미

 

■ C 출력문 

printf("%d", 10);  → 10 

printf("%f", 10.1   →  10.100000

printf("%s", "ttt")  → ttt

printf("%04d", 19)  → 0019

printf("%.2f", 0.1234)  → 0.12

printf("\n")  →  줄바꿈 이거 없이 연달아 printf *2번해도 한줄로 나온다. 

 

 

 

■ python (인터프리터 형태의 언어이면서 동시에 '객체지향언어') 

- { } 집합자료형(Set, Dictionary) # ( ) 튜플은 수정불가(읽기전용이다.)

ex) a[1] = 'aaa'  #컴파일에러 - 튜플은 2개이상 출력시 ('a','b') 괄호를 포함하고 출력된다.

 

- 집합자료형(Set) : 순서 없이 사용된다. / 중복을 허용하지 않는다. { } 

- 클래스 선언 class Aaa; 

- 함수 선언 def add(self, x, y): 

                  return x+y

* 파이썬의 멤버함수는 첫 번째, 인자로 self가 들어간다. 클래스 블록 내부에 있는 함수의 첫 번째 인자에 

self가 없다면 객체생성 없이 사용할 수 있는 클래스 함수 또는 정적 함수로 선언된다. 

* 파이썬의 함수는 리턴값을 함수 앞에 표기하지 않고, 구현부에 return의 유무로 리턴값이 있는 함수인지, void형인지 판단한다.