[정보처리산업기사] 응용 SW 기초 기술 활용 02 / 애플리케이션 설계 01
Updated:
TCP / IP 프로토콜 (2022-02-17)
- TCP/IP는 TCP와 IP 프로토콜만을 지칭하는 것이아니라 UDP, ICMP, ARP, RARP 등 관련된 프로토콜을 통칭한다.
- TCP와 UDP의 가장 큰 차이점은 데이터 전송의 신뢰성에 있다.
- 인터넷 연결을 위한 프로토콜이다.
IP의 헤더(Header)
-
IP헤더의 길이는 최소 2Byte에서 최대 60Byte이다.
- IHL(IP Header Length) : 헤더의 길이를 기록
- TOS(Type Of Service) : 요구되는 서비스 품질을 기록
- Total Packet Length : IP 헤더 및 데이터를 포함한 IP 패킷 전체의 길이를 바이트 단위로 길이를 표시
TCP 헤더
- Source Port Number , Destination Port Number, Sequence Number …
UDP 헤더
- Source Port Number , Destination Port Number, UDP length, UDP Checksum
TCP/ IP 응용 계층(인터넷 서비스)
(1) 전자 우편 (SMTP)
- 편지를 받을때는 POP 서버 편지를 보낼때는 SMTP 서버를 이용
- 전자우편을 주고 받을때는 송신자와 수신자가 동시에 인터넷에 연결되어 있지않아도됨
(2) HTTP 서비스
- html 문서를 송수신하기 위한 표준 프로토콜
(3) FTP 서비스
- 파일 전송 프로토콜
- 파일 업로드와 다운로드
- 계정 없이 접속할 수 있는 FTP 서버를 Anonymous(익명) FTP 서버라고함
(4) TELNET
- 원격 접속 서비스
- 가상 터미널 기능을 갖는다.
TCP 계층 전송계층
(1) TCP(Transmission Control Protocol)
- 전송 데이터의 흐름을 제어, 데이터의 에러 유무를 검사
- 수신측에서 잘못 전송된 패킷에 대해 재전송을 요구
(2) UDP(User Datagram Protocol)
- 비 접속형 통신 제공
- 통신 수립 단계가 없음
(3) RTP
IP 계층
(1) IP(Internet Protoco)
- 패킷에 주소를 지정, 경로를 설정
(2) ARP(Address Resolution Protocol)
- IP주소를 -> 물리적주소(MAC) 주소로 바꿈
(3) RARP(Reverse Address Resolution Protocol)
- ARP와 반대로 물리적주소를 -> IP 주소로
(4) ICMP(Internet Control Message Protocol)
- 오류 상태 통지, 예상치 못한 상황에대한 정보를 관리 (PING)
DNS (Domain Name Server)
- 호스트 컴퓨터이름 , 소속기관이름 , 소속기관 종류, 소속 국가명 순
어플리케이션 설계 - 소프트웨어 생명주기(2022-02-19)
소프트웨어 생명주기(Software Life Cycle)
-
소프트웨어 생명 주기는 소프트웨어를 개발하기 위한 설계, 운용, 유지보수 등의 과정을 각 단계 별로 나눈것
-
대표적인 생명 주기 모형은 폭포수 모형, 프로토타입 모형, 나선형 모형, 애자일 모형 등이 있다.
폭포수 모형(Waterfall Model)
- 폭포수 모형은 각 단계를 확실히 매듭짓고 그 결과를 철저히 검토하여 승인 과정을 거친 후 다음 단계를 진행
- 가장 오래되고 가장 폭넓게 사용된 전통적인 소프트웨어 생명주기 모형
- 각 단계가 끝난 후 다음 단계를 수행하기 위한 결과물이 명확히 산출 되어야함
프로토타입 모형(Prototype Model, 원형 모형)
- 실제 개발될 소프트웨어에 대한 견본품(Prototype)을 만들어 최종 결과물을 예측하는 모형
- 견본품은 사용자와 시스템 사이의 인터페이스에 중점을 두어 개발함
나선형 모형(Spiral Model, 점진적 모형)
-
나선을 따라 돌듯 여러번의 소프트웨어 개발 과정을 거쳐 점진적으로 완벽한 최종 소프트웨어를 개발하는 모형
- 누락되거나 추가된 요구사항을 첨가할 수 있음
- 유지 보수 과정이 필요없음
- 보햄(Boehm)이 제안, 폭포수 모형과 프로토타입의 장점에 위험분석 기능을 추가
- 계획수립 > 위험분석 > 개발 및 검증 > 고객 평가 > 계획수립 > 위험분석 > .. 과 같은 사이클이 돌아감
애자일 모형(Agile Model)
- 애자일은 ‘민첩한’, ‘기민한’ 이라는 의미로 고객의 요구사항변화에 유연하게 대응할 수 있도록 일정한 주기를 반복하면서 개발하는 모형
- 어느 특정 개발 방법론이 아니라 좋은 것을 빠르고 낭비없게 만들기 위해 고객과의 소통에 총점을 맞춘 방법론을 통칭
- 폭포수 모형과 대조적임
-
애자일 모형을 기반으로 하는 소프트웨어 개발 모형에는 스크럼(Scrum), XP(eXtreme Programming), 칸반(Kanban), Lean, 기능 중심 개발(FDD; Feature Driven Development)
- 애자일 개발 4가지 핵심가치
- 프로세스와 도구보다는 개인과 상호작용에 더 가치를 둠
- 방대한 문서 보다는 실행되는 SW에 더 가치를 둠
- 계약 협상보다는 고객과 협엡에 더 가치를 둠
- 계획을 따르기 보다는 변화에 반응하는 것에 더 가치를 둠
소프트웨어 공학
- 소프트웨어 공학(SE; Software Engineering)은 소프트웨어의 위기를 극복하기 위한 방안으로 연구된 학문
-
여러가지 방법론과 도구, 관리 기법들을 통하여 소프트웨어의 품질과 생산성 향상을 목적으로 사용한다.
- 소프트웨어 공학의 기본 원칙
- 현대적인 프로그래밍 기술을 계속적으로 적용해야 함
- 개발된 소프트웨어의 품질이 유지되도록 지속적으로 검증해야함
- 소프트웨어 개발 관련 사항 및 결과에 대한 명확한 기록을 유지해야함
소프트웨어 개발 방법론
-
소프트웨어 개발 방법론은 소프트웨어 개발, 유지보수 등에 필요한 여러가지 일들의 수행방법과 이러한 일들을 효율적으로 수행하려는 과정에서 필요한 각종 기법 및 도구를 체계적으로 정리하여 표준화한 것
- 소프트웨어 개발 방법론의 목적은 소프트웨어의 생산성과 품질 향상이다.
- 주요 소프트웨어 개발 방법론
- 구조적 방법론
- 정보공학 방법론
- 객체지향 방법론
- 컴포넌트 기반(CBD) 방법론
- 제품 계열 방법론
- 애자일 방법론
구조적 방법론
- 구조적 방법론은 정형화된 분석 절차에 따라 사용자 요구사항을 파악하여 문서화하는 처리(Process) 중심의 방법론
- 1960년대까지 가장 많이 적용되었던 소프트웨어 개발 방법론
- 쉬운 이해 및 검증이 가능한 프로그램 코드를 생성하는 것이 목적
- 복잡한 문제를 다루기 위해 분할과 정복(Devide and Conquer) 원리를 적용
- 구조적 방법론의 개발 절차
- 타당성 검토 > 계획 > 요구사항 > 설계 > 구현 > 시험 > 운용/유지보수
정보공학 방법론
- 정보공학 방법론은 정보 시스템의 개발을 위해 계획, 분석, 설계 구축에 정형화된 기법들을 상호 연관성 있게 통합 및 적용하는 자료(Data) 중심의 방법론
- 정보 시스템 개발 주기를 이용하여 대규모 정보 시스템을 구축하는데 적합함
- 정보공학 방법론의 개발 절차
- 정보 전략 계획 수립 > 업무 영역 분석 > 업무 시스템 설계 > 업무 시스템 구축
객체지향 방법론
- 현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체(Object)로 만들어 소프트웨어를 개발할 떄 기계의 부품을 조립하듯이 객체들을 조립해서 필요한 소프트웨어를 구현하는 방법론
- 객체지향 방법론은 구조적 기법의 문제점으로 인한 소프트웨어 위기의 해결책으로 채택
- 객체지향 방법론의 구성요소 : 객체, 클래스, 메시지 등
- 객체지향 방법론의 기본 원칙 : 캡슐화, 정보 은닉 , 추상화, 상속성, 다형성
- 객체지향 방법론의 개발 절차
- 요구 분석 > 설계 > 구현 > 테스트 및 검증 > 인도단계
컴포넌트 기반(CBD: Component Based Design) 방법론
- 컴포넌트 기반 방법론은 기존의 시스템이나 소프트웨어를 구성하는 컴포넌트를 조합하여 하나의 새로운 애플리케이션을 만드는 방법론
- 컴포넌트의 재사용(Reusability)이 가능하여 시간과 노력을 절감할 수 잇음
- 새로운 기능을 추가하는 것이 간단하여 확장성이 보장됨
- 유지 보수 비용을 최소화하고 생산성 및 품질을 향상 시킬 수 있음
- 컴포넌트 기반 방법론의 개발 절차
- 개발 준비 > 분석 > 설계 > 구현 > 테스트 > 전개 > 인도 단계
제품 계열 방법론
- 제품 계열 방법론은 특정 제품에 적용하고 싶은 공통된 기능을 정의하여 개발하는 방법론
- 임베디드 소프트웨어를 만드는데 적합
- 영역공학과 응용공학으로 구분
- 영역공학 : 영역 분석, 영역 설계, 핵심 자산을 구현하는 영역
- 응용공학 : 제품 요구 분석, 제품 설계, 제품을 구현하는 영역
- 영역공학과 응용공학의 연계를 위해 제품의 요구사항, 아키텍쳐, 조립 생산이 필요함
스크럼(Scrum) 기법 - D
- 스크럼은 팀이 중심이 되어 개발의 효율성을 높이는 기법
-
팀원 스스로가 스크럼 팀을 구성하고 개발 작업에 관한 모든 것을 스스로 해결할 수 있어야 함
- 스크럼 팀의 구성원 및 역할
- 제품 책임자(PO : Product Owner)
- 요구사항이 담긴 백로그(Backlog)를 작성하는 주체
- 이해관계자들 중 개발될 제품에 대한 이해도가 높고, 요구사항을 책임지고 의사를 결정할 사람으로 선정
- 스크럼 마스터(SM : Scrum Master)
- 스크럼 팀이 스크럼을 잘 수행할 수 있도록 가이드 역할을 수행함
- 개발팀 (DT : Development Team)
- 제품 책임자와 스크럼 마스터를 제외한 모든 팀원으로 제품 개발을 수행함
- 제품 책임자(PO : Product Owner)
- 스크럼 개발 프로세스
- 스프린트 계획 회의
- 제품 백로그 중 이번 스프린트에서 수행할 작업을 대상으로 단기 일정을 수립하는 회의
- 스프린트
- 실제 개발 작업을 진행하는 과정, 보통 2 ~ 4주 정도의 기간 내에서 진행
- 일일 스크럼 회의
- 모든 팀원이 약 15분 동안 진행상황을 점검, 남은 작업 시간은 소멸 차트(Burn-down Chart)에 표시
- 스프린트 검토 회의
- 부분 또는 전체 완성 제품이 요구사항에 잘 부합하는지 테스팅 하는 회의
- 스프린트 회고
- 정해놓은 규칙 준수 여부 , 개선할점 확인
- 스프린트 계획 회의
XP(eXtreme Programming) 기법
- XP는 수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객의 참여와 개발과정의 반복을 극대화하여 개발 생산성을 향상시키는 방법
- 짧고 반복적인 개발 주기, 단순한 설계, 고객의 적극적인 참여를 통해 소프트웨어를 빠르게 개발하는 것을 목적으로 함
- 릴리즈의 기간을 짧게 반복하며, 고객의 요구사항 반영에 대한 가시성을 높임
- XP의 5가지 핵심 가치
- 의사소통(Communication)
- 단순성(Simplicity)
- 용기(Courage)
- 존중(Respect)
- 피드백(Feedback)
- XP 개발 프로세스
- 릴리즈 계획 수립(Release Planning)
- 부분 혹은 전체 개발 완료 시점에 대한 일정을 수립하는것
- 몇 개의 스토리가 적용되어 부분적으로 기능이 완료된 제품을 제공하는 것을 릴리즈 라고함
- 이터레이션(lteration, 주기)
- 실제 개발 작업을 진행하는 과정으로, 보통 1~3주 정도의 기간으로 진행됨
- 승인검사(Acceptance Test)
- 하나의 이터레이션 안에서 부분 완료 제품이 구현되면 수행하는 테스트
- 소규모 릴리즈(Small Release)
- 요구사항에 유연하게 대응할 수 있도록 릴리즈의 규모를 축소한것
- 릴리즈 계획 수립(Release Planning)
-
XP의 주요 실천방법(Practice)
- 짝 프로그래밍(Pair Programming)
- 다른 사람과 함께 프로그래밍을 수행함으로써 개발에 대한 책임을 공동으로 나눠 갖는 환경을 조성
- 공동 코드 소유(Collective Ownership)
- 개발 코드에 대한 권한과 책임을 공동으로 소유함
- 테스트 주도 개발(Test-Driven Development)
- 개발자가 실제 코드를 작성하기 전에 테스트 케이스를 먼저 작성하므로 자신이 무엇을 해야할지 파악
- 테스트가 지속적으로 진행될 수 있도록 자동화된 테스팅 도구(구조, 프레임워크)를 사용함
- 전체 팀(Whole Team)
- 개발에 참여하는 모든 구성원(고객 포함)들은 각자 자신의 역할이 있고 그 역할에 대한 책임을 가져야함
- 계속적인 통합(Continuous Integration)
- 모듈 단위로 나눠서 개발된 코드들은 하나의 작업이 마무리 될 때마다 지속적으로 통합됨
- 리팩토링(Refactoring)
- 프로그램의 단순화, 유연성 강화등을 위해 기능의 변경없이 시스템을 재구성함
- 소규모 릴리즈(Small Releases)
- 릴리즈 기간을 짧게 반복함으로써 고객의 요구 변화에 신속히 대응할 수있음
- 짝 프로그래밍(Pair Programming)
Leave a comment