포스트

28. 서버 프로그램 구현

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 등

개발환경 구축 순서

  1. 목표 시스템의 환경 및 요구사항 분석
  2. 개발 언어 설정
  3. 통합 개발환경 선정
  4. 형상관리 도구 선정
  5. 테스트 도구 선정
  6. 빌드 도구 선정

서버 개발 프레임워크

개념

  • 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공

  • 소프트웨어 개발에 바탕이 되는 템플릿과 같은 역할을 하는 클래스들과 인터페이스의 결합

  • 소프트웨어 개발 시 공통적인 부분을 제공

특징

모듈화 | 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

  • 형식 : 초 분 시 일 월 요일 년

이 기사는 저작권자의 CC BY-NC 4.0 라이센스를 따릅니다.