[정처기 실기] 「1」 | 소프트웨어 구축 - (1.3) 서버 프로그램 구현
> 「1」 소프트웨어 구축
「2」 데이터베이스 구축
「3」 운영체제
「4」 네트워크
「5」 정보보안
「6」 신기술 용어
1. 소프트웨어 공학 개념
2. 프로젝트 계획 / 분석
3. 소프트웨어 설계
4. 화면 설계
> 5. 서버 프로그램 구현
6. 인터페이스 구현
7. 객체지향 구현
8. 애플리케이션 테스트 관리
9. 소프트웨어 유지보수
10. 제품 소프트웨어 패키징
5. 서버 프로그램 구현
개발 환경구축
서버 환경 구축
○ 웹 서버(WEB) : 정적
○ 웹 애플리케이션 서버(WAS) : 동적
○ 데이터베이스 서버(DBMS)
○ 파일서버
○ Load Balancer(Random, Least loaded, Round Robin)
○ CDN(Content Delivery Network) : 영상 분산 배치
○ 시스템 아키텍처 고려사항
- 확장성(Scalability)
- 성능(Performance)
- 응답시간(Response Time)
- 처리량(Throughput)
- 접근성(Accessibility)
- 일관성(Consistency)
- 보안(Security)
개발 소프트웨어 환경
○ 시스템 소프트웨어
- 운영체제(OS, Operating System)
- JVM(Java Virtual Machine)
- Web Server
- WAS(Web Application Server)
- DBMS(DataBase Management System)
○ 개발 소프트웨어
- 요구사항 관리 도구 : JFeature, JRequisite, OSRMT, Trello
- 설계 / 모델링 도구 : ArgoUML, StarUML, DB Designer
- 구현도구 : Eclipse, InteliJ, Visual Studio
- 테스트 도구 : JUnit, CppUnit, JMeter, SpringTest
- 형상관리 도구 : Git, CVS, SVN
- 협업 도구 : Slack, Microsoft Teams
- 배포 도구 : Jenkins, Travis CI
IDE(Integrated Development Environment) 도구
○ 소프트웨어 개발에 필요한 다양한 기능을 하나의 프로그램 내에서 제공하는 소프트웨어
○ IDE 도구의 종류 : Eclipse, Visual Studio, Xcode, IntelliJ IDEA
○ IDE 도구 선정 시 고려사항 : 적정성, 효율성, 이식성, 친밀성, 범용성
협업 도구
○ 여러 사용자가 각자의 작업 환경에서 통합된 프로젝트를 동시에 수행할 수 있도록 지원하는 소프트웨어
○ 협업 도구의 기능 : 전사관리, 프로젝트 관리, 드라이브 공간, 문서 공유, 커뮤니케이션, 다국어 지원, 타 협업 툴 연동
○ 협업 도구 도입 프로세스 : 문제 정의 > 솔루션 / 기대효과 정의 > 협업 도구 분석 > 협업 도구 최종 선정
형상 관리 도구
○ 소프트웨어 개발 과정에서 발생하는 모든 변경사항을 통제하고 관리하는 방법
○ 변경 관리 / 버전 관리 / 형상 관리
- 변경 관리 : 소스코드의 변경 사항을 관리
- 버전 관리 : 체크인 / 체크아웃, 릴리즈, 퍼블리싱 등 버전으로 관리
- 형상 관리 : 변경 관리와 버전 관리를 포함하며, 프로젝트 진행 상황, 빌드, 릴리즈까지 전체적으로 관리
○ 형상 관리 절차
> 형상 식별 : 관리해야 할 항목을 구분하고, 번호나 태그 부여
> 형상 통제 : 변경 요청을 검토하고 형상 통제 위원회의 승인을 거쳐 현재의 기준선(Baseline)에 반영
> 형상 감사 : 변경에 대한 검토
> 형상 기록 : 변경 사항과 처리 과정을 기록
버전 관리 도구
○ 소스코드와 문서 등 디지털 콘텐츠에 대한 여러 버전을 관리
○ 소프트웨어 버전 관리 도구 유형
- 공유 폴더 방식(RCS, SCCS)
- 클라이언트 / 서버 방식(CVS, SVN)
- 분산 저장소 방식(Git)
○ 버전 관리 소프트웨어 사용 방식
개발자 | ← Check out ← | 저장소 Repository |
||
개발자 | ← Check out ← → add, commit → ← update ← |
← import ← | 개발자 | |
개발자 | ← Check out ← |
○ 버전 관리 주요 용어
- Repository
- Checkout
- Commit
- Update
- Add
- Trunk
- Branch
- Merge
- Diff
빌드 도구
○ 소스코드 파일들을 컴파일하고, 다른 필요한 과정들을 거쳐 실행 가능한 소프트웨어로 변환하는 일련의 과정
○ 빌드 자동화 도구 종류
- Make : Unix 계열 운영체제에서 주로 사용
- Ant : Java 기반의 빌드 도구, XML 기반의 빌드 스크립트를 사용
- Maven : 의존성 관리와 프로젝트 라이프 사이클 관리에 강점
- Jenkins : Java 기반의 오픈소스 지속적 통합 서비스 도구
- Gradle : Groovy 기반의 오픈 소스 빌드 자동화 도구(안드로이드 개발)
개발 프레임워크
프레임워크의 개념
○ 소프트웨어 개발에 필요한 공통적인 구성요소와 아키텍처를 일반화하여 제공하는 반제품 형태의 소프트웨어
프레임워크의 특징
○ 모듈화(Modularity)
○ 재사용성(Reusability)
○ 확장성(Extensibility)
○ 제어의 역흐름(Inversion of Control)
프레임워크의 구분
○ Java 프레임워크 : 전자정부 표준 프레임워크, 스트럿츠, 스프링
○ ORM 프레임워크 : 아이바티스(iBatis), 마이바티스(myBatis), 하이버네이트(Hibernate)
○ 닷넷 프레임워크 : MS에서 개발한 Windows 프로그램 개발, 공통언어 런타임(CLR)이라는 가상머신 상에서 작동
○ 자바스크립트 프레임워크 : 앵큘러제이에스(AngularJS), ReactJS, ExtJS
○ 프론트엔드 프레임워크 : Bootstrap, Foundation, MDL
라이브러리(Library)
○ 컴퓨터 프로그램에서 자주 사용되는 루틴이나 리소스(클래스, 템플릿, 설정 데이터)를 모아 놓은 것
API(Application Programming Interface)
○ 소프트웨어 간 인터페이스로, 다른 소프트웨어 또는 서비스와 상호작용하는 데 사용
모듈 구현
단위 모듈 구현
○ 소프트웨어를 기능 단위로 분해하여 개별적으로 구현하는 기법
○ 효과적인 모듈화
- 결합도 ↓, 응집도 ↑, 모듈의 독립성을 강화
- FAN-IN 높게, FAN-OUT 낮게
결합도(Coupling)
○ 모듈과 모듈 간의 관련성 / 의존성 정도
○ 결합도 유형
- 자료 결합도(Data) : 값 전달 | f(x, y)일 때, f(1, 2)
- 스탬프 결합도(Stamp) : 배열, 포인터 전달 | int a [ ] 일 때, f(a)
- 제어 결합도(Control) : 제어 요소 전달 | f(x, y) if(x > 1)일 때, f(1, 2)
- 외부 결합도(External) : 다른 모듈 변수 사용 | extern 변수 사용
- 공통 결합도(Common) : 전역변수 사용
- 내용 결합도(Content Coupling) : 다른 모듈 기능 이용
응집도(Cohesion)
○ 모듈 내부에서 구성요소 간 밀접한 관계를 맺고 있는 정도
○ 응집도 유형
- 기능적 응집도(Functional) : 단일한 목적 수행
- 순차적 응집도(Sequential) : 출력값을 입력값으로 사용
- 통신적 응집도(Communication) : 동일한 입력, 출력
- 절차적 응집도(Procedural Cohesion) : 순차적 수행
- 시간적 응집도(Temporal) : 같은 시간 기능 수행
- 논리적 응집도(Logical) : 유사한 성격
- 우연적 응집도(Coincidental) : 연관관계 없음
팬인(Fan-in), 팬아웃(Fan-out)
○ 모듈의 복잡도와 상호작용을 분석하는 데 사용되는 지표
○ 팬인 : 자신을 사용하는 모듈 수
○ 팬아웃 : 자신이 사용하는 모듈 수
공통 모듈 구현
○ 공통 모듈 구현 순서
공통 모듈 상세 설계 확인 | |||||
공통 모듈 관리 대장 확인 | 상세 설계서 확인 | ||||
공통 모듈 담당자 확인 |
공통 모듈 기능 확인 |
→ | → | 프로그램 설계서 확인 |
화면 설계서 등 참조 문서 확인 |
↕ | 공통 모듈 상세 문서와 매핑된 공통 모듈 구현 | ↕ | |||
DTO/VO 구현 → |
SQL문 구현 → |
DAO 구현 → |
Service 구현 → |
Controller 구현 → |
필요시 화면 구현 |
공통 모듈 구현 |
○ 공통 모듈 구현요소
- DTO(Data Transfer Object) : 데이터를 전송하는 객체
- VO(Value Object) : 특정 값을 나타내는 객체
- DAO(Data Access Object) : DB에 접근하는 객체
- Service : DAO 클래스를 호출
- Controller : 비즈니스 로직을 수행
○ Annotation(@) : '주석', 특수한 의미를 부여, 컴파일 또는 런타임에 해석
서버 프로그램 구현
서버 프로그램 구현
○ 업무 프로세스 확인 : 개인이나 조직이 자원을 입력하여 가치 있는 산출물을 제공하는 일련의 활동
- 업무 프로세스 구성요소
: 프로세스 책임자
: 프로세스 맵
: 프로세스 Task 정의서
: 프로세스 성과 지표
: 프로세스 조직
: 경영자의 리더십
○ 서버 프로그램 구현 : 업무 프로세스를 기반으로 서버에서 서비스를 제공하는 기능을 개발하는 활동
○ MVC 모델의 계층
- 프레젠테이션 계층(Presentation) : 사용자 인터페이스
- 제어 계층(Control Layer) : 요청을 분석하고, 적절한 비즈니스 로직 호출
- 비즈니스 로직 계층(Business Logic) : 핵심 업무 로직을 처리
- 퍼시스턴스 계층(Persistence) : 데이터 관리
- 도메인 모델 계층(Domain Model) : 데이터를 전달
DBMS 접속기술
○ 프로그램에서 데이터베이스에 접근하여 DML을 사용할 수 있게 하는 기술
○ DBMS 접속기술 종류
- 소켓통신
- Vender API
- JDBC(Java DataBase Connectivity)
- ODBC(Open DataBase Connectivity)
ORM(Object-Relational Mapping) 프레임워크
○ 객체지향 프로그래밍과 관계형 데이터베이스 간 호환성 격차를 해결하기 위한 프로그래밍 기법
○ 매핑 기술 비교
- SQL Mapper
: SQL을 명시하여 단순히 필드를 매핑시키는 것이 목적
: 종류 - iBatis, myBatis, jdbc Templetes
- OR Mapping(ORM)
: 객체를 통해 간접적으로 데이터베이스를 다룸
: 종류 - JPA(Java Persistent API), Hibernate
시큐어 코딩(Secure Coding)
○ OWASP(The Open Web Application Security Project) : 오픈소스 웹 애플리케이션 보안 프로젝트
○ 시큐어 코딩 가이드 : 보안취약점을 제거해 안전한 소프트웨어를 개발하는 개발 기법
- 입력 데이터 검증 / 표현
: SQL Injection
: XSS(크로스 사이트 스크립트)
: 자원 삽입
: 위험한 형식 파일 업로드
: 메모리 버퍼 오버프로
- 보안 기능
: 적절한 인증 없이 중요기능 허용
: 부적절한 인가
: 취약한 암호화 알고리즘 사용
: 하드코딩된 패스워드
: 패스워드 평문 저장
: 취약한 패스워드 허용
- 시간 / 상태
: 경쟁 조건
: 종료되지 않는 반복문 / 재귀함수
- 에러 처리
: 오류 메시지 정보 노출
: 오류 상황 대응 부재
: 부적절한 예외 처리
- 코드 오류
: 널 포인터 역참조
: 부적절한 자원 해제
: 해제된 자원 사용
: 초기화되지 않은 변수 사용
- 캡슐화
: 잘못된 세션에 의한 정보 노출
: 제거되지 않은 디버그 코드
: 시스템 정보 노출
: 잘못된 접근 지정자
- API 오용
: DNS에 의존한 보안 결정
: 취약한 API 사용
배치 프로그램 구현
배치 프로그램
○ 배치 : 데이터를 일괄적으로 모아서 처리하는 대량의 작업을 처리
○ 배치 프로그램의 필수 요소 : 대용량 데이터, 자동화, 견고함, 안정성, 성능
○ 스케줄 관리 종류
- 크론탭(Crontab)
: UNIX, LINUX 계열에서 사용
: 시간을 지정해 특정 명령을 자동 실행
: 크론탭 형식 - 분 | 시 | 일 | 월 | 요일 | 명령어
출처 | 흥달쌤
'💠기타 > 자격증' 카테고리의 다른 글
[정처기 실기] 「1」 | 소프트웨어 구축 - (1.5) 애플리케이션 테스트 관리 (0) | 2024.03.28 |
---|---|
[정처기 실기] 「1」 | 소프트웨어 구축 - (1.4) 인터페이스 구현, 객체지향 구현 (0) | 2024.03.27 |
[정처기 실기] 「1」 | 소프트웨어 구축 - (1.2) 소프트웨어 설계, 화면 설계 (0) | 2024.03.27 |
[정처기 실기] 「1」 | 소프트웨어 구축 - (1.1) 소프트웨어 공학 개념, 프로젝트 계획 / 분석 (1) | 2024.03.26 |
[정처기 실기] 프로그래밍 문제 이론 - C언어 (1) | 2024.03.17 |