본문 바로가기

study/정보처리기사

[정보처리기사] 프로그래밍 언어 활용 > 서버프로그램 구현

프로그래밍 언어 활용 > 서버프로그램 구현

 

1. 개발환경 구축

(1) 개발환경 구축

(2) 서버 개발 프레임워크

 

2. 공통 모듈 구현

(1) 재사용

(2) 모듈화

(3) 결합도

(4) 응집도

 

3. 서버 프로그램 구현

(1) 보안 취약성 식별

(2) API

 

4. 배치 프로그램 구현

(1) 배치 프로그램

 


1. 개발환경 구축

(1) 개발환경 구축

 

  • 개념

- 개발 환경 구성 시 구현 될 요구사항의 명확한 이해가 필요하다.

- 개발 도구와 서버의 선정이 이루어져야 한다.

- 개발에 사용되는 도구들의 사용편의성, 성능,라이선스 등에 대한 내용을 파악해야한다.

 

 

  • 분류

- 빌드 도구 : 작성한 코드의 빌드 & 배포 수행, 각 구성요소와 모듈에 대한 의존성 관리

-- Ant : Java 기반 빌드 도구, 절차적,

(장점) 유연성, (단점) 재사용 어려움

-- Maven : 프로젝트에 필요한 'Dependency'를 리스트의 형태로 Maven에 알려 관리 도움,

(장점) repository에 필요한 모든 파일을 불러와 줌 (단점) 플로우나 조건부 표현 어려움

-- Gradle : JVM 기반 빌드 도구, Ant Maven 보완

(장점) Java이용해 개발자 의도에 따른 logic 설계 가능

 

- 구현 도구 : 코드의 작성과 디버깅, 수정 등과 같은 작업 시 사용

-- Eclipse : 이클립스 재단 제작, Java 기반 통합 개발 환경,

(장점) OS 제한 없이 사용 가능, 여러 프로젝트 동시에 열 수 있음 (단점) 진입장벽, 낮은 최적화

-- IntelliJ : 젯브레인사 제작, Java 기반,

(장점) 편리한 코드 컴플리션(히스토리기반 자동완성기능), 리팩토링 기능, 자체 Git내장으로 편리한 메모리 관리

(단점) 초기 구동 시 파일 인덱스 과정에서 CPU와 많은 메모리 자원을 소모함

-- Spring Tool Suite : 이클립스 기반 스프링 애플리케이션 개발 환경,  오픈소스

-- NetBeans : Java 기반, 개방된 공통의 인터페이스 개발에 중점을 둔 이클립스 vs 데스크탑 환경을 위한 플랫폼 개발에 주력하는 넷빈즈, 이클립스와 다르게 플러그인은 최소한으로만, 입문자 추천

-- Visual studio : 마이크로소프트사 배포 판매, 윈도우의 데스크탑과 웹 애플리케이션 모두 개발 가능,

(장점) 빌드 환경 자체 내장 편리성, 최적화

 

- 테스트 도구 : 코드의 기능 검증 및 품질 향상에 필요, 코드 테스트, 테스트 계획, 수행 및 분석 작업 수행

 

- 형상 관리 도구 : 코드와 리소스 등의 산출물 버전관리

 

 

  • 개발환경 구성요소 (서버 하드웨어, 클라이언트 하드웨어, 소프트웨어, 형상관리)

- 서버 하드웨어 개발 환경

-- 웹 서버 : 웹 상 정적 콘텐츠(CSS, Javascript, Image) 처리, HTTP를 이용해 요청/응답 처리, WEB-WAS-DB 3계층* 구조를 실무에서 사용

--  웹 어플리케이션 서버 (WAS) : 동적 컨텐츠 처리, WAS 제품으로는 Tomcat, Weblogic, Jeus, Resin 등 존재

-- 데이터 베이스 서버 : 데이터 수집,저장을 위한 용도, DB 제품으로는 MySql, Oracle, MS-SQL 등 존재

-- 파일 서버 : 파일 저장 하드웨어로 물리 저장 장치 활용, 대용량 HDD, SDD등의 장치

 

*WEB-WAS-DB 3계층

더보기

WEB-WAS-DB 3계층은

프레젠테이션(클라이언트) 계층 : 사용자 인터페이스 지원, 정적인 데이터 제공, GUI 또는 front-end라고 불림, 웹서버를 뜻함

애플리케이션 계층 : 동적인 데이터 제공, middleware 라고 불림, 어플리케이션 서버를 뜻함

데이터 계층 : DB 또는 File System을 접근 및 관리, back-end라고 불림, DB서버를 뜻함

 

위의 세 계층을 물리적으로 구분 시켜놓은 것을 의미한다. 각 계층의 변경이 다른 계층에 의존하지 않는다. 

 

*WAS

더보기

WAS(Web Application Server) 는 사용자 요청 스레드를 처리하고, 데이터 베이스에 접속하여 SQL쿼리문에 대한 결과 값을 반환하는 역할을 수행하는 서버이다.

 

- 클라이언트 하드웨어 개발환경 : 서버 개발 환경에서 제공된 서비스를 사용하기 위해 UI를 제공

 

-- 클라이언트 프로그램 : 설치를 통해 사용자와 커뮤니케이션하는 프로그램 (ex. Visual Basic, C#, Delphi)

-- 웹 브라우저 : 일반적 형태의 웹 사이트

-- 모바일 앱 : 모바일 디바이스에 설치되어 활용되는 애플리케이션

-- 모바일 웹 : 모바일 상의 웹 브라우저

 

- 소프트웨어 개발환경 : 프로젝트 요구사항에 부합한 운영체제, 미들웨어, DBMS를 선정

 

-- 운영체제 : 서버의 하드웨어를 사용자 관점에서 편리하고 유용하게 사용하기 위한 SW

---- Windows : 저작사 Microsoft, 중/소규모 서버, 일반 PC, (장점) 유지 관리 비용

---- Unix : 저작사 IBM, HP, SUM, 대부분 유료, 대형 시스템이 사용, (장점) 대용량 처리, 서버 안정성

---- Linux : 저작사 Linus Torvalds, Unix의 호환커널, Linus' *nix(리누스의 유닉스)라는 뜻으로 지어졌다. *nix는 Unix 계열 운영체제라는 뜻, 중/대규모 서버, 오픈소스, 일반 사용자, (장점) 높은 보안성, 가장 적은 소유 비용

---- 안드로이드 : 기기 호환성

---- iOS : 높은 보안성, 고성능

 

-- 미들웨어 : 운영 체제와 응용 프로그램의 사이에 존재하는 SW,  양 쪽을 연결하여 데이터를 주고 받을 수 있게함, 미들웨어는 고도로 분산된 플랫폼 전반에서 원활하고 일관되게 작동되는 애플리케이션 환경을 만든다. DB 미들웨어와 통신 미들웨어 두가지 분류가 존재한다. 웹 서버, JVM과 같은 개발 환경의 구성요소로 활용한다. 

 

-- DBMS : DB라는 데이터 집합을 만들고, 저장 및 관리할 수 있는 기능 제공

 

- 형상 관리 : 소프트웨어 개발 전체 과정에서 발생하는 모든 항목의 변경 사항을 관리, 제품의 무결성과 변경 추적성 확보

 

-- 형상 관리의 절차 : 형상 식별(대상 식별 및 ID와 관리번호 부여) → 형상 통제(베이스라인에 대한 관리 및 형상 통제 수행) → 형상 감사(베이스라인 무결성 평가, 베이스라인 변경 시 요구사항 일치 여부 검토) → 형상 기록

 

-- 형상 관리 도구의 기능 

---- 체크인 : 개발자가 수정한 소스를 형상 관리 저장소로 업로드

---- 체크아웃 : 형상 관리 저장소로부터 최신버전을 개발자 PC로 다운로드

---- 커밋(Commit) : 체크인 후 최종 업데이트가 되었을때 형상 관리 서버에서 반영하도록 하는 기능

 

-- 형상 관리 도구 사례

---- CVS : 가장 오래됨, 중앙 집중형 서버-클라이언트 방식,  diff를 통해 파일 내용 비교, 파일 단위 변경 사항 관리,

(장점) 직관적, 단순한 명령셋 (단점) 파일 및 디렉토리 변경 불편, 롤백 기능 미지원

---- SVN : CVS의 단점 보완, 중앙 집중형 서버-클라이언트 방식,

(장점) 빠른 속도, Gzip압축 통한 공간절약, 작업 모음 단위 기반 (단점) Trunk, Branch, Tag* 시 모두 물리적 저장 위치 점유, 잦은 커밋으로 인한 리비전 번호 증가

---- Git : 로컬 환경에서 분산형 저장 방식,

(장점) 로컬 저장 가능, 오프라인 작업 가능 (단점) 대용량 코드 관리에 부적절, 한번에 diff보기 어려움

 

*Trunk, Branch, Tag

더보기

Trunk, Branch, Tag 개념

Trunk

- 기본적으로 개발을 시작할 때 사용하는 디렉토리(소스의 주 개발 작업을 진행하는 폴더) 

- 모든 프로그램 개발 작업은 Trunk 디렉토리에서부터 시작

- Main, Mainline, Production의 의미로 사용됨


Branches 

- Trunk에서 뻗어져 나온 나뭇가지

- 소스의 실험적인 작업을 하는 폴더. 소스의 현재 버전을 유지보수하고, 현재 버전을 기반으로 차기 버전을 개발할 경우 이 폴더 이용

- 수정이 계속해서 이루어지다가 궁극적으로 Trunk에 Merge되는 것이 일반적

 

Tags 

- 꼬리표의 개념

- 현재 릴리즈된 소스를 관리하기 쉽게 따로 '보관'하는데 사용

- 개발을 위한 것이 아니라 보관을 위한 것이기 때문에 Export만 해야함

- Release, Snapshots, Baselines의 의미로 사용됨


출처: https://kitchu.tistory.com/53 [Dream Archive]

 

 

  • 개발환경 구축 절차

- 프로젝트 요구사항 분석 : 시스템 환경을 분석하여 필요 도구 파악

- 필요 도구 설계 : 시스템을 구축하기 위한 환경 설계

- 개발언어 선정 : Web을 이용한 고객 서비스일 경우 Server 언어는 Java, JSP, Javascript 로 Client 언어는 HTML

- 구현도구 선정 : Java의 경우 이클립스를 주로 이용, C#, Visual Basic 은 Visual Studio를 활용

- 빌드, 테스트 도구 선정 : 팀원의 숙련도 고려, 통합 개발환경(IDE)과 호환이 가능한 도구 선정


1. 개발환경 구축

(2) 서버 개발 프레임워크

 

  • 프레임워크(Framework)의 개념

- 소프트웨어의 설계와 구현을 재사용 가능한 형태로 클래스들을 제공하는 틀, 쉽게 말해 필요한 기능을 한데 모아놓은 것

 

 

  • 프레임워크(Framework)의 특징

- 모듈화 : 프레임워크는 '구현'을 인터페이스 뒤에 감춰 모듈화를 강화한다. 설계와 구현 변경에 따른 영향 최소화

- 재사용성 : (인터페이스를 통해) 여러 애플리케이션에서 반복적 사용하는 일반적인 컴포넌트를 정의하여 재사용성을 높임

- 확장성 : 다형성을 통해 애플리케이션이 프레임워크의 인터페이스를 확장

- 제어의 역행 : 프레임워크 코드가 나의 코드를 호출할 수 있기 때문에 제어가 역전되었다고 한다. 어떤 모듈이 사용할 모듈을 개발자가 결정하는 것이 아니라 다른 모듈에게 선택권을 넘겨줌, 외부에서 필요한 객체를 결정하기 때문에 개발자는 직접 연결 처리를 할 필요가 없다. 프레임워크 코드가 전체 애플리케이션 처리흐름 제어, 외부 이벤트에 대해 애플리케이션이 어떤 메서드를 수행해야할지 결정

 

 

  • 프레임워크(Framework)의 구성요소

- 개발환경 : 설계, 구현, 테스트 등 개발에 필요한 지원 도구 모음

- 실행환경 : 자바 기반 응용시스템 개발 시 필수적 기능을 패턴화해 미리 구현해둔 라이브러리 코드 모음

- 운영환경 : 표준 프레임워크 기반 개발 시스템에 대한 운영시 필요한 의사소통 및 모니터링 도구 모음

- 관리환경 : 표준 프레임워크에 대한 기술 지원, 업그레이드 등 관리하기 위한 내부 업무 시스템

 

 

  • 프레임워크(Framework)의 사례 - 전자정부 프레임워크

- 개념 : 범정부적 개발 프레임워크 표준을 정립 → 전자정부 서비스 품질향상, 정보화 투자효율

- 구성 요소 : 공통 컴포넌트(보안, 사용자 디렉터리/통합인증, 시스템관리 등)와 표준 프레임워크(개발,실행,관리,운영환경 구성)

- 버전 : 2015년 6월 V3.5 이후 2019년 2월 버전 3.8 발표


2. 공통 모듈 구현

(1) 재사용

 

  • 재사용의 개념

- 기존의 소프트웨어 또는 소프트웨어 지식을 활용하여 새로운 소프트웨어를 구축하는 작업

- 만들고자 하는 시스템의 개발 시간 및 비용을 절감하기 위하여 기존의 검증된 기능들을 파악하고 재구성하여 시스템에 응용하기 위한 최적화 과정

 

 

  • 재사용의 유형 (함수와 객체, 컴포넌트, 애플리케이션 재사용)

- 함수와 객체 재사용 : 클래스나 함수 단위로 구현한 소스코드 재사용

- 컴포넌트* : 컴포넌트 단위로 재사용, 컴포넌트의 인터페이스를 통해 통신

- 애플리케이션 재사용 : 공통기능 제공 애플리케이션과 기능을 공유하여 재사용 

 

* 컴포넌트

더보기

컴포넌트는 독립적인 단위 모듈을 뜻한다. 하드웨어의 부품처럼 독립적인 기능을 수행하며, 추후에 교환가능한 '모듈'. OOP(객체 지향)언어의 class와는 다르다. 컴포넌트는 여러개의 클래스로도 작성될 수 있으며, 컴포넌트 개념을 잘 적용한 소프트웨어란 부품(클래스)만을 바꾸어 주었을 시에도 오류없이 잘 작동되는 것을 의미한다.

 

출처: https://mommoo.tistory.com/55 [개발자로 홀로 서기]

 

 

  • 코드 재사용

- 프로그램의 일부 또는 전부를 이후의 다른 프로그램을 만들 때 사용하는 기법

- 이전 버전에서 시작해 다음 버전을 개발하는 작업도 코드 재사용에 속함

 

 

  • 재사용 프로그래밍 기법

- 객체지향 프로그래밍 : 객체 단위로 재사용 이루어지도록 설계, 구조화된 프로그래밍

- 제네릭 프로그래밍 : 하나의 값이 여러 데이터 타입 가질 수 있음, 재사용성 높인 방식

- 자동 프로그래밍 : 사용자가 설정 변수에 근거한 프로그램 생성

- 메타 프로그래밍 : 런타임에 수행해야 할 작업 일부를 컴파일 타임 동안 수행

 

 

  • 재사용의 사례

- 라이브러리 : 공통으로 사용될 수 있는 특정 기능을 모듈화한 기법

-- 표준 라이브러리 : 특정 언어의 개발 환경에 기본적으로 포함된 것, 기본적 기능 수행과 더불어 디버깅, 성능 측정 등을 위한 별도의 API 존재

-- 런타임 라이브러리 : 프로그램이 실제 환경에서 실행되기 위해 필요한 모듈

 

- 프레임워크 : 클래스와 라이브러리가 합쳐진 형태라고 볼 수 있음

- 소프트웨어 아키텍쳐 : 시스템을 이루는 구성요소 간 관계를 나타낸 지침과 원리를 포함하는 청사진


2. 공통 모듈 구현

(2) 모듈화

 

  • 모듈화의 개념

- 프로그램 개발 시 생산성과 최적화, 관리 용이를 위해 기능 단위로 분리하는 기법

- 프로그램을 구성하는 데이터와 함수를 묶어 모듈로 구현

 

 

  • 모듈화의 장점

-  프로그램 효율적 관리, 성능 향상

- 소프트웨어 이해의 용이성 증대와 복잡성 감소

- 기능 분리 가능, 인터페이스 단순화

- 모듈 재사용으로 개발 유지보수 용이

 

 

  • 모듈화의 원리

- 정보 은닉 : 어렵거나 변경 가능성있는 모듈을 타 모듈로부터 은폐

- 분할과 정복 : 복잡한 문제를 분해, 모듈 단위로 문제 해결

- 데이터 추상화 : 함수 내에 자료 구조의 표현 내역을 은폐

- 모듈 독립성 : 낮은 결합도와 높은 응집도*를 가짐

 

 

  • 모듈화 측정 지표

- 모듈화의 적정성을 측정하는 지표는 응집도와 결합도이다. 

- 좋은 모듈화는 용도에 맞게 잘 구분된 기능을 가진 모듈들로 세분화하는 것

- 개별 모듈은 독립적으로 주어진 역할 만을 수행하며, 타 모듈에 대한 의존성이 낮아야함

 

 

  • 모듈화의 유형

- 설계 측면 

-- 모듈 : 설계 시 연관 기능을 한 부분에 모아 놓고 라이브러리 형태로 사용

-- 컴포넌트 : 바이너리 형태로 재사용 가능한 형태

-- 서비스 : 컴포넌트보다는 느슨한 결합(Loosely coupled) 형태의 기능

 

- 구현 측면

-- 매크로 : '프로그램의 반복되는 부분'을 특정 이름을 부여하고 실행할 수 있도록 하는 것

-- 함수 :  프로그램 구현 시 프로그램의 일부 코드로 특정한 작업 수행

-- 인라인 : 프로그램 '구현 시' 반복되는 부분을 특정 이름을 부여하고 실행할 수 있도록 하는 것

 

 

*낮은 결합도와 높은 응집도

더보기

낮은 결합도와 높은 응집도를 가질수록 좋은 품질의 모듈이다. 

결합도(Coupling) : 모듈간 관련성

결합도가 낮을수록 모듈의 독립성이 높아 모듈간 영향이 적어짐

 

응집도(Cohesion) : 모듈 내부 구성요소간 밀접한 관계를 맺고 있는 정도

응집도가 높을수록 필요한 요소들로만 구성되어 있으며, 낮을수록 관련이 적은 요소들로 구성


2. 공통 모듈 구현

(3) 결합도

 

 

  • 결합도의 개념

- 모듈 간의 관련성 측정 척도

- 모듈 내부가 아닌 외부 모듈과의 연관도 or 상호의존성 

 

 

  • 결합도의 특징

- 모듈 연관성 없음 : 서로 다른 상위 모듈에 의해 호출되어 처리상 연관이 없는 다른 기능을 수행하도록 한다.

- 인터페이스 의존성 : 인터페이스를 통해 자료전달이 이루어지므로 인터페이스의 복잡성에 의존적이다.

- 복잡성 감소 : 결합도를 낮춰서 복잡성을 감소시킨다.

- 파급효과 최소화 : 에러 발생 시 오류가 전파되는 파급효과를 최소화하는 효과.

 

 

  • 결합도의 유형

- 내용, 공통, 외부, 제어, 스탬프, 자료 결합도 순으로 결합도가 낮아진다. 

 

- 결합도의 유형

-- 내용 결합도 : 모듈 내부의 변수, 기능을 다른 모듈에 사용

-- 공통 결합도 : 모듈 밖의 전역 변수를 참조하고 전역 변수를 갱신하는 식으로 상호작용

-- 외부 결합도 : 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적 수행할 때

-- 제어 결합도 : 제어 요소가 전달될 경우

-- 스탬프 결합도 : 모듈 간 인터페이스로 배열, 객체, 구조 등이 전달되는 경우 

-- 자료 결합도 : 모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 모듈 간 상호작용


2. 공통 모듈 구현

(3) 응집도

 

  • 응집도의 개념

- 모듈의 독립성을 나타내는 개념

- 하나의 모듈은 하나의 기능을 수행한다.

 

 

  • 응집도의 특징

- 유사기능 영역구성 : 같은 기능영역의 함수들로 구성

- 단일 책임할당 : 함수의 개수가 상대적으로 적고, 오로지 자신만이 할  수 있는 책임을 할당받음

- 함수 간 상호협력 : 하나의 함수에 많은 기능을 넣지 않고 다른 함수와 협력

 

 

  • 응집도의 유형

- 우연적, 논리적, 시간적, 절차적, 통신적, 순차적, 기능적 응집도 순서로 응집도가 높아진다.

 

- 응집도의 유형

-- 우연적 응집도 : 모듈 내부 구성요소간 연관 없음

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

-- 시간적 응집도 : 특정 시간에 처리되어야하는 활동들이 한 모듈에서 처리

-- 절차적 응집도 : 모듈이 다수의 관련기능을 가질 때 기능들 순차적으로 수행

-- 통신적 응집도 : 동일한 입,출력을 사용하지만 다른 기능을 수행하는 활동들을 모아놓음

-- 순차적 응집도 : 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동이 사용하는 경우

-- 기능적 응집도 : 모듈 내부의 모든 기능이 단일 목적을 위해 수행됨

 

 

  • 응집도의 사례

- 낮은 응집도 : 모듈 내의 다양한 기능 수행 → 독립성 낮음

- 높은 응집도 : 단 하나의 기능 → 독립성 보장, 쉬운 유지보수


3. 서버 프로그램 구현

(1) 보안 취약성 식별

 

  • 보안 취약성의 개념

- 불법적인 사용자의 접근을 허용할 수 있는 위협

- 정상적인 서비스를 방해하는 위협

- 중요 데이터의 유출, 변조, 삭제 위협

 

 

  • 침투 테스트

- 위험한 코드 삽입, SQL 삽입, 매개변수화, 권한 없는 입력 등의 공격을 수행하여 부적절한 보안 조치를 식별 및 평가

 

- 침투 테스트 절차

 

-- 정찰 : 목표 애플리케이션 관련 정보 수집

-- 탐색 : 애플리케이션을 검사하여 보안 위협에 관련된 상세 정보 확인

-- 접근 권한 취득 : 악성 코드를 삽입하여 데이터에 접근 권한 획득 후 공격

-- 엑세스 유지 : 접근 권한을 계속 유지하여 다수의 공격테스트 수행

-- 추적 방지 : 공격자가 로그, 수집된 데이터 등 접근 이력 제거

 

 

  • 취약성 공격

- 보안 버그나 잘못된 설정 등의 결함을 공격

- 코드, 프로그램, 스크립트 등을 이용하여 정보를 빼내거나 다른 용도로 악용

 

 

  • 취약성에 따른 공격기법

- 주요 공격 기법으로는 DoS, 오버플로우, 권한상승, SQL 인젝션, XSS 등이 있다.

 

- 공격 기법 유형

-- 서비스 거부(DoS) : 무의미한 서비스 요청 등의 반복으로 시스템 가용자원 소모

-- 코드 실행 : 입력 유효성 검사 없이 쉘 명령을 실행할 경우 공격자가 임의 코드가 실행되도록 하는 공격

-- 버퍼 오버플로우 : 메모리 범위를 넘치게 해서 원래의 리턴 주소를 변경 시켜 임의의 프로그램, 함수를 실행시킴 

-- 정보 수집: 미리 시스템의 취약점, 네트워크 경로, 방화벽 설치 유무를 알아내고 정보 수집하는 공격

-- 권한 상승 : 악성 프로그램 설치 후 데이터 조회, 변경, 삭제 등을 통한 권한 상승 후 공격

-- SQL 인젝션 : DB와 연동된 웹 애플리케이션에서 공격자가 입력 폼 및 URL 입력란에 SQL문을 삽입하여 DB 정보 열람

-- 크로스 사이트 스크립팅(XSS) : 게시판에 악성 스크립트를 작성, 사용자 열람시 이벤트 발생을 통해 쿠키, 개인정보 전송

-- 사이트 간 요청 위조 공격(CSRF) : 웹 사이트 취약점 공격, 공격자가 의도한 수정, 삭제, 등록 등을 특정 웹사이트에 요청하게 함

-- 디렉터리 접근 : HTTP 기반공격, 서버의 루트 디렉터리에서 외부 명령을 실행하여 파일, 웹소스를 강제로 내려받을 수 있음

 

 

  • 시큐어 코딩

- 개발 과정에서 개발자의 실수, 논리적 오류 등으로 인해 SW에 내포될 수 있는 보완 취약점 최소화


3. 서버 프로그램 구현

(2) API

 

  • API(Application Programming Interface)의 개념

- 애플리케이션을 만들기 위한 하위 함수, 프로토콜, 도구들의 집합

- 명확하게 정의된 컴포넌트간 통신 방법

- 함수 집합을 뜻하는 라이브러리 보단 더욱 포괄적으로 그 함수들에 대한 명세까지 포함

 

 

  • API의 유형

- 오픈API : 누구나 쉽게 접근 (ex. 기상청 API)

- 비공개API : 권한이 있는 일부 사용자들에게만 정보 제공 (ex. 사내 API)

 

 

  • API의 목적

- 개발자들에게 필요한 기능 추상화

- 객체, 클래스 등 제공

 

 

  • API의 종류

- 윈도우즈 API : Windows OS가 사용하는 API, C와 C++ 프로그램에서 직접 운영체제와 상호작용

- 웹 API : 웹 애플리케이션에서 다른 서비스에 요청,응답을 위해 정의된 API, 대표적인 웹 API 기술로는 XML*, JSON*, SOAP*, REST* 등

- 오픈 API : 플랫폼의 기능과 콘텐츠를 외부에서 웹프로토콜(HTTP)로 호출해 사용할 수 있게 개방한 API, 개발자 사이트에서 제공하는 지도, 검색 머신러닝 등이 해당

- Java API : 자바를 사용해서 구현할 수 있도록 한 클래스 라이브러리 집합, 입출력, 화면 구성, 네트워크와 같이 복잡하지만 필요한 클래스들 미리 구현해 놓음.

 

* XML, JSON, SOAP, REST

더보기

XML, JSON, SOAP, REST 개념

XML(Extensible Markup Language)

태그 등을 이용하여 문서의 구조를 표현하는 Markup언어 중 하나이다.

HTML과 다르게 태그를 정의할 수 있고 데이터를 기술할 수 있다.(데이터 구조화이후 교환 목적)

데이터가 어떻게 보일지 표시하기 위한 HTML vs 데이터가 무엇인지 기술하기 위한 XML

 

JSON(JavaScript Object Notation)

서버와 클라이언트 교류시 주로 사용

데이터를 저장하거나 전송할 때 사용하는 데이터 포맷

최근엔 XML을 대체

"속성-값 쌍", "키-값 쌍"으로 이루어진 데이터 객체 전달

 

SOAP(Simple Object Access Protocol)

HTTP, HTTPS, SMTP 등을 통해 XML 기반의 메세지를 컴퓨터 네트워크 상에서 교환하는 프로토콜

 

REST(REpresentational State Transfer)

REST API는 REST를 통해 서비스 API를 구현한 것, HTTP 메소드를 사용해 필요한 자원에 접근하는 방식을 정해놓은 아키텍쳐

REST 구성요소는 리소스, 메소드, 메세지

- 리소스에 접근할 때는 URL 사용

- HTTP 메소드로는 POST, GET, PUT, DELETE 가 있고 어떤 성격의 요청인지 알려주는 역할이다.

- 메시지는 헤더, 바디, 응답상태 코드로 구성되어있다.

(장점) SOAP보다 개발 단순, 기존 웹 인프라 사용가능

(단점) HTTP 프로토콜만 사용 가능, 분산환경에 부적합


4. 배치 프로그램 구현

(1) 배치 프로그램

 

  • 배치 프로그램의 개념

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

 

 

  • 배치 프로그램의 필수 요소

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

- 온디맨드 배치 : 사용자의 명시적 요구가 있을 떄마다 실행

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

 

 

  • 배치 스케줄러

- 배치 스케줄러의 개념 : 일괄 처리(Batch Processing)를 위해 주기적으로 발생하거나 반복적으로 발생하는 작업을 지원하는 도구 (ex. 은행의 정산작업 : 하루동안 쌓인 데이터를 배치작업을 통해 한꺼번에 처리)

 

- 배치 스케줄러의 유형

-- 스프링 배치 : 스프링 프레임 워크의 3대 요소(DI, AOP, 서비스 추상화)를 모두 사용할 수 있음

-- 쿼츠 스케줄러 : 스프링 프레임워크에 플러그인 되어 수행하는 작업과 스케줄을 정의하는 트리거를 분리하여 유연성 제공

 

 

  • 배치 프로그램 구현

- 배치 프로그램 확인 : 애플리케이션 설계를 기반으로 한 프로그램 관리 대장을 확인한다.

- 배치 설계서 확인 : 르고르매 관리 대장 ID와 일치하는 배치 설계를 확인한다.

 

 

 

 

 

ref :  수제비 2020 정보처리기사 필기