[정처기 실기] 「1」 | 소프트웨어 구축 - (1.3) 서버 프로그램 구현

728x90

[정처기 실기] 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 계열에서 사용

    : 시간을 지정해 특정 명령을 자동 실행

    : 크론탭 형식 - 분 | 시 | 일 | 월 | 요일 | 명령어

 

 

 

 

 

 

 

출처 | 흥달쌤

728x90