민뭉아치
민뭉아치
민뭉아치
전체 방문자
오늘
어제
  • 분류 전체보기 (62)
    • ㅁㅁㅇㅊ's Life (0)
      • Diary (1)
      • Certification (6)
      • English (1)
      • 독서 (1)
    • Algorithm (25)
    • Web (2)
    • Language (3)
      • JavaScript (1)
      • JAVA (2)
    • Spring boot (9)
    • Cloud (0)
    • DevOps (1)
    • Trouble Shooting (6)
    • 개발환경 (3)
    • 짤막IT지식 (4)

블로그 메뉴

  • 홈
  • 깃허브
  • 방명록

공지사항

인기 글

태그

  • 자격증
  • 백준알고리즘
  • 정보처리기사
  • 자바
  • Spring
  • 백준
  • 알고리즘
  • Algorithm
  • 코딩테스트
  • Java

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
민뭉아치

민뭉아치

2020 정보처리기사 실기 정리 - 서버 프로그램 구현
ㅁㅁㅇㅊ's Life/Certification

2020 정보처리기사 실기 정리 - 서버 프로그램 구현

2020. 6. 21. 22:08

*개인적으로 정리한 내용이니 참고용으로 봐주세요 :)

서버 프로그램 구현

1. 개발 환경

- 응용 소프트웨어가 운영될 환경과 유사한 구조로 구축

- 개발 프로젝트의 분석 단계의 산출물을 바탕으로 선정

 

1) 하드웨어 환경 

- 구성 : 사용자와의 인터페이스 역할을 하는 클라이언트(Client), 서비스를 제공하는 서버(Server)

- 웹 서버(Web Server) : 클라이언트로부터 직접 요청 받음, 저용량의 정적 파일들 제공

 -기능

  --HTTP/HTTPS : 브라우저로부터 요청받아 응답할 때 사용하는 프로토콜

  --통신 기록 (Communication Log) : 처리한 요청을 로그 파일에 기록

  --정적 파일 관리(Managing Static Files) : HTML, CSS, image 등 정적 파일들 저장 및 관리

  --대역폭 제한(Bandwidth Throtting) : 트래픽의 포화 방지를 위해 응답 속도를 제한

  --가상 호스팅(Virtual Hosting) : 하나의 서버로 여러개의 도메인 연결

  --인증(Authentication) : 합법적인 사용자인지 확인

- 웹 애플리케이션 서버(Web Application Sever) : 동적 서비스를 제공, 웹 서버와 DB서버 / 파일 서버 사이의 인터페이스 역할

- 데이터베이스 서버(DB Server) : 데이터베이스, DBMS를 운영

- 파일 서버(File Server) : 서비스 제공을 목적으로 유지하는 파일들 저장

 

2) 소프트웨어 환경

- 시스템 소프트웨어 : 운영체제(OS), 웹 서버 및 WAS 운용 서버 프로그램, DBMS

- 개발 소프트웨어

 --요구사항 관리 도구 : 요구사항 수집, 분석, 추적 

 --설계/모델링 도구 : UML(통합 모델링 언어)을 지원

 --구현 도구 : 개발언어로 애플리케이션의 실제 구현을 지원

 --빌드 도구 : 작성된 소스의 빌드 및 배포, 라이브러리 관리

 --테스트 도구 : 모듈들을 테스트

 --형상 관리 도구 : 버전별로 관리, 품질 향상을 지원

 

* 개발 언어의 선정 기준

 - 적정성 : 개발하려는 소프트웨어의 목적에 적합

 - 효율성 : 코드 작성 및 구현이 효율적

 - 이식성 : 다양한 시스템 및 환경에 적용 가능

 - 친밀성 : 개발자들의 이해도와 활용도가 높아야 함

 - 범용성 : 개발 사례 존재, 여러 분야 활용

 

2. 모듈(Module)

: 시스템의 각 기능들로 서브시스템, 작업 단위 등과 같은 의미

- 단독으로 컴파일이 가능, 재사용 할 수 있음

- 독립성이 높은 모듈 → 다른 모듈에게 영향을 미치지 않음, 오류를 쉽게 발견하고 해결 가능

- 독립성을 높이려면 모듈의 결합도(Coupling)는 약하게, 응집도(Cohesion)는 강하게, 크기는 작게 만들어야 함

- 효과적인 모듈 설계 방안

① 독립성과 재사용성을 높인다.

② 복잡도와 중복성을 줄이고 일관성을 유지

③ 모듈의 기능은 예측이 가능

④ 하나의 입구와 하나의 출구를 갖도록 해야 함

 

3. 결합도(Coupling)

: 모듈 간에 상호 의존하는 정도, 두 모듈 사이의 연관 관계

결합도(Coupling)

- 자료 결합도(Data Coupling) : 모듈 간의 인터페이스가 자료 요소로만 구성

- 스탬프 결합도(Stamp Couplig) : 배열이나 레코 등의 자료 구조가 전달

- 제어 결합도(Control Coupling) : 논리적인 흐름을 제어하기 위해 제어신호로 통신 / 제어요소를 전달

- 외부 결합도(External Coupling) : 외부의 다른 모듈에서 참조

- 공통(공유) 결합도(Common Coupling) : 공유되는 공통 데이이터 영역을 사용

- 내용 결합도(Content Coupling) : 다른 모듈의 내부 기능 및 내부 자료 직접 참조 / 수정

 

4. 응집도(Cohesion)

: 정보 은닉 개념을 확장한 것, 모듈의 내부 요소들의 서로 관련되어 있는 정도, 즉 모듈이 독립적인 기능으로 정의 되어 있는 정도

응집도(Cohesion)

- 기능적 응집도(Functional Cohesion) : 모든 기능 요소들이 단일 문제와 연관되어 수행

- 순차적 응집도(Sequential Cohesion) : 모듈 내 하나의 활동 출력 데이터를 다음 활동 입력데이터로 사용

- 교환적 응집도(Communication Cohesion) : 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행

- 절차적 응집도(Procedual Cohesion) : 기능을 순차적으로 수행

- 시간적 응집도(Temporal Cohesion) : 특정 시간에 처리되는 기능을 모아 하나의 모듈로 작성

- 논리적 응집도(Logical Cohesion) : 유사한 성격, 특정 형태로 분류되는 요소들로 하나의 모듈 형성

- 우연적 응집도(Coincidental Cohesion) : 서로 관련 없는 요소로만 구성

 

5. 팬인(Fan-in) / 팬아웃(Fan-Out)

- 팬인은 제어(호출)하는 모듈의 수 → 모듈에 들어오면 팬인이라고 생각하면 외우기 쉬움

- 팬아웃은 제어(호출)되는 모듈의 수 → 모듈에서 나가면 팬아웃

- 팬인과 팬아웃을 분석하여 시스템의 복잡도를 알 수 있음

- 시스템의 복잡도를 최적화하려면 팬인은 높게, 팬아웃은 낮게 설계

팬인(Fan-in) / 팬아웃(Fan-out)

6. 공통 모듈

: 여러 프로그램에서 공통적으로 사용할 수 있는 모듈

- 애번 필요한 기능들로 구성

- 재사용성 확보, 중복 개발 회피를 위함

- 명세 기법

 --정확성(Correctness) : 해당 기능이 필요하다는 것을 알 수 있도록 정확히 작성 

 --명확성(Clarity) : 중의적으로 해석되지 않도록 명확하게 작성

 --완전성(Completenss) : 필요한 모든 것을 기술

 --일관성(Consistency) : 공통 기능들 간 상호 충돌 발생하지 않도록 작성

 --추적성(Traceability) : 요구사항의 출처, 관련 시스템 등의 관계 파악

 

7. 재사용성(Reuse)

: 비용과 개발 시간을 절약하기 위해 개발된 기능을 재구성하여 새로운 시스템, 기능 개발을 위해 최적화 시키는 작업

- 함수(메소드)와 객체 : 클래스나 메소드 단위의 소스 코드 재사용

- 컴포넌트 : 수정 없이 인터페이스를 통해 통신하는 방식으로 재사용

- 애플리케이션 : 공통 기능들을 제공하는 애플리케이션 공유 방식 재사용

 

8. DBMS 접속(Connection)

: 사용자가 데이터를 사용하기 위해 응용 시스템을 이용하여 DBMS에 접근

- 웹 응용 시스템

 : 웹 서버와 웹 애플리케이션 서버(WAS)로 구성, 웹 응용 프로그램은 웹 응용 시스템을 통해 DBMS에 접근

웹 응용 시스템의 구조

- 기술

--JDBC(Java DataBase Connectivity) : Java 언어로 데이터베이스에 접속하고 SQL문을 수행할 때 사용되는 표준 API, Java SE(Standard Edition)에 포함되어 있음, DBMS에 대한 드라이버가 필요

--ODBC(Open DataBase Connectivity) : 개발 언어에 관계 없이 사용할 수 있음, ODBC에 포함된 드라이버 관리자가 해당 DBMS의 인터페이스 맞게 연결해 줌 

--MyBatis : JDBC 코드를 단순화 하여 사용할 수 있는 SQL Mapping 기반 오픈 소스 접속 프레임워크

 

9. 동적 SQL(Dynamic SQL)

: 조건에 따라 SQL 구문을 동적으로 변경하여 처리할 수 있는 SQL 처리방식

- NVL 함수를 사용할 필요가 없음

- 속도가 비교적 느리지만 상황에 따라 다양한 조건을 첨가하는 등 유연한 개발이 가능

 

10. 서버 개발

- 서버 개발 프레임워크(Framework) : 클래스나 인터페이스를 제공, 모델-뷰-컨트롤러(MVC) 패턴

--Spring : JAVA기반, 전자정부 표준 프레임워크

--Node.js : JavaScript기반, 실시간으로 입출력이 빈번한 애플리케이션에 적합

--Django : Python기반, 신속한 개발 가능

--Codeiniter : PHP기반, 인터페이스가 간편 / 서버 자원을 적게 사용

--Ruby on Rails : Ruby기반, 테스트를 위한 웹서버 / 데이터베이스 작업을 단순화

- 프레임워크의 특성

--모듈화(Modularity) : 캡슐화를 통해 모듈화를 강화, 변경에 따른 영향을 최소화

--재사용성(Reusability) : 개발사의 생산성 향상

--확장성(Extensibility) : 다향성(Polymophism)을 통한 인터페이스 확장이 가능

--제어의 역흐름(Inversion of Control) : 객체들의 제어 권한을 프레임워크에 넘겨 생산성을 향상

- 서버 개발 과정 (구현 순서는 개발자가 임의로 변경할 수 있음)

--DTO/VO(Data Transfer Object / Value Object)

: 데이터 교환을 위해 사용할 객체를 만드는 과정, 변수 및 객체를 자료형(Data Type)에 알맞게 생성, 변수와 데이터를 저장하고 반환하는 메소드만 구현

--SQL

: 데이터의 삽입, 변경, 삭제 등 작업을 수행할 SQL문을 생성, 소스 코드 내에 직접 입력 / XML 파일로 저장

*XML 파일로 관리하면 중복되는 SQL문 최소화, 유지보수가 간편

--DAO(Data Access Object)

: 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드 구현

--Service

: 사용자의 요청에 응답하기 위한 로직을 구현

--Controller

: 사용자의 요청에 적절한 서비스를 호출, 그 결과를 사용자에게 반환하는 코드를 구현

 

11. 배치 프로그램(Batch Program)

: 사용자와의 상호 작용 없이 미리 정해진 일련의 순서에 따라 일관적으로 작업들을 처리

- 주기에 따라 정기 배치(정해진 기간 수행), 이벤트성 배치(조건 충족), On-Demand 배치(사용자 요청)로 수행

- 배치 프로그램의 필수 요소

--대용량 데이터 : 대량의 데이터를 처리 가능

--자동화 : 오류 발생상황을 제외하고 사용자의 개입 없이 수행

--견고성 : 중단되는 일 없이 수행

--안전성/신뢰성 : 오류가 발생하면 추적 가능

--성능 : 지정된 시간 내에 처리가 완료

 

12. 배치 스케줄러(Batch Scheduler)

: 일괄 처리(Batch Processing) 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구

- 잡 스케줄러(Job Scheduler)라고도 함

 

- 종류

--스프링 배치(Spring Batch) : 스프링 프레임워크 기능을 모두 사용 가능, 데이터 교환에 필요한 컴포넌트 제공

--Quart : 스프링 프레임워크로 개발되는 응용 프로그램들의 일괄 처리를 위한 기능을 제공하는 오픈 소스 라이브러리

--Cron : 리눅스의 스케줄러 도구 crontab 명령어로 통해 작업을 예약할 수 있음 

Ex) 3월, 6월, 9월, 12월 마다 데이터 백업 작업을 예약하고 해당 작업은 각 월의 25일에 오후 10시 정각에 처음 실행되어 15분마다 총 4회 수행할 예정 백업 명령어는 /backup/batch.sh 파일에 준비 되어있음

*/15 22 25 */3 * /backup/batch.sh (15분마다 22시에 25에 3개월마다 매요일 backup 디렉토리에 있는 batch.sh 실행)

Ex) 10월 1일에서 12월 13일까지 매주 금요일 오후 9시 정각에 root 디렉터리에 있는 stat.sh 파일을 실행

0 21 * 10-12 5 /root/stat.sh (0분 21시에 매일 10월에서 12월 사이동안 금요일에 root 디렉터리에 있는 stat.sh 실행)

반응형

'ㅁㅁㅇㅊ's Life > Certification' 카테고리의 다른 글

제 52회 SQLD 취득 후기  (1) 2024.06.09
2020 정보처리기사 2회 실기대비 정리 - 화면 설계  (0) 2020.06.23
2020 정보처리기사 실기 정리 - 통합 구현  (0) 2020.06.20
2020 정보처리 기사 실기 정리 - 데이터 입·출력 구현  (0) 2020.06.19
2020 정보처리기사 필기 준비과정과 후기  (0) 2020.06.07
    'ㅁㅁㅇㅊ's Life/Certification' 카테고리의 다른 글
    • 제 52회 SQLD 취득 후기
    • 2020 정보처리기사 2회 실기대비 정리 - 화면 설계
    • 2020 정보처리기사 실기 정리 - 통합 구현
    • 2020 정보처리 기사 실기 정리 - 데이터 입·출력 구현
    민뭉아치
    민뭉아치
    Do Better Today Than You Were Yesterday

    티스토리툴바