정보처리기사 실기 4장. 서버 프로그램 구현_5
4-11. 개발 지원 도구
• 통합 개발 환경 (IDE; Integrated Development Environment)
개발에 필요한 다양한 툴을 하나의 인터페이스로 통합하여 제공하는 환경
‣ 통합 환경 도구 : 통합 개발 환경을 제공하는 소프트웨어
‣ 편집기, 컴파일러, 디버거 등
- 통합 개발 환경 도구의 종류
| 프로그램 | 개발사 | 플랫폼 | 운영체제 | 지원 언어 |
| 이클립스 (Eclipse) | Eclipse Foundation, IBM |
크로스 플랫폼 | Window, Linux, MacOS 등 |
Java, C, C++, PHP, JSP등 |
| 비주얼 스튜디오 (Visual Studio) |
Microsoft | Win32, Win64 | Windows | Basic, C, C++, C#, .Net 등 |
| 엑스 코드 (Xcode) | Apple | Mac, iPhone | MacOS, iOS | C, C++, C#, Java, AppleScript 등 |
| 안드로이드 스튜디오 (Android Studio) |
Android | Windows, Linux, MacOS |
Java, C, C++ | |
| IDEA | JetBrains (이전 IntelliJ) |
크로스 플랫폼 | Windows, Linux, MacOS |
Java, JSP, XML, Go, Kotlin, PHP등 |
✓ 크로스 플랫폼 (= 멀티 플랫폼) : 여러 종류의 시스템에서 공통으로 사용될 수 있는 소프트웨어
• 빌드 도구
소스 코드 파일들을 컴퓨터에서 실행할 수 있는 제품 소프트웨어로 변환하는 과정 또는 결과물
‣ 전처리, 컴파일 등의 작업을 수행
✓ 전처리 : 컴파일에 앞서 코드에 삽입된 주석을 제거하거나 매크로들을 처리하는 과정
- 대표적인 빌드 도구
| Ant (Another Neat Tool) | 자바 프로젝트의 공식적인 빌드 도구 |
| 정해진 규칙이나 표준이 없음 | |
| 아파치 소프트웨어 재단 | |
| Maven | 의존성을 설정하여 라이브러리를 관리 |
| 규칙이나 표준이 존재하여 예외 사항만 기록 | |
| 아파치 소프트웨어 재단에서 Ant의 대안으로 개발 | |
| Gradle | 안드로이드 스튜디오의 공식 빌드 도구 |
| 그루비(Groovy) 기반의 빌드 스크립트를 사용 | |
| 한스 도커(Hans Docker)가 Ant와 Maven을 보완하여 개발 |
• 기타 협업 도구
개발에 참여하는 사람들이 서로 다른 작업 환경에서 원활히 프로젝트를 수행할 수 있도록 도와주는 도구
‣ 협업 소프트웨어, 그룹웨어
‣ 일정 관리, 업무흐름 관리, 정보 공유, 커뮤니케이션 등의 업무 보조 도구가 포함
4-12. 서버 개발
• 서버 개발
웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 애플리케이션 서버(WAS)에 탑재하는 것을 의미
‣ 서버 개발에 사용되는 프로그래밍 언어 : Java, JavaScript, Python, PHP, Ruby 등
• 서버 개발 프레임 워크 (= 웹 프레임 워크)
다양한 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어
- 서버 개발 프레임워크의 종류
| Spring | JAVA | 전자정부 표준 프레임워크의 기반 기술로 사용되고 있음 |
| Node.js | JavaScript | 비동기 입출력 처리와 이벤트 위주의 높은 처리 성능을 갖고 있어 실시간으로 입출력이 빈번한 애플리케이션에 적합 |
| Django | Python | 컴포넌트의 재사용과 플러그인화를 강조하여 신속한 개발 가능 |
| Codeigniter | PHP | 인터페이스가 간편하며 서버 자원을 적게 사용함 |
| Ruby on Rails | Ruby | 테스트를 위한 웹 서버를 지원하며, 데이터베이스 작업을 단순화∙자동화시켜 개발 코드의 길이가 짧아지게 함으로써 신속한 개발 가능 |
• 서버 개발 과정
- 구현 과정
| DTO/VO 구현 | 데이터 교환을 위해 사용할 객체를 만드는 과정 |
| 송수신할 데이터의 자료형에 맞는 변수 및 객체를 생성 | |
| SQL 구현 | 데이터의 삽입, 변경, 삭제 등의 작업을 수행할 SQL문을 생성하는 과정 |
| SQL문은 소스 코드 내에 직접 입력하거나 별도의 XML파일로 관리함 | |
| DAO 구현 | 데이터베이스에 접근하고 SQL을 활용해 데이터를 실제로 조작하는 코드를 구현하는 과정 |
| Service 구현 | 사용자의 요청에 응답하기 위한 로직을 구현하는 과정 |
| Controller 구현 | 사용자의 요청에 적절한 서비스를 호출해, 그 결과를 사용자에게 반환하는 코드를 구현하는 과정 |
‣ 구현 순서는 개발자가 임의로 변경할 수 있음
‣ 개발하려는 서버 프로그램의 목적, 개발 언어, 규모 등의 이유로 통합하거나 세분화 가능
✓ DTO (Data Transfer Object) : 데이터의 교환을 위해 생성되는 객체
✓ VO (Value Object) : DTO와 동일하지만 읽기만 가능한 객체로 변경이 불가능함
✓ DAO (Data Access Object) : 데이터베이스에 접근하여 데이터를 조회, 생성, 수정, 삭제 작업을 수행하는 객체
✓ XML파일로 SQL문을 관리하는 경우 중복되는 SQL문을 최소화할 수 있고, 유지보수가 간편해짐
4-13. 보안 및 API
• 소프트웨어 개발 보안
보안 취약점을 최소화하여 보안 위협으로부터 안전한 소프트웨어를 개발하기 위한 일련의 보안 활동
‣ 데이터의 기밀성, 무결성, 가용성 등의 보안 요소를 충족시키는 것을 목표
‣ 보안의 3대 요소 : 기밀성, 무결성, 가용성
• 소프트웨어 개발 보안 점검 항목
| 세션 통제 | 세션의 연결로 인해 발생하는 정보를 관리 |
| 입력 데이터 검증 및 표현 | 입력 데이터에 대한 유효성 검증체계를 갖추고, 검증 실패 시 이를 처리할 수 있도록 코딩 |
| 보안 기능 | 인증, 접근제어, 기밀성, 암호화 등의 기능 |
| 시간 및 상태 | 동시 수행을 지원하는 병렬 처리 시스템이나 다수의 프로세스가 동작하는 환경에서 시간과 실행상태를 관리해 시스템이 원활히 동작하도록 코딩 |
| 에러 처리 | 소프트웨어 실행 중 발생할 수 있는 오류들을 사전에 정의해 에러로 인해 발생할 수 있는 문제들을 예방 |
| 코드 오류 | 코딩 중 실수하기 쉬운 형 변환, 자원의 반환 등을 고려하며 코딩 |
| 캡슐화 | 속성과 데이터를 처리하는 함수를 하나의 객체로 묶어 코딩 |
| API 오용 | API를 잘못 사용하거나 보안에 취약한 API를 사용하지 않도록 고려하며 코딩 |
• API (Application Programming Interface)
라이브러리를 이용할 수 있도록 규칙 등을 정의해 놓은 인터페이스
‣ 라이브러리에 있는 기능을 쉽게 이용할 수 있도록 도와주므로 효율적인 개발 가능
‣ Open API : 무료로 사용할 수 있게 공개된 API
‣ API의 종류 : Window API, 단일 유닉스 규격 (SUS), Java API, 웹 API
4-14. 배치프로그램
• 배치 프로그램 (Batch Program)
여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하도록 만든 프로그램
- 배치 프로그램의 필수 요소
| 대용량 데이터 | 대량의 데이터를 가져오거나, 전달하거나, 계산하는 등의 처리가 가능해야 함 |
| 자동화 | 심각한 오류가 발생하는 상황을 제외하고는 사용자의 개입 없이 수행되어야 함 |
| 견고성 | 잘못된 데이터나 데이터 중복 등의 상황으로 중단되는 일 없이 수행되어야 함 |
| 안정성/신뢰성 | 오류가 발생하면 오류의 발생 위치, 시간 등을 추적할 수 있어야 함 |
| 성능 | 다른 응용 프로그램의 수행을 방해하지 않아야 함 지정된 시간 내에 처리가 완료되어야 함 |
• 배치 스케줄러 (Batch Scheduler, 잡 스케쥴러 Job Scheduler)
일괄 처리 (Batch Processing) 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
- 배치 스케줄러의 종류
| 스프링 배치 (Spring Batch) |
로그 관리, 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작 등의 다양한 기능 제공 |
| Spring Source사와 Accenture사가 2007년 공동 개발한 오픈 소스 프레임워크 | |
| Quartz | 스프링 프레임워크로 개발되는 응용 프로그램들의 일괄 처리를 위한 다양한 기능을 제공하는 오픈 소스 라이브러리 |
| 수행할 작업과 수행 시간을 관리하는 요소들을 분리해 일괄 처리 작업에 유연성을 제공 | |
| Cron | 리눅스의 기본 스케줄러 도구 |
| crontab 명령어를 통해 작업을 예약할 수 있음 |
✓ crontab 명령어 작성 방법
- 작업 예약 형식
| [분] [시] [일] [월] [요일] [명령어] |
‣ 분, 시, 일, 월, 요일에 '*'를 입력하면 매 시기마다 수행
‣ 시기 우측에 '/[단위]'를 입력하면 시기를 단위로 나눈 나머지가 0일 때마다 명령어 수행
‣ '[시작 시기]-[종료 시기]'를 통해 특정 구간에만 반복하여 명령어 수행
‣ 시기는 '[시기1], [시기2], [시기3], ⋯'를 통해 특정 시기에 명령어 수행