*개인적으로 정리한 내용이니 참고용으로 봐주세요 :)
서버 프로그램 구현
1. 개발 환경
- 응용 소프트웨어가 운영될 환경과 유사한 구조로 구축
- 개발 프로젝트의 분석 단계의 산출물을 바탕으로 선정
1) 하드웨어 환경
- 구성 : 사용자와의 인터페이스 역할을 하는 클라이언트(Client), 서비스를 제공하는 서버(Server)
- 웹 서버(Web Server) : 클라이언트로부터 직접 요청 받음, 저용량의 정적 파일들 제공
-기능
--HTTP/HTTPS : 브라우저로부터 요청받아 응답할 때 사용하는 프로토콜
--통신 기록 (Communication Log) : 처리한 요청을 로그 파일에 기록
--정적 파일 관리(Managing Static Files) : HTML, CSS, image 등 정적 파일들 저장 및 관리
--대역폭 제한(Bandwidth Throtting) : 트래픽의 포화 방지를 위해 응답 속도를 제한
--가상 호스팅(Virtual Hosting) : 하나의 서버로 여러개의 도메인 연결
--인증(Authentication) : 합법적인 사용자인지 확인
- 웹 애플리케이션 서버(Web Application Sever) : 동적 서비스를 제공, 웹 서버와 DB서버 / 파일 서버 사이의 인터페이스 역할
- 데이터베이스 서버(DB Server) : 데이터베이스, DBMS를 운영
- 파일 서버(File Server) : 서비스 제공을 목적으로 유지하는 파일들 저장
2) 소프트웨어 환경
- 시스템 소프트웨어 : 운영체제(OS), 웹 서버 및 WAS 운용 서버 프로그램, DBMS
- 개발 소프트웨어
--요구사항 관리 도구 : 요구사항 수집, 분석, 추적
--설계/모델링 도구 : UML(통합 모델링 언어)을 지원
--구현 도구 : 개발언어로 애플리케이션의 실제 구현을 지원
--빌드 도구 : 작성된 소스의 빌드 및 배포, 라이브러리 관리
--테스트 도구 : 모듈들을 테스트
--형상 관리 도구 : 버전별로 관리, 품질 향상을 지원
* 개발 언어의 선정 기준
- 적정성 : 개발하려는 소프트웨어의 목적에 적합
- 효율성 : 코드 작성 및 구현이 효율적
- 이식성 : 다양한 시스템 및 환경에 적용 가능
- 친밀성 : 개발자들의 이해도와 활용도가 높아야 함
- 범용성 : 개발 사례 존재, 여러 분야 활용
2. 모듈(Module)
: 시스템의 각 기능들로 서브시스템, 작업 단위 등과 같은 의미
- 단독으로 컴파일이 가능, 재사용 할 수 있음
- 독립성이 높은 모듈 → 다른 모듈에게 영향을 미치지 않음, 오류를 쉽게 발견하고 해결 가능
- 독립성을 높이려면 모듈의 결합도(Coupling)는 약하게, 응집도(Cohesion)는 강하게, 크기는 작게 만들어야 함
- 효과적인 모듈 설계 방안
① 독립성과 재사용성을 높인다.
② 복잡도와 중복성을 줄이고 일관성을 유지
③ 모듈의 기능은 예측이 가능
④ 하나의 입구와 하나의 출구를 갖도록 해야 함
3. 결합도(Coupling)
: 모듈 간에 상호 의존하는 정도, 두 모듈 사이의 연관 관계
- 자료 결합도(Data Coupling) : 모듈 간의 인터페이스가 자료 요소로만 구성
- 스탬프 결합도(Stamp Couplig) : 배열이나 레코 등의 자료 구조가 전달
- 제어 결합도(Control Coupling) : 논리적인 흐름을 제어하기 위해 제어신호로 통신 / 제어요소를 전달
- 외부 결합도(External Coupling) : 외부의 다른 모듈에서 참조
- 공통(공유) 결합도(Common Coupling) : 공유되는 공통 데이이터 영역을 사용
- 내용 결합도(Content Coupling) : 다른 모듈의 내부 기능 및 내부 자료 직접 참조 / 수정
4. 응집도(Cohesion)
: 정보 은닉 개념을 확장한 것, 모듈의 내부 요소들의 서로 관련되어 있는 정도, 즉 모듈이 독립적인 기능으로 정의 되어 있는 정도
- 기능적 응집도(Functional Cohesion) : 모든 기능 요소들이 단일 문제와 연관되어 수행
- 순차적 응집도(Sequential Cohesion) : 모듈 내 하나의 활동 출력 데이터를 다음 활동 입력데이터로 사용
- 교환적 응집도(Communication Cohesion) : 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행
- 절차적 응집도(Procedual Cohesion) : 기능을 순차적으로 수행
- 시간적 응집도(Temporal Cohesion) : 특정 시간에 처리되는 기능을 모아 하나의 모듈로 작성
- 논리적 응집도(Logical Cohesion) : 유사한 성격, 특정 형태로 분류되는 요소들로 하나의 모듈 형성
- 우연적 응집도(Coincidental Cohesion) : 서로 관련 없는 요소로만 구성
5. 팬인(Fan-in) / 팬아웃(Fan-Out)
- 팬인은 제어(호출)하는 모듈의 수 → 모듈에 들어오면 팬인이라고 생각하면 외우기 쉬움
- 팬아웃은 제어(호출)되는 모듈의 수 → 모듈에서 나가면 팬아웃
- 팬인과 팬아웃을 분석하여 시스템의 복잡도를 알 수 있음
- 시스템의 복잡도를 최적화하려면 팬인은 높게, 팬아웃은 낮게 설계
6. 공통 모듈
: 여러 프로그램에서 공통적으로 사용할 수 있는 모듈
- 애번 필요한 기능들로 구성
- 재사용성 확보, 중복 개발 회피를 위함
- 명세 기법
--정확성(Correctness) : 해당 기능이 필요하다는 것을 알 수 있도록 정확히 작성
--명확성(Clarity) : 중의적으로 해석되지 않도록 명확하게 작성
--완전성(Completenss) : 필요한 모든 것을 기술
--일관성(Consistency) : 공통 기능들 간 상호 충돌 발생하지 않도록 작성
--추적성(Traceability) : 요구사항의 출처, 관련 시스템 등의 관계 파악
7. 재사용성(Reuse)
: 비용과 개발 시간을 절약하기 위해 개발된 기능을 재구성하여 새로운 시스템, 기능 개발을 위해 최적화 시키는 작업
- 함수(메소드)와 객체 : 클래스나 메소드 단위의 소스 코드 재사용
- 컴포넌트 : 수정 없이 인터페이스를 통해 통신하는 방식으로 재사용
- 애플리케이션 : 공통 기능들을 제공하는 애플리케이션 공유 방식 재사용
8. DBMS 접속(Connection)
: 사용자가 데이터를 사용하기 위해 응용 시스템을 이용하여 DBMS에 접근
- 웹 응용 시스템
: 웹 서버와 웹 애플리케이션 서버(WAS)로 구성, 웹 응용 프로그램은 웹 응용 시스템을 통해 DBMS에 접근
- 기술
--JDBC(Java DataBase Connectivity) : Java 언어로 데이터베이스에 접속하고 SQL문을 수행할 때 사용되는 표준 API, Java SE(Standard Edition)에 포함되어 있음, DBMS에 대한 드라이버가 필요
--ODBC(Open DataBase Connectivity) : 개발 언어에 관계 없이 사용할 수 있음, ODBC에 포함된 드라이버 관리자가 해당 DBMS의 인터페이스 맞게 연결해 줌
--MyBatis : JDBC 코드를 단순화 하여 사용할 수 있는 SQL Mapping 기반 오픈 소스 접속 프레임워크
9. 동적 SQL(Dynamic SQL)
: 조건에 따라 SQL 구문을 동적으로 변경하여 처리할 수 있는 SQL 처리방식
- NVL 함수를 사용할 필요가 없음
- 속도가 비교적 느리지만 상황에 따라 다양한 조건을 첨가하는 등 유연한 개발이 가능
10. 서버 개발
- 서버 개발 프레임워크(Framework) : 클래스나 인터페이스를 제공, 모델-뷰-컨트롤러(MVC) 패턴
--Spring : JAVA기반, 전자정부 표준 프레임워크
--Node.js : JavaScript기반, 실시간으로 입출력이 빈번한 애플리케이션에 적합
--Django : Python기반, 신속한 개발 가능
--Codeiniter : PHP기반, 인터페이스가 간편 / 서버 자원을 적게 사용
--Ruby on Rails : Ruby기반, 테스트를 위한 웹서버 / 데이터베이스 작업을 단순화
- 프레임워크의 특성
--모듈화(Modularity) : 캡슐화를 통해 모듈화를 강화, 변경에 따른 영향을 최소화
--재사용성(Reusability) : 개발사의 생산성 향상
--확장성(Extensibility) : 다향성(Polymophism)을 통한 인터페이스 확장이 가능
--제어의 역흐름(Inversion of Control) : 객체들의 제어 권한을 프레임워크에 넘겨 생산성을 향상
- 서버 개발 과정 (구현 순서는 개발자가 임의로 변경할 수 있음)
--DTO/VO(Data Transfer Object / Value Object)
: 데이터 교환을 위해 사용할 객체를 만드는 과정, 변수 및 객체를 자료형(Data Type)에 알맞게 생성, 변수와 데이터를 저장하고 반환하는 메소드만 구현
--SQL
: 데이터의 삽입, 변경, 삭제 등 작업을 수행할 SQL문을 생성, 소스 코드 내에 직접 입력 / XML 파일로 저장
*XML 파일로 관리하면 중복되는 SQL문 최소화, 유지보수가 간편
--DAO(Data Access Object)
: 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드 구현
--Service
: 사용자의 요청에 응답하기 위한 로직을 구현
--Controller
: 사용자의 요청에 적절한 서비스를 호출, 그 결과를 사용자에게 반환하는 코드를 구현
11. 배치 프로그램(Batch Program)
: 사용자와의 상호 작용 없이 미리 정해진 일련의 순서에 따라 일관적으로 작업들을 처리
- 주기에 따라 정기 배치(정해진 기간 수행), 이벤트성 배치(조건 충족), On-Demand 배치(사용자 요청)로 수행
- 배치 프로그램의 필수 요소
--대용량 데이터 : 대량의 데이터를 처리 가능
--자동화 : 오류 발생상황을 제외하고 사용자의 개입 없이 수행
--견고성 : 중단되는 일 없이 수행
--안전성/신뢰성 : 오류가 발생하면 추적 가능
--성능 : 지정된 시간 내에 처리가 완료
12. 배치 스케줄러(Batch Scheduler)
: 일괄 처리(Batch Processing) 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
- 잡 스케줄러(Job Scheduler)라고도 함
- 종류
--스프링 배치(Spring Batch) : 스프링 프레임워크 기능을 모두 사용 가능, 데이터 교환에 필요한 컴포넌트 제공
--Quart : 스프링 프레임워크로 개발되는 응용 프로그램들의 일괄 처리를 위한 기능을 제공하는 오픈 소스 라이브러리
--Cron : 리눅스의 스케줄러 도구 crontab 명령어로 통해 작업을 예약할 수 있음
Ex) 3월, 6월, 9월, 12월 마다 데이터 백업 작업을 예약하고 해당 작업은 각 월의 25일에 오후 10시 정각에 처음 실행되어 15분마다 총 4회 수행할 예정 백업 명령어는 /backup/batch.sh 파일에 준비 되어있음
*/15 22 25 */3 * /backup/batch.sh (15분마다 22시에 25에 3개월마다 매요일 backup 디렉토리에 있는 batch.sh 실행)
Ex) 10월 1일에서 12월 13일까지 매주 금요일 오후 9시 정각에 root 디렉터리에 있는 stat.sh 파일을 실행
0 21 * 10-12 5 /root/stat.sh (0분 21시에 매일 10월에서 12월 사이동안 금요일에 root 디렉터리에 있는 stat.sh 실행)
'ㅁㅁㅇㅊ's Life > Certification' 카테고리의 다른 글
제 52회 SQLD 취득 후기 (1) | 2024.06.09 |
---|---|
2020 정보처리기사 2회 실기대비 정리 - 화면 설계 (0) | 2020.06.23 |
2020 정보처리기사 실기 정리 - 통합 구현 (0) | 2020.06.20 |
2020 정보처리 기사 실기 정리 - 데이터 입·출력 구현 (0) | 2020.06.19 |
2020 정보처리기사 필기 준비과정과 후기 (0) | 2020.06.07 |