개발환경 구축
1) 개발도구 분류
[빌구테형]
빌드 도구 : 작성한 코드의 빌드 및 배포를 수행하는 도구
구현 도구 : 개발자의 코드 작성과 디버깅 등 작업을 지원하는 도구
테스트 도구 : 코드의 기능 검증과 전체 품질 높이기 위해 사용하는 도구
형상 관리 도구 : [코리산] 코드와 리소스 등 산출물에 대한 버전 관리를 위한 도구
2) 하드웨어 개발환경
- 서버 하드웨어 개발환경
구분 | 설명 |
웹 서버 | - 웹 상의 정적 콘텐츠(CSS, Javascript)를 처리하기 위해 사용 - HTTP를 이용한 요청, 응답을 처리 |
웹 애플리케이션 서버 | - 동적 콘텐츠(JSP 등)를 처리하기 위해 사용 |
데이터베이스 서버 | - 데이터의 수집, 저장을 위한 용도로 사용 |
파일 서버 | - 파일 저장 하드웨어로 물리 저장장치를 활용한 서버 ex) 대용량 HDD, SSD 등 |
- 클라이언트 하드웨어 개발환경
서버 개발환경에서 제공된 서비스를 사용하기 위해 UI를 제공
클라이언트 프로그램, 웹 브라우저, 모바일 앱, 모바일 웹이 존재
3) 소프트웨어 개발환경
구분 | 설명 |
운영체제 | - 서버의 하드웨어를 사용자 관점에서 편리하고 유용하게 사용하기 위한 소프트웨어 |
미들웨어 | [컴연관] - 컴퓨터와 컴퓨터 간 연결을 쉽고 안전하게 할 수 있게 해주고, 이에 대한 관리를 도와주는 소프트웨어 |
DBMS | [데복추소] |
4) 형상 관리
- 형상 관리 정의
[소전모변]
소프트웨어 개발을 위한 전체 과정에서 발생하는 모든 변경사항을 관리하기 위한 활동
- 형상 관리 목적
제품의 무결성과 변경 추적성을 확보하기 위함
- 형상 관리 절차
[식통감기]
절차 | 설명 |
형상 식별 | - 형상 관리 대상을 정의 및 식별하는 활동 - ID와 관리번호를 부여 |
형상 통제 | - 형상 항목의 버전 관리를 위해 변경 여부와 변경 활동을 통제하는 활동 - 형상통제위원회 운영 |
형상 감사 | - 소프트웨어 베이스라인 무결성 평가 |
형상 기록 | - 각종 수행결과를 기록 - 형상결과 보고서 작성 |
- 소프트웨어 형상 관리 도구 유형 (형상 관리 도구 정의는 [코리산])
[공클분]
유형 | 설명 |
공유 폴더 방식 | - 매일 개발이 완료된 파일은 약속된 위치의 공유 폴더에 복사하는 방식 - RCS, SCCS |
클라이언트 서버 방식 | - 중앙에 버전 관리 시스템을 항시 동작시키는 방식 - 서로 다른 개발자가 같은 파일을 작업했을 때 경고 메시지 출력 - CVS, SVN |
분산 저장소 방식 | - 로컬 저장소와 원격 저장소로 분리되어 분산 저장하는 방식 - Git |
- 소프트웨어 형상 관리 도구별 특징
도구 | 설명 |
RCS | - 소스 파일의 수정을 한 사람만으로 제한하는 파일 잠금 방식으로 관리하는 도구 |
CVS | - 클라이언트와 서버로 구성 - 다수의 인원이 동시에 범용적인 운영체제로 접근 가능 |
SVN | - 하나의 서버에서 소스를 쉽고 유용하게 관리 가능 |
Bitkeeper | - SVN과 비슷한 중앙 통제 방식 - 대규모 프로젝트에서 빠른 속도를 내도록 개발 |
Git | - 속도에 중점을 분 분산형 버전 관리 시스템 - 대형 프로젝트에서 효과적이고 유용 - 커밋 동작은 로컬 저장소에서 이루어지고, 푸시는 원격 저장소에 반영 - 로컬 저장소에서 작업 이루어져 빠른 응답 받을 수 있음 |
Clear Case | - 복수 서버 복수 클라이언트 구조 - 서버 부족할 때 하나씩 추가하여 확장성 가능 |
공통 모듈 구현
1) 모듈 정의
[그하독]
그 자체로 하나의 완전한 기능을 수행할 수 있는 독립된 실체
2) 모듈 특징
상대적으로 독립성 가짐
단독으로 컴파일 가능, 재사용 가능
독립성 높을수록 모듈 수정 시에도 다른 모듈에 영향 미치지 않고, 오류 발생 시에도 쉽게 해결
모듈의 독립성은 응집도와 결합도에 의해 측정(응집도는 강하게, 결합도는 약하게
3) 모듈화 정의 및 기법
- 정의
[소복기분]
소프트웨어 성능 향상시키거나 복잡한 시스템의 수정, 재사용 등이 용이하도록 기능 단위 모듈로 분해하는 설계 및 구현 기법
- 기법
기법 | 설명 |
루틴 | [소특일기] - 소프트웨어에서 특정 동작을 수행하는 일련의 코드로서 기능을 가진 명령들의 모임 |
메인 루틴 | - 프로그램의 주요한 부분이며, 전체의 개략적인 동작 절차를 표시 |
서브 루틴 | - 메인 루틴에 의해 필요할 때마다 호출되는 루틴 |
4) 공통 모듈 구현 정의
[소개기공]
소프트웨어 개발에 있어서 기능을 분할하고 추상화하여 성능 향상시키기 위한 공통 컴포넌트 구현 기법
5) 소프트웨어 모듈 응집도
- 정의
모듈의 독립성을 나타내는 정도로, 모듈 내부 구성요소 간 연관 정도
- 유형
[우논시절/통순기]
유형 | 설명 |
우연적 응집도 | - 모듈 내부 각 구성요소가 연관 없는 경우 |
논리적 응집도 | - 유사한 성격 갖거나 특정 형태로 분류되는 처리요소들이 한 모듈에서 처리되는 경우 |
시간적 응집도 | - 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우 |
절차적 응집도 | - 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우 |
통신적 응집도 | - 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여있을 경우 |
순차적 응집도 | - 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동이 사용할 경우 |
기능적 응집도 | - 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우 |
6) 소프트웨어 모듈 결합도
- 정의
모듈의 독립성을 나타내는 정도로, 외부 모듈과의 연관 정도
- 유형
[내공외제/스자]
유형 | 설명 |
내용 결합도 | - 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우 |
공통 결합도 | - 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 전역 변수를 갱신하는 식으로 상호작용하는 경우 |
외부 결합도 | - 외부에서 도입된 데이터 포멧, 통신 프로토콜, 인터페이스를 공유할 경우 |
제어 결합도 | - 어떻게 처리를 해야 한다는 제어요소가 전달되는 경우 |
스탬프 결합도 | - 모듈 간 인터페이스로 배열이나 객체, 구조 등이 전달되는 경우 |
자료 결합도 | - 모듈 간 인터페이스로 전달되는 파라미터를 통해서만 모듈 간 상호작용이 일어나는 경우 |
7) 공통 모듈 구현 절차
- DTO/VO -> SQL -> DAO -> Service -> Controller -> 화면 구현 순으로 진행
- MVC 패턴(사용자 인터페이스로부터 비지니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비지니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 패턴)을 사용
구분 | 설명 |
모델(Model) | - 애플리케이션이 무엇을 할 것인지를 정의 - 내부 비지니스 로직을 처리하기 위한 역할 |
뷰(View) | - 화면에 무엇인가를 보여주기 위한 역할 - 모델, 컨트롤러가 보여주려고 하는 것들을 화면에 처리 |
컨트롤러(Controller) | - 모델이 어떻게 처리할지를 알려주는 역할 - 뷰에 명령을 보내 화면 요청 결과를 전달 |
8) 팬인 및 팬아웃
구분 | 팬인 | 팬아웃 |
개념 | 어떤 모듈을 제어(호출)하는 모듈의 수 | 어떤 모듈에 의해 제어(호출)되는 모듈의 수 |
모듈 숫자 계산 | 모듈 자신을 기준으로 모듈 위로 들어오는 숫자 | 모듈 자신을 기준으로 모듈 아래로 나가는 숫자 |
- 시스템 복잡도를 최적화하기 위해서는 팬인은 높게, 팬아웃은 낮게 설계해야 한다
공통 모듈 테스트
1) 정의
IDE 도구를 활용하여 개별 공통 모듈에 대한 디버깅을 수행
2) 종류
[화메화테]
종류 | 설명 |
화이트박스 테스트 | [응구동] - 응용 프로그램 내부 구조와 동작을 검사하는 소프트웨어 |
메서드 기반 테스트 | - 공통 모듈 외부에 공개된 메서드 기반 테스트 |
화면 기반 테스트 | - 사용자용 화면이 있는 경우, 각각의 화면 단위로 단위모듈을 개발 후 화면에 직접 데이터를 입력하여 테스트 수행 |
테스트 드라이버 / 테스트 스텁 |
- 기능을 테스트할 수 있는 화면 또는 하위 모듈이 구현되지 않은 경우, 테스트 수행 - 테스트 드라이버는 하위 모듈은 있지만 상위 모듈은 없는 경우 사용하는 기법 - 테스트 스텁은 상위 모듈은 있지만 하위 모듈은 없는 경우 사용하는 기법 - 다른 프로그래밍 기능을 대리하는 코드 - 기존 코드를 흉내내거나, 아직 개발되지 않은 코드를 임시로 대치하는 역할 수행 |
서버 프로그램 구현
1) 정의
업무 프로세스를 기반으로 개발언어와 도구를 이용하여 서버에서 서비스 제공에 필요한 기능을 구현하는 활동
2) 절차
DTO/VO -> SQL -> DAO -> Service -> Controller -> 화면 구현(입출력 검증) 순으로 진행
- DTO : 프로세스 사이에서 데이터 전송하는 객체로, 데이터 저장·회수 외에 다른 기능 없음
- VO : 간단한 엔티티를 의미하는 작은 객체 가변 클래스인 DTO와 달리 고정 클래스를 가짐
- DAO : 특정 타입의 데이터베이스에 추상 인터페이스를 제공하는 객체로, 세부내용 노출 없이 데이터 조작
- MyBatis : [객자관D] 객체지향 언어인 자바의 관계형 DB 프로그래밍을 쉽게 할 수 있도록 도와주는 개발 프레임워크
배치 프로그램
1) 정의
[사상일정]
사용자와의 상호작용 없이 일련의 작업들을 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 방법
2) 유형
[이온정]
이벤트 배치 : 사전에 정의해둔 조건 충족 시 자동 실행
온디맨드 배치 : 사용자의 명시적 요구가 있을 때마다 실행
정기 배치 : 정해진 시점에 정기적으로 실행
3) 배치 스케줄러
- 정의
일괄 처리를 위해 반복적으로 발생하는 작업을 지원하는 도구
- 종류
[스쿼]
스프링 배치 : 스프링 프레임워크의 DI, AOP, 서비스 추상화 등 모두 사용할 수 있는 대용량 처리 제공
쿼츠 스케줄러 : 스프링 프레임워크에 플러그인되어 수행하는 작업과 트리거 분리하여 유연성 제공
- Cron 표현식 (쿼츠 크론 표현식)
리눅스/유닉스 | 분 | 시 | 일 | 월 | 요일 | 연도(생략 가능) |
쿼츠 | 초 | 분 | 시 | 일 | 월 | 요일 |
기호 | 설명 |
* | 모든 수 |
? | 해당 항목 미사용 |
- | 기간 설정 ex) 0 0 20 ? * MON-FRI 매주 월요일과 금요일 사이 20시에 실행 |
, | 특정 기간 설정 |
/ | 시작시간과 반복간격 설정 ex) 0 0/5 14,20 * * ? 매일 14시와 20시에 5분 간격으로 실행 |
L | 마지막 기간에 동작 ex) 0 15 10 L * ? 매달 마지막 날 10시 15분에 실행 |
W | 가장 가까운 평일에 동작 |
4) 배치 프로그램 설계
배치 프로그램 설계에 있어서 산출물은 배치 설계서
오답 노트
- JVM(Java Virtual Machine) : 자바 바이트 코드를 실행할 수 있는 주체로 CPU나 운영체제 종류와 무관하게 동작하는 것을 보장하는 가상 머신
- 추상화 : 공통의 속성이나 기능을 묶어 이름을 붙이는 것
- 소프트웨어 형상 관리 베이스라인 : 개발과정의 각 단계별 산출물을 컴토, 평가, 조정, 처리 등의 변화를 통제하는 시점의 기준