개발환경 구축
⚡️ 개발환경 구축의 개념
📖개발도구 및 서버 선정과 개발에 사용되는 도구 등을 확인
⚡️ 개발 도구의 분류
📖구현도구 / 테스트 도구 / 형상관리 도구 / 빌드 도구
- 구현 도구 : Eclipse / Intellij / Spring Tool Suite 등
- 테스트 도구 : xUnit / PMD / Findbugs / Cppcheck 등
- 형상관리 도구 : CVS / Subvision / Git
- 빌드 도구 : Ant / Gradle / Maven
⚡️ 개발환경 구성요소
🖥️ 하드웨어 개발환경
- 서버 하드웨어 개발환경 : 웹 서버 / 웹 애플리케이션 서버 / 데이터베이스 서버 / 파일 서버
- 웹 서버 : HTTP 이용 / 정적 콘텐츠 처리 / WEB_WAS_DB의 3계층 구조
- 웹 애플리케이션 서버 : 동적 콘텐츠 처리 / Tomcat, Weblogic, Jeus 등
- 데이터베이스 서버
- 파일서버 : 물리 저장 장치를 활용 / HDD, SSD 등
- 클라이언트 하드웨어 개발환경 : UI 제공 / 프로그램 / 웹 브라우저 / 모바일 앱 등
🖥️ 소프트웨어 개발환경
운영체제 / 미들웨어 / DBMS
- 운영체제 : Windows / Linux / Unix
- 미들웨어 : Weblogic / Tomcat / Jeus 등
- DBMS : Oracle / Mysql / postgreSql 등
🖥️ 형상관리
- 형상관리의 개념 : 전체 과정에서 발생하는 모든 항목의 변경 사항을 관리
- 형상관리 목적 : 가시성 / 추적성 / 무결성 등 품질 보증 보장
- 형상관리의 절차 : 식별 / 통제 / 감사 / 기록
- 형상식별 : 정의 및 식별 / ID 관리번호 부여 / ID 관리번호 이용 추적
- 형상통제 : 형상통제위원회 운영 / 변경요구 관리 / 베이스라인에 대한 관리
- 형상감사 : 베이스라인의 무결성 평가 및 변경 시 요구사항 일치 여부 검토
- 형상기록 : 각종 수행결과 기록 / 보고서 작성
- 소프트웨어 형상 관리 도구 유형
- 공유폴더 방식(RCS, SCCS)
- 클라이언트/서버 방식(CVS, SVN)
- 분산 저장소 방식(Git)
-소프트웨어 형상 관리 도구별 특징
- CVS : 동시에 범용적인 운영체제로 접근 가능
- SVN : 하나의 서버에서 소스를 유용하게 관리 / 소스 중복 등 여러 문제 해결
- Git : 속도에 중점 / 커밋과 푸시 동작
- RCS : 소스 파일의 수정을 한 사람만으로 제한 / 파일 잠금 방식
- Bitkeeper : SVN과 비슷 / 대규모 프로젝트에서 빠름
- Clear Case : 복수 서버, 복수 클라이언트 구조
공통 모듈 구현
⚡️ 재사용
🖥️ 재사용의 개념
📖개발 시간 및 비용 절감을 위해 검증된 기능을 파악 및 재구성하여 시스템에 응용하기 위한 최적화
🖥️ 재사용의 종류
📖재공학 / 재개발
- 재공학 : 기존 소프트웨어의 기능을 개선시키거나 새로운 소프트웨어로 재활용
- 재개발 : 완전히 새로운 소프트웨어를 개발하거나 기존 시스템에 새로운 기능을 추가
🖥️ 재사용 규모에 따른 분류
함수와 객체 / 컴포넌트 / 애플리케이션
⚡️ 공통 모듈 구현의 개념
🖥️ 모듈의 개념
📖하나의 완전한 기능을 수행 할 수 있는 독립된 실체
🖥️ 모듈의 특징
- 상대적으로 독립성을 가짐
- 모듈 내부에는 수많은 조합 존재
- 단독으로 컴파일 및 재사용 가능
- 모듈 수정 시 다른 모듈에 미치는 영향이 거의 없으며 오류 해결 용이
- 결합도 약하게 / 응집도 강하게 / 모듈의 규모는 작게
🖥️ 모듈화의 개념 및 기법
📖기능 단위의 모듈로 분해하는 설계 및 구현 기법
- 루틴 : 특정 동작을 수행하는 기능을 가진 명령들의 모임
- 메인루틴 : 전체의 개략적인 동작 절차를 표시
- 서브루틴 : 메인 루틴에 의해 호출
🖥️ 공통 모듈 구현의 개념
📖추상화하여 성능을 향상시키고 유지보수성 높이기 위한 공통 컴포넌트 구현 기법
⚡️ 소프트웨어 모듈 응집도
🖥️ 응집도의 개념(높게)
📖모듈의 독립성을 나타내는 정도로 구성요소 간 연관정도
🖥️ 응집도의 유형
📖우연적 / 논리적 / 시간적 / 절차적 / 통신적 / 순차적 / 기술적 응집도
- 우연적(Coincidental) : 구성요소 간 연관이 없을 경우
- 논리적(Logical) : 유사한 성격 / 특정 형태로 분류
- 시간적(Iemporal) : 특정 시간에 처리되어야 하는 활동
- 절차적(Procedural) : 다수의 관련 기능을 가질 때 순차적으로 수행
- 통신적(Communitacion) : 동일한 입력과 출력 사용
- 순차적(Sequential) : 출력값을 다른 활동이 사용
- 기술적(Functional) : 모든 기능이 단일한 목적
⚡️ 소프트웨어 모듈 결합도
🖥️ 결합도의 개념(낮게)
📖외부의 모듈과의 연관도 또는 상호의존성 정도
🖥️ 결합도의 유형
📖내용 / 공통 / 외부 / 제어 / 스탬프 / 자료 결합도
- 내용(Content) : 변수나 기능을 다른 모듈에서 사용하거나 참조 할 때
- 공통(Common) : 전역변수를 참조 및 갱신 / 공통 데이터 영역
- 외부(External) : 외부 데이터 포맷, 통신 프로토콜, 디바이스 인터페이스 공유
- 제어(Control) : 내부 논리 조직을 제어하기 위해 제어신호 이용
- 스탬프(Stamp) : 배열이나 객체, 구조 등 전달
- 자료(Data) : 파라미터를 통해서만 모듈 간 상호작용
⚡️ 공통 모듈 구현 대상
📖화면모듈 / 서비스 컴포넌트 / 비즈니스 트랜잭션 컴포넌트 등
⚡️ 팬인(Fan-In) 및 팬아웃(Fan-Out)
🖥️ 개념
📖모듈을 계층적으로 분석하기 위한 개념
- 팬인 : 제어하는 모듈의 수 / 모듈 자신 기준 들어오면 Fan-In
- 팬아웃 : 제어되는 모듈의 수 / 모듈 자신 기준 나가면 Fan-Out
공통 모듈 테스트
⚡️ 공통 모듈 테스트 개념
📖IDE 도구 활용 디버깅 수행 및 화이트박스 테스트 활용
⚡️ 공통 모듈 테스트 종류
📖jUnit / CppUnit / HttpUnit
- jUnit : Java 단위 테스트 프레임워크
- CppUnit : C++로 구현한 단위 테스트 도구
- HttpUnit : 웹사이트 테스트 수행을 위한 단위 테스트 도구
배치 프로그램
⚡️ 배치 프로그램의 개념
📖사용자와 상호 작용 없이 정기적으로 반복 수행 또는 정해진 규칙에 따라 일괄 처리
⚡️배치 프로그램의 유형
📖온디맨드 배치 / 이벤트 배치 / 정기 배치
- 온디맨드 배치 : 사용자의 명시적 요구
- 이벤트 배치 : 특정 조건 충족 시
- 정기 배치 : 정해진 시점
⚡️ 배치 스케줄러
🖥️ 배치 스케줄러의 개념
📖일괄 처리를 지원하는 도구
🖥️ 배치 스케줄러의 종류
📖스프링 배치 / 쿼츠 스케줄러
- 스프링 배치 : DI, AOP, 추상화 등 3대 요소를 모두 사용하는 대용량 처리 애플리케이션
- 쿼츠 스케줄러 : 작업과 실행 스케줄을 정의하는 등 유연성을 제공하는 오픈소스 스케줄러
Cron 표현식 : 교재 참고