1과목. 소프트웨어 구축
📒 10. 개발 환경 구축
계획 - 요구사항 분석 - 소프트웨어 - 구현 - 테스트 - 유지보수
1. 서버 환경 구축
(1) 웹 서버(WEB)
- 클라이언트에게 정적 파일(HTML, CSS, JavaScript, 이미지 등)을 제공하는 서버
- 대표적 : Apache Web Server, IIS, Nginx, GWS 등
(2) 웹 애플리케이션 서버(WAS)
- 동적인 웹 서비스를 제공하기 위한 서버
- 클라이언트의 요청에 따라 동적인 콘텐츠 생성 및 비즈니스 로직 처리 담당
- 웹 서버는 WAS를 대체할 수 없지만 WAS는 가능함
- 대표적 : WebLogic(사기업), WebSphere, Jeus(공기업), Tomcat(테스트용) 등
(3) 데이터베이스 서버(DBMS)
- 데이터의 저장, 관리를 위한 서버
- 대표적 : Oracle, MySQL, MS-SQL, MariaDB 등
(4) 파일서버
- 사용자 파일을 저장하고 공유하는 데 사용되는 서버
- 네트워크를 통한 파일의 접근 및 관리를 용이하게 함
- 서버가 여러 개일 경우에도 한 파일을 다운로드할 수 있게 파일서버를 따로 만듦
(5) Load Balancer
- 여러 대의 서버가 있을 경우, 네트워크 요청을 효율적으로 분배하는 장치
- 앞단의 장치로 사용자들이 들어왔을 때 어떤 서버로 분산시킬지 정함
- 분배 방식 : Random, Least loaded, Round Robin
(6) CDN(Content Delivery Network)
- 대용량 콘텐츠(이미지, 비디오 등)를 빠르게 제공하기 위해, 사용자에게 물리적으로 가까운 위치에 있는 서버 네트워크를 사용함
- 사용자가 원격 웹 서버보다 가까운 CDN 서버로부터 콘텐츠를 빠르게 받을 수 있음
- 콘텐츠 분산 배치
(7) 시스템 아키텍처 고려사항
- 확장성(Scalability), 성능(Performance), 응답시간(Response Time), 처리량(Throughtput), 접근성(Accessibility),
일관성(Consistency), 보안(Security)
2. 시스템 소프트웨어
(1) 운영체제(OS, Operating System)
- 컴퓨터의 하드웨어 운영을 관리하는 소프트웨어
- 대표적 : Windows, Linux, UNIX
(2) JVM(Java Virtual Machine)
- 자바 관련 프로그램을 실행하기 위한 환경 제공
- 다양한 운영체제에서 호환 가능하게 실행됨
(3) Web Server 프로그램
- 정적 웹 서비스를 제공하는 미들웨어
(4) WAS(Web Application Server) 프로그램
- 동적 웹 서비스를 제공하는 미들웨어
(5) DBMS 프로그램
- 데이터의 저장, 관리, 검색 등을 위한 데이터베이스 소프트웨어
3. 개발 소프트웨어
(1) 요구사항 관리 도구
- 고객의 요구사항을 수집, 분석, 추척하는데 사용
- 요구사항을 적어둘 수 있는 특수한 게시판 형태로 모아둔 것
(2) 설계/모델링 도구
- 소프트웨어의 구조와 기능을 시각적으로 표현하고 설계하는 데 사용
- UML 지원으로 복잡한 시스템을 명확하게 모델링할 수 있음
(3) 구현도구(개발도구)
- IDE(통합 개발 환경) 도구
- 소프트웨어 개발 언어를 이용한 구현 및 개발 지원
- Eclipse, InteliJ, Visual Studio 등
(4) 테스트 도구
- 개발된 소프트웨어 모듈이 요구사항에 부합하는지 테스트하는 데 사용
- JUnit, CppUnit, JMeter, SpringTest 등
(5) 형상관리 도구 ⭐
- 소스 코드와 문서 등의 변경 사항을 버전별로 관리함
- 변경 관리, 버전 관리 등 모두 포함
- 협업 중인 개발자들 사이의 일관성 있는 작업 흐름을 지원하고, 변경 이력을 추적함
- Git(분산 형상관리 도구), CVS, SVN 등
(6) 배포 도구
- 소프트웨어 빌드, 테스트, 배포를 자동화하는 도구
- Jenkins, Travis CI 등
4. IDE(Integrated Development Environment) 도구
(1) IDE 도구의 개념
- 통합 개별 환경으로 소프트웨어 개발에 필요한 다양한 기능을 하나의 프로그램에서 제공하는 소프트웨어
- 개발자의 편의성과 효율성 증대시키기 위해 설계
(2) IDE 도구의 종류
- Eclipse, Visual Studio, Xcode, IntelliJ IDEA 등
(3) IDE 선정 시 고려사항
- 적정성, 효율성, 이식성, 친밀성, 범용성
4. 협업 도구
(1) 협업 도구의 개념
- 여러 사용자가 각자의 작업 환경에서 통합된 프로젝트를 동시에 수행할 수 있도록 지원하는 소프트웨어
- 팀원 간의 소통과 협업을 용이하게 하는 도구
(2) 협업 도구의 종류
- Slack, Microsoft Teams 등
5. 형상 관리 도구
(1) 형상 관리 도구의 개념
- 소프트웨어 개발 과정에서 발생하는 모든 변경사항을 통제하고 관리하는 방법
(2) 변경 관리 / 버전 관리 / 형상 관리
- a) 변경 관리
- 소스코드의 변경 사항을 관리하며, 문서의 변경 이력과 복원 기능 제공 - b) 버전 관리
- 소프트웨어의 변경을 효과적으로 관리하며, 체크인/체크아웃 등 버전으로 관리 - c) 형상 관리
- 변경 관리와 버전 관리를 포함하며, 프로젝트를 전체적으로 관리하는 통합 시스템
(3) 형상 관리 절차 ⭐
- a) 형상 식별
- 관리해야 할 항목을 구분하고 번호나 태그를 부여 - b) 형상 통제
- 변경 요청을 검토하고 승인하여 현재의 기준선(Baseline)에 반영
- 형상 통제 위원회(CCB, Configuration Control Board)의 승인을 통한 변경 통제가 이루어짐 - c) 형상 감사
- 변경이 계획에 따라 적절하게 이루어졌는지 검토 - d) 형상 기록
- 변경 사항과 처리 과정을 기록하고 관련된 이해 관계자에게 보고
6. 버전 관리 도구
(1) 버전 관리 도구의 개념
- 개발 과정에서 발생하는 다양한 변경사항을 체계적으로 관리 및 이전 버전으로 복원할 수 있음
(2) 버전 관리 도구 유형
- a) 공유 폴더 방식
- 파일을 공유 폴더에 저장, 복잡한 협업에는 한계가 있음
- ex. RCS, SCCS - b) 클라이언트/서버 방식
- 개발자들이 소스 코드를 변경하면 서버에 전달하여 주고받을 수 있는 방식
- 중앙 서버에 버전 관리 시스템이 항시 운영되며, 개발자들은 이 시스템과 연동하여 작업
- ex. CVS, SVN - c) 분산 저장소 방식
- 중앙 저장소와 로컬 저장소가 별도로 존재하며, 로컬에서 작업 후 중앙 저장소에 반영하는 방식
- ex. Git
(3) 버전 관리 도구별 특징
- a) CVS
- 오래 사용된 형상 관리 도구로, 중앙에 위치한 저장소에 파일을 저장
- 커밋 중 오류 발생 시 롤백되지 않음 - b) SVN
- CVS의 단점을 보완한 버전 관리 도구
- 최초 1회 파일 원본을 저장한 후, 변경사항만 기록함
- 커밋 실패 시 롤백이 가능하며, 형상 관리가 보다 체계적
- Trunk, Branches, Tags 구조로 형상 관리를 수행하며, 원하는 시점으로 복구가 가능함 - c) Git
- 로컬에서의 빠른 성능과 분산 환경 코딩에 최적화되어 있음
- 분산 버전 관리 시스템으로 다양한 브랜치를 생성하고 관리할 수 있음
(4) 버전 관리 주요 용어
- Repository : 저장소
- Checkout : Repository에서 로컬로 프로젝트 복사
- Commit : 로컬의 변경된 내용을 Repository에 저장
- Update : Repository에 있는 내용을 로컬에 반영
- Add : 로컬에서 새로운 파일이 추가되었을 때 Repository에 등록
- Trunk : Root 프로젝트
- Branch : Root 프로젝트에서 파생된 프로젝트
- Merge : Branch에서 진행하던 작업을 Root 프로젝트와 합침(파일을 합치는 것)
- Diff : 파일의 비교
7. 빌드 도구
(1) 빌드 도구의 개념
- 소스코드 파일들을 컴파일하고, 다른 필요한 과정들을 거쳐 실행 가능한 소프트웨어로 변환하는 일련의 과정
- 빌드 과정을 자동화하고 최적화하는 도구
(2) 빌드 자동화 프로세스
- a) 빌드
- 개발자가 소스코드를 저장소에 커밋하면, 변경 사항이 통합 환경에 자동으로 통합됨 - b) 테스트
- Jenkins, Ansible 등의 도구가 새 코드를 인식하여 자동으로 일련의 테스트를 수행함 - c) 배포
- 테스트를 통과한 소프트웨어는 운영 환경에 자동으로 배포되어 최종 사용자에게 제공됨
(3) 빌드 자동화 도구 종류
- a) Make
- Unix 계열 운영체제에서 주로 사용되는 전통적인 프로그램 빌드 도구 - b) Ant
- Java 기반의 빌드 도구로, XML 기반의 빌드 스크립트 사용 - c) Maven
- 의존성 관리와 프로젝트 라이프 사이클 관리에 강점을 가진 Java 기반 빌드 도구
- pom.xml 파일을 통해 라이브러리 의존성을 관리하며, 필요한 라이브러리를 자동으로 다운로드함 - d) Jenkins
- Java 기반의 오픈소스로, 지속적인 통합 서비스 도구
- 다양한 플러그인을 지원하고, 서블릿 컨테이너에서 실행
- 분산 빌드 환경을 지원하여 대규모 프로젝트에 적합 - e) Gradle
- Groovy 기반의 오픈 소스 빌드 자동화 도구
- 안드로이드 앱, Java, C/C++, Python 등 다양한 언어의 빌드 지원
참고자료
흥달쌤, '흥!나게 합격 달성! 2024 정보처리기사 실기 클래스'
1억뷰 N잡
[1회 연장 포함] 흥!나게 합격 달성! 2024 정보처리기사 실기 클래스
www.njobler.net
댓글