최초 작성일: 2024-08-27
최종 작성일: 2024-08-27
목표 : 정처기 합격 및 CS 지식 쌓기
Section 1. 개발환경 구축
Ajax : 비동기 통신을 지원(페이지의 이동 없이 해당 하는 요소만 변경 가능)
입력 폼: 회원 가입하는 창 ( text, text area, radio button, select box 등)
웹 표준: 표준-가이드
웹 호환성: 만들어 놓은 것이 여러 기기에서 동일하게 작동하는 것
웹 접근성: 장애인이나 비장애인 이 해당 웹 페이지를 동일하게 이용
개발자와 서버의 환경을 구축해야함
Active, Standby, File server
운영 서버 – WAS(동적인 것), WEB(정적인 것, 구조, 이미지 CSS 덩어리 등)
L4 장비 (로드 밸런싱)
Fire Wall (방화벽)
1. 서버 환경 구축
(1) 웹 서버(WEB) – web server 프로그램을 설치한 하드웨어
클라이언트에서 정적 파일(HTML,CSS, JS,이미지등)을 제공하는 서버
주요 기능은 이미지, CSS, JS-동적으로 변경하는 거지 파일 자체는 변경되지 않음, HTML 문서등을 클라이언트에게 전달하는 것이다
대표적인 웹 서버 소프트웨어는 아파치 웹 서버, GWS, IIS, Nginx 등이 있다
(2) 웹 어플리케이션 서버(WAS) – was server 프로그램을 설치한 하드웨어
동적인 웹 서비스를 제공하기 위한 서버(데이터 베이스 있는 것을 가져다가 만들어서 쓰는 것)
클라이언트의 요청에 따라 동적인 콘텐츠를 생성하고 데이터 베이스 조회나 비즈니스 로직 처리를 담당한다
WebLogic, WebSphere, Jeus, Tomcat(공짜), 레진 등이 대표적인 WAS 소프트웨어 이다
(3) 데이터베이스 서버
데이터의 저장, 관리를 위한 서버로 다양한 데이터베이스 소프트웨어를 설치할 수 있다
Oracle, mySQL, MS-SQL 등이 주요 데이터베이스 소프트웨어 이다
(4) 파일 서버
사용자 파일을 저장하고 공유하는데 사용되는 서버
네트워크를 통한 파일의 접근 및 관리를 용이하게 한다
파일 서버를 따로 두는 이유는 WAS 서버등 서버를 여러 개 두는데 서버 각각 작업한 파일을 파일 서버에 올림으로써 공통의 파일 저장이 가능
(5) Load Balancer
여러대의 서버가 있을 경우, 이들 사이에 네트워크 요청을 효율적으로 분배하는 장치
분배 방식
종류 | 설명 |
Random | 요청을 랜덤으로 분배한다 |
Least Loaded | 가장 적은 양의 작업을 처리하고 있는 서버에게 요청을 할당한다 |
Round Robin | 순서를 정하여 돌아가며 작업을 분배한다 |
(6) CDN(Content Delivery Network)
대용량 콘텐츠(이미지, 비디오 등)를 빠르게 제공하기 위해 사용자에게 물리적으로 가까운 위치에 있는 서버 네트워크를 사용한다.
사용자가 원격 웹 서버보다 가까운 CDN 서버로부터 콘텐츠를 빠르게 받을 수 있다.
(7) 시스템 아키텍처 고려사항
고려사항 | 설명 |
확장성(Scalability) | 시스템이 사용자 수의 증가나 데이터 양의 증가에 따라 적절하게 확장할 수 있는 능력 |
성능 | 시스템이 사용자의 요청을 정확하고 신속하게 처리하는 능력 |
응답 시간 | 사용자의 요청에 대해 시스템이 응답하는데 걸리는 시간 |
처리량 | 주어진 시간동안 시스템이 처리할 수 있는 요청의 양 |
접근성 | 사용자가 언제 어디서나 시스템에 접근해 요청을 보내고 응답을 받을 수 있는 능력 |
일관성 | 사용자의 요청이 시스템에 정확하게 반영되어 일정한 결과를 반환해야 한다 |
보안 | 데이터 암호화, 접근 제어, 보안 프로토콜의 적용 등을 고려해야한다 |
2. 개발 소프트웨어 환경
(1) 시스템 소프트웨어 환경
1) 운영체제 (OS)
컴퓨터의 하드웨어 운영을 관리 하는 소프트웨어
사용자와 하드웨어 사이에서 인터페이스 역할을 하며, 시스템 자원을 관리한다.
대표적인 운영체제로는 Windows, Linux, Unix 등이 있다(서버는 리눅스를 많이 씀)
2) JVM(Java Virtual Machine)
자바 관련 프로그램을 실행하기 위한 환경을 제공
JVM을 통해 자바 어플리케이션은 다양한 운영체제에서 호환 가능하게 실행된다
모든 개발자가 동일한 버전의 JVM을 사용하는 것이 일관된 개발 및 실행환경을 보장한다.
3) Web Server (프로그램)
정적 웹 서비스를 제공하는 미들 웨어
웹 브라우저로부터의 요청에 대해 정적파일(Image, CSS, JS, HTML등)을 제공
아파치, Nginx, IIS(Internet Information Server), GWS(Google Web Server) 등
4) WAS(Web Application Server)
동적 웹 서비스를 제공하는 미들웨어
클라이언트의 요청에 따라 서버 측에서 동적으로 웹 페이지를 생성하고 관리한다
WebLogic, WebSphere, Jeus,Tomcat 등
5) DBMS
데이터의 저장, 관리 , 검색 등을 위한 데이터베이스 소프트웨어
대용량 데이터를 안정적으로 처리하고, 데이터 무결성 및 보안을 보장
Oracle, DB2, Sybase, SQL server, MySQL 등
(2) 개발 소프트웨어
1) 요구사항 관리 도구- 게시판
고객의 요구사항을 수집, 분석, 추적하는 데 사용된다
프로젝트의 초기 단계에서 요구사항을 명확하게 정의하고 관리하는데 중요하다
JFeature, jRequisite, OSRMT 등
2) 설계/모델링 도구
소프트웨어 구조와 기능을 시각적로 표현하고 설계하는데 사용된다
UML(Unified Modeling Language)지원으로 복잡한 시스템을 명확하게 모델링 할 수 있다
데이터베이스 설계를 지원하는 도구도 포함된다
ArgoUML, StarUML, DB Designer 등
3) 구현 도구 – IDE(통합 개발 도구), 개발 도구
소프트웨어 개발 언어를 이용한 구현 및 개발을 지원한다
코드 편집, 디버깅, 프로젝트 관리 기능을 제공한다
Eclipse, InteliJ, VS(Visual Studio)등
4) 테스트 도구
개발된 소프트웨어 모듈이 요구사항에 부합하는지 오류가 없는지 성능이 적절한지 테스트하는데 사용된다
단위 테스트, 통합 테스트, 성능 테스트 등을 지원한다
Junit, CppUnit, JMeter, Spring Test 등
5) 형상관리 도구 – 매우 중요
소스코드와 문서 등의 변경 사항을 버전별로 관리한다
협업 중인 개발자들 사이의 일관성 있는 작업 흐름을 지원하고 변경 이력을 추적한다
Git, CVS, SVN 등
6) 협업 도구
팀원 간의 소통과 협업을 용이하게 하는 도구
Slack, MS Teams 등
7) 배포도구
소프트웨어의 빌드, 테스트, 배포를 자동화 하는 도구
젠킨스, 트레비스 CI 등
3. IDE(Integrated Development Environment)
(1) IDE 도구의 개념
소프트웨어 개발에 필요한 다양한 기능을 하나의 프로그램 내에서 제공하는 소프트웨어
코딩, 디버깅, 컴파일, 배포 등의 개발 관련 작업을 통합적으로 처리할 수 있는 환경을 제공한다
개발자의 편의성과 효율성을 증대시키기 위해 설계 되었다.
(2) IDE 도구의 기능
텍스트 에디터 : 소스코드를 작성하고 편집하는 기능을 제공
컴파일러: 작성된 코드를 기계어로 변환하는 기능 제공
디버거
배포: 완성된 프로그램을 서버에 업로드하고 관리할 수 있는 기능 제공
플러그인: 추가기능을 통해 IDE의 기능을 확장할 수 있다
(3) IDE 도구의 종류
Eclipse
Visual Studio
Xcode : 애플
InteliJ IDEA : 자바 개발
(4) IDE 도구 선정 시 고려사항 : 적정성, 효율성, 이식성, 친밀성, 범용성
4. 협업도구
(1) 개념 : 여러 사용자가 각자의 작업 환경에서 통합된 프로젝트를 동시에 수행할 수 있도록 지원하는 S/W / 소프트웨어 개발 뿐만 아니라, 디자인, 기획, 관리 등 다양한 분야의 전문가들이 공동 작업을 수행할 수 있도록 돕는다/ 대부분의 협업 도구는 클라우드 기반 SaaS(Software as s Service)모델을 따른다
(2) 기능 : 전사 관리(전자 결재, 조직도 관리 등을 지원한다)/ 프로젝트 관리/드라이브 공간/ 문서 공유/커뮤니케이션/다국어 지원/타 협업 툴 연동
(3) 협업 도구의 분류 : SNS형(SLACK)/ 프로젝트 관리형(NOTION)/통합형(FLOW)
(4) 협업툴 도입 이유: 팀 간 의사소통의 불편함
(5) 협업 도구 도입 프로세스 : 문제 정의 -> 솔루션 및 기대효과 정의 -> 협업 도구 분석 -> 협업 도구 최종 선정
5. 형상관리 도구 – 매우 중요
(1) 형상 관리 도구의 개념
소프트웨어 개발 과정에서 발생하는 모든 변경사항을 통제하고 관리하는 방법
개발과정의 변경사항을 체계적으로 추적, 관리하고 기록을 유지한다.
(2) 형상 관리의 필요성
소스코드를 이전 상태로 되돌릴 수 있는 능력이 필요하다
각 변경점에 대한 이력을 확인하여 프로젝트 진행 상황을 명확히 파악한다
여러 개발자의 협업 시 발생할 수 있는 충돌을 해결한다
버그 및 문제점을 추적하고 산출물의 이력을 관리하기 용이하다
(3) 변경관리/버전관리/형상관리
1) 변경관리 : 소스 코드의 변경사항을 관리하며 문서의 변경 이력과 복원기능을 제공한다
2) 버전관리 : 소프트웨어의 변경을 효과적으로 관리하며 체크인/체크아웃, 릴리즈, 퍼블리싱 등을 버전으로 관리한다
3) 형상관리 : 변경관리와 버전 관리를 포함하며, 프로젝트 진행 상황, 빌드, 릴리즈 까지 전체적으로 관리하는 통합 시스템 이다
(4) 형상 관리 대상
프로젝트 수행 계획서, 요구사항 관리 대장, SW 기능 구조도
엔티티 정의서, 데이터 흐름도, 용어집
인터페이스 ERD 등
(5) 형상 관리 절차 – 매우 중요
1) 형상 식별 : 관리해야할 항목을 구분하고 번호나 태그를 부여한다
2) 형상 통제 : 변경 요청을 검토하고 승인하여 현재의 기준선(Basline)에 반영한다/ 형상통제위원회(CCB- Configuration Control Board)의 승인을 통한 변경 통제가 이뤄져야 한다
3) 형상 감사 : 변경이 계획에 따라 적절하게 이루어졌는지 검토한다
4) 형상 기록 : 변경 사항과 처리 과정을 기록하고 관련된 이해 관계자에게 보고한다
6. 버전관리 도구
(1) 소프트웨어 버전 관리 도구 개념
소스 코드와 문서 등의 디지털 콘텐츠에 대한 여러 버전을 관리 한다
문서의 변경 사항에 대해 버전을 부여하여, 변경된 시간, 내용, 작업자를 추적할 수 있다
개발 과정에서 발생하는 다양한 변경 사항을 체계적으로 관리하고, 필요 시 이전 버전으로 복원할 수 있다
(2) 소프트웨어 버전 관리 도구 유형
1) 공유 폴더 방식 : 개발자들이 여러 명이 있으면 퇴근 전에 한곳에 모아 놓고 한사람이 그걸 검토관리 하는 것/ 파일을 공유 폴더에 저장하고 담당자가 에러 체크와 정상 작동 여부를 확인한다/ 매우 기본적인 버전 관리 방식으로 복잡한 협업에는 한계가 있다
2) 클라이언트/서버 관리 방식 : 개발자 들이 소스 코드를 변경하면 해당 코드를 서버에 저장 함
3) 분산 저장소 방식(git) : 중앙 저장소와 로컬 저장소가 별도러 존재하며 로컬에서 작업 후 중앙 저장소에 반영하는 방식이다/ 개발자는 자신만의 로컬 저장소에서 독립적으로 작업하고 완료 후 중앙저장소에 변경 사항을 반영한다
(3) 버전 관리 도구별 특징
1) CVS : 오래 사용된 형상 관리 도구로, 다양한 운영체제를 지원한다/ 중앙에 위치한 저장소(REPOSITORY)에 파일을 저장하며 인가된 사용자가 파일에 접근할 수 있따/ 파일의 변경 이력을 보존하며, 과거 이력을 확인 할 수 있다/커밑 중 오류 발생 시 롤백되지 않은 문제가 있다/ 느린 속도와 파일 디렉토리 변경의 불편함이 있다
2) SVN : CVS의 단점을 보완한 버전 관리 도구/ 최초 1회 파일 원본을 저장한 수 변경사항만을 기록한다/ 커밑 실패 시 롤백이 가능하며 형상 관리가 보다 체계적이다/Trunk, Branches, Tags 구조로 형상관리를 수행하며 원하는 지점으로 복구가 가능하다
3) Git : 리누스 토발즈에 의해 개발된 분산 버전 관리 시스템 이다/최적화/ 원격 저장소에 장애가 있어도 로컬에서 버전 관리가 가능하다
4) Clear Case : IBM에서 개발
5) RCS
(4) 버전 관리 주요 용어
용어 | 설명 |
Repository | 저장소 |
Checkout | Repository에서 로컬로 프로젝트를 복사 |
Commit | 로컬의 변경된 내용을 Repository에 저장 |
Update | Repository에 있는 내용을 로컬에 반영 |
Add | 로컬에서 새로운 파일이 추가되었을 때 Repository에 등록 |
Trunk | Root 프로젝트 |
Branch | Root 프로젝트에서 파생된 프로젝트 |
Merge | Branch에서 진행하던 작업을 Root 프로젝트와 합침 |
Diff | 파일의 비교 |
(5) 버전관리 소프트웨어 사용 방식
프로젝트 시작 시 프로젝트에 사용될 프레임 웤, 기본 문서들을 최초로 가져오기(import)를 한다.
프로젝트 참여자들은 각자의 계정을 생성하고, 모든 파일 들을 인출(check out)한다
참여자는 새로운 파일 생성 시 해당 파일을 버전 관리 시스템에 추가(add)한다
참여자는 기존 파일 수정 시 수정된 내용을 저장소에 저장(commit)한다.
참여자는 로컬에 있는 파일과 다른 버전의 파일이나 신규 파일들을 동기화(update)한다
동기화 시 두 파일의 내용을 비교(diff)할 수 있다.
7. 빌드 도구 ( 묶는 것)
(1) 빌드의 개념
소스 코드 파일들을 컴파일 하고 다른 필요한 과정들을 거쳐 실행 가능한 소프트웨어로 변환하는 일련의 과정
컴파일(기계어로 변환), 링킹(이어), 패키징(묶어) 등이 빌드 과정에 포함된다
빌드 과정을 자동화하고 최적화하는 도구를 빌드 도구 라고 한다
(2) 빌드 자동화 도구 특징
빌드, 테스트, 배포 등을 자동으로 수행한다
소스코드를 컴파일 하고 테스트, 정적분석 등을 수행하여 실행 가능한 app을 자동으로 생성한다
계속해서 늘어나는 라이브러리 자동 추가 및 관리
개발 및 배포 과정의 일관성을 보장하며, 오류의 가능성을 줄인다
(3) 빌드 자동화 프로세스
1) 빌드 : 개발자가 소스코드를 저장소에 커밋하면, 변경 사항이 통합 환경에서 자동으로 통합된다.
2) 테스트 : Jenkins 등의 도구가 새코드를 인식하여 자동으로 일련의 테스트를 수행한다/ 테스트를 통과한 빌드는 배포 준비가 완료 된다
3) 배포 : 테스트를 통과한 소프트웨어는 운영환경에 자동으로 배포되어 최종 사용자에게 제공된다.
(4) 빌드 자동화 도구 종류
1) Make
2) Ant : 자바 기반의 빌드 도구로 XML 기반의 빌드 스크립트 사용
3) Maven : pom.xml 파일
4) Jenkins : 자바 기반의 오픈소스 지속적 통합 서비스 도구 이다 (continuous integration)
5) Gradle : 안드로이드 앱 개발 뿐만 아니라 자바, 파이선 등 다양한 언어의 빌드를 지원한다.
'스터디스터디 > 정처기' 카테고리의 다른 글
[실기] 소프트웨어 구축- 모듈구현 (0) | 2024.08.27 |
---|---|
[실기] 소프트웨어 구축- 개발 프레임워크 (0) | 2024.08.27 |
[실기] 소프트웨어 구축- UI 구현 (1) | 2024.08.26 |
[실기] 소프트웨어 구축 -UI 설계 (1) | 2024.08.26 |
[실기] 소프트웨어 구축- UML (0) | 2024.08.26 |