일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- chatgpt #gpt #챗지피티 #ai
- 도커 #Docker #배포 #Spring #MySQL #백엔드배포
- 도커 #docker #docker-compose.yml #도커컴포즈 #배포 #spring #mysql #docker-compose
- /
- Today
- Total
개발자 데뷔!
CS 심화이론 본문
소프트웨어 개발 방법론 (프로젝트 관리)
- PMBOK의 5가지 프로세스 그룹
- 시작(initiating)그룹 : 핵심프로세스 범위관리, 단계정의 등의 승인
- 기획(planning)그룹 : 목표달성을 위한 활동계획과 예산, 인력, 자원 등 계획 수립
- 실행(executing)그룹 : 계획을 세운대로 실제 프로젝트 수행
- 통제(controling)그룹 : 계획 대비 목표 진척상황을주기적으로 감시하고 성과측정
- 종료(closing)그룹 : 관리종료(구성원 평가), 계약종료
- PMBOK의 9가지 관점
- 통합
- 범위
- 시간
- 비용
- 품질
- 인적자원
- 통신
- 위험
- 조달
애자일(agile) 프로세스 모델
* 날렵한, 민첩한
- 고객의 요구에 민첩하게 대응하고 그깨그때 주어지는 문제를 풀어 나가는 방법론
- 반복적인 개발을 통한 짧은 기간내의 반복 출시가 목표!
스크럼(scrum) 프로세스 모델
- 소프트웨어 개발 < 팀의 개선, 프로젝트 관리를 위한 애자일 방법론 중 하나
- '실행 가능한 제품'을 통해 사용자와의 충분한 의견 조율 가능
- 단순, 실천지향적
XP(eXterme Programming) 프로세스 모델
- 비즈니스 상의 요구가 시시가각 변동이 심한 경우에 적합
- 10~12개 정도의 구체적인 실천 방법을 정의
- "고객이 원하는 양질의 소프트웨어를 빠른 시간안에 전달"
- 반복적 프로토타입 전달
Lean 프로세스 모델
- Lean thingking
- 구체적인 개발 프로세스를 정의하지 않고, 철학적인 접근방식 사용
- 낭비요소를 제거 !! -> 고객에게 가치를 빠르게 제공
- 확정을 늦춰라
- 전체 가치 흐름에 초점을 맞춤
- 방법론 보다 사고방식 중 하나
애자일(Agile) vs 린(Lean) 방법론의 차이
공통점 | - 요구사항의 변화를 적극적으로 수용 - 제품을 고객에게 빠르게 전달 |
차이점 | - 애자일의 초점 : 고객과의 협업 & 빠른 개발 수행 - 린 의 초점 : 고객의 관점에서 프로세스 상에서의 낭비를 제거 |
* coder와 developer의 차이
구현 만 했는가, 분석-기획-설계-구현 을 했는가 (프로젝트의 관리를 포함했는가?)
소프트웨어 개발기술
HTML의 특징 (HTML5)
멀티미디어 기능 | - 플러그인 없이 스스로 음악, 동영상 재생 가능 |
그래픽 기능 | - HTML5: 2차원,3차원 그래픽 구현 가능 - HTML태그를 사용해 2차원 벡터 그래픽 구현 가능 |
3차원 그래픽 구현방법 | - CSS3를 사용해 3차원 그래픽 구현 - 자바스크립트 WebGL을 사용해 3차원 그래픽 구현 |
통신 | - 서버와 실시간으로 쌍방향 통신 가능 - 실시간 채팅 & 온라인게임 가능하게 함 (WebGL과 HTML5 웹 소켓 사용) |
장치접근 | - 장치에 접근해 정보&기능 사용 - AT&T HTML5 SDK : 스마트폰의 내장 기능을 이용하는 응용 프로그램 개발 가능 |
오프라인 및 저장소 | - HTML5는 인터넷 연결되지 않아도 응용프로그램 동작가능 - 오프라인 Gmail |
시맨틱 | - 검색엔진 프로그램이 정보를 분석, 검색, 처리해 제공하는 지능형 웹 |
성능 극대화 & 통합 |
- 기존에 이용하던 웹의 성능을 극대화 할 수 있게 됨 - 웹 워커를 이용해 사용자 화면을 멈추지 않으면서 연산을 처리 할 수 있음 - HTML5 표준을 적용한 웹 브라우저를 사용해 간단한 워드작업, 게임 가능 |
CSS(Cascading Style Sheet) 의 특징
CSS 정의 | - HTML 문서를 표현하는 방법을 기술하는 언어 - 웹 문서의 출력될 외형 스타일 - 콘텐츠 내용과 디자인의 분리 |
CSS3 특징 | - 모듈 기반의 개발(디바이스에 따라 원하는 모듈만을 탑재) - 필요한 모듈만 빠르게 업데이트 가능 - 화려하고 동적인 스타일 작성 가능 - 기존에 플래시, 그래픽 디자인 도구에 의존하던 부분을 CSS3 스타일시트 만을 이용해 할 수 있게 됨 |
JavaScript의 특징
: 구조 + 디자인 + 사용자와의 상호작용 을 포함 한것이 Java Script
- 표준명칭: ECMAScript5
- HTML에서 사용자 반응 등을 처리하는데 사용하는 프로그래밍 언어
Ajax
- 비동기적인 웹 애플리케이션 제작을 위한 웹 개발기법
- 동적인 화면 출력, 화면출력과상호작용을 위한 DOM, 자바 스크립트
- 비동기적으로 사용자 화면을 유지하며 재로딩되는 횟수를 줄임
장점 | - 페이지 이동없이, 고속 화면 전환 가능 - 서버 처리를 기다리지 않고 비동기 요청 가능 - 수신하는 데이터 양 줄임. |
단점 | - HTTP 클라이언트 기능이 한정 - 페이지 이동없는 통신으로 보안상의 문제 - 디버깅이 용이하지 않음 - 요청 남발하면 서버 부하가 늘 수 있음 |
JQuery
- HTML의 클라이언트 사이트 조작을 단순화 하도록 설계된 크로스 플랫폼의 자바스크립트 라이브러리
React
- 페이스북에서 개발한 유저 인터페이스 라이브러리
- 재사용가능한 UI 생성 가능
- Virtual DOM 개념 사용
- Virtual DOM
- 실제 DOM에 접근해 조작하는 대신, 이를 추상화한 자바스크립트 객체를 구성해 사용하는 방식
Vue.js
- 사용자 UI 빌드를 위한 오픈소스 프로그레시브 자바스크립트 프레임 워크
- 고급 싱글 페이지를 지원하는 웹 애플리케이션 프레임 워크
Angular
- 구글이 개발한 타임스크립트 기반 오픈소스 프론트엔드 웹 애플리케이션 프레임워크
모바일 App의 특징
- 즉시 연결성(Instant Connectivity) : 항상 상대방과 연결 가능
- 지역성(Localization) : 현재 위치를 항상 파악
- 전달성(Communicability) : 다른 사용자와 실시간 데이터 송수신
- 개인화(Personalization) : 상황에 따라 개인별 콘텐츠가 제공됨
- FrontEnd에서 Hybrid 와 Native의 차이
Hybrid Native - 여러가지 플랫폼에서 사용할 수 있도록 개발
- 각 Native에 맞게 '최적화' 필요
- ex) HTML5등 사용해서 개발- 각 디바이스(os)에 맞추어 전용으로 사용하도록 개발
- ex) Android, Ios
React Native
- Hybrid
- 페이스북이 개발한 오픈소스 모바일 애플리케이션 프레임워크
- 안드로이드, ios, 웹 용 애플리케이션을 개발하기 위해 사용
- Native 플랫폼 기능과 더불어 react를 사용할 수 있게 함.
- 동작원리
- react native가 가상 DOM을 통해 DOM 을 조작하지 않는다는 점을 제외하고는 react와 실질적으로 동일
- 직렬화, 비동기, 일괄처리브리지 를 통해 네이티브 플랫폼과 통신하며 종단장치에 직접 백그라운드 프로세스로 실행
- HTML이나 CSS를 사용하지 않음
- 리액트 구성요소들은 리액트의 선언형 UI 패러다임과 자바스크립트를 통해 기존 네이티브 코드를 감싸고 네이티브 API와 통신한다.
- 리액트 네이티브는 개발자들이 안드로이드용 자바/ 코틀린, IOS용 오브젝티브-C/스위프트와 같은 언어로 작성한 네이티브 코드와 상호작용이 가능하도록 브릿지(Bridge)를 제공하므로 더 많은 유연성을 제공한다.
Flutter
- Hybrid
- 구글이 개발한 오픈소스 모바일 애플리케이션 개발 프레임워크
- 안드로이드, ios용 애플리케이션 개발을 위해, 또 구글 퓨시아용 애플리케이션 개발의 주된 방식으로 사용
- 프레임워크 아키텍처
- 다트 플랫폼
- 플러터 엔진(Flutter engine)
- 파운데이션 라이브러리(Foundation library)
- 디자인 특화 위젯(Design-specific widgets)
Android
- 안드로이드의 구성 (Linux + Java)
- 리눅스 커널(Linux Kernel)
- 라이브러리(Library)
- 안드로이드 런타임(Android Runtime) : 자바 언어로 개발된 코드를 실행하기 위한 가상머신 Virtual Machine
- 애플리케이션 프레임워크(Application Framework) : 안드로이드 시스템의 핵심적인 서비스로 구성
- 애플리케이션(Application)
* 안드로이드는 * 전화가 가장 중요하기 때문에, 다른 app이 실행되다가도 전화를 수신하면 해당 기능이 백그라운드로 실행되게 구성됨 (운영체제와 통신)
- 안드로이드 4대 컴포넌트
- 액티비티(Activity) : 화면을 구성하는 가장 기본적인 컴포넌트
- 서비스(Service) : 액티비티와 상관없이 백그라운드에서 동작하는 컴포넌트
- 브로드캐스트 리시버(Broadcast Receiver) : 문자메시지 도착, 배터리 방전, SD카드 탈부착, 네트워크 환경 변화 등이 발생하면 전체 응용프로그램이 들을 수 있도록 방송신호 보냄
- 콘텐트 프로바이더(Content Provider) : 응용 프로그램 사이에 데이터를 상호 공유하기 위한 컴포넌트
* 위 모든 컴포넌트가 각각 독립적으로 동작하며 항상 os와 직접 통신한다.
- 안드로이드 액티비티 생명주기
- -> 핸드폰 사진 확인!!
BackEnd
JSP
- 서블릿 기술의 확장
- 백엔드의 매우 초반 기술
아파치 스트럿츠(Apache Structs)
- Java EE 웹 애플리케이션을 개발하기 위한 오픈소스 프레임워크
- 대형 웹 애플리케이션의 설계와 구현을 가능하게 해서 -> 매우 무거움
스프링 프레임워크(Spring Framework)
- 위를 보완하기 위해 가볍게 나온 프레임워크
- 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크(동적인 웹사이트 개발)
- 경량 컨테이너로서 자바 객체를 직접 관리
- 특징
- POJO (Plain Old Java Object) 방식의 프레임 워크
- 제어반전(IoC: Inversion of Control)을 지원
- 관점지향 프로그래밍(AOP: Aspect-Oriented Programming)을 지원
- 확장성이 높음
ASP / ASP.net
- Windows based
- 액티브 서버 페이지(Active Server Page)
- 마이크로소프트사에서 동적으로 웹페이지들을 생성하기 위해 개발한 서버측 스크립트 엔진
Code Ignighter
- PHP based
- PHP로 작성된 웹 프레임 워크로 일반적으로 필요한 프로그래밍 라이브러리를 제공
- MVC(Model-Vue-Controller)기반
- 무거움
Lalavel
- PHP based
- PHP 에서 사용할 수 있는 가장 모던하고 세련된 프레임 워크, 유연하고 세련된 기능 제공
- 가벼움
- MVC(Model-Vue-Controller)기반
파이썬
- Python based
- 플랫폼 독립적
- 인터프리터 언어 : 컴파일러 언어와 달리, 소스코드 자체가 바로 실행되는 특징이 있어 속도는 느리지만 간편
- 객체지향 언어
- 동적 타이핑 언어(프로그램 실행 시점에서 각 프로그램 변수의 타입 결정)
- c언어에 비해 느림
Django
- Python based
- 쉬움
- 확장성이 좋다, 개발비용 절감 가능
Flask
- Python 의 마이크로 웹 프레임워크
- 매우 가벼움
- 다양한 웹 엔진과 붙여서 쓸 수 있음, Django와 같이 쓰는 경우 많음
- API 서버를 만들기에 편리
Django | Flask |
풀스택 프레임워크 | 마이크로 프레임워크 |
일부 기능 단순히 import 해 사용 가능 | 직접 구현해야 하는 경우 많음 |
개발자의 능력과 목적에 맞게 커스텀 가능 |
데이터베이스
1세대 | 네트워크 DBMS(그래프 형태), 계층 DBMS(트리 형태) |
2세대 | 관계 DBMS(테이블 형태) ex) 오라클, MS SQL서버, MySQL |
3세대 | 객체지향 DBMS, 객체관계DBMS(객체DBMS + 관계 DBMS) ex) 오투, 온투스, 젬스톤 |
4세대 | NoSQL DBMS : 비정형데이터를 처리하는데 적합, 확장성 뛰어남 (빅데이터 등에 사용?) ex) 몽고디비(MongoDB), 카산드라(Cassandra) NewSQL DBMS : 관계 DBMS의 장점 + NoSQL의 확장성&유연성 ex) 구글스패너, 볼트DB, 누오DB |
자료구조 & 알고리즘
디자인패턴
- SW 설계 시 반복적으로 나타나는 일련의 규칙을 정의한 것
MVC 패턴
- Model-View-Controller 패턴
- view 와 model을 분리하고, 이들간의 subscribe/notify 프로토콜을 이용해 동작
- 디자인패턴의 3가지 유형
- Creational Pattern : 객체 생성과 관련한 패턴들
- Structural Pattern : 프로그램 구조 관련 패턴
- Behavioral Pattern : 반복적으로 사용되는 객체들의 상호작용을 패턴화해놓은 것
- 예시
1. Creational | - Abstract Factory - Prototype - Singleton - Factory Method - Builder |
2. Structural | - Adapter - Bridge - Composite - Decorator - Flyweight - Facade - Proxy |
3. Behavioral | - Chain of Responsibility - Command - Interpreter - Mediator - Memento - Observer - State - Strategy - Template Method - Visitor |
리팩토링
- 설계 개선
- 요구변경에 유연한 모델
- 나쁜냄새(Bad Smell) : 리팩토링 시점을 알려주는 지침
- 중복된 코드, 너무 긴 메소드, 거대한 클래스, 지나치게 많은 파라미터, 확산적 변경, 변경의 분산, 속성-조작에 욕심, 데이터 덩어리, 기본 데이터 타입에 대한 집착, Switch 문, 병렬 상속 구조, 게으른 클래스, 지나친 일반화, 임시속성, 메시지체인, 미들맨, 부적절한 친밀성, 다른 인터페이스를 가진 대체 클래스, 미완성 클래스 라이브러리, 데이터 클래스, 상속거부, 주석
시스템
캐시 | - 고속 메모리 - 메인 메모리의 일정 부분을 할당해 2차 저장소의 데이터를 캐시하는데 활용 |
버퍼 | - 장치들 사이, 혹은 서로 다른속도로 동작하는 프로세스들 사이에서 데이터를 전송할 때, 일시적으로 데이터를 보관하는 저장영역 - 소프트웨어와 하드웨어 장치들이 데이터를 비동기적으로 전송하게 함으로써 시스템 성능 향상 |
스풀링 | - 한 프로세스와 저속or 버퍼가 제한된 입출력장치 사이에 디스크와 같은 중간 매개체를 두는 기술 - ? |
입출력 방식
폴링 | - CPU가 직접 입출력장치에서 데이터를 가져오거나, 내보내는 방식 - CPU가 입출력장치의 상태를 주기적으로 검사해, 일정 조건을 만족할 때 데이터를 처리 - CPU가 본래 역할인 '명령어 해석&실행' 외에 입출력 작업에도 관여해 작업효율 떨어짐 |
인터럽트 | - 입출력 관리자가 대신 입출력을 해주는 방식 - CPU작업과 저장장치의 데이터이동을 각각 독립적으로 운영함 → 시스템 효율 높임 - 데이터 입출력 동안 CPU가 다른 작업 가능하다. - ex) 외부 인터럽트(전원이상, 기계적 오류), 내부 인터럽트(프로세스 잘못) 시그널 : 사용자가 직접 발생시키는 인터럽트 |
보안
서비스 거부 공격(DoS)
취약점 공격형 | - Boink, Bonk, TearDrop 공격 - 프로토콜의 오류제어 로직을 악용해 시스템 자원을 고갈시키는 방식 |
랜드 공격 | - 패킷을 전송할 때, 출발지와 목적지 IP주소의 값을 똑같이 만들어 공격대상에게 보내는 방식 |
자원 고갈 공격형 | - 죽음의 핑공격 : 시스템 파괴에 가장 흔히 쓰였던 초기 DoS 공격 - 네트워크에서 패킷을 전송하기 적당한 크기로 잘라서 보내는 특성을 이용한 공격 - ???? |
SYN 플러딩 공격 | - 네트워크에서 서비스를 제공하는 시스템의 '사용자 수 제한'을 이용한 공격 - 존재하지 않는 클라이언트가 서버별로 한정된 접속가능 공간에 접속한 것 처럼 속여, 다른 사용자가 서비스를 이용할 수 없게 함 |
HTTP GET 플러딩 공격 |
- 시스템에 TCP 3-웨이 핸드셰이킹 과정으로 정상 접속 후, HTTP의 GET 메소드로, 특정 페이지를 무한대로 실행하는 방식 |
스머프 공격 | - ICMP 패킷 & 네트워크에 존재하는 임의의 시스템으로, 패킷을 확장해 서비스 거부 공격을 수행하는 방식. - 네트워크 공격에 많이 사용함 |
메일 폭탄 공격 | - 메일이 폭주하여 디스크 공간을 가득 채우는 방법 - ex) 스팸메일 |
분산 서비스 거부 공격(DDoS)
- DDoS의 기본 구성
공격자(attacker) 공격을 주도하는 해커 컴퓨터 마스터(master) 공격자에게 직접 명령을 받는 시스템
여러 대의 에이전트를 관리핸들러(handler) 프로그램 마스터 시스템의 역할을 수행하는 프로그램 에이전트(agent) 직접 공격을 가하는 시스템 데몬(daemon) 프로그램 에이전트 시스템의 역할을 수행하는 프로그램
스니핑
- 수동적 공격
- 데이터 속에서 정보를 찾는 것만으로 충분한 공격이 됨
- 보호되어야할 정보까지 모두 볼 수 있어야 하므로,
랜카드의 promiscuous 모드를 이용해, 데이터 링크 계층 & 네트워크 계층의 정보를 이용한 필터링을 해제한다.
스위치 재밍 공격 | - 스위치가, MAC주소 테이블 기반으로 포트에 패킷을 스위칭 할 때, 정상적인 스위칭 기능을 마비시킴 - 고가의 스위치는 재밍 공격이 통하지 않는다. (MAC 테이블의 캐시와, 연산자가 쓰는 캐시가 독립적으로 나눠져있기 때문) |
SPAN 포트 태핑 공격 | - 스위치의 포트 미러링(port mirroring)기능을 이용한 공격 |
포트 미러링 | - 각 포트에 전송되는 데이터를, 미러링하는 포트에도 똑같이 보내는 방식 - 침입탐지 시스템, 네트워크 모니터링, 로그 시스템 설치할 때 많이 사용함 |
스푸핑
* 스푸핑 : 속임
ARP 스푸핑 공격 | - MAC 주소를 속이는 것 - local에서 통신하는 서버&클라이언트의 IP주소에 대한 데이터링크 계층의 MAC 주소를 공격자의 MAC 주소로 속여 클라이언트→서버 로 가는 패킷 or 서버→클라이언트로 가는 패킷이 공격자에게 향하게 하여 랜의 통신흐름을 왜곡함 |
IP 스푸핑 공격 | - trust(신뢰)관계 를 맺고있는 서버&클라이언트를 확인 후, 클라이언트에 DoS 공격을 해 연결을 끊은 뒤, 클라이언트의 IP주소를 확보해, 실제 클라이언트처럼 패스워드 없이 서버에 접근 |
세션 하이재킹
- '세션 가로채기'
- 세션 : 사용자와 컴퓨터 or 컴퓨터와 컴퓨터 간의 활성화된 상태
- 두 시스템간의 연결이 활성화된 상태(로그인 상태)를 가로챔
보안 프로토콜
SSL
- 방대한 인터넷 상거래의 안전을 위해 사용되는 프로토콜
- IEEE 표준 TLS
IPSec
- 네트워크 계층에 존재
- 응용프로그램으로부터 자유로움
- 매우복잡함
SSL | IPSec |
- 소켓계층(Session/Presentation/Application) - 암호화, 무결성, 인증을 포함 - 간단한 규격 |
- 네트워크 계층에 존재(OS의 일부) - 암호화, 무결성, 인증을 포함 - 과도하게 복잡(심각한 결함 포함) |
Https 와 Http 프로토콜의 차이?
- Https = Http + 데이터 암호화
- Https는 Http와 다르게, 433번 포트를 사용한다
- Https는 Http와 다르게, 네트워크 상에서 중간에 제3자가 정보를 볼수 없도록, 공개키 암호화를 지원한다.
- Https는 SSL과 같은 보안 프로토콜을 사용해 공개키,개인키 기반으로 데이터를 암호화해 전송한다.
즉, 원본의 데이터를 보는 것은 불가능하다.