정보처리기사 실기 08. 서버 프로그램 구현
개발 환경 구축
* 개발 도구 분류
- 구현 도구 : 코드의 작성과 디버깅, 수정 등과 같이 작업 시 사용되는 도구 (Eclipse, InteliJ, VS)
- 테스트 도구 : 코드의 기능 검증과 전체의 품질을 높이기 위해 사용하는 도구 (xUnit, PMD, Sonar)
- 빌드 도구 : 작성한 코드의 빌드 및 배포를 수행하는 도구 (Ant, Maven, Gradle)
- 형상 관리 도구 : 산출물에 대한 버전 관리를 위한 도구 (Git, SVN, CVS)'
* 서버 하드웨어 개발환경
- 웹 서버 : 웹상의 정적 콘텐츠 HTTP를 이용한 요청/응답을 처리 (Apache 웹서버, 구글 웹서버)
- 웹 애플리케이션 서버(WAS) : 동적 콘텐츠를 처리하고 제공하기 위해 사용 (Tomcat, Jeus, Resin)
- 데이터베이스 서버 : 데이터의 수집, 저장을 위한 용도로 사용 (MySql, Oracle, MS-SQL)
- 파일 서버 : 파일 저장 하드웨어로 물리 저장 장치를 활용한 서버(HDD, SSD)
- Client : Client하드웨어 개발 환경
* 소프트웨어 개발환경
- 운영체제 : 사용자 관점에서 편리하고 유용하게 사용하기 위한 소프트웨어, 하드웨어와 사용자 인터페이스
- 미들웨어 : 웹 서버, JVM과 같은 개발 환경의 구성요소로 활용, 컴퓨터와 컴퓨터를 연결, 쉽고 안전하게 프로그램 사용
- DBMS : 데이터의 저장 및 활용을 위해 DBMS를 설치, 사용자. DB사이 위치
- JVM : 시스템 메모리를 관리하고 자바 기반 Application을 위해 실행 환경 제공
* 형상관리(SCM : Software Configuration Management)
- 소프트웨어 개발을 위한 전체 과정에서 발생하는 모든 항목의 변경 사항을 관리하기 위한 활동
- 형상관리는 소프트웨어 개발 전 단계에 적용되는 활동이며, 유지보수 단계에서도 수행
- 소프트웨어 개발의 전체 비용을 줄이고, 개발 과정의 여러 방해 요인이 최소화되도록 보증하는 것을 목적으로 함.
- 형상 관리 절차 : 형상 식별(대상 정의) → 형상 통제(버전 관리) → 형상 감사(무결성) → 형상 기록(보고서)
+ 형상 식별 : 형상 관리 대상에 이름과 관리 번호를 부여하고, 계층(Tree) 구조로 구분하여 수정 및 추적이 용이하도록 함.
+ 버전 제어 : 소프트웨어 업그레이드나 유지보수과정에서 생성된 다른 버전의 형상 항목을 관리하고, 이를 위해 특정 절차와 도구(Tool)를 결합시키는 작업
+ 형상 통제(변경관리) : 식별된 형상 항목에 대한 변경 요구를 검토하여 현재의 기준선(Base Line)이 잘 반영될 수 있도록 조정하는 작업
+ 형상 감사 : 기준선의 무결성을 평가하기 위해 확인, 검증, 검열 과정을 통해 공식적으로 승인하는 작업
+ 형상 기록(상태보고) : 형상의 식별, 통제, 감사, 작업의 결과를 기록 관리하고 보고서를 작성하는 작업
+ 베이스라인 : 개발 과정의 각 단계에서 나온 산출물들의 변화를 통제하는 시점
* 개발 언어의 선정 기준
- 적정성 : 개발하려는 소프트웨어의 목적에 적합해야 합니다.
- 효율성 : 코드의 작성 및 구현이 효율적이어야 합니다.
- 이식성 : 다양한 시스템 및 환경에 적용이 가능해야 합니다.
- 친밀성 : 개발 언어에 대한 개발자들의 이해도와 활용도가 높아야 합니다.
- 범용성 : 다른 개발 사례가 존재하고 여러 분야에서 활용되고 있어야 합니다.
* 소프트웨어 형상 관리 도구 유형
- 공유 폴더 방식 : 매일 개발이 완료된 파일은 약속된 우치의 공유 폴더에 복사하는 방식 (RCS, SCCS)
- 클라이언트/서버 방식 : 중앙에 버전 관리 시스템을 항시 동작시키는 방식 (CVS, SVN)
- 분산 저장소 방식 : 로컬 저장소와 원격 저장소로 분리되어 분산 저장하는 방식 (Git)
* 소프트웨어 형상 관리 도구별 특징
- SCV(Concurrent Versions System) : 서버와 클라이언트로 구성되어있고, 다수의 인원이 동시에 범용적인 운영체제로 접근 가능한 형상 관리 도구
- SVN(Subversion): 하나의 서버에서 소스를 쉽고 유용하게 관리할 수 있게 도와주는 도구
- RCS(Revision Control System) : 소스 파일의 수정을 한 사람만으로 제한하여 다수의 사람이 파일을 수정을 동시에 할 수 없도록 파일 잠금 방식으로 형상을 관리하는 도구
- Bitkeeper : 중앙 통제 방식으로 대규모 프로젝트에서 빠른 속도를 내도록 개발된 형상 관리 도구
- Git : 속도에 중점을 둔 분산형 버전 관리 시스템, 대형 프로젝트에서 효과적이고 유용함
- Clear Case : 복수 서버, 복수 클라이언트 구조, 필요한 서버를 하나씩 추가하여 확장성을 기할 수 있음
공통 모듈 구현
* 모듈(Module) : 하나의 완전한 기능을 수행할 수 있는 독립된 실체
* 모듈화(modularity)
- 프로그램 개발 시 생산성과 최적화, 관리에 용이하게 기능 단위로 분할하는 기법
- 모듈을 통해 소프트웨어의 성능을 향상시키고 디버깅, 수정, 통합을 용이하게 하는 설계 기법
- 모듈화 원리 : 정보은닉, 분할과 정복, 데이터 추상화, 모듈 독립성
* 응집도(Cohesion) : 모듈의 독립성을 나타내는 정도로, 모듈 내부 구성요소 간 연관 정도
- 응집도 유형 : (약함) 우연적, 논리적, 시간적, 절차적, 통신적, 순차적, 기능적(강함)
+ 우연적(Coincidental) : 모듈 내부의 각 구성요소들이 서로 관련 없는 요소로만 구성된 경우
+ 논리적(Logical) : 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 하나의 모듈이 되는 경우
+ 시간적(Temporal) : 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성한 경우
+ 절차적(Proceduaral) : 모듈이 다수의 관련 기능을 가질 때 모듈 안이 구성요소들이 그 기능을 순차적으로 수행할 경우
+ 통신적(교환)(Communiacation) : 동일한 입출력을 사용하여 서로 다른 기능을 수행하는 구성요소들이 모였을 경우
+ 순차적(Sequential) : 모듈 내 하나의 활동으로부터 나온 출력 데이터를 그다음 활동의 입력 데이터로 사용할 경우
+ 기능적(Functional) : 모듈 내부의 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우
* 결합도(Coupling) : 외부 모듈과의 연관도 도는 모듈 간의 상호의존성, 모듈 간의 관련성을 측정하는 척도
- 결합도 유형 : (강함) 내용, 공통, 외부, 제어, 스탬프, 자료(약함)
+ 내용(Content) : 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때
+ 공통(Common) : 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때
+ 외부(External) : 어떤 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때
+ 제어(Control) : 한 모듈이 다른 모듈의 상세한 처리 절차를 알고 있어 이를 통하는 경우나 처리 기능이 두 모듈에 분리되어 설계된 경우, 다른 모듈에서 흐름을 제어
+ 스탬프(Stamp) : 두 모듈이 동일한 자료 구조를 조회하는 경우
+ 자료(Data) : 어떤 모듈이 다른 모듈을 호 추하면서 매개변수나 인수로 데이터를 넘겨주고, 호출받은 모듈은 받은 데이터에 대한 처리 결과를 다시 돌려주는 방식
* 응집도는 높을수록, 결합도는 낮을수록 좋다. * 공통 모듈 구현 절차 : DTO/VO -> SQl -> DAO -> Service -> Controller -> 화면 구현(View)
- DTO(Data Transfer Object) : 프로세스 사이에서 데이터를 전송하는 객체
- VO(Value Object) : 고정 클래스를 가지는 객체
- DAO(Data Access Object) : 특정 타입의 데이터 베이스에 추상 인터페이스를 제공하는 객체
* MVC패턴 : Model, View, Controller로 이루어진 패턴
* 디자인 패턴 유형
- 생성 패턴 (Creational Pattern) : 객체의 생성과 관련된 패턴
+ 추상 팩토리 (Abstract Factory) : 동일한 주제의 다른 팩토리 묶어줌, 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조함을 만드는 인터페이스를 제공하는 패턴
+ 빌더 (Builder) : 생성과 표기를 분리해 복잡한 객체를 생성
+ 팩토리 메서드 (Factory Method) : 생성할 객체의 클래스를 국한하지 않고 객체를 생성, 객체 생성 처리를 서브 클래스로 분리해 처리하도록 캡슐화하는 패턴
+ 프로토타입 (Prototype) : 기존 객체를 복제함으로써 객체를 생성
+ 싱글톤 (Singleton) : 한 클래스에 한 객체만 존재하도록 제한, 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴
- 구조 패턴 (Structural Pattern) : 클래스나 객체들을 조합하여 더 큰 구조로 만들 수 있게 해주는 패턴
+ 어댑터 (Adapter) : 인터페이스가 호환되지 않는 클래스들을 함께 이용할 수 있도록, 타 클래스의 인터페이스를 기존 인터페이스에 덧씌움
+ 브리지 (Bridege) : 추상화와 구현을 분리해 둘을 각각 따로 발전시킬 수 있음
+ 컴포넌트 (Composite) : 0개, 1개 혹은 그 이상의 객체를 묶어 하나의 객체로 이용할 수 있음, 여러 개의 객체들로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별 없이 다루게 해주는 패턴
+ 데코레이터 (Decorator) : 기존 객체의 매서드에 새로운 행동을 추가하거나 오버라이드 할 수 있음
+ 퍼 싸드 (Facade) : 많은 분량의 코드에 접근할 수 있는 단순한 인터페이스를 제공
+ 플라이 웨이트 (Flyweight) : 다수의 유사한 객체를 생성, 조작하는 비용을 절감할 수 있음
+ 프락시 (Proxy) : 접근 조절, 비용 절감, 복잡도 감소를 위해 접근이 힘든 객체에 대한 대역을 제공함
- 행위 패턴 (Behavioral Pattern) : 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴
+ 책임 연쇄 (Chain of Responsibility)
+ 커맨드 (Command)
+ 인터프리터 (Interpreter)
+ 반복자 (Iterator)
+ 중재자 (Mediator)
+ 메멘토 (Memeto)
+ 옵서버 (Observer)
+ 상태 (State)
+ 전략 (Strategy)
+ 템플릿 메서드 (Template Method)
+ 방문자 (Visitor)
* 팬인(Fan-In), 팬아웃(Fan-Out)
- Fan-In : 어떤 모듈을 제어하는 모듈의 수 / 모듈 자신을 기준으로 모듈에 들어오면 팬인
- Fan-Out : 어떤 모듈에 의해 제어되는 모듈의 수 / 모듈 자신을 기준으로 모듈에서 나가면 팬아웃
- 시스템 복잡도를 최적화하기 위해 팬인은 높게, 팬아웃은 낮게 설계해야 한다.
* 공통모듈 테스트 : IDE 도구를 활용하여 개별 공통 모듈에 대한 디버깅을 수행
- 통합 개발 환경(IDE: Integrated Developmnet Environment) : 개발에 필요한 다양한 틀을 하나의 인터페이스로 통합하여 제공하는 환경
+ (도구: Eclipse, VS, Android Studio, IDEA)
- 정확성(Correctness) : 시스템 구현 시 해당 기능이 필요하다는 것을 알 수 있도록 정확히 작성한다.
- 명확성(Clarity) : 해당 기능을 이해할 때 중의적으로 해석되지 않도록 명확하게 작성한다.
- 완정성(Completeness) : 시스템 구현을 위해 필요한 모든 것을 기술한다.
- 일관성(Consistency) : 공통 기능들 간 상호 충돌이 발생하지 않도록 작성한다.
- 추적성(Traceability) : 기능에 대한 요구사항의 출처, 관련 시스템 등의 관계를 파악할 수 있도록 작성한다.
* DBMS접속의 개요
- JDBC(Java DataBase Connectivity) : java언어로 다양한 종류의 데이터베이스에 접속하고 SQL문을 수행할 때 사용되는 표준 API로, 1997년 2월 썬 마이크로시스템에서 출시
- ODBC(Open DataBase Connectivity) : 데이터베이스에 접근하기 위핸 표준 개방형 API로, 개발 언어에 관계없이 사용, 1992년 9월 마이크로소프트에서 출시
- MyBatis : JDBC코드를 단순화하여 사용할 수 있는 SQL Mapping 기반 오픈 소스 접속 프레임워크
* 공통 모듈 테스트 종류
- 화이트박스 테스트 : 소스 코드를 보면서 테스트 케이스를 다양하게 만들어 테스트, 프로그램 로직을 이해하고 내부와 동작을 검사하는 기법
- 블랙박스 테스트 : 사용자 요구사항 시점에서 기능이 잘 작동하는지 살펴봄, 인터페이스 오류와 입력값에 목표 결괏값이 나오는지 등을 보는 테스트
- 메서드 기반 테스트 : 공통 모듈의 외부에 공개된 메서드 기반 테스트
- 화면 기반 테스트 : 화면 단위로 단위 모듈을 개발 후에 화면에 직접 데이터를 입력하여 테스트
- 테스트 드라이버/테스트 스텁 활용 테스트 : 기능을 테스트할 수 있는 화면 또는 하위 모듈이 구현되지 않은 경우
- 테스트 드라이버(Test Driver) : 하위 모듈은 있지만 상위 모듈은 없는 경우 사용
- 테스트 스텁(Test Stub) : 상위 모듈은 있지만 하위 모듈은 없는 경우 사용
* Junit : 자바 프로그래밍 언어용 단위 테스트 도구
* 서버 개발의 개요
- Sping : JAVA를 기반으로 만들어진 프레임워크
- Node.js : JavaScript를 기반으로 반들어진 프레임워크
- Django : Python을 기반으로 만들어진 프레임워크
- Codeigniter : PHP기반으로 만들어진 프레임워크
- Ruby on Rails : Ruby를 기반으로 만들어진 프레임워크
* 프레임워크의 특성
- 모듈화(Modularity) : 프레임워크는 캡슐화를 통해 모듈화를 강화하고 설계 및 구현의 변경에 따른 영향을 최소화함으로써 소프트웨어의 품질을 향상시킵니다.
- 재사용성(Reusability) : 프레임워크는 재사용 가능한 모듈들을 제공함으로써 개발자의 생산성을 향상시킵니다.
- 확장성(Extensibility) : 프레임워크는 다형성(Polymorphism)을 통한 인터페이스 확장이 가능하여 다양한 형태와 기능을 가진 애플리케이션 개발이 가능합니다.
- 제어의 역 흐름(Inversion of Control) : 개발자가 관리하고 통제해야 하는 객체들의 제어 권한을 프레임워크에 넘김으로써 생산성을 향상시킵니다.
배치 프로그램 구현
* 배치 프로그램(Batch Program) : 사용자와의 상호작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 방법
* 배치 프로그램 유형
- 이벤트 배치 : 사전에 정의해둔 조건 충족 시 자동으로 실행
- 온디맨드 배치(On-Demand) : 사용자의 명시적 요구가 있을 때마다 실행
- 정기 배치 : 정해진 시간에 정기적으로 실행
* 배치 스케줄러(Batch Scheduler) : 일괄 처리(Batch processing) 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원하는 도구
* 배치 스케줄러 종류
- 스프링 배치(Spring Batch) : 오픈 소스 프레임워크
- 쿼츠 스케줄러(Quartz Scheduler) : 수행할 작업과 수행 시간을 관리하는 요소들을 분리하여 일괄 처리 작업에 유연성을 제공(오픈 소스 라이브러리)
* Corn 표현식 : 크론 표현식을 통해 배치 수행 시간을 시간 및 주기 등으로 설정
- 리눅스/유닉스 크론 표현식 : 분, 시간, 일, 월, 요일, 연도
- 쿼츠 크론 표현식 : 초, 분, 시간, 일, 월, 요일, 연도
'기타 > 정보처리기사실기' 카테고리의 다른 글
[정보처리기사 실기 / 내용정리] 10. 애플리케이션 테스트 관리 (0) | 2022.04.20 |
---|---|
[정보처리기사 실기 / 내용정리] 09. 소프트웨어 개발 보안 구축 (0) | 2022.04.20 |
[정보처리기사 실기 / 내용정리] 07. SQL 응용 (0) | 2022.04.16 |
[정보처리기사 실기 / 내용정리] 05. 인터페이스 구현 (0) | 2022.04.16 |
[정보처리기사 실기 / 내용정리] 04. 통합 구현 (0) | 2022.04.15 |