CS 66

FTP란?

1. 정의 - FTP(File Transfer Protocal)는 TCP/IP 네트워크상의 장치가 파일을 전송할 때 사용하는 규칙. - 인터넷을 둘러볼때는 HTTP, 인스턴스 메시지는 XMPP, 파일을 이동할때는 FTP 2. FTP 서버란? - 파일을 하나의 장치에서 다른 장치로 전송하는 소프트웨어 어플리케이션 - FTP주소를 가지고 있고, FTP를 수신하는 컴퓨터 3. FTP의 원리 - (클라이언트-서버) 프로토콜 : 클라이언트가 파일을 요쳥하면 서버가 요청된 파일을 제공하는 것 - 2개의 기본채널이 필요 : 명령을 내리고 엑세스 권한 전달채널, 2개의 장치간에 파일 데이터를 전송하는 채널 4. SFTP? - FTP에 시큐어 셸(SSH) 데이터 스트림을 통해 보안을 강화한 파일 전송 방법 - 22번 포..

시스템아키텍처의 정의

시스템 아키텍처의 정의 - 하드웨어와 소프트웨어 아키텍처를 기반으로 시스템이 서비스를 제공하기 위한 아키텍처 - 광의의 정의로는 Technical Architecture, Data Architecture, Application Architecture로 구분 - 협의의 정의로는 Technical Architecture를 의미하며 세부적으로 서버, 스토리지, 네트워크, 보안으로 구분 광의의 시스템아키텍처 정의 1. 기술 아키텍처 : 서버, 네트워크, 보안, 하드웨어 구조, 미들웨어의 배포 구조를 정의 2. 데이터 아키텍처 : 데이터의 무결성을 보장하기 위해 정의 3. 응용 아키텍처 : 정보시스템의 소프트웨어 컴포넌트들 간의 관계 및 제약사항 정의 협의의 시스템아키텍처 정의 1. 서버 - 정보시스템의 계산 능..

XML, HTML

XML - 인간과 응용프로그램간, 혹은 응용프로그램 간에 정보를 쉽게 교환하기 위해 만든 데이터 교환 포멧 - 데이터를 저장하고 전달할 목적으로 만들어진 언어 - 데이터를 설명하는 태그를 사용자 마음대로 정의할 수 있음 HTML - 웹페이지의 구조를 만드는데 사용되는 언어 - 데이터를 어떻게 표현할지를 정의하는 언어 - 태그로 구성이 됨

프로그래밍 언어들의 특징

자바스크립트 - 페이지 일부 효과추가, 게임, 애니메이션, 웹 인터페이스 효과적 제어 - 대화식 웹페이지 개발에 효과적 코틀린 - 안드로이드 스튜디오를 제작한 jetbrain이 개발한 함수형 언어 - 안드로이드 공식 프로그래밍 언어로 채택되어 안드로이드 개발에 최적화 - 자바와 매우 유사하며 간결함 스위프트 - 애플에서 개발을 위한 프로그래밍 언어 - ios, macOS 개발등에 최적화 됨 - 단순하고 쉬움

오픈소스

오픈소스란 - 소스코드가 공개되어 있고 제작자의 권리를 지키면 누구나 자유롭게 사용할 수 있는 소프트웨어 - 빠르게 서비스를 만들어야 하는 현대 사회에서 필수적인 요소 오픈소스 라이센스 - 오픈소스 개발자와 이용자간의 사용방법 및 조건의 범위를 명시해 놓은 계약 - 오픈소스는 내부에서 사용할 경우 의무사항의 적용을 받지 않고, 외부로 배포 및 판매할 경우 적용된다. - 종류 : GPL(가장엄격), Apache license, MIT 등

요구사항

요구사항 - 고객의 관점에서 고객의 요구를 정확히 파악, 만족시키고 소프트웨어를 효과적(납기지연, 예산초과를 방지)으로 만들 수 있게 함. - "요구사항 개발"과 요구사항이 제대로 반영되어 있는지 지속적인 관리를 수행하는 "요구사항 관리"로 구분 - 요구 시스템의 정확한 목표 식별 - 요구사항 변경관리 위원회(CCB, Change Control Board)설정 요구사항 변경 및 추적관리 - 요구사항의 변경이 필연적이므로 변경 통제와 추적활동이 필수적 - 일관성과 무결성을 제공함 - 요구사항 단위로 관리되어야 효과적 - 문서단위가 아닌 문장단위로 요구사항을 추적해야 함

리펙토링

리펙토링이란 - 프로그램 내부 구조를 개선하는것으로 외부에서 보는 프로그램 동작은 변하지 않는다 - 유지 보수성을 향상시키고, 품질을 높이는 활동 - 소규모 변경 후 동작여부를 테스트하고 다음 리펙토링의 단계로 진행. 만약 작동하지 않을경우 리펙토링 undo 리펙토링의 장점 - 복잡한 코드가 단순화 가독성이 높아진다 - 디버깅이 용이해진다 - 요구사항 변경에 빠르게 대응할 수 있다. 리펙토링 수행절차 1. 조직구성 2. 수행 통제 : 변경관리, 형상관리 3. 수행기법 : 디자인 패턴 4. 테스트 : 단위/통합 테스트, 회귀테스트 5. 결과 정리 : 문서화, 현행화 리펙토링 기법 1. 메소드 정리 - extract method : 그룹으로 묶을 수 있는 코드조직을 별도의 매소드로 뽑아냄 - replace ..

테스팅

테스팅이란 - 어플리케이션 또는 시스템의 동작,성능,안정성이 고객이 요구하는 수준을 만족하는지 확인하는 행위 테스팅 과정 테스트유형 목적 수행주체 환경 단위테스트 단위 모듈 내의 결함 개발조직 개발환경 통합테스트 단위 모듈간의 인터페이스에서 결함 발견 개발조직 또는 테스트 조직 개발환경 또는 테스트환경 시스템 테스트 실제 환경과 유사한 환경에서 전체적 기능, 비기능적 테스트 테스트 조직 실제 사용자 환경과 유사한 환경 인수 테스트 요구사항과의 일치성 확인 사용자 사용자 환경 테스팅 기법 1. 화이트박스 테스트 - 소스코드 내부 구조를 아는 상태에서 코드가 잘 동작하는지 확인하고 오류를 찾아 내는 것 - 개발자의 단위테스트에 많이 사용됨 - 테스트 종류 구분 내용 루프 테스트 루프구조에 제한 조건 테스트 ..

유지보수

유지보수란 - 소프트웨어 생명을 연장시키는 운영중심의 작업단계 - 결함제거, 성능향상, 변화된 환경 적응등의 처리를 함 - 소프트웨어 생명주기에서 차지하는 기간 및 비용이 크다 유지보수의 종류 1. 사유에 의한 유지보수 - 수정유지보수 : 오류로 인한 유지보수 - 적응유지보수 : 데이터 환경과 인프라 환경 변화 적응을 위한 처리 - 완전화유지보수 : 새로운 기능 추가, 변경, 품질을 위한 유지보수 2. 시간에 의한 유지보수 - 계획유지보수 : 주기적 유지보수 - 예방유지보수 : 예방차원의 유지보수 - 응급유지보수 : 유지보수의 사후 승인 필요시 3. 대상에 의한 유지보수 - 데이터/프로그램 보수 : 데이터의 conversion등 - 문서화 유지보수 : 문서표준의 변경이나 기타 필요시 - 시스템 유지보수 ..

형상관리

형상관리 - 소프트웨어 형상관리(SCM, Software Configuration Management)는 소프트웨어 개발과정에서 소프트웨어의 변경사항을 관리하기 위한 일련의 활동. - 소프트웨어 변경의 원인을 찾아 컨트롤하며 적절히 변경되고 있는지 확인하는 작업 - 소프트웨어 개발의 전체 비용감소. - 개발 단계에서 만들어지는 프로그램, 프로그램 설명 문서, 데이터 등을 통칭 형상관리가 필요한 이유 - 가시성 미흡 : 소프트웨어는 무형의 산출물이므로 가시성이 없음 - 컨트롤의 어려움 : 소프트웨어는 눈에 보이지 않으므로 컨트롤하기가 어려움 - 추적성 미흡 : 소프트웨어 개발 전체과정에 대한 추적이 어려움 - 감시의 미비 : 가시성 미흡 및 추적의 어려움으로 프로젝트 관리를 지속적으로 하기 어려움 - 끊임..

CI(Continuous Integration)

CI(지속적인 통합)이란? - 여러명으로 구성된 팀이 작업한 결과를 자주 통합하는 소프트웨어 개발 활동 - 각 개발자는 빌드 및 테스트를 수행한 후 코드 변경사항을 중앙 저장소에 주기적으로 병합. - 지속적인 품질제어(Quality Control)을 실행하여 품질향상과 배포 시 소요되는 시간을 최소화 (과거에는 개발이 완료된 후에 품질제어를 수행하여 시간이 오래걸림) CI의 필요성 - 빌드에 대한 형상 관리 - 개발자가 개발 활동에만 집중할 수 있도록 함 - 코드 통합시 발생하는 문제를 사전에 발견하여 처리 - 잦은 배포를 통해 자주 피드백을 얻는 개발 프로세스 가능 구성도

통합개발환경(IDE)

IDE란 코딩 디버깅 컴파일 등 모든 작업을 하나의 소프트웨어 안에서 처리할 수 있도록 환경을 제공하는 소프트웨어 구성요소 - 편집기 : 프로그래밍을 위한 코드를 입력하고 편집하는 도구 - 빌드도구 : 프로그래밍 언어로 작성한 코드를 기계가 인식할 수 있는 코드로 변화하기 위한 컴파일러, 인터프리터, 링커와 같은 도구 - 디버거 : 오류를 찾아내기 위한 도구 - 프로젝트 관리 : 현업시스템을 제공하여 프로젝트를 관리할 수 있는 도구

인터프리터와 컴파일러

인터프리터 - 원시 프로그램을 한줄씩 저급언어(기계어)로 바꾸어 os에 인식시키는 것 - 고레벨의 언어를 중간코드로 변환하고 이를 각 행마다 실행. - 플랫폼(하드웨어)에 종속되지 않는다 컴파일러 - 고급언어를 한번에 저급언어로 번역(컴파일) *빌드 : 소스코드를 실행가능한 소프트웨어 파일로 만드는것. 컴파일은 빌드과정의 일부분이다. (빌드를 도와주는 툴이 Ant, Maven, Gradle 등이 있다) - 최초 실행하면 실행파일이 생성되고 다음 실행시 생성된 실행 파일이 실행되므로 빠르다 - 하드웨어에 종속된다 - 링커에 의해 목적파일이 다른 목적파일(다른 c파일)과 함께 실행파일로 만들어진다 - 로더에 의해 실행파일이 매모리위에 로드된다 인터프리터, 컴파일러 차이 인터프리터 컴파일러 저급언어로 번역하는..

프로그래밍 언어와 종류

프로그래밍 언어란 - 프로그래밍 언어는 사용자가 일상적으로 사용하는 언어를 가지고 프로그램을 짤 수 있도록 한 것 - 사람과 (0,1만 이해할 수 있는 )컴퓨터가 소통할 수 있도록 하는 것 - 프로그래밍 언어마다 "컴파일러" 혹은 "인터프리터"가 사람이 작성한 코드를 컴퓨터가 이해하는 기게어로 바꿔준다 저급언어, 고급언어 구분 설명 대표적인 언어 저급언어 - 기계 중심적인 언어, 실행 속도가 빠르고, 기계마다 다른 코드를 가짐 - 컴퓨터가 이해하기 쉬운 이진법으로 이루어진 기계어와, 기계어에 대응되도록 만든 어셈블리어가 존재 기계어(machine lanaguage) 어셈블리어(assembly language) 고급언어 - 사람이 이해하기 쉬운 자연어에 가깝게 만들어져 프로그래밍하기 쉽고 가독성, 생산성..

UX와 UI의 차이

UX(User Experiance) - UX(사용자경험)은 사용자의 환경을 개선하려는 설계자의 사고와 행동 - 사용자가 어떤 시스템, 서비스를 통해 목적을 이루려 할 때 느끼는 경험, 감정, 지각, 태도 반응의 종합적인 경험. - 사용자를 위해 편리한 화면 설계와 환경을 연구하고 서비스를 기획하는 과정 UI(User Interface) - 인터페이스 : 두 물체 사이에 서로 접촉하는 부분. - 사용자와 시스템이 정보를 주고 받는 상호 작용이 잘 이루어지도록 하는 장치, 소프트웨어를 의미 차이 UX UI 보이지 않는 것을 연구 보이지 않는 것을 보이게 만드는 구체적 작업 사용자가 느끼는 태도, 행동, 느낌 사용자가 직접 대면하는 환경 사용자의 경험에 대한 통계를 기반으로 두는 연구(과정) UX연구를 통해 ..

객체 지향 설계 5원칙 SOLID

SRP(the single responsibility principle) : 단일책임의 원칙 - 하나의 클래스는 하나의 method만을 갖게 됨에 따라 수정에 대한 이유는 한가지가 되어야 함. - 실제로 사용이 어렵다) OCP(the open closed principle) : 개방 폐쇄의 원칙 - 하나의 클래스는 수정에는 페쇄되어 있고, 확장에는 개방되어 있어야 한다. - 다형성과 추상화에 관련된 내용 - 기능 개선시 직접적인 수정보다는 상속을 통한 개선이 좋음 LSP(the Liskov Substitution Principle) : 리스코프 치환의 원칙 - 상속을 하게 되는 경우 IS-A 관계가 성립하기 때문에 지켜져야 하는 원칙 - 하위클래스는 상위클래스로 참조가 가능한 상속와 관련된 원칙 ISP(..