28. 서버 프로그램 구현
개발 환경 구축
개발 환경 구축
개념
소프트웨어 개발을 위해 개발에 필요한 소프트웨어와 하드웨어 장비를 구축하는 것
개발환경 및 테스트환경, 실제 운영되는 운영시스템환경 등을 구축
개발을 진행하면서 필요한 관리도구, 설계도구, 구현도구, 테스트도구, 형상관리도구, 배포도구 까지 고려하여 개발환경을 구축
도구 분류
하드웨어
개발자 클라이언트 환경 구성
테스트 서버 및 운영 서버 환경 구성
구현도구
개발자의 코드 작성 및 디버깅을 지원
구현 언어별 특성에 맞는 구현도구를 선정하여 구축
구현도구 선정 시 고려사항 : 적정성, 효율성, 이식성, 친밀성, 범용성
테스트도구
- 코드상의 오류 및 실행오류를 확인하여 소프트웨어의 품질을 높이기 위해 사용
형상관리도구
- 프로젝트에서 사용하는 모든 산출물 및 소스코드에 대한 버전을 관리
빌드도구
작성된 코드에 대한 빌드 및 배포를 수행
CI(Continuous Integration) : 지속적 통합
CD(Continuous Delivery) : 지속적 배포
하드웨어 환경
개발자 개발 환경 구성
개발 언어에 따른 개발 환경 구축
IDE 도구, JDK, 데이터 접속 프로그램 등 설치
Java Web 구축시 설치
- JDK
- IDE(Eclipse, Intelli J)
- 아파치 & 톰캣(상황에 따라 Weblogic, JEUS)
서버 환경
웹 서버 | WEB
- 클라이언트에게 정적 파일(HTML, CSS, JS, 이미지)을 제공하는 웹서버 어플리케이션이 설치된 하드웨어
- 정적 파일 문서를 클라이언트에게 전달
- Apache Web Server, IIS, nginx, GWS 등
웹 어플리케이션 서버 | WAS
- 동적인 웹 서비스를 제공하기 위한 미들웨어가 설치된 하드웨어
- 클라이언트 요청에 맞는 동적인 컨텐츠를 생성
- DB조회나 다양한 로직을 처리
- Web Logic, Web Spere, Jeus, Tomcat 등
데이터베이스 서버 | DBMS
- 데이터의 저장과 관리를 위한 데이터베이스 소프트웨어가 설치된 하드웨어
- Oracle, MySQL, MS-SQL 등
파일 서버
- 사용자의 파일을 저장하고, 파일을 공유할 목적으로 구성된 하드웨어
소프트웨어 환경
요구사항 관리 도구
소프트웨어 개발에 필요한 요구사항들을 관리
JFeature, JRquisite, Trello 등
설계 / 모델링 도구
사용자 요구 사항을 기반으로 소프트웨어의 모형을 설계
ArgoUML, DB Designer, StarUML 등
구현 도구
개발자가 코드를 구현할 수 있게 도움
Eclipse, Intelli J, CodeBlock, Visual Studio 등
형상관리 도구
프로젝트에서 사용하는 모든 산출물 및 소스코드에 대한 버전을 관리
CVS, SVN, Git 등
테스팅 도구
코드상의 오류 및 실행 오류를 확인하여 소프트웨어의 품질을 높이기 위해 사용
CppUnit, JMeter, JUNIT, STAF 등
빌드 도구
소스코드에서 어플리케이션 생성을 자동화하기 위한 도구
코드를 그대로 사용하거나, 실행 가능한 형태로 컴파일, 링킹, 패키징을 도움
Make, Ant, Maven, Gradle 등
품질관리 도구
사용자의 요구사항을 충족하기 위해 필요한 품질을 관리
소스코드의 품질 관리
CheckStype, Cobertura, CppCheck, Valgrind 등
이슈관리 도구
소프트웨어의 버그, 요구사항, 작업내용 등을 게시물 형태로 올려 상태를 확인
Bugzilla, Mantis, Trac 등
프로젝트 관리 도구
프로젝트의 전반적인 진행 상태를 관리
GanttProject, Redmine 등
개발환경 구축 순서
- 목표 시스템의 환경 및 요구사항 분석
- 개발 언어 설정
- 통합 개발환경 선정
- 형상관리 도구 선정
- 테스트 도구 선정
- 빌드 도구 선정
서버 개발 프레임워크
개념
소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공
소프트웨어 개발에 바탕이 되는 템플릿과 같은 역할을 하는 클래스들과 인터페이스의 결합
소프트웨어 개발 시 공통적인 부분을 제공
특징
모듈화 | Modularity
프레임워크는 구현을 인터페이스 뒤에 감추는 캡슐화를 통해서 모듈화를 강화
설계와 구현의 변경에 따르는 영향을 최소화시킴으로써 쉽게 소프트웨어의 품질을 향상
재사용성 | Reusability
프레임워크가 제공하는 인터페이스는 여러 어플리케이션에서 반복적으로 사용할 수 있는 일반적인 컴포넌트를 정의할 수 있게 함으로써 재사용성을 높임
소프트웨어의 품질, 성능, 신뢰성, 상호 운용성을 향상시키고, 프로그래머의 생산성을 높임
확장성 | Extensibility
- 다형성(polymorphism)을 통해 어플리케이션의 프레임워크의 인터페이스를 확장
제어의 역흐름 | Inversion of Control
- 프레임워크가 외부의 이벤트에 대해 어플리케이션이 어떠한 메소드들을 수행해야 하는지 결정
구분
Java 프레임워크
전자정부 표준 프레임워크
스트릿츠
스트링
ORM 프레임워크
iBatis
myBatis
Hibernate
JS 프레임워크
AngularJS
ReactJS
ExtJS
프론트엔드 프레임워크
Bootstrap
Foundation
MDL
Library
컴퓨터 프로그램에서 빈번하게 사용되는 사전 컴파일된 루틴 또는 리소스(클래스, 템플릿, 설정 데이터 등)를 모아둔 것
재사용이 필요한 기능으로 반복적인 코드 작성을 없애기 위해 언제든지 필요한 곳에서 호출하여 사용할 수 있도록 클래스나 함수로 만들어진 것
라이브러리는 어플리케이션의 특정 기능, 프레임워크는 어플리케이션의 구조
서버 프로그램 구현
보안 취약성 식별
개념
정보세스템에 불법적인 사용자의 접근을 허용할 수 있는 위험
정보세스템의 정상적인 서비스를 방해하는 위협
정보시스템에서 관리하는 중요 데이터의 유출, 변조, 삭제에 대한 위협
종류
시스템 보안 취약점
네트워크 보안 취약점
응용프로그램 취약점
OWASP | Open Web Application Security Project
국제 웹 보안 표준기구
주로 웹에 관한 정보 노출, 악성 파일 및 스크립트, 보안 취약점 등을 연구하며, 10대 웹 어플리케이션 취약점을 발표
웹 주요 취약점
Injection | 명령어 삽입
- SQL, OS, LDAP 등 웹을 통해 명령을 전달하는 과정에서 특정 명령을 실행하는 코드를 필터링하지 못해 발생
Broken Authentication and Session Management | 인증 및 세션관리
- 인증이나 세션 기능이 미흡하면 공격자가 허가되지 않은 여러 서비스에 접근하고 사용할 수 있음
- 대표적으로 패스워드를 취약하게 하는 경우
Cross-Site Scripting | XSS
- 공격자가 작성한 스크립트가 다른 사용자에게 전달되어 표현되는 취약점
- 상대방의 쿠키정보를 가져올 수 있음
Broken Access Control | 취약한 접근 제어
- 인증된 사용자가 수행할 수 있는 것에 대한 제한을 제대로 적용하지 않았을 때 발생하는 취약점
Security Misconfiguration | 보안 설정 오류
- 디렉터리 리스팅, 백업 및 임시파일 존재, 미흡한 주석관리, 파일 업로드 제한 부재 등이 발생
Sensitive Data Exposur | 민감한 데이터 노출
- 민감한 데이터에 대한 암호화 작업을 수행하지 않으면 개인정보가 유출
Insufficient Attack Protection | 공격 방어 취약점
- 웹 어플리케이션 레벨에서 기본적인 유효성 검사나 침입 탐지, 로킹, 공격 차단 등의 로직이 포함되지 않아 발생
Cross-Site Request Forgery | CSRF 취약점
- 불특정 다수를 대상으로 공격자가 의도한 행위를 하게 만듬
- XSS 공격과 유사하지만, 스크립트가 사용자가 아닌 서버에서 수행되도록 하는 구조적 차이
Using Components With Known Vulnerabilities | 취약점이 있는 컴포넌트 사용
- 컴포넌트, 라이브러리, 프레임워크 및 다른 소프트웨어 모듈을 사용하게 되면서 생기는 취약점
Underprotected APIs | 취약한 API
- API를 통해 웹 서비스가 상호 간에 연동이 되므로 보안에 취약한지 충분히 검토
소프트웨어 개발 보안 가이드
해킹 등 사이버 공격의 원인인 보안취약점을 제거해 안전한 소프트웨어를 개발하는 SW 개발 기법
개발자의 실수나 논리적 오류로 인해 발생할 수 있는 문제점을 사전에 차단하여 대응하고자 하는 것
Secure coding guide
입력 데이터 검증 및 표현
- 프로그램 입력값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식 지정으로 인해 발생할 수 있는 보안 약점
- SQL 삽입, 자원 삽입, 크로스 사이트 스크립트 등 26개
보안 기능
- 보안 기능(인증, 접근 제어, 기밀성, 암호화, 권한 관리 등)을 적절하지 않게 구현 시 발생할 수 있는 보안 약점
- 부적절한 인가, 중요 정보 평문 저장(또는 전송) 등 24개
시간 및 상태
- 동시 또는 거의 동시 수행을 지원하는 병렬 시스템, 하나 이상의 프로세스가 동작하는 환경에서 시간 및 상태를 부적절하게 관리하여 발생할 수 있는 보안 약점
- 경쟁 조건, 제어문을 사용하지 않은 재귀 함수 등 7개
에러 처리
- 에러를 처리하지 않거나, 불충분하게 처리하여 에러 정보에 중요한 정보(시스템 등)가 포함될 때 발생할 수 있는 보안 약점
- 취약한 패스워드 요구 조건, 오류 메시지를 통한 정보 노출 등 4개
코드 오류
- 타임 변환 오류, 자원(메모리 등)의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩 오류로 인해 유발되는 보안 약점
- 널 포인터 역참조, 부적절한 자원 해제 등 7개
캡슐화
- 중요한 데이터 또는 기능성을 불충분하게 캡슐화하였을 때 인가되지 않는 사용자에게 데이터 누출이 가능해지는 보안 약점
- 제거되지 않고 남은 디버그 코드, 시스템 데이터 정보 노출 등 8개
API 모음
- 의도된 사용에 반하는 방법으로 API를 사용하거나, 보안에 취약한 API를 사용하여 발생할 수 있는 보안 약점
- DNS Lookup에 의존한 보안 결정, 널 매개 변수 미조사 등 7개
API | Application Programming Interface
개념
소픝트웨어 내부에 존재하는 기능 및 규칙의 집합
응용 프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
데이터를 제공하는 측에서 공개적으로 데이터를 주고받을 수 있는 규칙을 미리 정의해 두면 외부의 컴퓨터들이 데이터를 가져다 쓸 수 있게 하는 기술
종류
Window API
- 윈도우 운영체제에서 파일 시스템, 장치, 프로세스, 스레드, 오류 처리 등을 사용할 수 있게 해줌
JAVA API
- 자바를 사용하여 쉽게 구현할 수 있도록 한 클래스 라이브러리의 집합
OpenGL | Open Graphics Library
- 2차원 및 3차원 그래픽스 표준 API 규격
OpenAL | Open Audio Library
- 자유 소프트웨어 크로스 플랫폼 오디오 API
OpenCL | Open Computing Language
- 개방형 범용 병렬 컴퓨팅 프레임워크
Open API | Open Application Programming Interface
개발자라면 누구나 사용할 수 있도록 공개된 API
네이버 지도, 구글 맵, 오픈스트리트 맵 등
SOAP | Simple Object Access Protocol
개념
HTTP, HTTPS, SMTP 등을 통해 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜
SOAP는 웹 서비스에서 기본적인 메시지를 전달하는 기반
보통 RPC(Remote Procedure Call) 패턴을 많이 사용
클라이언트에서 서버 쪽으로 메시지를 요청하고, 서버는 그 메시지에 반응
레스트풀(RESTful)보다 상대적으로 개발이 어려움
DCOM이나 CORBA의 호환성과 보안 문제로 등장
SOA 개념을 실현하기 위한 기술
구성
SOAP | Simple Object Access Protocol
- HTTP, HTTPS, SMTP 등을 통해 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜
- XML을 근간으로 헤더와 바디를 조합하는 디자인 패턴으로 설계
XACML [암호화(기밀성)], XML [전자서명(무결성)]UDDI | Universal Description, Discovery and Integration
- 인터넷에서 전 세계의 비즈니스 업체 목록에 자신의 목록을 등록하기 위한 XML 기반의 규격
SAML [인증 & 권한 관리], XKMS [키관리]WSDL | Web Services Description Language
- 웹 서비스 기술언어 또는 기술된 정의 파일의 총칭으로 XML로 기술
- 서비스 제공 장소, 서비스 메시지 포맷, 프로토콜 등이 기술
XACML [UDDI, WSDL 접근 권한 관리]
보안 프로토콜
SAML | 인증 & 권한 관리
- 이기종 시스템 간 권한 확인
- 인증 및 권한 정보 명세
- 보안 토큰
XKMS | 키관리
- 부인 방지
- 기존 PKI 연동 용이
XACML | 접근 제어
- 정보 접근을 위한 XML 명세
- UDDI 및 WSDL 항목 접근 제어
장점
기본적으로 HTTP 기반 위에서 동작하기 떄문에 프록시와 방화벽에 구애받지 않고 통신이 가능
HTTP 이외의 다른 트랜스포트 프로토콜들(SMTP)을 사용할 수 있음
플랫폼 및 프로그래밍 언어에 독립적
단점
- XML 포맷의 형태로 보내기 때문에 다른 기술과 비교해서 상대적으로 느림
REST
개념
HTTP URI를 통해 자원을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미
자원 기반의 구조(ROA, Resource Oriented Architecture)의 개념으로 구현
구성요소
자원(Resource), URI
- 서버에 존재하는 데이터의 총칭
- 모든 자원은 고유의 URI를 가지며 클라이언트는 이 URI를 지정하여 해당 자원에 대해 CRUD 명령을 수행
행위(Verb), Method
- 클라이언트는 URI를 이용해 자원을 지정하고 자원을 조작하기 위해 Method를 사용
- HTTP 프로토콜에서는 GET, POST, PUT, DELETE 같은 Method 제공
표현(Representation)
- REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 Representation으로 나타낼 수 있음
CRUD Operation, HTTP Method
- Create
POST 자원 생성
- Read
GET 자원 정보 조회
- Update
PUT 자원 정보 업데이트
- Delete
DELETE 자원 삭제
특징
유니폼 인터페이스
- HTTP 표준만 따르면 어떤 언어나 플랫폼에서 사용해도 사용이 가능한 인터페이스 스타일
- 특정 언어에 상관없이 사용이 가능
Stateless | 상태 정보 유지 안함
- Rest는 상태 정보를 유지하지 않음
- 서버는 각각의 요청을 완전히 다른 것으로 인식하고 처리
Cacheable | 캐시 가능
- HTTP가 가진 캐싱 기능이 적용 가능
Self-descriptiveness | 자체 표현 구조
- REST API 메시지만 보고도 쉽게 이해할 수 있는 자체 표현 구조
장점
별도의 인프라 구축이 필요 없음
클라이언트와 서버의 분리
플랫폼에 독립적
쉬운 사용
단점
표준 미존재
HTTP Method의 한계
RDBMS와 맞지 않음
RESTful
- REST의 원리를 따르는 시스템
배치 프로그램 구현
배치 프로그램
배치 개념
데이터를 일괄적으로 모아서 처리하는 대량의 작업을 처리
컴퓨터 흐름에 따라 순차적으로 자료를 처리하는 방식
배치 프로그램이란, 대량의 데이터를 모아 정기적으로 반복 처리하는 프로그램
필수 요소
대용량 데이터 : 대용량 데이터를 처리할 수 있어야 함
자동화 : 심각한 오류 상황 외에는 사용자의 개입없이 동작해야 함
견고함 : 비정상적인 동작 중단이 발생하지 않아야 함
안정성 : 어떤 문제가 발생했을 때, 해당 문제를 추적하고 복구할 수 있어야 함
성능 : 주어진 시간에 작업을 완료해야 하고, 다른 어플리케이션의 동작을 방해하지 않아야 함
스케줄 관리 종류
크론탭 | Crontab
UNIX, LINUX 계열에서 사용
형식 : 분(0~59) 시(0~23) 일(0~31) 월(1~12) 요일(0~6, 0 = 일요일) 명령어
허용 특수문자
*: 모든 값(매시, 매일, 매주)?: 특정 값이 아닌 어떤 값이든 상관 없음-: 범위를 지정할 때 (12-14 = 12시부터 14시),: 여러 값을 지정할 때(12,14 = 12시, 14시)/: 증분값, 즉 초기값과 증가치 설정(*/20 = 매 20분마다)
* * * * * 명령: 매 분 실행
30 4 * * 0 명령: 매주 일요일 4시 30분 실행
10-30 4 * * * 명령: 매일 오전4시 10분부터 30분까지 매분 실행
0,10,20 * * * * 명령: 매일 매 시간 0분, 10분, 20분 실행
*/30 * * * * 명령: 매 30분마다 실행
30 0 1 1,6 * 명령: 1월과 6월, 1일, 0시 30분에 실행
Spring Batch
백엔드의 배치처리 기능을 구현하는데 사용하는 프레임워크
대용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능 제공
배치가 실패하여 작업 재시작을 하게 된다면 처음부터가 아닌 실패한 지점부터 실행
Batch Job을 관리하지만 Job을 구동하거나 실행시키는 기능은 미지원
Batch Job을 실행시키기 위해서는 Quartz, Scheduler, Jenkins 등 전용 Scheduler를 사용
구성요소 : Job, Job Launcher, Step, Job Repository
Quartz Job Scheduler
표준 자바 프로그램으로 만들어진 작업을 지정된 일정에 따라 실행시키는 데 사용하는 Java 패키지
특정한 시간에 특정한 작업을 한다든지 또는 주기적으로 실행해야 할 Java 어플리케이션을 사전에 정해 놓으면 일정에 따라 실행
주요 인터페이스 : Scheduler, Job, JobDetail, Trigger, JobBuilder, TriggerBuilder
형식 : 초 분 시 일 월 요일 년