├── AOP.md ├── API.md ├── APP.md ├── ARP.md ├── Ajax.md ├── Bean.md ├── CDN.md ├── CI&CD.md ├── CUDA.md ├── DDD.md ├── DLL.md ├── DNS.md ├── Dump.md ├── ERP.md ├── GDB.md ├── GET 방식과 POST 방식.md ├── Git_Branch.md ├── Gradle.md ├── HTTP 상태 코드.md ├── JDBC.md ├── JPA.md ├── JWT.md ├── Lodash.md ├── MSA.md ├── MVC 패턴.md ├── MVT 패턴.md ├── MVVM 패턴.md ├── Malvertising.md ├── Maven.md ├── NOSQL.md ├── OAuth.md ├── OOP.md ├── ORM.md ├── OSI 7계층.md ├── OWASP 10.md ├── OpenCV.md ├── README.md ├── Redirect.md ├── RxJS.md ├── SEO.md ├── SSH.md ├── SSL.md ├── SSR.md ├── Servlet.md ├── Session.md ├── TCP IP 프로토콜.md ├── TDD.md ├── Thymleaf.md ├── UML.md ├── URI와 URL.md ├── UUID.md ├── WBS.md ├── XML.md ├── chmod.md ├── 가상환경.md ├── 데브옵스.md ├── 도커.md ├── 로드 밸런싱.md ├── 리버싱.md ├── 리팩토링.md ├── 메모리 단편화.md ├── 미들웨어.md ├── 방화벽.md ├── 샌드박스.md ├── 스키마.md ├── 스피어 피싱.md ├── 애자일 방법론.md ├── 절대경로와 상대경로.md ├── 크로스 브라우징.md ├── 클라우드.md ├── 파이썬 모듈.md ├── 포트 포워딩.md ├── 프로토타입.md ├── 핀테크.md ├── 해시.md └── 호스팅.md /AOP.md: -------------------------------------------------------------------------------- 1 | - Aspect Oriented Programming의 약자로, 관점 지향 프로그래밍을 의미한다. 2 | - 메소드마다 반복되는 공통 관심사들을 모아서 모듈화 하는 기법이다. 3 | - 핵심적인 기능과 공통적인 기능을 분리한다는 특징이 있다. 4 | - AOP의 장점은 다음과 같다. 5 | - 개발자는 비즈니스 로직에만 집중할 수 있다. 6 | - 프로젝트마다 다른 관심사를 적용할 때, 코드 수정을 최소화 할 수 있다. 7 | - 원하는 관심사의 유지보수가 수월한 코드를 구성할 수 있다. 8 | -------------------------------------------------------------------------------- /API.md: -------------------------------------------------------------------------------- 1 | - API는 Application Programming Interface의 약자로, 프로그래밍을 위한 인터페이스를 말한다. 2 | - 즉, 프로그램 간의 커뮤니케이션을 담당하는 기능을 말하며, 응용 프로그램에서 사용할 수 있도록 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스이다. 3 | - 어떠한 사이트에서 특정 데이터를 공유할 경우, 어떠한 방식으로 정보를 요청해야 하는지, 그리고 어떠한 데이터를 제공받을 수 있을지에 대한 규격이 바로 API인 것이다. 4 | - 사용하는 방법, 용도에 따라 오픈 API와 비공개 API로 분류할 수 있다. 5 | - 오픈 API는 누구나 쉽게 접근하여 정보를 공유하기 위해 만들어진 규격이다. 6 | - 비공개 API는 권한이 있는 일부 사용자들에게만 정보를 제공하기 위해 만들어진 것이다. 7 | 8 | -------------------------------------------------------------------------------- /APP.md: -------------------------------------------------------------------------------- 1 | - APP은 네이티브 앱, 웹앱, 모바일 웹, 하이브리드 앱으로 나눌 수 있다. 2 | - 네이티브 앱은 흔히 말하는 어플리케이션을 의미한다. 3 | - 모바일 기기에 최적화된 언어로 개발된 앱으로, 안드로이드 SDK를 이용해 JAVA 언어로 만드는 앱과, IOS 기반 SDK를 이용해 Swift 언어로 만드는 대부분의 앱이 여기에 속한다. 4 | - 성능이 웹앱, 하이브리드 앱에 비해 가장 높다. 5 | - 네이티브 API를 호출하여 사용함으로 플랫폼과 밀착되어 있지만, 플랫폼에 한정적이다. 6 | - 해당 플랫폼에서 요구하는 언어에 제약적이다. 7 | - 모바일 웹은 모바일에서 PC용 사이트의 글자폰트와 이미지, 터치 아이콘, 플래시 등 데스트탑 브라우저에서 실행되는 기능을 모바일에 맞추어 표현한 사이트를 의미한다. 8 | - 즉, PC용 홈페이지를 모바일 스크린 크기에 맞추어 줄여 놓은 것이다. 9 | - 웹앱은 모바일 웹과 네이티브 앱을 결합한 형태로, 모바일 웹의 특징을 가지면서 네이티브 앱의 장점을 갖고 있다. 10 | - 모바일 웹보다는 조금 더 모바일에 최적화된 앱을 의미한다. 11 | - 모바일 웹처럼 웹 기술로 개발되고, 모바일 브라우저에서 실행되지만 풀 브라우저 방식이 아닌 단일 페이지 방식으로 화면을 진화해 속도가 빠르다는 특징이 있다. 12 | - 웹 사이트를 보는 것이기 때문에 따로 설치할 필요가 없다. 13 | - 모든 기기와 브라우저에서 접근할 수 있다. 14 | - 별도 설치 및 승인과정이 필요하지 않아 유지보수가 용이하다. 15 | - 단, 플랫폼 API를 사용할 수 없고, 오로지 브라우저 API만을 사용할 수 있다. 16 | - 친화적인 터치 앱을 개발하기 번거롭다. 17 | - 브라우저를 열고 검색하여 접속해야하기 때문에 네이티브, 하이브리드 앱보다 실행이 까다롭다. 18 | - 하이브리드 앱은 기본적으로 네이티브 앱 + 웹앱의 형태이다. 19 | - 일반적으로 네이티브 앱에 웹 view를 띄워 웹앱을 실행시키는 것이 보편적이다. 20 | - 양쪽 API를 모두 사용할 수 있다는 장점이 있다. 21 | - 웹 개발 기술을 사용하여 개발할 수 있다. 22 | - 한 번의 개발로 다수의 플랫폼에 대응할 수 있다. 23 | - 웹 view에서 앱을 실행하기 때문에 앱의 성능이 곧 브라우저의 성능이 된다. 24 | - UI 프레임워크 도구를 사용하지 않는다면, 개발자가 UI를 직접 제작해야 한다. 25 | -------------------------------------------------------------------------------- /ARP.md: -------------------------------------------------------------------------------- 1 | - Address Resolution Protocol의 약자로, OSI 7계층에서 네트워크 계층 주소와 데이터 링크 계층 주소 간의 변환을 담당하는 IP 프로토콜이다. 2 | - IP 주소에 해당하는 물리적인 MAC 주소를 가져온다. 3 | - ARP의 필요성은 다음과 같다. 4 | - 네트워크의 동작 방식이 계층별로 나누어져 있기 때문에, 네트워크 계층에서는 IP 프로토콜을 통해 IP 주소를 매개로 하여 정보가 전송된다. 5 | - 이 때, 네트워크 계층에서 데이터 링크 계층으로의 정보 전달을 위해 MAC 주소가 필요하다. 6 | - ARP의 동작 과정은 다음과 같다. 7 | - 송신자는 MAC 주소를 얻기 위해 ARP 요청 패킷을 전송한다. 8 | - 라우터와 호스트는 송신자가 전송한 ARP를 요청하고, 이에 해당되는 수신자가 IP 주소와 MAC 주소를 응답 패킷에 기록하여 전송한다. 9 | - 송신자는 응답 메시지를 받고 MAC 주소를 알 수 있다. 10 | -------------------------------------------------------------------------------- /Ajax.md: -------------------------------------------------------------------------------- 1 | - Asynchronous JavaScript and XML의 약자로, 자바스크립트를 이용해서 비동기식으로 XML을 이용하여 서버와 통신하는 방식이다. 2 | - 최근에는 XML보다 JSON을 더 많이 사용한다. 3 | - 비동기식이란 여러가지 일이 동시적으로 발생한다는 뜻으로, 서버와 통신하는 동안 다른 작업을 할 수 있다는 의미이다. 4 | - Ajax의 동작방식은 다음과 같다. 5 | - 요청 : 브라우저는 서버에 정보를 요청한다. (브라우저는 Ajax요청을 담당하는 XMLHttpRequest 라는 객체를 구현하고 있다.) 6 | - 서버의 동작 : 서버는 응답으로 데이터를 전달한다. (XML, JSON) 7 | - 응답 : 브라우저는 콘텐츠를 처리하여 페이지에 추가한다. 8 | - Ajax의 장점 9 | - 페이지 이동없이 고속으로 화면을 전환할 수 있다. 10 | - 서버처리를 기다리지 않고 비동기 요청이 가능하다. 11 | - 수신하는 데이터 양을 줄일 수 있고, 클라이언트에게 처리를 위임할 수 있다. 12 | - Ajax의 단점 13 | - Ajax를 쓸 수 없는 브라우저에 대한 문제가 있다. 14 | - HTTP 클라이언트의 기능이 한정되어 있다. 15 | - 페이지 이동이 없는 통신으로 인한 보안상의 문제가 존재한다. 16 | - 지원하는 Charset이 한정되어 있다. 17 | - 스크립트로 작성되므로, 디버깅이 용이하지 않다. 18 | - 요청을 남발하면 역으로 서버에 과부하가 생길 수 있다. 19 | - 다른 도메인과는 통신이 불가능하다. 20 | 21 | -------------------------------------------------------------------------------- /Bean.md: -------------------------------------------------------------------------------- 1 | - Spring이 생성 및 제어를 담당하는 오브젝트를 말한다. 2 | - Bean의 주요 속성은 다음과 같다. 3 | - 클래스는 정규화된 자바 클래스의 이름을 말한다. 4 | - id는 Bean의 고유 식별자를 말한다. 5 | - scope는 객체의 범위를 말한다. 6 | - Bean Factory는 Spring이 IoC를 담당하는 핵심 컨테이너이다. 7 | - Bean을 등록, 생성, 조회, 반환하는 기능을 담당한다. 8 | - 일반적으로는 이를 확장한 Application Context를 이용한다. 9 | - Application Context는 Spring이 제공하는 애플리케이션 기능을 모두 포함한다. 10 | -------------------------------------------------------------------------------- /CDN.md: -------------------------------------------------------------------------------- 1 | # CDN 2 | 3 | - CDN은 Content Delivery Network, 즉 콘텐츠 전송 네트워크이다. 4 | - 사진, 영상 등의 콘텐츠를 효율적으로 전달하기 위해 여러 개의 노드로 이루어진 네트워크에 데이터를 저장하여 제공하는 시스템이다. 5 | - 여기서 "노드"는 서버(Server), 즉 컴퓨터를 가리키며, 세계 곳곳에 존재하는 다양한 서버에 우리의 파일을 미리 올려놓는 방식을 의미한다. 6 | - 이 때 올리게 되는 파일은 일반적으로 "정적 콘텐츠"를 말한다. 7 | - 흔히 우리가 웹 사이트를 개발하게 되면, 로그인 이후에 메일함 페이지가 서로 다르게 보이는 것과 같이 회원마다 다르게 보이는 서비스는 8 | "동적 콘텐츠"라고 부른다. 9 | - 반면, 웹 사이트 디자인, 로고 사진, 동영상 등 어떤 회원에게든지 동일한 내용으로 보이는 파일을 "정적 콘텐츠"라고 말한다. 10 | - 정적 콘텐츠는, 어떤 사용자든 간에 모두 동일한 내용으로 전달 받기 때문에 최대한 사용자에게 가까운 위치에서 빠르게 전달될 수록 좋다. 11 | - 국내에 이미 다양한 CDN 서버가 산재되어 있다. 12 | - 그래서 우리가 웹 사이트를 만들고, 웹 사이트의 로고 사진 등을 CDN 서버에 올려 놓게 되면, 사용자는 현재 자신의 위치에서 가장 가까운 13 | CDN 서버를 통해 해당 로고 사진을 받을 수 있게 된다. 14 | - 최근에 개발을 할 때 가장 많이 사용되는 CDN 서비스로는 AWS의 Cloud Front 서비스가 있다. 15 | - 그래서 최근 많이 사용하는 방식으로, 실제로는 웹 사이트를 개발한 이후에, 서버 프로그램은 AWS EC2에 올리고, 디자인 파일과 같은 정적 16 | 콘텐츠는 별도로 압축하여 소스코드의 길이를 줄인다. 그리고 그 정적인 소스코드를 AWS Cloud Front에 올리는 것이다. 17 | - 대표적인 CDN 서비스에는 아카마이 회사의 제품이 있다. 구체적인 가격 정책이나 활용 방법은, 자신이 실제로 배포하고자 하는 서비스의 18 | 환경을 확인하고, 다양한 클라우드 서비스를 방문해 보면서 적용하는 것이 좋다. 19 | 20 | 21 | -------------------------------------------------------------------------------- /CI&CD.md: -------------------------------------------------------------------------------- 1 | - 애플리케이션 개발 단계를 자동화하여 보다 짧은 주기로 배포하는 전략 또는 방법이다. 2 | - 코드통합, 테스트, 릴리즈, 배포 등의 애플리케이션 라이프사이클 전체 과정을 자동화하고 이 과정을 모니터링 가능토록 하는 것이다. 3 | - 연속된 과정을 "CI/CD 파이프라인" 이라고도 한다. 4 | - 개발자가 아닌 사람도 쉽게 빌드, 배포를 가능하도록 하는 것으로, 개발자가 개발에만 집중하도록 하는 것이 목적이다. 5 | - CI와 CD는 세부적으로 다음과 같이 나눠지며, 개발/배포 단계에 적용되는 전략이 달라진다. 6 | - CI(Continuous Integration) : 빌드, 테스트 7 | - 개발자를 위한 자동화 프로세스. 8 | - 개발자간의 코드 충돌을 방지하기 위한 목적. 9 | - 정기적인 빌드 및 테스트(유닛테스트 및 통합테스트)를 거쳐 공유 레포지터리에 병합되는 과정. 10 | - CD(Continuous Delivery) : 버그테스트, 릴리즈, 배포 11 | - 애플리케이션에 적용한 변경사항이 버그 테스트를 거쳐 레포지터리에 자동으로 업로드 되는 것. 12 | - 운영팀은 언제든 실시간으로 이 레포지터리에서 실시간으로 프로덕션 환경으로 배포 가능하다. 13 | - 애플리케이션을 프로덕션 환경으로 배포하는 작업을 자동화 하는 것. 14 | - 서버가 여러 대 일 경우 더욱 중요하다. 15 | - Continuous Delivery로 통칭하여 언급하기도 한다. 16 | - CI/CD 지원 툴 : Hudson / Jenkins / Bamboo(상용) / 그 외 다양한 툴 존재 17 | - CI/CD의 핵심 목적은 한 번에 많이 수정하지 말고, 조금 수정하여 여러 번 배포하는 것이다. 18 | -------------------------------------------------------------------------------- /CUDA.md: -------------------------------------------------------------------------------- 1 | - CUDA는 Compute Unified Device Architecture의 약자이다. 2 | - 그래픽 처리 장치(GPU)에서 수행하는 병렬 처리 알고리즘을 C 프로그래밍 언어를 비롯한 산업 표준 언어를 사용하여 작성할 수 있도록 하는 엔비디아의 GPGPU 기술이다. 3 | - CUDA를 이용하면 CPU에서 순차적으로 처리되는 많은 양의 데이터를 GPU의 병렬처리 작업을 함으로써 구글의 슈퍼컴퓨터에서나 가능했던 작업이 일반 데스크탑에서 가능하게 된다. 4 | - CUDA의 데이터 흐름은 다음과 같다. 5 | - 그래픽 카드 메모리 공간을 할당한다. 6 | - PC의 입력 데이터를 그래픽 카드의 메모리로 복사한다. 7 | - 강력한 GPU 성능을 이용하여 병렬 처리한다. 8 | - 처리된 결과를 그래픽 카드의 메모리에서 PC의 메모리로 복사한다. 9 | -------------------------------------------------------------------------------- /DDD.md: -------------------------------------------------------------------------------- 1 | - Domain-Driven Design의 약자로, 도메인을 중심으로 설계하는 방법이다. 2 | - 도메인들이 서로 상호 작용하는 방식으로 설계하는 것이 도메인 주도 설계 방법이다. 3 | - 도메인 주도 설계 방법에서 도메인은 각각 분리되어 있고, MSA(MicroService Architecture)를 적용하여 설계를 용이하게 할 수 있다. 4 | - MSA는 모든 시스템의 구성요소가 한 프로젝트에 통합된 한계점을 바탕으로 등장한 방법이다. 5 | - 이를 통해 단일 프로그램을 컴포넌트별로 나누어 작은 서비스의 조합으로 구축할 수 있다. 6 | -------------------------------------------------------------------------------- /DLL.md: -------------------------------------------------------------------------------- 1 | - Dynamic Link Library의 약자로, 일반적으로는 확장자가 DLL인 파일을 의미한다. 2 | - 다른 프로그램에서 이용하는 함수들을 모아둔 것이다. 3 | - 동적 링크 방식을 사용하여, 프로그램 실행 시 프로그램의 메모리 공간으로 DLL을 읽어와 호출될 주소 등을 적절하게 바꾼다. 4 | - DLL 함수는 프로그램 내부 함수처럼 호출이 가능하다. 5 | - DLL의 장점은 다음과 같다. 6 | - 동적 링크 방식을 사용하기 때문에, 다른 프로그램에 라이브러리를 제공할 수 있다. 7 | - 여러 프로그램에서 동시에 사용이 가능하다. 8 | -------------------------------------------------------------------------------- /DNS.md: -------------------------------------------------------------------------------- 1 | - Domain Name System의 약자로, 도메인을 숫자로 변환하는 시스템이다. 2 | - DNS는 도메인을 IP 주소로 변환하여 브라우저로 전달한다. 3 | - 이를 통해 사용자들은 도메인을 입력하여 특정 IP에 접속한다. 4 | - DNS의 동작 원리는 다음과 같다. 5 | - 사용자가 브라우저에 도메인을 입력한다. 6 | - 로컬 DNS에 도메인에 대한 IP 주소를 질의하여 로컬 DNS에 해당 내용이 없으면, 다른 DNS 서버 정보를 받아 루트 DNS 서버에 도메인을 질의한다. 7 | - 루트 서버로부터 도메인을 관리하는 TLD(Top Level Domain) 서버 정보를 전달받는다. 8 | - TLD에 도메인을 질의하고, TLD에서는 도메인을 관리하는 DNS 정보를 전달한다. 9 | - 도메인을 관리하는 DNS 서버에 도메인의 호스트네임에 대한 IP 주소를 질의한다. 10 | - 로컬 DNS 서버에게 도메인에 대한 IP 주소를 응답한다. 11 | - 로컬 DNS는 도메인에 대한 IP 주소를 캐싱하고, IP 주소 정보를 전달한다. 12 | -------------------------------------------------------------------------------- /Dump.md: -------------------------------------------------------------------------------- 1 | - 어떤 특정 시점에서의 레지스터, 콜스택, 메모리, 프로세스, 스레드 정보 등이 저장되어 있는 파일을 뜻하며, 크게 유저 덤프와 커널 덤프로 구분된다. 2 | - 유저 덤프는 응용 프로그램을 대상으로 하여 생성한 덤프를 의미하며, 이는 다시 미니 덤프와 전체 덤프로 구분된다. 3 | - 미니 덤프는 64KB의 크기를 가지며 덤프 생성 당시의 레지스터, 콜스택, 프로세스 정보, 레드 정보와 프로세스가 접근했던 메모리의 일부 정보만을 저장한다. 4 | - 응용 프로그램이 오류가 발생한 경우 콜스택을 확인하는 것만으로도 대부분의 오류를 해결 할 수 있으므로 미니 덤프도 매우 훌륭한 단서가 될 수 있다. 5 | - 전체 덤프는 레지스터, 콜 스택, 프로세스 정보, 스레드 정보와 프로세스가 사용하고 있던 메모리 전체 정보를 저장한다. 6 | - 데드락과 같은 문제가 발생하여 메모리의 내용을 전반적으로 살펴보아야 할 경우 전체 덤프가 반드시 필요하다. 7 | - 커널 덤프는 운영체제, 드라이버를 대상으로 하여 생성한 덤프를 의미하며, 이는 다시 미니 덤프, 커널 덤프, 전체 덤프로 구분된다. 8 | - 미니 덤프는 64KB의 크기를 가지며 덤프 생성 당시의 레지스터, 콜스택, 프로세스 정보, 9 | 스레드 정보와 운영체제, 드라이버가 접근했던 메모리의 일부 정보만을 저장한다. 10 | - 커널 덤프는 레지스터, 콜 스택, 프로세스 정보, 스레드 정보와 운영체제와 모든 드라이버가 11 | 사용하고 있던 메모리 전체 정보를 저장한다. 12 | - 운영체제와 모든 드라이버는 하나의 메모리 공간내에 공존하고 있다는 사실을 염두에 두면 쉽게 납득할 수 있는 부분이다. 13 | - 전체 덤프는 레지스터, 콜 스택, 프로세스 정보, 스레드 정보와 메모리에 있던 내용을 모두 저장한다. 14 | - 즉, 모든 응용 프로그램의 유저-전체 덤프와 커널-커널 덤프가 함께 저장되는 것이다. 15 | -------------------------------------------------------------------------------- /ERP.md: -------------------------------------------------------------------------------- 1 | - ERP는 "Enterprise Resource Planning"의 약자로, 전사적 자원 관리라고 불린다. 2 | - 기업 활동을 위해 쓰이고 있는 기업 내의 모든 인적, 물적 자원을 효율적으로 관리하여, 궁극적으로 기업의 경쟁력을 강화시키는 통합정보시스템이라고 할 수 있다. 3 | - 기업은 경영 활동의 수행을 위해 여러 시스템, 즉 생산, 판매, 인사, 회계, 자금, 원가, 고정 자산 등의 운영 시스템을 갖고 있는데, ERP는 이러한 모든 부문에 걸쳐 있는 경영 자원을 통합적으로 재구축함으로써 생산성을 극대화하려는 대표적인 기업 리엔지니어링 기법이다. 4 | - 과거의 경영 지원을 위한 각 Sub System들은 해당 분야의 업무를 처리하고 정보를 가공하여 의사결정을 지원하기도 하지만, 별개의 System으로 운영되어 정보가 타 부문에 동시에 연결되지 않아 불편과 낭비를 초래하게 된다. 5 | - 이러한 문제점을 해결하기 위해 ERP는 어느 한 부문에서 Data를 입력하면 회사의 전 부문에 동시에, 필요에 따라서 정보로 활용할 수 있게 하는 것을 목적으로 한다. 6 | - ERP를 실현하기 위해서 공급되고 있는 소프트웨어를 ERP Package라고 하는데, 이 Package는 데이터를 어느 한 시스템에서 입력하면 전체적으로 자동 연결되어, 별도로 인터페이스의 처리를 할 필요가 없는 통합적인 운영이 가능한 시스템이다. 7 | 8 | -------------------------------------------------------------------------------- /GDB.md: -------------------------------------------------------------------------------- 1 | - GNU Debugger의 약자로, 프로그램이 실행되는 동안 프로그램 내부에서 진행되고 있는 상황들을 모니터링할 수 있는 툴이다. 2 | - GDB는 다음과 같은 일을 한다. 3 | - 프로그램을 시작할 때, 프로그램의 실행에 영향을 줄 수 있는 것을 지정할 수 있다. 4 | - 프로그램을 지정된 조건에서 멈추도록 할 수 있다. 5 | - 프로그램이 멈추었을 때 어떤 일이 일어났는지를 시험할 수 있다. 6 | - 프로그램 내의 어떤 것을 바꾸어서 버그를 고칠 수 있도록 테스트할 수 있다. 7 | - C나 C++로 쓰여진 프로그램을 디버깅하기 위해 사용할 수 있다. 8 | -------------------------------------------------------------------------------- /GET 방식과 POST 방식.md: -------------------------------------------------------------------------------- 1 | - 클라이언트가 서버로 요청을 했을때, 보내는 데이터를 HTTP 패킷이라 표현한다. 2 | - HTTP 프로토콜을 쓰기 때문에 앞에 HTTP가 붙고, 인터넷을 통해 보내는 데이터를 패킷이라 표현하므로 HTTP패킷이라 부른다. 3 | - HTTP패킷의 구조는 크게 헤더와 바디로 나뉘어진다. 4 | - 이러한 웹 개념 아래, 우리는 GET 방식과 POST 방식을 통해서 요청을 할 수 있다. 5 | - 즉, 두 방식 모두 서버에 요청을 하는 메서드이다. 6 | - GET 방식으로 데이터를 보내는 경우 - 예시 : www.example.com?id=jsh15932&pass=1234 7 | - URL 뒤에 "?" 마크를 통해 URL의 끝을 알리면서, 데이터 표현의 시작점을 알린다. 8 | - 데이터는 key 와 value 쌍으로 입력해야 한다. 위의 예시에서의 key는 id와 pass이고, value는 jsh15932와 1234가 된다. 9 | - 중간의 &마크는 구분자이다. 2개 이상의 key - value 쌍 데이터를 보낼 때에는 &마크로 구분해준다. 10 | - URL에 붙이므로, HTTP패킷의 해더에 포함되어 서버에 요청한다. 11 | - 따라서, GET 방식에서 BODY에 특별한 내용을 넣을 것이 없으므로, BODY가 빈 상태로 보내진다. 12 | - 그러므로, 헤더의 내용 중에서 BODY 데이터를 설명하는 Content-Type이라는 헤더필드는 들어가지 않는다. 13 | - URL형태로 표현되기 때문에 다른 사람으로 하여금 특정 페이지에 접속하게 할 수 있다. 14 | - 또한, 간단한 데이터를 넣도록 설계되었기 때문에 데이터를 보내는 양에 한계가 있다. 15 | - POST 방식은 GET 방식과 달리, 데이터 전송을 기반으로 한 요청 메서드이다. 16 | - GET 방식이 URL에 데이터를 붙여서 보내는 반면, POST 방식은 URL에 붙여서 보내지 않고 BODY에 데이터를 입력하여 보낸다. 17 | - 따라서, 헤더필드 중 BODY의 데이터를 설명하는 Content-Type이라는 헤더 필드가 들어가고 어떠한 데이터 타입인지 명시한다. 18 | - 따라서 POST 방식으로 데이터를 보낼 때에는 컨텐츠 타입을 꼭 명시해야 한다. 19 | - GET 방식과 POST 방식 모두 클라이언트 측에서 데이터를 볼 수 있다. 단, GET 방식은 URL에 데이터가 표시되어 있는 것 뿐이다. 20 | - 따라서 두 방식 모두 보안을 위해 암호화 과정이 필수적이다. 21 | - GET 방식이 POST 방식보다 빠르다. 이유는 GET 방식의 요청에서 이루어지는 캐싱 때문이다. 22 | - 캐싱은 한번 접근 후에, 또다시 요청할 경우 빠르게 접근하기 위해 데이터를 저장시켜 놓는 것을 말한다. 23 | 24 | 25 | -------------------------------------------------------------------------------- /Git_Branch.md: -------------------------------------------------------------------------------- 1 | - Gitflow Workflow에서는 항상 유지되는 메인 브랜치들(master, develop)과 일정 기간 동안만 유지되는 보조 브랜치들(feature, release, hotfix)을 포함하여 총 5가지의 브랜치를 사용한다. 2 | - Master Branch는 제품으로 출시될 수 있는 브랜치다. 3 | - 배포(Release) 이력을 관리하기 위해 사용. 즉, 배포 가능한 상태만을 관리한다. 4 | - Develop Branch는 다음 출시 버전을 개발하는 브랜치다. 5 | - 기능 개발을 위한 브랜치들을 병합하기 위해 사용. 즉, 모든 기능이 추가되고 버그가 수정되어 배포 가능한 안정적인 상태라면 develop 브랜치를 ‘master’ 브랜치에 병합(merge)한다. 6 | - 평소에는 이 브랜치를 기반으로 개발을 진행한다. 7 | - Feature branch는 기능을 개발하는 브랜치다. 8 | - feature 브랜치는 새로운 기능 개발 및 버그 수정이 필요할 때마다 ‘develop’ 브랜치로부터 분기한다. 9 | - feature 브랜치에서의 작업은 기본적으로 공유할 필요가 없기 때문에, 자신의 로컬 저장소에서 관리한다. 10 | - 개발이 완료되면 ‘develop’ 브랜치로 병합(merge)하여 다른 사람들과 공유한다. 11 | - Release Branch는 이번 출시 버전을 준비하는 브랜치다. 12 | - 배포를 위한 전용 브랜치를 사용함으로써 한 팀이 해당 배포를 준비하는 동안 다른 팀은 다음 배포를 위한 기능 개발을 계속할 수 있다. 13 | - 즉, 분리된 개발 단계를 정의하기에 아주 좋다. 14 | - Hotfix Branch는 출시 버전에서 발생한 버그를 수정 하는 브랜치다. 15 | - 배포한 버전에 긴급하게 수정을 해야 할 필요가 있을 경우, ‘master’ 브랜치에서 분기하는 브랜치다. 16 | - ‘develop’ 브랜치에서 문제가 되는 부분을 수정하여 배포 가능한 버전을 만들기에는 시간도 많이 소요되고 안정성을 보장하기도 어렵다. 17 | - 그러므로 바로 배포가 가능한 ‘master’ 브랜치에서 직접 브랜치를 만들어 필요한 부분만을 수정한 후 다시 ‘master’브랜치에 병합하여 이를 배포해야 하는 것이다. 18 | - 배포한 버전에 긴급하게 수정을 해야 할 필요가 있을 경우, ‘master’ 브랜치에서 hotfix 브랜치를 분기한다. (‘hotfix’ 브랜치만 master에서 바로 딸 수 있다.) 19 | - 문제가 되는 부분만을 빠르게 수정한 후, 다시 ‘master’ 브랜치에 병합(merge)하여 이를 안정적으로 다시 배포한다. 20 | - 이후, 새로운 버전 이름으로 태그를 매긴다. 21 | - hotfix 브랜치에서의 변경 사항은 ‘develop’ 브랜치에도 병합(merge)한다. 22 | - 버그 수정만을 위한 ‘hotfix’ 브랜치를 따로 만들었기 때문에, 다음 배포를 위해 개발하던 작업 내용에 전혀 영향을 주지 않는다. 23 | - ‘hotfix’ 브랜치는 master 브랜치를 부모로 하는 임시 브랜치라고 생각하면 된다. 24 | -------------------------------------------------------------------------------- /Gradle.md: -------------------------------------------------------------------------------- 1 | - 기본적으로 빌드 배포 도구이며, 안로이드 앱을 만들 때 필요한 공식 빌드시스템이다. 2 | - Java, C/C++, Python 등을 지원한다. 3 | - 빌드 툴인 Ant Builder와 그루비 스크립트를 기반으로 구축되어 기존 Ant의 역할과 배포 스크립트의 기능을 모두 사용할 수 있다. 4 | - 기존 메이븐의 경우 XML로 라이브러리를 정의하고 활용하도록 되어있었으나, Gradle의 경우에는 별도의 빌드스크립트를 통하여 사용할 어플리케이션 버전, 라이브러리 등의 항목을 설정할 수 있다. 5 | - 장점으로는 스크립트 언어로 구성되어 있기 때문에, XML과 달리 변수선언, if, else, for 등의 로직을 구현할 수 있어 간결하게 구성하는 것이 가능하다. 6 | - Gradle의 특징은 다음과 같다. 7 | - 라이브러리 관리 : 메이븐 리파지토리를 동일하게 사용할 수 있어, 설정된 서버를 통하여 라이브러리를 다운로드 받아 모두 동일한 의존성을 가진 환경을 수정할 수 있다. 8 | - 자신이 추가한 라이브러리도 리파지토리 서버에 올릴 수 있다. 9 | - 프로젝트 관리 : 모든 프로젝트가 일관된 디렉토리 구조를 가지고 빌드 프로세스를 유지하도록 도와준다. 10 | - 단위 테스트 시 의존성 관리 : junit 등을 사용하기 위하여 명시한다. 11 | -------------------------------------------------------------------------------- /HTTP 상태 코드.md: -------------------------------------------------------------------------------- 1 | - HTTP 통신 시, 클라이언트에서 서버에 어떠한 요청을 하면 서버는 응답을 보낸다. 2 | - 적절한 처리가 이루어져서 성공 응답과 함께 결과값을 보내주기도 하고, 그렇지 않은 경우에는 실패 응답과 함께 에러 정보를 보내주기도 한다. 3 | - 각 응답 코드는 100번대 단위로 구분되어 있다. 4 | - 이처럼 3자리 숫자의 첫번째 값만 보고도 어떤 종류의 응답인지 알 수 있는데, 이 첫번째 값을 Response Class라고 한다. 5 | - 각 Response Code에 따라서 어떤 응답을 나타내는지는 다음과 같다. 6 | - 1 : Informational / 요청을 받고, 처리 중에 있음. 7 | - 2 : Success / 요청을 정상적으로 처리함. 8 | - 3 : Redirection / 리퀘스트 완료를 위해 추가 동작이 필요함. 9 | - 4 : Client Error / 클라이언트 요청을 처리할 수 없어 오류 발생. 10 | - 5 : Server Error / 서버에서 처리를 하지 못하여 오류 발생. 11 | -------------------------------------------------------------------------------- /JDBC.md: -------------------------------------------------------------------------------- 1 | - 자바 기반 애플리케이션의 데이터를 DB에 저장하거나, DB에 저장된 데이터를 사용할 수 있도록 하는 자바 기반 API이다. 2 | - 자바 기반 애플리케이션에서 DB에 접근하기 위해 JDBC API를 사용하여 데이터베이스에 연동할 수 있다. 3 | - DB에서 쿼리를 통해 데이터를 처리하고 업데이트하는 방법을 제공한다. 4 | - 3가지 기능을 표준 인터페이스로 정의하여 제공하며, 이는 다음과 같다. 5 | - 연결 : java.sql.Connection 6 | - SQL 내용 : java.sql.Statement 7 | - SQL 요청 응답 : java.sql.ResultSet 8 | - JDBC의 동작 과정은 다음과 같다. 9 | - 자바 애플리케이션 -> JDBC API -> JDBC Driver -> DB 10 | - JDBC API의 동작 과정은 다음과 같다. 11 | - JDBC Driver Loading -> Connection 객체 생성 -> Statement 객체 생성 -> 쿼리 실행 -> ResultSet 객체로부터 데이터 조회 -> ResultSet 객체 Close -> Statement 객체 Close -> Connection 객체 Close 12 | -------------------------------------------------------------------------------- /JPA.md: -------------------------------------------------------------------------------- 1 | - Java Persistence Api의 약자로, 관계형 데이터베이스를 매핑하기 위한 자바 표준 API 중 하나이다. 2 | - ORM을 사용하기 위한 인터페이스를 모아둔 것이며, JPA를 구현한 ORM(객체 관계 매핑) 프레임워크를 사용한다. 3 | - SQL 중심 개발에서 벗어나 객체 중심 개발을 가능하게 한다. 4 | - JPA의 특징은 다음과 같다. 5 | - SQL을 사용하지 않고 CRUD 작업이 가능하다. 6 | - 생산성과 유지보수성이 향상된다. 7 | - 조회 결과를 객체로 매핑하는 작업을 자동으로 처리한다. 8 | -------------------------------------------------------------------------------- /JWT.md: -------------------------------------------------------------------------------- 1 | - JSON Web Token의 줄임말로, 필요한 모든 정보와 검증을 위한 Signature를 포함하는 JSON 객체를 통해 만들어내는 Token의 일종이다. 2 | - 웹 표준으로 지정되면서 계정에 대한 인증 및 API 사용에 있어서 권한 확인을 위한 Security Token으로 사용된다. 3 | - 토큰은 지정한 객체(주로 인증 정보가 됨)를 JSON화하여 만든 데이터를 암호화하고, 특정 키를 이용해 서명하게 된다. 4 | - 따라서 발급된 토큰은 해당 서버, 서비스가 인증한 token이라는 의미가 되고, 이는 권한 인증에 있어 Key로 사용할 수 있게 된다. 5 | - JWT를 사용한 일반적인 인증 절차는 다음과 같다. 6 | - 허용된 API로 토큰을 발급하여 주로 회원가입, 로그인 API만을 토큰없이 가능하도록 설계하고, 해당 API들에서 토큰을 발급해준다. 7 | - JWT 토큰이 발급된다. 8 | - 클라이언트는 모든 요청에 토큰을 헤더에 포함시켜서 전달한다. 9 | - 서버는 유효한 JWT 토큰의 경우 인증하고 API의 사용을 승인시키지만, 아닐 경우 401 오류를 표시한다. 10 | - JWT의 장점은 다음과 같다. 11 | - 간편한 사용 및 인증 절차 12 | - 수평적 확장 13 | - REST API에 최적화된 키 인증 방식 14 | - 만료 일자 정보의 포함 15 | - 관리와 서버 부하에 있어 부담이 적음 16 | - JWT의 단점은 다음과 같다. 17 | - 인증 정보가 커질수록 토큰의 크기가 커진다. 18 | - 모든 요청에 토큰 정보가 포함되므로, 토큰의 크기가 메시지의 크기보다 커질 경우 비효율적인 통신구조가 된다. 19 | -------------------------------------------------------------------------------- /Lodash.md: -------------------------------------------------------------------------------- 1 | - 자바스크립트를 확장하여 사용하는 Nods JS 패키지의 한 종류이다. 2 | - 편리하게 코드를 작성할 수 있도록 설계되어 있다. 3 | - 사용자가 웹 표준에 효율적으로 맞출 수 있도록 한다. 4 | - json으로 이루어진 배열을 다루거나, 객체 구조가 복잡할 경우 사용이 용이하다. 5 | - 브라우저 변화에 안정적이라는 특징이 있다. 6 | -------------------------------------------------------------------------------- /MSA.md: -------------------------------------------------------------------------------- 1 | - Micro Service Architecture의 약자로, 독립적으로 배포가능한 서비스들로 이루어진 아키텍처를 말한다. 2 | - MSA의 특징은 다음과 같다. 3 | - 서비스 단위로 분류하여, 서비스들을 독립적으로 배포할 수 있다. 4 | - 서비스 의존성을 최소화하여 결합도가 낮다. 5 | - 각 서비스들을 분리하여 관리하기 때문에, 유지보수가 용이하고 독립적인 테스트가 가능하다. 6 | - 서비스의 단위를 사업 단위로 판단 가능하다. 7 | - MSA의 장점은 다음과 같다. 8 | - 전체 서비스가 중단되지 않은 상태에서 각각의 서비스를 자유롭게 배포하는 것이 가능하다. 9 | - 특정 서비스의 부하로 인해 스케일링이 필요할 경우, 해당 서비스를 별도로 확장하는 것이 가능하다. 10 | - 각 서비스별로 다양한 언어 및 환경에서 구성하는 것이 가능하다. 11 | - MSA의 단점은 다음과 같다. 12 | - 서비스가 분리되기 때문에 자원 소모가 큰 편이다. 13 | - 서비스가 물리적으로 분리되어 있기 때문에 트랜잭션의 복잡도가 증가한다. 14 | - 서비스가 분산되어 있기 때문에 통합 테스트를 진행하는 데 어려움이 있다. 15 | - 서비스가 물리적으로 분리되어 있기 때문에 데이터가 분산될 가능성이 높다. 16 | -------------------------------------------------------------------------------- /MVC 패턴.md: -------------------------------------------------------------------------------- 1 | - MVC 패턴은 디자인 패턴의 일종이다. 2 | - 디자인 패턴이란, 프로그램 등을 개발하는 도중에 발생했던 문제점들을 정리하고, 상황에 따라 간편하게 적용해서 쓸 수 있는 것을 모아 특정한 규약을 통해 쉽게 쓸 수 있는 형태로 만든 것이다. 3 | - MVC는 모델(Model), 뷰(View), 컨트롤러(Controller)의 약자이다. 4 | - 어떠한 애플리케이션, 프로젝트를 구성할 때, 그 구성요소를 세 가지 역할로 구분한 패턴을 말한다. 5 | - 대략적으로, 사용자가 컨트롤러를 조작하면 컨트롤러는 모델을 통해서 데이터를 가져온다. 6 | - 그 다음, 이러한 정보를 바탕으로 시각적인 표현을 담당하는 뷰를 제어하여 사용자에게 전달하게 된다. 7 | - 즉, 모델은 컨트롤러에, 컨트롤러는 뷰에, 뷰는 다시 사용자, 사용자는 다시 컨트롤러로 향해 간다. 8 | - 모델은 애플리케이션의 정보, 데이터를 나타낸다. 모델은 다음과 같은 세 가지 규칙을 가지고 있다. 9 | - 사용자가 편집하고자 하는 모든 데이터를 가지고 있어야 한다. 10 | - 뷰나 컨트롤러에 대해서는 어떠한 정보도 알고 있지 않다. 11 | - 변경이 발생하면, 변경에 관한 통지에 대한 처리방법을 구현해야 한다. 12 | - 뷰는 입력 텍스트, 체크박스 항목 등 사용자 인터페이스 요소를 나타낸다. 즉, 데이터 및 객체의 입력과 출력을 담당한다. 뷰는 다음과 같은 세 가지 규칙이 있다. 13 | - 모델이 가지고 있는 정보를 따로 저장해서는 안 된다. 14 | - 모델이나 컨트롤러와 같은 다른 구성요소들을 알고 있지 않다. 15 | - 변경이 발생하면, 변경에 관한 통지에 대한 처리방법을 구현해야 한다. 16 | - 컨트롤러는 데이터와 사용자 인터페이스 요소들을 연결하는 역할을 한다. 17 | - 즉, 사용자가 데이터를 보고 수정하는 것에 대한 이벤트들을 처리하는 부분이다. 컨트롤러는 다음과 같은 두 가지 규칙이 있다. 18 | - 모델이나 뷰에 대해 알고 있어야 한다. 19 | - 모델이나 뷰의 변경에 대해 모니터링해야 한다. 20 | - MVC 패턴이 적용된 어플리케이션은 사용자가 보는 페이지, 데이터에 대한 처리, 그리고 이 두 가지를 제어하는 컨트롤로 구성되어 효율적이다. 21 | - 또한, 유지보수성, 어플리케이션의 확장성, 그리고 유연성이 증가한다. 22 | - MVC 패턴을 사용하는 프레임워크에는 Google의 Angular JS, php의 Codeigniter, Python의 django, 그리고 facebook의 react 등이 있다. 23 | 24 | 25 | -------------------------------------------------------------------------------- /MVT 패턴.md: -------------------------------------------------------------------------------- 1 | - Model + View + Template 의 약자로, 디자인 패턴의 한 종류이다. 2 | - Django 개발에서 설계되는 디자인 패턴이다. 3 | - MVC 패턴과 같은 전통적인 디자인 아키텍처가 아니며, 대부분의 세부 정보를 접근할 수 없도록 한다. 4 | - Django 자체의 추상화 계층 아래에 숨겨져있는 MVC 패턴이기 때문에, 작업을 수행하고 각 작업에 대해 컨트롤러를 정의하지 않아 경제적이다. 5 | - HTTP 요청 시, 필요한 데이터와 함께 관련 템플릿을 가져오기 위해 뷰를 직접 호출한다. 6 | - 데이터는 템플릿에 담겨 사용자에게 반환된다. 7 | - MVC 패턴과 달리, DB에서 데이터를 가져와 URL에 매핑하는 코드를 작성할 필요가 없다. 8 | - 모든 활동은 프레임워크 자체에서 처리되고, 표시할 모델을 지정한 이후에 Django가 작업을 모두 처리한다. 9 | -------------------------------------------------------------------------------- /MVVM 패턴.md: -------------------------------------------------------------------------------- 1 | - MVVM 패턴(Model/View/ViewModel)은 UI를 가지는 응용프로그램을 위한 아키텍처 패턴이다. 2 | - MVC 패턴(Model/View/Controller)의 변형으로, 재사용성과 테스트 용이를 위해 뷰의 추상화를 만드는 것이 핵심이다. 3 | - 뷰의 추상화를 통해 응용프로그램 구조는 단순해지고, 이상적으로, 시각 디자인과 표현 논리를 독립적으로 구현할 수 있다. 4 | - 모델(Model)과 뷰(View)는 MVC 패턴과 동일하다. 5 | - 응용프로그램에서 뷰는 UI 플랫폼이 제공하는 컨트롤들을 조합해 사용자에게 시각적으로 접근하지만, 뷰모델은 이러한 뷰를 플랫폼 독립적인 공간에서 추상화한다. 6 | - 사용자는 뷰모델의 속성을 통해 정보를 입력하고 뷰모델의 명령을 실행시키며, 뷰모델은 자신의 속성을 갱신해 명령 실행 결과와 응용프로그램 상태 변화를 사용자에게 표현한다. 7 | - MVVM 패턴에서는 작업흐름 제어보다는 뷰와 뷰모델의 상태를 동기화해 줄 구성요소, 즉 데이터 바인딩(data binding)이 필요하다. 8 | - MVVM 패턴은 완성도 높은 데이터 바인딩 기반구조에 의존한다. 9 | - 데이터 바인딩으로 인해 뷰모델의 상태가 변경되면 뷰의 상태가 함께 변경되고, 그 역도 보장된다. 10 | - 하지만 MVVM 패턴은 데이터 바인딩에 의존하므로 데이터 바인딩이나 그 대체자가 없다면 구현될 수 없다. 11 | - MVVM 패턴을 통해 응용프로그램은 복잡한 컨트롤러 논리 없이 단순한 구조를 유지할 수 있다. 12 | -------------------------------------------------------------------------------- /Malvertising.md: -------------------------------------------------------------------------------- 1 | - Malvertising은 악성 프로그램을 뜻하는 멀웨어 혹은 '악의적인'이라는 뜻의 의미하는 Malicious와 광고 활동을 뜻하는 Advertising의 합성어이다. 2 | - 광고 서비스의 정상적인 네트워크를 이용하여 악성코드를 유포 및 감염시키는 방법을 말한다. 3 | - 멀버타이징으로 악성코드에 감염되는 경우는 크게 2가지이다. 4 | - 첫 번째는 웹 서핑 시, 웹 브라우저의 팝업으로 보여지는 광고 사이트에 노출되는 경우이다. 5 | - 두 번째는 사용자 시스템에 설치된 멀버타이징 애드웨어가 사용된 경우이다. 6 | - 후자의 경우, 사용자가 웹 서핑을 하지 않아도 설치된 애드웨어가 불규칙하게 웹 브라우저를 자동 실행한 후 광고를 받아 오는 특정 매개변수를 갖는 URL로 접속하여 광고를 보여준다. 7 | - V3 제품군에서는 ‘악성 사이트 접근 차단’ 기능을 통해 위장된 광고 페이지와 랜딩 페이지 등 멀버타이징 관련 사이트에 접속하는 것을 막아준다. 8 | - V3 Internet Security 9.0 사용자라면 ‘악성 사이트 접근 차단’ 창 발생 시 ‘확인’ 버튼을 눌러 더 이상 해당 웹 사이트 방문하지 않고 웹 브라우저가 종료되도록 조치하면 된다. 9 | -------------------------------------------------------------------------------- /Maven.md: -------------------------------------------------------------------------------- 1 | - 자바 기반 프로젝트에서 라이프사이클 관리를 목적으로 하는 빌드 도구이다. 2 | - 라이브러리 관리 기능과, 컴파일 & 빌드 동시 수행, 테스트 병행, 서버 측 자원을 관리할 수 있는 환경을 제공한다. 3 | - 필요한 라이브러리를 작동시키고, 라이브러리가 필요로 하는 다른 의존 라이브러리들을 자동으로 관리한다. 4 | - Maven의 활용 요소들은 다음과 같다. 5 | - Build 6 | - 소스 코드와 테스트 코드를 컴파일한다. 7 | - 기타 패키지를 생성하기 위한 바이너리를 생성한다. 8 | - Package 9 | - 배포가능한 jar, war, exe 등의 파일을 생성한다. 10 | - Test 11 | - Unit Test를 실행한다. 12 | - Report 13 | - 빌드, 패키지, 테스트 결과를 정리하여 빌드 수행 리포트를 생성한다. 14 | - Release 15 | - 빌드 이후 생성된 Artifact를 저장소에 저장한다. 16 | -------------------------------------------------------------------------------- /NOSQL.md: -------------------------------------------------------------------------------- 1 | - Not Only SQL의 약자로, 관계형 데이터베이스가 아닌 형태의 데이터 저장 기술을 의미한다. 2 | - 관계형 데이터베이스의 한계에 따라, 데이터 저장소의 새로운 형태로 등장하였다. 3 | - NOSQL의 특징은 다음과 같다. 4 | - 관계형 데이터베이스가 데이터의 관계를 외래키 등으로 정의하고, 이를 통해 관계형 연산을 진행하는 반면, NOSQL은 데이터간의 관계를 정의하지 않는다. 5 | - NOSQL에서 데이터 테이블은 단지 하나의 테이블에 불과하며, 각 테이블간의 관계를 정의하지 않고 테이블간 Join 연산이 불가능하다. 6 | - 복잡하고 용량이 큰 관계형 데이터베이스의 특징에 따라 한계가 존재하는 반면, 대용량 데이터를 저장할 수 있다. 7 | - 여러 개의 서버에 데이터를 저장 및 처리하는 구조를 갖고 있기 때문에, 특정 서버에 문제가 발생할 경우에도 데이터가 유실되거나 서비스가 중지되지 않는 특징이 있다. 8 | - 테이블의 스키마가 유동적이기 때문에, 데이터가 저장되는 칼럼은 상이한 이름과 데이터 타입을 가질 수 있다. 9 | -------------------------------------------------------------------------------- /OAuth.md: -------------------------------------------------------------------------------- 1 | - OAuth는 Open Authorization, Open Authentication을 뜻하는 것으로, 애플리케이션(페이스북,구글,트위터)의 유저의 비밀번호를 타 앱에 제공없이 인증, 인가를 할 수 있는 오픈 스탠다드 프로토콜이다. 2 | - OAuth 인증을 통해 애플리케이션 API를 유저 대신에 접근할 수 있는 권한을 얻을 수 있다. 3 | - OAuth가 사용되기 전에는 외부 사이트와 인증 기반의 데이터를 연동할 때 인증방식의 표준이 없었기 때문에, 기존의 기본인증인 아이디와 비밀번호를 사용하였다. 4 | - 이는 유저의 비밀번호가 노출될 가망성이 크기 때문에 보안상 취약한 구조였다. 5 | - 이를 보안하기 위해 OAuth의 인증은 API를 제공하는 서버에서 진행하고, 유저가 인증되었다는 Access Token을 발급한다. 6 | - 발급된 Access token으로 타 애플리케이션에서는 API를 안전하고 쉽게 사용할 수 있다. 7 | -------------------------------------------------------------------------------- /OOP.md: -------------------------------------------------------------------------------- 1 | - Object Oriented Programming의 약자로, 객체 지향 프로그래밍을 의미한다. 2 | - 컴퓨터 프로그래밍의 패러다임 중 하나인 절차 지향(C) 언어에서는 각 명령어의 실행 순서를 기반으로 동작한다. 3 | - 하지만 객체 지향 프로그래밍은 데이터와 이를 처리하는 루틴들이 하나의 독립된 객체로 동작한다. 4 | - 이를 통해 재사용성의 증가라는 이점이 생기며 큰 프로젝트에 많이 사용된다. 5 | - 객체 지향 프로그래밍의 특징은 다음과 같다 6 | - 추상화 : 대상의 특성 중 불필요한 부분을 무시하고 필요한 공통점만을 다룬다. 그래서 현실의 복잡성을 극복하고 목적에 집중할 수 있도록 할 수 있다. 7 | - 캡슐화 : 객체 스스로가 자신의 상태를 책임지게 하여, 해당 객체의 역할 수행에 집중할 수 있도록 자율성을 높일 수 있다. 8 | - 상속성 : 새로운 클래스는 상속을 통해 부모 클래스의 속성과 기능을 물려받는다. 범용적인 클래스를 작성한 뒤 상속을 활용하면, 여러 클래스에서 중복되는 속성과 기능을 반복적으로 구현하지 않아도 쉽게 적용할 수 있다. 9 | - 다형성 : 동일한 요청이 들어왔을 때 그것을 구현하는 방법에 차이를 두어 다른 결과를 만들어내는 것을 말한다. 10 | -------------------------------------------------------------------------------- /ORM.md: -------------------------------------------------------------------------------- 1 | - Object Relational Model의 약자로, DB와 객체 지향 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법을 말한다. 2 | - OOP의 추상화적인 성격과 RDB의 정형화적인 성격을 서로 연결하는 패러다임이다. 3 | - 데이터 매핑 구조를 객체지향 형태로 통일하여, SQL 구조의 DB를 OOP 구조의 형태로 매핑하려는 목적이 있다. 4 | - 데이터 단위로 객체를 구현하여 데이터 간의 관계를 형성한다. 5 | - ORM을 구현하는 대표적인 프레임워크에는 Hibernate, JPA 등이 있다. 6 | -------------------------------------------------------------------------------- /OSI 7계층.md: -------------------------------------------------------------------------------- 1 | - OSI 7계층은 컴퓨터 네트워크 프로토콜 디자인을 7개의 계층으로 구분한 것이다. 실제 인터넷에서 사용되는 TCP/IP는 OSI모델을 기반으로 구성되어 있다. 2 | - Physical Layer : 실제 장치들을 연결하기 위한 전기적, 물리적 세부사항을 정의하는 계층이다. 3 | - Data link Layer : 점대점(Point to Point)간 신뢰성 있는 전송(오류제어, 흐름제어)을 보장하기 위한 계층이다. 주소 값은 물리적으로 할당 받는다. (MAC주소) 4 | - Network Layer: 여러 개의 노드를 거칠 때 경로를 찾아주는 역할을 하는 계층이다. 이 과정에서 Transport Layer가 요구하는 서비스 품질을 제공한다. 5 | - Transport Layer : 양 끝단(End to End) 사용자들이 신뢰성 있는 데이터를 주고 받을 수 있도록 해준다(오류검출, 흐름제어, 중복검사). 상위 계층이 데이터 전달의 유효성이나 효율성을 생각할 필요가 없게 한다. 6 | - Session Layer : 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다. TCP/IP 세션을 생성 및 삭제하는 책임이 있다. 7 | - Presentation Layer : 코드간의 번역을 담당한다. 입력 또는 출력되는 데이터를 하나의 표현 형태로 변환하여 상위계층의 부담을 덜어준다. 8 | - Application Layer : 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다. 9 | 10 | -------------------------------------------------------------------------------- /OWASP 10.md: -------------------------------------------------------------------------------- 1 | - 웹에 관한 정보노출, 악성 파일 및 스크립트, 보안 취약점 등을 연구하는 오픈소스 웹 애플리케이션 보안 프로젝트인 OWASP에서 발표한 10대 웹 애플리케이션의 취약점이다. 2 | - 4년마다 한 번씩 8개의 컨설팅 회사와 3개의 제품 공급업체를 포함해 애플리케이션 보안전문 업체의 11개 대형 데이터셋을 기반으로 작성된다. 3 | - 2017 버전은 지난 2013년 이후 처음으로 두 개의 항목이 신설되었다. 첫 번째는 취약한 공격 방어 항목이며, 또 하나는 취약한 API 항목이다. 4 | - 인젝션 : SQL, OS, XXE, LDAP 인젝션 취약점은 신뢰할 수 없는 데이터에 대한 명령어나 쿼리문의 일부분이 인터프리터로 전송될 때 발생한다. 공격자의 악의적인 데이터는 예상하지 못하는 명령을 실행하거나, 적절한 권한 없이 데이터에 접근하도록 인터프리터를 속일 수 있다. 5 | - 인증 및 세션관리 취약점 : 인증 및 세션 관리와 관련된 애플리케이션 기능이 종종 잘못 구현되어 취약한 암호, 키 또는 세션 토큰을 제공해 다른 사용자의 권한을 (일시적 혹은 영구적으로) 공격자가 얻도록 익스플로잇한다. 6 | - 크로스 사이트 스크립팅(XSS) : XSS 취약점은 애플리케이션이 적절한 유효성 검사 또는 이스케이프 처리의 과정을 거치지 않고, 새 웹 페이지에 신뢰할 수 없는 데이터를 포함하거나, 자바스크립트를 생성할 수 있는 브라우저 API를 사용해 사용자가 제공한 데이터로 기존 웹 페이지를 업데이트한다. XSS를 사용하면 공격자가 희생자의 브라우저에서 사용자 세션을 도용하거나, 웹 사이트를 변조시키거나, 악성사이트로 리다이렉션 시킬 수 있다. 7 | - 취약한 접근제어 : 취약한 접근제어는 인증된 사용자가 수행할 수 있는 작업에 대한 제한이 제대로 적용되지 않는 것을 의미한다. 공격자는 이러한 결함을 악용해 다른 사용자의 계정에 액세스하거나, 중요한 파일을 보고 다른 사용자의 데이터를 수정하거나, 접근 권한을 변경하는 등 권한 없는 기능 또는 데이터에 접근할 수 있다. 8 | - 보안 설정 오류 : 보안은 애플리케이션, 프레임워크, WAS, 웹 서버, DB 서버 및 플랫폼에 대한 보안 설정이 정의되고 적용되어 있을 때 바람직하다. 보안 기본 설정은 대부분 안전하지 않기 때문에 정의와 구현, 그리고 유지라는 3박자가 잘 이루어져야 한다. 또한, 소프트웨어는 최신 버전으로 관리해야 한다. 9 | - 민감 데이터 노출 : 대부분의 웹 애플리케이션과 API는 금융정보, 건강정보, 개인식별정보와 같은 민감정보를 제대로 보호하지 못한다. 공격자는 신용카드사기, 신분도용 또는 다른 범죄를 수행하는 취약한 데이터를 훔치거나 변경할 수 있다. 브라우저에서 중요 데이터를 저장 또는 전송할 때 특별히 주의해야 하며, 암호화와 같은 보호조치를 취해야 한다. 10 | - 공격 방어 취약점 : 대부분의 애플리케이션과 API에는 수동 공격과 자동 공격을 모두 탐지하거나 방지 및 대응할 수 있는 기본 기능이 갖추어져 있지 않다. 공격 보호는 기본 입력 유효성 검사를 훨씬 뛰어넘으며, 자동 탐지, 로깅, 응답, 익스플로잇 시도 차단을 포함한다. 애플리케이션 소유자는 공격으로부터 보호하기 위해 패치를 신속하게 배포할 수 있어야 한다. 11 | - 크로스 사이트 요청 변조(CSRF) : CSRF 공격은 로그인된 피해자의 취약한 웹 애플리케이션에 피해자의 세션 쿠키와 기타 인증정보를 포함해 위조된 HTTP 요청을 강제로 보내도록 한다. 예를 들어, 공격자가 취약한 어플리케이션이 피해자의 정당한 요청이라고 오해할 수 있는 요청들을 강제로 만들 수 있다. 12 | - 알려진 취약점이 있는 컴포넌트 사용 : 컴포넌트, 라이브러리, 프레임워크 및 다른 소프트웨어 모듈은 애플리케이션과 같은 권한으로 실행된다. 이런 취약한 컴포넌트를 악용해 공격하는 경우, 심각한 데이터 손실이 발생하거나 서버가 장악된다. 알려진 취약점이 있는 구성 요소를 사용하는 애플리케이션과 API는 어플리케이션을 약화시키고 다양한 공격과 영향을 줄 수 있다. 13 | - 취약한 API : 최신 어플리케이션에는 일종의 API (SOAP / XML, REST / JSON, RPC, GWT 등)에 연결되는 브라우저 및 모바일 애플리케이션의 자바스크립트와 같은 여러 클라이언트 애플리케이션 및 API가 포함되는 경우가 많다. 이러한 API는 대부분 보호되지 않으며 수많은 취약점을 포함한다. 14 | 15 | 16 | -------------------------------------------------------------------------------- /OpenCV.md: -------------------------------------------------------------------------------- 1 | - 오픈소스 라이브러리로서, Computer Vision Library(영상처리 라이브러리)이다. 2 | - 영상처리란 컴퓨터가 알고리즘을 사용하여 사람처럼 물체 또는 글씨를 인식하기 위한 Computer Science분야의 기술이다. 3 | - OpenCV가 나오기 전까지는, 영상처리 기술은 대학심화과정 이상의 수학적 접근이 필요한 학문이여서 많은 연구가 진행되지 않았다. 4 | - 2000년 Intel Coperation에서 이와 같은 문제점을 발견하고, 다각적인 수학적 기능들을 라이브러리화하였다. 5 | - 결과적으로, 개발자들이 손쉽게 영상처리 학문에 접근 가능하도록 OpenCV 라이브러리를 개발하였다. 6 | - 현재는 OpenCV 이외에 수학분야에 널리쓰이는 프로그래밍 툴인 Matlab로도 다양한 개발이 진행되고 있다. 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Programming_Terms 2 | 프로그래밍 용어를 정리하는 리포지토리입니다. 3 | -------------------------------------------------------------------------------- /Redirect.md: -------------------------------------------------------------------------------- 1 | - Redirect란 말 그대로 다시 지시하는 것이다. 2 | - 예를 들어 브라우저가 www.test.com/page1 URL을 웹 서버에 요청한다고 가정한다. 3 | - 서버는 HTTP 응답 메시지를 통해 "www.test.com/page2 로 다시 요청하세요" 라고 브라우저에게 다른 URL을 지시할 수 있다. 4 | - HTTP 리다이렉트는 HTTP 표준으로 정의 되어 있는데, 최초 요청을 받은 웹서버는 HTTP 응답 상태코드로 302를 보내고 응답 메시지 헤더 중 Location 값으로 redirect 되어야 할 주소를 설정해 리턴한다. 5 | - 브라우저등의 웹 클라이언트는 HTTP 응답 메시지의 상태코드가 302라는 것을 보고 redirect 라는 것을 인지하여 Location에 설정되어 있는 URL로 다시 재요청한다. 6 | - redirect가 활용되는 예시는 다음과 같다. 7 | - 카페마다 다르겠지만 특정 카페의 글들은 회원이라고 하더라도 해당 카페에 가입되어 있거나, 혹은 카페에 가입되어 있다고 하더라고 특정 등급이 되어야 열람할 수 있는 글들이 있다. 8 | - 만약 해당 글의 URL을 알아내어 브라우저의 주소창에 입력한 후 접근한다고 했을 때, 권한이 없다면 글에 대한 내용을 웹 서버가 응답하지 않는다. 9 | - 이때 웹 서버는 글에 접근하는 요청마다 권한을 검사하고, 권한이 되지 않는 경우 권한을 확인하세요 라는 경고 문구가 뜨는 페이지나, 혹은 계정이 로그인 되어 있지 않은 상태라면 로그인 페이지로 redirect시킬 필요가 있다. 10 | - 이 밖에도 redirect의 활용은 다양하게 존재한다. 11 | -------------------------------------------------------------------------------- /RxJS.md: -------------------------------------------------------------------------------- 1 | - Reactive Extensions For JavaScript의 약자로, 리액티브 프로그래밍을 지원하는 라이브러리이다. 2 | - 함수형 프로그래밍, Observer 패턴, Iterator 패턴을 조합하여 제공하는 형태이다. 3 | - Observer 패턴은 시스템에 의해 발생하는 이벤트를 감시하여, 이벤트 발생 시마다 사전에 정의된 동작을 수행하게 하는 프로그래밍 패턴의 한 종류이다. 4 | - Iterator 패턴은 반복자 패턴이라고도 하며, 구조가 서로 다른 각각의 저장 객체에 접근하기 위해 인터페이스를 통일할 때 사용되는 프로그래밍 패턴의 한 종류이다. 5 | - RxJS는 일련의 이벤트들로 이루어진 이벤트 스트림을 Observable 객체로 매핑하여, 비동기 형식의 이벤트 형태로 작동하도록 한다. 6 | - 즉, 자바스크립트의 비동기 프로그래밍에서 나타나는 문제점들을 해결하기 위해 사용된다. 7 | - RxJS의 Observable 라이프 사이클은 다음과 같이 구성된다. 8 | - 생성 : 이벤트는 생성 시점에 발생되지 않는다. 9 | - 구독 : 이벤트를 구독하는 시점이다. 10 | - 구독 해제 : 구독하고 있는 대상의 구독이 모두 종료되는 시점이다. 11 | - 실행 : 이벤트를 구독하는 대상에게 값을 리턴한다. 12 | -------------------------------------------------------------------------------- /SEO.md: -------------------------------------------------------------------------------- 1 | - Search Engine Optimization의 약자로, 검색엔진 최적화를 의미한다. 2 | - 검색엔진이 자료를 수집하고 순위를 매기는 방식에 맞게 웹 페이지를 구성하여, 검색 결과 상위에 위치할 수 있도록 하는 작업이다. 3 | - 인터넷 마케팅 방법 중 하나이며, 이를 통해 방문 트래픽을 늘려 잠재 고객을 효과적으로 유치할 수 있다. 4 | - 사이트의 컨텐츠는 수많은 알고리즘으로 평가되는데, 이에 따라 우선순위가 정해져 상위에 노출되는 기준이 정해진다. 5 | - 가장 잘 알려진 구글 SEO가 이에 해당한다. 6 | -------------------------------------------------------------------------------- /SSH.md: -------------------------------------------------------------------------------- 1 | - 네트워크 상의 다른 컴퓨터에 로그인하거나, 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용 프로그램 또는 그 프로토콜을 가리킨다. 2 | - 기존의 RSH, RLogin, 텔넷 등을 대체하기 위해 설계되었으며, 강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공한다. 3 | - SSH는 암호화 기법을 사용하기 때문에, 통신이 노출된다 하더라도 이해할 수 없는 암호화된 문자로 보인다. 4 | - SSH가 사용되기 이전에는 텔넷이 사용되었는데, 텔넷 통신에는 기본적으로 23번 포트가 사용되었다. 5 | - 통신에서 데이터를 암호화하는 과정이 없기 때문에 같은 네트워크 상의 누군가가 통신을 가로챈다면 통신 내용을 모두 엿볼 수 있다는 문제가 존재하였다. 6 | - 이러한 보안상의 문제로 SSH가 설계되었다. 7 | - 기본적으로는 22번 포트를 사용한다. 8 | - 주로 리눅스, 유닉스 시스템에서 사용된다. 9 | -------------------------------------------------------------------------------- /SSL.md: -------------------------------------------------------------------------------- 1 | - Secure Socket Layer의 약자로, SSL 프로토콜은 웹 서버와 브라우저 사이의 보안을 위해 만들어졌다. 2 | - 대칭키를 이용하여 암호화 통신을 한다는 특징이 있다. 3 | - HTTP에 SSL 적용을 하여 Https 통신을 하게 되는데, 이러한 암호화 통신을 하기 위해서는 SSL 인증서가 필요하다. 4 | - SSL 인증서는 해당 웹 사이트가 신뢰할 수 있는 사이트인지, 안전한 통신을 하는 사이트인지를 구분하기 위해, 누군가가 이 사이트를 신뢰할 수 있는 사이트라고 인증할 수 있도록 하기 위한 인증서이다. 5 | - 인증서에는 인증서 소유자의 이메일, 소유자 이름, 인증서 용도, 인증서 유효기간, 발행기관, 공개키 등이 포함되어 있다. 6 | - 인증서에 서명한 사람을 신뢰한다면, 서명된 인증서 또한 신뢰할 수 있다. 7 | - 또한, 인증서가 다른 인증서에 서명을 해주는 트리 구조로 되어 있다. 8 | - 구글 크롬, 파이어폭스 등에서 이미 https가 적용되지 않은 사이트는 안전하지 않은 사이트로 경고를 보여주고 실제로 많은 사이트들에 https가 적용되어 있다. 9 | -------------------------------------------------------------------------------- /SSR.md: -------------------------------------------------------------------------------- 1 | - Server Side Rendering의 약자로, 서버에서 페이지를 구성하여 사용자에게 페이지를 보여주는 방식을 의미한다. 2 | - 웹 사이트 접속시, 서버에서 필요한 데이터를 불러와 HTML 파일을 생성한다. 3 | - 이후, DOM(Document Object Model)을 구성하여 JavaScript 소스코드와 함께 클라이언트에게 전송한다. 4 | - 이를 통해 클라이언트는 HTML 파일을 사용자에게 보여줄 수 있다. 5 | - SSR의 장점은 다음과 같다. 6 | - 서버에서 HTML 파일을 생성하여 전송하기 때문에 페이지 로드시간이 빠르다. 7 | - 페이지의 소유권이 프론트 엔드에 있으므로, 페이지 변경시 커뮤니케이션을 최소화할 수 있다. 8 | -------------------------------------------------------------------------------- /Servlet.md: -------------------------------------------------------------------------------- 1 | - Servlet은 자바 플랫폼에서 웹 앱을 개발할 때 사용하는 핵심기술이다. 2 | - Servlet을 통해 컨트롤러와 뷰의 역할 분담이 가능해진다. 자바 API를 모두 사용할 수 있으며 다양한 서버 환경에서 실행 가능하고, 스레드를 기반으로 한다. 3 | - Servlet Container는 Servlet을 서버에서 실행하기 위한 서버 프로그램(서버는 서블릿 자체를 직접 실행할 수 없기 때문)이고, JVM을 내장하고 있다. 4 | - Servlet의 라이프 사이클은 다음과 같이 구성되어 있다. 5 | - init() : 컨테이너는 서블릿 인스턴스를 생성한 다음 init() 메소드를 호출한다. 이 메소드는 service() 메소드 이전에 실행되어야 한다. 클라이언트의 요청을 처리하기 전에 서블릿을 초기화할 기회를 주는 것이다. 초기화할 코드가 있다면 init() 메소드를 재정의 할 수 있다. (데이터베이스에 대한 접속, 다른 객체에 서블릿을 등록하는 등) 6 | - service() : 최초 클라이언트의 요청을 받았을때, 컨테이너는 새로운 스레드를 생성하거나 스레드 풀로부터 서블릿을 가져와서 서블릿의 service() 메소드를 호출한다. 클라이언트의 HTTP 메소드(GET, POST 등)를 참조하여 doGet() / doPost() 혹은 다른 메소드를 호출할지 판단한다. 재정의는 하지 않으며 doGet()/ doPost() 를 재정의하여 HttpServlet의 service()가 이를 실행하도록 한다. 7 | - doGet(), doPost() : service() 메소드가 클라이언트의 HTTP 메소드(GET, POST등)를 참조하여 doGet()/ doPost()를 호출한다. 여기서 doGet()/ doPost() 만 언급하는 이유는, 이외의 나머지 메소드는 사용할 경우가 거의 없기 때문이다. 이 메소드 안에서 코딩 작업을 진행하면 된다. doGet()/ doPost() 둘 중 하나는 반드시 재정의해야 한다. 8 | - destroy() : 서블릿 엔진이 off될 때 호출되는 메소드이다. 서블릿 종료 시 모든 자원을 반납하는 작업을 수행한다. 9 | 10 | -------------------------------------------------------------------------------- /Session.md: -------------------------------------------------------------------------------- 1 | - 일정 시간동안 같은 브라우저로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 일정하게 유지시키는 기술을 말한다. 2 | - 방문자의 요청에 따른 정보를 방문자 메모리에 저장하는 것이 아닌, 웹 서버가 세션 아이디 파일을 만들어 서비스가 실행되고 있는 서버에 저장하는 것이다. 3 | - 서버에 저장되기 때문에 사용자 정보가 노출되지 않는다. 4 | - 세션의 원리는 다음과 같다. 5 | - 클라이언트가 웹 사이트에 접속했을 경우, 서버에서 세션 ID를 발급해준다. 6 | - 서버에서 클라이언트로 발급한 세션 ID를 쿠키를 사용해서 저장한다. 7 | - 클라이언트는 재접속 시, 이 쿠키를 이용해서 세션 ID값을 전달한다. 8 | - 세션의 장점은 다음과 같다. 9 | - 각 클라이언트에게 고유 ID를 부여한다. 10 | - 세션 ID로 클라이언트를 구분해서 클라이언트의 요구에 맞는 서비스를 제공할 수 있다. 11 | - 사용해봤던 정보들을 서버에 저장하기 때문에, 보안성이 쿠키보다 우수하다. 12 | - 단, 서버에 저장되기 때문에 서버의 처리를 요구하는 부하와 저장 공간을 필요로 한다는 단점이 존재한다. 13 | - HTTP 세션의 동작 순서는 다음과 같다. 14 | - 클라이언트가 서버로 접속을 시도한다. 15 | - 서버는 접근한 클라이언트의 쿠키를 확인해 클라이언트가 해당 세션 ID를 보내왔는지 확인한다. 16 | - 만약 클라이언트로부터 발송된 세션 ID가 없다면, 서버는 세션 ID를 생성해 클라이언트에게 쿠키값으로 발행한다. 17 | -------------------------------------------------------------------------------- /TCP IP 프로토콜.md: -------------------------------------------------------------------------------- 1 | - TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP(인터넷 프로토콜)와 전송 조절 프로토콜인 TCP(전송 제어 프로토콜)로 이루어져 있다. 2 | - IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다. 3 | - TCP는 IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받도록 한다. 4 | - HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하기 때문에, 묶어서 TCP/IP로 부르기도 한다. 5 | - 인터넷을 통해 통신을 수행하는 개체는 크게 호스트와 라우터로 나눌 수 있다. 6 | - 호스트(host)는 최종 사용자(end-user) 응용 프로그램을 수행하는 주체가 되며, 인터넷에 연결된 PC , 노트북 , 휴대전화 , PDA 등이 여기에 속한다. 7 | - 라우터(router)는 호스트에서 생성된 데이터를 여러 네트워크를 거쳐 전송함으로써, 서로 다른 네트워크에 속한 호스트 간에 데이터를 교환할 수 있게 하는 장비이다. 8 | - 호스트와 라우터, 라우터와 라우터 그리고 호스트와 호스트가 통신하려면 정해진 절차와 방법을 따라야 하는데 이를 통신 프로토콜이라 부른다. 9 | - 인터넷에서 사용하는 핵심 프로토클은 TCP와 IP로, 이를 비롯한 각종 프로토콜을 총칭하여 TCP/IP 프로토콜이라 부른다. 10 | - TCP/IP 프로토콜은 일반적으로 운영체제의 일부로 구현되며, 응용 프로그램은 운영체제가 제공하는 TCP/IP 프로토콜의 서비스를 사용해 통신한다. 11 | 12 | -------------------------------------------------------------------------------- /TDD.md: -------------------------------------------------------------------------------- 1 | - Test-Driven Development 의 약자이다. 2 | - 코드를 짜기 전에 놓치는 것이 없도록 코드의 기능에 대한 체크리스트를 만드는 것이다. 3 | - 초기 단계에서 버그를 잡을 수 있다. 4 | - 개발 단계에서 버그를 잡는 것은 프로덕션 단계에서 버그를 잡는 것보다 비용을 훨씬 절감시켜 준다. 5 | - 예상 시나리오를 미리 돌려보면서 가정들을 실험해 볼 수 있다. 6 | - TDD는 코드 리팩토링을 안전하게 할 수 있게 해준다. 7 | - 즉, 코드를 바꿔도 모든 로직이 정상적으로 작동하는지, 빠트린 건 없는지 확인할 수 있다. 8 | - TDD를 하면 우리는 시스템에 대한 테스트 리포트를 받게 된다. 9 | - 이를 통해 프로덕트 오너나 비지니스 애널리스트에게 코드에 대한 시각적 자료를 제공할 수 있게 된다. 10 | -------------------------------------------------------------------------------- /Thymleaf.md: -------------------------------------------------------------------------------- 1 | - HTML 기반의 자바 템플릿 엔진이다. 2 | - Spring Boot에서 자동으로 설정을 지원하는 웹 템플릿 엔진이다. 3 | - HTML 파일을 파싱하여 분석한 이후, 정해진 위치에 데이터를 치환하여 웹 페이지를 생성한다. 4 | - Thymleaf의 특징은 다음과 같다. 5 | - 일반 텍스트를 처리할 수 있는 독립적인 환경에서 사용이 가능하다. 6 | - HTML을 사용할 수 있는 경우에 언제든 편집 및 렌더링할 수 있기 때문에, 서버상에서 동작하지 않아도 사용할 수 있다. 7 | - Tag 라이브러리에 의존하지 않기 때문에, 전체적인 Mark-Up 구조를 변형시키지 않는다. 8 | - 브라우저가 Thymeleaf 문법을 해석할 수 있기 때문에, JSP 태그 라이브러리를 사용할 경우 브라우저가 이를 해석할 수 없다는 것과 차이점이 있다. 9 | -------------------------------------------------------------------------------- /UML.md: -------------------------------------------------------------------------------- 1 | - 통합 모델링 언어로, 객체 지향 소프트웨어 엔지니어링 분야의 표준화된 범용 모델링 언어를 말한다. 2 | - 시스템의 모든 것을 문서화, 지정, 구축하는데 사용되는 표준 언어이다. 3 | - UML의 정의는 다음과 같다. 4 | - 복잡한 소프트웨어 시스템 개발 모델링에 필요한 구성요소를 제시하고, 이를 이용한 추상화 방법과 산출물들을 프로젝트 참여자들이 쉽게 이해할 수 있도록 소프트웨어 개발방법론들이 통합된 객체지향개발 표준통합 모델링 언어이다. 5 | - 객체 지향 문제 해결에 적용될 수 있는 UML 다이어그램의 종류는 다음과 같다. 6 | - 클래스 다이어그램(Class Diagram) 7 | - 유스케이스 다이어그램(Use case Diagram) 8 | - 시퀀스 다이어그램(Sequence Diagram) 9 | - 콜라보레이션 다이어그램(Collaboration Diagram) 10 | - 상태 다이어그램 (Statechart Diagram) 11 | - 액티비티 다이어그램 (Activity Diagram) 12 | - 컴포넌트 다이어그램 (Component Diagram) 13 | - 배포 다이어그램 (Deployment Diagram) 14 | - UML의 궁극적 목적은 사용자, 분석가, 설계자, 개발자 등의 개발을 위한 의사소통을 원활하게 하기 위해서이다. 15 | - UML의 필요 배경은 다음과 같다. 16 | - 시스템의 복잡성 → 표준적인 표기법, 즉 모델링 언어의 필요성 17 | - 객체 지향 분석/설계 개발 방법론의 표준 부재 18 | - 객체 지향 개발방법론의 거장의 협력 및 OMG의 표준화 활동 19 | - UML 관계 표기법에는 다음의 요소가 있다. 20 | - 상속(Inheritance), 구현(Implements), 의존관계(Dependency), 연관(Association), 합성(Composition), 집합(Aggregation) 21 | -------------------------------------------------------------------------------- /URI와 URL.md: -------------------------------------------------------------------------------- 1 | - URI는 인터넷에서 구별되어야 하는 주소이다. 2 | - 즉, 특정한 사이트에 접속하기 위해 인터넷 주소창에 입력하는 문자열은 모두 URI이다. 3 | - URL은 인터넷에 접속할 때, 네트워크 상에서 해당 자원이 어디에 있는지 알려주는 문자열이다. 4 | - 예를 들어, jsh15932.github.com/terms.php 라는 주소 문자열이 있다고 가정할 수 있다. 5 | - 이 때, 예시의 문자열을 통해 특정한 웹 사이트로 이동할 수 있기 때문에 해당 문자열은 URI이다. 6 | - 또한, jsh15932.github.com 내부의 terms.php 라는 파일을 여는 것이므로 파일의 위치를 알려주는 URL도 맞는 말이다. 7 | - 하지만, 또 다른 예로 jsh15932.github.com/users?id=jsh15932 라는 주소 문자열이 있다고 가정할 수 있다. 8 | - 이 때, 예시의 문자열은 특정한 웹 사이트로 이동시키기 때문에 URI이다. 9 | - 하지만 GET 방식을 통해 id값을 원하는 값으로 세팅하여 웹 사이트에 접근하므로, 파일의 위치를 알려주는 것은 아니기 때문에 URL은 아니다. 10 | 11 | -------------------------------------------------------------------------------- /UUID.md: -------------------------------------------------------------------------------- 1 | - 네트워크 상에서 서로 모르는 개체들을 식별하고 구별하기 위해서는, 각각의 고유한 이름이 필요하다. 2 | - 이 이름은 고유성(유일성)이 매우 중요하다. 3 | - 같은 이름을 갖는 개체가 존재한다면 구별이 불가능해지기 때문이다. 4 | - 고유성을 완벽하게 보장하려면 중앙관리시스템을 통하여 일련번호를 부여해주면 간단하지만, 동시다발적이고 독립적으로 개발되고 있는 시스템들의 경우, 중앙관리시스템은 불가능하다. 5 | - 개발 주체가 스스로 이름을 짓도록 하되, 고유성을 충족할 수 있는 방법이 필요하게 되었다. 6 | - 이를 위해 생긴것이 범용고유식별자(UUID)이며, 국제기구에서 표준으로 정하고 있다. 7 | - UUID 표준에 따라 이름을 부여하면 고유성을 완벽하게 보장할 수는 없지만, 실제 사용상에서 중복될 가능성이 거의 없다고 인정되기 때문에 많이 사용되고 있다. 8 | -------------------------------------------------------------------------------- /WBS.md: -------------------------------------------------------------------------------- 1 | - 프로젝트 관리 및 시스템 엔지니어링에서 프로젝트를 소규모의 구성 단위까지 나누어 전달할 수 있는 기능을 말한다. 2 | - 프로젝트 일정관리 정도로 표현할 수 있으나, 이를 상세히 작성한 문서, 즉 소규모의 구성 단위까지 표기하다보니 계층적, 점진적 구조 형태를 띄고 있다. 3 | - 전체의 큰 업무를 분류하여 구성 요소로 만든 후에 각 요소를 평가하고, 일정별로 계획하고, 이를 완수할 수 있는 사람에게 할당해주는 역할을 수행한다. 4 | - 본래 WBS는 담당자, 예산 등 프로젝트에 들어갈 수 있는 자원들을 기입하여 해당 내용을 적극적으로 관리하고 투영하는 데 목적이 있다. 5 | - IT 관련의 경우에는, 프로젝트 진행에 있어 일정에 대한 부분만 기입하고 있는 형태이고, 본래 목적과는 조금 멀어진, 계획에 치중되어 있다는 특징이 있다. 6 | - WBS의 역할은 다음과 같다. 7 | - 프로젝트에서 수행할 업무를 식별한다. 8 | - 프로젝트의 시작은 프로젝트 관리자의 임명에서 시작되며, 프로젝트의 주 관리자인 PM이 프로젝트의 모든 예산을 수립한다. 9 | - 이러한 예산은 요구사항에 근거한 작업범위로 산출하게 되는 것이다. 10 | - 즉, PM이 WBS에 근거하여 업무를 식별한 후에 파악이 가능하게 된다. 11 | - 일정과 원가, 자원요구사항을 알 수 있다. 12 | - WBS는 프로젝트의 작업에 대한 일정, 원가를 산정하는 기초자료가 되며, 예상치 못한 작업이나 누락된 작업들로 인한 일정지연 및 비용지출을 예방할 수 있다. 13 | - 일정계획과 산정의 역할을 수행한다. 14 | - 직무할당표로 어떤 일을 누가 무엇을 가지고 먼저 할 지를 정해야 하는 것을 도와준다. 15 | - 전체 일정과 진행 상황을 파악할 수 있다. 16 | - 팀원들은 자신에게 할당된 임무를 쉽게 식별하고, 프로젝트 매니저들은 작업 패키지를 체크 리스트로 사용해, 어떤 작업이 완성되었고 어떤 작업이 남아 있는지를 알아볼 수 있다. 17 | - 프로젝트의 정보 추적 통제의 역할을 한다. 18 | - 프로젝트 중간에 변경이 발생하면 이를 WBS로 통제 및 관리할 수 있다. 19 | - 고객, 팀 간의 의사소통 링크 역할을 한다. 20 | - 프로젝트의 모든 인원의 각 작업에 대한 세부작업과 담당자를 쉽게 식별할 수 있으며, 전체를 볼 수 있는 있는 안목도 제공해준다. 21 | - 즉, 요구사항의 변경 발생 시 가장 먼저 체크해보아야 할 정도로 좋은 의사소통 도구로서 작용한다. 22 | -------------------------------------------------------------------------------- /XML.md: -------------------------------------------------------------------------------- 1 | - Extensible Markup Language의 약자로, 확장성이 있는 마크업 언어를 의미한다. 2 | - HTML을 개선하여 확장한 언어이다. 3 | - XML의 특징은 다음과 같다. 4 | - 데이터를 설명하는 태그를 사용자가 마음대로 정의할 수 있다. 5 | - 새로운 마크업 언어를 생성하는 것이 가능하다. 6 | - HTTP 프로토콜을 이용하여 정보를 전달한다. 7 | - 텍스트로 이루어져 있기 때문에 어떠한 시스템에서든 정보를 읽을 수 있다. 8 | -------------------------------------------------------------------------------- /chmod.md: -------------------------------------------------------------------------------- 1 | - 리눅스는 모든 파일 및 디렉토리에 퍼미션, 즉 접근 권한을 사용한다. 2 | - 하나에 시스템에서 작업을 할 때, 사용자마다 각자의 권한이 필요하다. 3 | - 다른 사용자가 본인에 파일이나 디렉토리에 접근하여 삭제 혹은 수정을 하게 된다면 문제가 발생할 수 있기 때문이다. 4 | - 퍼미션은 읽기(read), 쓰기(write), 실행(execute)에 대한 권한을 지정할 수 있다. 5 | - drwx--x--x의 첫번째 부분인 d 부분은 디렉토리와 파일을 구분 지을때 사용된다. 디렉토리이면 d가 되고, 파일이면 -로 표시된다. 6 | - 이외에도 여러가지 의미를 가지는 문자들이 있다. 7 | - d = 디렉토리(directory) 8 | - - = 파일(text, php파일 등), 실행파일, 쉘 스크립트 파일 등 9 | - c = 캐릭터 디바이스 10 | - s = 네트워크 소켓 파일 11 | - 소문자 l = 심볼릭 링크 파일(windows의 바로가기) 12 | - drwx--x--x 의 d(directory)를 제외하고 9개의 문자를 3개씩 나누어 사용자, 그룹, 방문자로 구분한다. 13 | - - - - = 0 14 | - r - - = 4 15 | - r - x = 5 16 | - r w - = 6 17 | - r w x = 7 18 | - 위 사항을 조합하여 퍼미션을 지정할 수 있다. 19 | - 예시는 다음과 같다. 20 | - --- --- --- = chmod 000 permission : 사용자, 그룹, 방문자 모두 아무 권한이 없다. 21 | - rwx --- --- = chmod 700 permission : 사용자만 읽기, 쓰기, 실행 모든 권한이 있다. 22 | - rwx r-x r-x = chmod 755 permission : 그룹, 방문자는 읽기와 실행 권한이 있다. 23 | - rwx rwx rwx = chmod 777 permission : 사용자, 그룹, 방문자 모두 읽기, 쓰기, 실행 권한이 있다. 24 | -------------------------------------------------------------------------------- /가상환경.md: -------------------------------------------------------------------------------- 1 | - 가상환경(Virtual Environments)이란 자신이 원하는 Python 환경을 구축하기 위해 필요한 모듈만 담아 놓는 곳이다. 2 | - 생성된 각 가상환경(virtualenv 1, 2, 3…)은 독립적으로 관리된다. 3 | - 각 모듈은 다른 모듈에 대한 의존성(dependency)이 다르기 때문에 충돌이 발생할 수 있다. 4 | - 따라서 각 프로젝트마다 별개의 가상환경을 만들어놓고 사용하는 것이 좋다. 5 | - 즉 가상환경을 사용하는 이유는 다음과 같다. 6 | - 같은 모듈을 사용한다고 하더라도 다른 버전을 필요로 한 경우 7 | - Python 프로그램을 실행하기 위한 최소한의 환경을 마련하고자 할 경우 8 | - GitHub 등의 저장소나 네트워크와 연계하고자 할 경우 등으로 매우 다양하다. 9 | - Python에서 가상환경을 만들 때에는 크게 2가지로 virtualenv와 conda를 사용한다. 10 | -------------------------------------------------------------------------------- /데브옵스.md: -------------------------------------------------------------------------------- 1 | - DevOps는 개발(Development)과 운영(Operations)의 합성어이다. 2 | - 대부분의 서비스가 설치 기반에서 웹 기반으로 바뀌었고, 이로 인해 빈번한 서비스의 배포가 필요해졌다. 3 | - 하지만 개발팀은 서비스 개발에 매진하고, 운영팀은 보안과 안정적인 인프라 구축에 집중을 하므로 빈번한 배포 전략이 유연하게 동작할 수 없다. 4 | - 두 팀이 병합되어 개발, 테스트, 배포, 운영에 이르는 애플리케이션 수명주기를 개발하게 된다. 5 | - 이를 데브옵스라고 하며, 이는 다음과 같은 이점이 있다. 6 | - 배포까지의 빠른 작업속도를 효율적으로 제공하기 때문에, 시장 변화에 빠르게 대처하고 비즈니스 성과를 창출할 수 있다. 7 | - 새로운 릴리즈와 버그픽스를 빠르게 배포할 수 있으며, 그로 인해 고객의 요구를 빠르게 대응할 수 있다. 8 | - 지속적 통합, 지속적 전달, 모니터링, 로깅을 통해 안정적인 서비스 품질을 고객에게 제공할 수 있다. 9 | - 복잡하거나 변화하는 시스템을 효율적으로 관리할 수 있다. 10 | - 개발자와 운영팀이 긴밀하게 협력할 수 있기 때문에 책임을 공유하고 워크플로우를 결합할 수 있다. 이를 통해 비효율을 줄이고 시간 절약을 할 수 있다. 11 | - 클라우드 기반의 웹서비스를 제공하는 경우 빠른 고객 응대와 배포로 인해서 시장우위를 점할 수 있다. 12 | - Facebook, Netflix, Flickr 등의 회사들은 하루에 10번이 넘는 배포주기를 가지고 있다고 한다. 13 | -------------------------------------------------------------------------------- /도커.md: -------------------------------------------------------------------------------- 1 | - 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 2 | - 운영체제 환경을 분리하는 기능을 수행한다. 3 | - 도커의 특징은 다음과 같다. 4 | - 리눅스 컨테이너 기술을 바탕으로 가상화를 통해 어플리케이션을 격리된 상태에서 실행한다. 5 | - 모든 플랫폼에서 어플리케이션을 실행한다. 6 | - 어플리케이션 샌드박스를 자동으로 생성한다. 7 | - 도커의 장점은 다음과 같다. 8 | - 호스트의 운영체제를 공유하여 단일 호스트에서 다중 워크로드를 구동하기 때문에, 가상화 환경을 가볍게 구성할 수 있다. 9 | - 개발 언어, 툴에 구애받지 않고 어플리케이션을 생성할 수 있다. 10 | - 도커를 통해 생성된 어플리케이션은 이동성이 뛰어나다. 11 | - 격리성으로 인해, 서비스 해킹 시에도 본 서버는 영향을 받지 않아 안전하다. 12 | -------------------------------------------------------------------------------- /로드 밸런싱.md: -------------------------------------------------------------------------------- 1 | - 서비스로부터 발생하는 트래픽이 매우 많은 경우, 여러 대의 서버가 이를 분산 처리하여 서비스의 효율을 향상시키는 방법이다. 2 | - 서버 부하량, 속도 저하 등을 고려하여 적절히 분산 처리하는 방식으로 동작한다. 3 | - 로드 밸런싱의 동작 방식은 다음과 같다. 4 | - 네트워크에 존재하는 L4 스위치 가상 서버가 트래픽을 실제 서버로 균일하게 부하 분산시킨다. 5 | - 실제 서버가 비정상적으로 동작하는 경우, 이를 감지하여 정상적으로 작동하는 서버로 부하 분산시킨다. 6 | - 로드 밸런싱의 장점은 다음과 같다. 7 | - 저렴한 비용으로 다수의 서버를 증설하여 비용 절감에 용이하다. 8 | - 특정 서버에 장애가 발생할 경우, 서비스를 중단하지 않고 자동으로 다른 서버로 적절히 분배하여 지속적인 서비스 운영이 가능하다. 9 | -------------------------------------------------------------------------------- /리버싱.md: -------------------------------------------------------------------------------- 1 | - 장치 또는 시스템의 기술적인 원리를 그 구조분석을 통해 역으로 발견하는 과정이다. 2 | - 프로그램 내부의 동작원리를 들여다 볼 수 있다. 3 | - 이 과정을 통해서 개발단계에서 발견하지 못한 버그나 취약점들을 파악할 수 있고, 그 취약점들을 직접 패치할 수 있다. 4 | - 패치는 프로그램의 파일 혹은 실행중인 프로세스 메모리의 내용을 변경하는 작업을 말한다. 5 | - 크랙은 패치와 같은 개념이지만 패치를 하는 리버서의 의도가 비합법적이고 비도덕적인 경우를 말한다. 6 | - 저작권이 있는 소프트웨어를 사용할 때 정품인증을 받기 위해 크랙을 사용하는 경우를 예로 들 수 있다. 7 | - 리버싱 분석방법에는 정적분석과 동적분석이 있다. 8 | - 정적분석이란 파일을 실행하지 않고 겉모습만 관찰하여 분석하는 방법이다. 9 | - 이와 반대로 동적분석은 파일을 직접 실행시켜서 분석하고 디버깅을 통해서 코드의 흐름과 메모리 상태를 자세히 살펴보는 방법이다. 10 | - 주로 디버거를 이용하여 프로그램 내부 구조와 동작원리를 분석한다. 11 | -------------------------------------------------------------------------------- /리팩토링.md: -------------------------------------------------------------------------------- 1 | - 외부동작을 바꾸지 않으면서 내부 구조를 개선하는 방법으로, 소프트웨어 시스템을 변경하는 프로세스이다. 2 | - 기능을 추가하지 않고, 단지 코드의 구조에만 신경을 써야 한다. 3 | - 주로 중복된 코드, 긴 메소드, 거대한 클래스 등을 리팩토링한다. 4 | - 리팩토링을 해야 하는 이유는 다음과 같다. 5 | - 정기적인 리팩토링은 코드가 소프트웨어의 디자인을 유지하도록 도와준다. 6 | - 소프트웨어를 더 이해하기 쉽게 만든다. 7 | - 버그를 찾도록 도와준다. 8 | - 프로그램의 구조를 명확히 함으로써 버그가 눈에 더 잘 들어오게 된다. 9 | - 리팩토링은 프로그램을 빨리 작성하도록 도와준다. 10 | - 리팩토링을 위해 별도의 시간을 내는 것 보다는 다음의 원칙을 준수하는 것이 좋다. 11 | - 삼진규칙 : 스트라이크 세 개면 리팩토링을 한다. 12 | - 기능을 추가할 때 리팩토링을 한다. 13 | - 버그를 수정할 때 리팩토링을 한다. 14 | - 코드 검토를 할 때 리팩토링을 한다. 15 | - 리팩토링을 하지 말아야 할 경우는 다음과 같다. 16 | - 코드를 처음부터 다시 시작할 때에는 가이드 라인이 없기 때문에 리팩토링을 하지 않는다. 17 | - 리팩토링으로 얻는 생산성 향상은 이후에 나타나기 때문에, 마감일에 가까울 때에는 리팩토링을 하지 않는다. 18 | -------------------------------------------------------------------------------- /메모리 단편화.md: -------------------------------------------------------------------------------- 1 | - Memory Fragmentation이라고 하며, 기억 장치의 빈 공간 또는 자료가 여러 개의 조각으로 나뉘는 현상이다. 2 | - 메모리 낭비를 초래하여 시스템이 느려질 수 있다. 3 | - 사용하고 있지 않는 메모리 공간이 운영체제로부터 할당받지 못하기 때문에 발생한다. 4 | - 메모리 단편화는 내부 단편화와 외부 단편화로 나뉜다. 5 | - 내부 단편화는 할당된 메모리 블록이 프로세스가 요구한 것보다 큰 경우에 발생한다. 6 | - 메모리 공간이 사용되지 않았지만 다른 프로세스에 의해 사용할 수 없는 경우이다. 7 | - 외부 단편화는 총 메모리 공간이 프로세스의 요구를 만족시키지만, 메모리가 연속적이지 않기 때문에 사용할 수 없는 경우이다. 8 | -------------------------------------------------------------------------------- /미들웨어.md: -------------------------------------------------------------------------------- 1 | - 시스템 소프트웨어와 응용 소프트웨어 사이 또는 두 가지 다른 종류의 응용 프로그램 사이에서 조정 및 중개 역할을 하는 프로그램이다. 2 | - 시스템에 분산되어 있는 응용프로그램과 데이터, 웹 서버 간 연결을 최적화시켜주는 역할을 수행한다. 3 | - 클라이언트 프로그램과 서버 프로그램 사이에 존재하면서 클라이언트와 서버 간의 연결을 유지 및 관리한다. 4 | - 클라이언트의 작업 처리 요구를 서버에 전달한다. 5 | - 클라이언트와 서버 간의 통신, 다중 클라이언트에 대한 부하분산, 트랜잭션 처리, 보안 등 다양한 역할을 담당한다. 6 | - 기업에서는 주로 기업전산망 시스템이 다운되는것을 방지해 주는 시스템 소프트웨어의 의미로 사용된다. 7 | - 서버에 있는 에플리케이션이나 지원을 위해 이용 고객과 서버 가운데 놓여 있는 중간자이다. 8 | - 기존 서버의 데이터 처리용량보다 10배 이상 부하가 걸려도 전산망이 다운되지 않는다. 9 | - 데이터를 분산 처리하기 때문에, 따로 서버를 설치하지 않아도 되는 등 기업 전산망 설치 비용 절감에 필수적이다. 10 | - 대표적인 상용 미들웨어는 다음과 같다. 11 | - DB 미들웨어 12 | - 객체 미들웨어 13 | - 트랜잭션을 위한 TP모니터 14 | - 비동기 방식을 지원하는 메시징 미들웨어 15 | - 웹 애플리케이션 서버 등의 웹 미들웨어 16 | -------------------------------------------------------------------------------- /방화벽.md: -------------------------------------------------------------------------------- 1 | - 방화벽은 안전한 인터넷 트래픽을 허용하고 안전하지 않은 트래픽을 차단하여 컴퓨터를 보호한다. 2 | - 일반적으로 방화벽은 컴퓨터에서 인터넷으로의 모든 트래픽을 허용하지만, 특별히 허용하지 않는 한 인터넷에서 컴퓨터로의 모든 트래픽은 차단한다. 3 | - 방화벽은 인바운드 트래픽을 차단하여 웜과 같은 악성 소프트웨어에 대해 컴퓨터를 보호하며, 침입자가 컴퓨터에 액세스하는 것을 방지한다. 4 | - 경고 설정에 따라 방화벽 경고 팝업에 방화벽의 작업에 대한 정보가 표시될 수 있다. 5 | - 미리 정의된 방화벽 설정으로 컴퓨터를 보호할 수 있다. 6 | - 일반적으로는 이를 변경하지 않아도 되지만, 매우 엄격한 방화벽 프로필을 사용하거나 고유한 방화벽 규칙 또는 서비스를 추가한 경우 설정을 변경해야 할 수 있다. 7 | -------------------------------------------------------------------------------- /샌드박스.md: -------------------------------------------------------------------------------- 1 | - 미국에서 어린아이를 보호하기 위해 모래통(Sandbox)에서만 놀도록 하는데서 유래한 보안 모델을 말한다. 2 | - 외부 접근 및 영향을 차단하여 제한된 영역 내에서만 프로그램을 동작시키는 것이다. 3 | - 샌드박스 내에서 어떤 파일이나 프로세스가 안전하지 못하다고 판명되면, 외부로의 접근을 차단하여 시스템에 피해를 입히는 것을 방지한다. 4 | - 즉, 가상화를 통한 보안으로서 악성코드를 감지하고 분석하는데 사용되는 기술이다. 5 | - APT공격의 주요 보안 솔루션이지만, 이를 우회하는 악성코드가 존재하고, 가상화 공간에서 동작을 수행하는데 시간이 다소 걸린다는 단점도 있다. 6 | - 이러한 이유로, 샌드박스 기술은 기존 보안 솔루션들을 보완하는 차원에서 통합으로 사용되는 경우도 있다. 7 | -------------------------------------------------------------------------------- /스키마.md: -------------------------------------------------------------------------------- 1 | - 데이터베이스의 구조와 제약조건에 관해 전반적인 명세를 기술한 것이다. 2 | - 다시 말해, 개체의 특성을 나타내는 속성(Attribute)과, 속성들의 집합으로 이루어진 개체(Entity), 그리고 개체 사이에 존재하는 관계(Relation)에 대한 정의와 이들이 유지해야 할 제약조건들을 기술한 것이다. 3 | - 즉, DB 내에 어떤 구조로 데이터가 저장되는가를 나타내는 데이터베이스 구조를 스키마라고 한다. 4 | - 스키마의 특징은 다음과 같다. 5 | - 스키마는 데이터 사전(Data Dictionary)에 저장된다. 6 | - 데이터 사전은 시스템 전체에서 나타나는 데이터 항목들에 대한 정보를 지정한 중앙 저장소이다. 7 | - 이 정보에는 항목을 참조하는 데 사용되는 식별자, 항목에 대한 엔티티의 구성요소, 항목이 저장되는 곳, 항목을 참조하는 곳 등이 포함된다. 8 | - 현실 세계의 특정한 한 부분의 표현으로서 특정 데이터 모델을 이용해서 만들어지게 된다. 9 | - 시간에 따라 불변인 특성을 갖는다. 10 | - 데이터의 구조적 특성을 의미한다. 11 | - 인스턴스에 의해 규정된다. 12 | - 스키마는 사용자의 관점에 따라서 개념, 내부, 외부 스키마로 구분된다. 13 | - 개념 스키마는 조직체 전체를 관장하는 입장에서 DB를 정의한 것이다. 14 | - 따라서 조직의 모든 응용시스템에서 필요로 하는 개체 관계, 그리고 제약조건들을 포함하고 있다. 15 | - 내부 스키마는 물리적인 저장장치 입장에서 DB가 저장되는 방법을 기술한 것이다. 16 | - 실무적으로 내부 스키마에 의해 DB의 실행 속도가 결정적으로 영향을 받기 때문에, DB의 구축목적에 따라 내부 스키마를 결정해야 할 필요성이 있다. 17 | - 외부 스키마는 사용자나 응용 프로그래머가 개인의 입장에서 필요한 데이터베이스의 논리적 구조를 정의한 것이다. 18 | - 실세계에 존재하는 데이터들을 어떤 형식, 구조, 배치 화면을 통해 사용자에게 보여줄 것인가에 대한 스키마이다. 19 | -------------------------------------------------------------------------------- /스피어 피싱.md: -------------------------------------------------------------------------------- 1 | - '창으로 찌르다’라는 의미의 영어 단어 스피어(Spear)와 ‘사용자를 속이기 위한 사기 이메일 및 기타 행위’를 의미하는 보안 용어인 피싱(Phishing)의 합성어이다. 2 | - 불특정 다수가 아닌 특정인 혹은 조직을 표적으로, 신뢰할 만한 발신인이 보낸 것처럼 위장한 메일을 이용해 악성 웹사이트로 유도하는 행위이다. 3 | - 혹은 악성 첨부 파일로 악성코드에 감염시키는 일종의 온라인 사기 행위로 정의할 수 있다. 4 | - 스팸 메일 등과 구별되는 스피어 피싱의 특징에는 다음과 같은 것들이 있다. 5 | - 불특정 다수가 아닌 특정 기관 또는 기업을 노린다는 점 6 | - 기밀 정보 유출, 시스템 파괴 등 구체적인 목표를 위한 악성코드를 이용한다는 점 7 | - 정상적인 파일로 보이거나 의심하기 어려울 정도로 실제 메일처럼 보이게 하는 정교함 8 | - 스피어 피싱에는 첨부 파일이 동반되는 경우가 많다. 9 | - 이전에는 exe, dll 등의 실행 파일을 이용하던 방식을 사용했다. 10 | - 최근에는 사람들이 별다른 의심 없이 파일을 열어보도록 하기 위해서 doc, pdf, hwp, xls 등의 문서 파일이나, zip 등의 압축 파일과 같은 비실행형 파일을 많이 이용하는 추세다. 11 | -------------------------------------------------------------------------------- /애자일 방법론.md: -------------------------------------------------------------------------------- 1 | - 애자일 방법론은 문서작업 및 설계에 집중하던 개발 방식에서 벗어나, 좀 더 프로그래밍에 집중하는 개발 방법론이다. 2 | - 고객으로부터 어떠한 소프트웨어의 제작 요청을 받았을 때, 일정한 주기를 정해 프로토 타입의 프로그램을 개발한다. 3 | - 이후, 고객의 참여를 유도해 즉각적인 피드백을 받아 수정을 통해 점진적으로 나아가는 방법이다. 4 | - 이 과정에서 고객의 요구를 즉각적이고 민첩하게 반응할 수 있다. 5 | - 애자일 방법론은 소프트웨어 개발 방법론으로 쓰이지만, 그 자체가 독립된 개념으로 사용되기도 한다. 6 | - 본래의 형용사 의미를 활용해 ‘좀 더 가볍고 기민한 작업’을 이르는 표현으로 확장된 셈이다. 7 | - 그래서 개발에 집중한 세부적인 애자일 방법론이 따로 존재한다. 8 | - ‘익스트림 프로그래밍’과 ‘스크럼’, ‘크리스탈 패밀리’, ‘피처 드리븐 개발’ 등이 여기에 포함된다. 9 | - 2000년대 초반 성공 사례가 널리 알려지면서, 애자일 방법론을 활용한 여러 개발 방식이 생겨나기도 했다. 10 | - 애자일의 인기가 높아짐에 따라 일부 업체에서는 애자일 개발 방식을 지원하는 소프트웨어 개발도구(SDK)를 따로 출시하고 있다. 11 | - 대표적인 사례로 ‘아틀라시안’, ‘액소소프트’가 있다. 12 | - 국내에서는 한국HP가 애자일 방법론을 국내에 도입시키기 위해 ‘HP 애자일 컨설팅 서비스 및 소프트웨어’를 내놓기도 했다. 13 | - 쿠팡은 ‘애자일 프로세스’를 업계에서 제일 먼저 도입하여 앱의 UI를 개선했다. 14 | -------------------------------------------------------------------------------- /절대경로와 상대경로.md: -------------------------------------------------------------------------------- 1 | - 컴퓨터의 파일을 찾아가는 방법에는 절대경로로 파일을 찾는 것이 있다. 2 | - 절대경로란 최초의 시작점으로부터 경유한 경로를 전부 기입하는 방식이다. 3 | - 예를 들어, 바탕화면에 존재하는 서류.txt 라는 텍스트 파일의 위치는 이렇다. C:\Users\user\Desktop 4 | - 이 때, 파일의 위치는 최상위 루트 디렉토리인 C 드라이브로부터 시작되어 경유하는 경로를 모두 거쳐 위와 같이 구성되는 것이다. 5 | - 상대경로는 비교 대상에 따라 경로가 달라진다. 6 | - 예를 들어 서류.txt 라는 텍스트 파일이 있을 때, 위에서 이야기한 바와 같이 이 파일의 절대 경로는 C:\Users\user\Desktop가 된다. 7 | - 하지만 이 파일의 상대경로에 비교 대상이 존재하고, 그 대상이 C 드라이브의 Project 디렉토리라면, 위의 서류.txt 파일의 상대 경로는 C:\Project 와 같이 절대경로로 해석된다. 8 | - 즉, 상대경로는 기준이 되는 경로를 기준으로 절대경로가 구성된다. 9 | - 상대경로를 통해 파일의 위치를 찾을 수 있는 이유는 기준이 되는 경로가 상대경로를 절대경로로 변환하여 OS에 전달하기 때문이다. 10 | - 절대경로는 정적인 문자열로 파일의 위치를 알려주기 때문에, 파일의 경로가 자주 바뀌는 상황에는 절대경로로 작성된 모든 문서를 다시 작성해야 하는 불편함이 있다. 11 | - 또한, 루트 디렉토리가 각각 서로 다른 OS를 다룰 때, 리눅스 환경에서는 GUI가 없기 때문에 디렉토리에 접근할 때마다 절대경로를 모두 입력해야 한다. 12 | - 따라서, 비교 대상이 주어지는 상황에서 상대경로를 이용하여 위의 문제들을 해결할 수 있다. 13 | - 다시 말해, 절대경로는 최상위 디렉토리가 반드시 포함되어 있는 경로를 의미하고, 상대경로는 현재 디렉토리, 즉 비교 대상을 기준으로 작성된 경로를 말한다. 14 | 15 | -------------------------------------------------------------------------------- /크로스 브라우징.md: -------------------------------------------------------------------------------- 1 | - 웹표준 기술을 적용하여 서로 다른 OS 혹은 플랫폼에서도 인터넷이 이상없이 구현되는 기술을 말한다. 2 | - 여기서 웹표준은 말 그대로의 웹의 표준적인 규칙의 체계화이고, 크로스 브라우징은 모든 브라우저가 동일한 정보를 보여주는 통일성이다. 3 | - 즉, 인터넷 익스플로러(IE), 크롬, 사파리, 파이어 폭스, 오페라 등 여러 브라우저의 종류와 상관없이 홈페이지를 이용할 때 아무런 이상없이 작동될 수 있도록 웹페이지를 제작하는 방법이다. 4 | - 또한, 웹 브라우저의 종류에 상관없이 웹사이트의 레이아웃 위치나 모양이 동일하게 보여지도록 하는 상호 호환성에 대한 기술을 말한다. 5 | - 크로스 브라우징이 필요한 이유는, 이용자들이 다양한 브라우저와 OS, 다양한 기기들을 통해 접속하기 때문에 일부 환경에서는 접속되지 않거나, 제대로 작동되지 않을 수 있기 때문이다. 6 | - 이용자들이 각자의 브라우저로 웹사이트에 방문했을 때 정보 공유에서 소외감을 느끼지 않도록 하는 것이 크로스 브라우징이 필요한 중요한 점으로 이야기된다. 7 | -------------------------------------------------------------------------------- /클라우드.md: -------------------------------------------------------------------------------- 1 | - 인터넷 기반 컴퓨팅의 일종으로, 정보를 자신의 컴퓨터가 아닌 인터넷에 연결된 다른 컴퓨터로 처리하는 기술이다. 2 | - 예를 들어 인공지능이나 빅데이터처럼 많은 자원이 필요한 경우, 분산되어 있는 여러 컴퓨터들로부터 자원을 끌어다 쓰는 것이다. 3 | - 컴퓨팅 자원의 예로는 네트워크, 서버, 스토리지, 애플리케이션, 서비스가 있다. 4 | - 자원을 공유한다는 것이 클라우드의 핵심이다. 5 | - 클라우드의 장점은 서버 구매 비용이 없어, 서버를 직접 구축하고 관리하는 수고와 비용이 줄기 때문에 개발에 집중할 수 있다는 것이다. 6 | - 고용량 네트워크, 저비용 컴퓨터 및 스토리지 장치 이용, 하드웨어 가상화, 서비스 지향 아키텍쳐, 자율 및 유틸리티 컴퓨팅이 채택되어 클라우드 컴퓨팅이 성장하였다. 7 | - 수요가 증가하면 규모를 확장하고 줄면 규모를 줄이는 등 유연하다는 특징을 갖고 있다. 8 | - 클라우드 서비스는 인터넷 상에 자료를 저장하고, 사용자가 필요한 자료나 프로그램을 설치하지 않고도 인터넷 접속을 통해 언제 어디서나 이용할 수 있는 서비스이다. 9 | -------------------------------------------------------------------------------- /파이썬 모듈.md: -------------------------------------------------------------------------------- 1 | - 파이썬은 인터프리터이지만, 매번 대화식 모드에서 입력하면 불편하다. 2 | - 이를 위해, 파이썬 코드를 .py 확장자로 저장하고 나중에 다시 실행하도록 한 것이 바로 모듈이다. 3 | - 즉, 모듈은 파이썬으로 프로그래밍된 코드가 들어있는 파이썬 프로그램 파일이나, C로 만들어진 파이썬 확장 파일을 말한다. 4 | - 모듈의 장점은 다음과 같다. 5 | - 한번 모듈로 작성되면, 해당 코드는 재사용이 용이하다. 6 | - 모듈 단위로 코드의 개념을 분리해놓으면 효율성이 높아진다. 7 | - 별도의 name space를 갖는 모듈의 특성상, 다른 모듈에 영향받지 않고 독립적인 작업을 할 수 있다. 8 | - 파이썬에서 한 모듈에서 다른 모듈을 불러올 때, import 구문을 사용한다. 9 | - 여러 개의 모듈들을 계층별로 묶어 구조화한 것을 패키지라 한다. 10 | -------------------------------------------------------------------------------- /포트 포워딩.md: -------------------------------------------------------------------------------- 1 | - 외부 IP 및 포트와 내부 IP 및 포트를 연결해주는 기능이다. 2 | - 추가적인 설정을 하지 않은 상태에서 외부 IP를 통해 접속을 시도하는 경우, 내부에 연결할 프로세스 및 기기를 알 수 없기 없어 접근이 불가능하다는 문제점을 해결하기 위해 등장했다. 3 | - 외부 IP : 특정 포트로 접속할 경우, 내부 IP : 특정 포트로 맵핑하는 방식으로 동작한다. 4 | - 외부 포트 번호와 내부 포트 번호는 서로 다를 수 있다. 5 | - 내부에서 연결하려는 포트는 IP를 지정해야 한다. 6 | - 하나의 포트에 하나의 포워딩만 가능하다. 7 | - 내부 네트워크에 할당된 IP에만 가능하다. 8 | -------------------------------------------------------------------------------- /프로토타입.md: -------------------------------------------------------------------------------- 1 | - 정보시스템의 미완성 버전 혹은 중요한 기능들이 포함되어 있는 시스템의 초기모델이다. 2 | - 사용자의 모든 요구사항이 정확하게 반영될 때까지 계속해서 개선, 보안된다. 3 | - 많은 애플리케이션들이 지속적인 프로토타입의 확장과 보강을 통해 최종 설계가 승인된다. 4 | - 프로토타입의 장점은 다음과 같다. 5 | - 사용자 중심의 개발 방법이기 때문에, 최종사용자의 요구를 최대한 반영할 수 있다. 6 | - 비교적 빠른 기간 안에 사용자가 평가할 수 있을 만한 결과를 만들어내기 때문에 개발시간을 줄일 수 있다. 7 | - 개발 초기단계에서 오류를 판별하여 오류를 초기에 발견할 수 있다. 8 | - 사용자와 관리자가 현재까지 진행된 프로토타입을 직접 운영함으로써 여러가지 제안과 변경할 점을 파악하여 개발과정에 반영할 수 있다. 9 | - 프로토타입의 단점은 다음과 같다. 10 | - 시스템의 유지보수에 필수적인 시스템의 문서화 과정이 지나치게 축소되거나 생략될 수 있다. 11 | - 최종적으로 시간과 비용이 훨씬 많이 소모될 수 있다. 12 | - 프로토타이핑으로 완성된 시스템은 컴퓨터 자원의 활용 측면에서 비효율적이다. 13 | -------------------------------------------------------------------------------- /핀테크.md: -------------------------------------------------------------------------------- 1 | - 핀테크(Fintech)는 금융(Finance) + 기술(Technology)의 합성어이다. 2 | - 넓은 의미의 핀테크는 금융과 기술이 만나 탄생한 모든 금융 기술을 의미할 수 있는데요. 하지만, 오늘날 일반적으로 쓰이는 좁은 의미의 핀테크는 금융과 기술이 만나 탄생한 기존에 없던 ’혁신적 유형’의 금융 서비스를 가리킨다. 3 | - 핀테크의 주요 기술로는 블록체인, 인공지능, 빅데이터 등이 있다. 4 | - 블록체인 : 거래 정보를 구성원들이 분산 보관해, 거래가 이루어질 때마다 각 구성원의 장부가 새로운 거래 블록에 의해 업데이트 되는 방식의 거래 기술을 의미한다. 5 | - 인공지능 : 인간처럼 사고하는 능력을 지니고 스스로 문제를 해결해 나가는 컴퓨터 기술을 의미한다. 6 | - 빅데이터 : 페타바이트(Petabyte, PB =1015) 단위에 이르는 엄청난 양의 데이터를 수집, 축적, 분석해서 활용하는 기술을 의미한다. 7 | - 핀테크로 인해 가능해진 서비스에는 간편송금, 간편결제, P2P 투자, 스마트 가계부 등이 있다. 8 | - 간편송금 : 공인인증서나 계좌번호가 없어도 쉽고 빠르게 송금할 수 있는 서비스이다. 9 | - 간편결제 : 복잡한 인증 절차 없이 원스탑 쇼핑을 가능하게 하는 간편 결제 서비스이다. 10 | - P2P 투자 : 금융기관을 통하지 않은 개인 대 개인간(peer to peer)의 투자이다. (P2P 투자 서비스 : 비욘드펀드) 11 | - 스마트 가계부 : 수입 지출을 기록하기 편리할 뿐 아니라 다양한 금융 자산을 종합적으로 관리, 소비 지출 패턴을 분석해주는 가계부이다. (스마트 가계부 서비스 : 뱅큐) 12 | - 로보 어드바이저 : 개인 금융 비서 서비스이다. (신한 엠폴리오, 하나 하이로보, 우리 로보알파) 13 | -------------------------------------------------------------------------------- /해시.md: -------------------------------------------------------------------------------- 1 | - 데이터를 다루는 기법 중에 하나로, 검색과 저장이 아주 빠르게 진행된다. 2 | - 이유는 데이터를 검색할 때 사용할 key와 실제 데이터의 값(value)이 한 쌍으로 존재하고, key가 배열의 인덱스로 변환되기 때문이다. 3 | - 결국, 검색과 저장의 평균적인 시간 복잡도가 O(1)에 수렴하게 된다. 4 | - 데이터의 값을 배열의 인덱스인 정수로 변환하기 위해서는 일련의 과정이 필요하다. 5 | - 예를 들어 데이터를 문자열로 받게 되었을 때, 문자 한 글자 한 글자의 아스키 코드값을 더하는 과정으로 문자열을 정수 값으로 변환할 수 있다. 6 | - 해시코드를 사용하여 해시 테이블에 저장하는 방법은 다음과 같다. 7 | - 해시코드로 나올 수 있는 숫자의 경우의 수는 아주 많다. 8 | - 하지만 저장할 배열의 크기는 물리적 한계가 있고, 수많은 해시코드들을 대처할 수 없다. 9 | - 이러한 경우 해시코드를 배열의 크기로 나누고, 그 나머지를 인덱스로 사용하게 되면 0부터 배열의 사이즈-1 만큼의 숫자로 변환하여 사용할 수 있다. 10 | - 예를 들어 해쉬코드가 252이고 배열의 크기가 10인 경우 나머지가 2가 나오고, 이 나머지 값을 인덱스로 사용한다. 11 | - 하지만 위와 같이 인덱스를 한정된 인덱스로 바꾸게 된다면, 다른 해시코드라도 같은 인덱스가 나올 수 있는 경우가 생길 수 있다. 12 | - 혹은 완전히 같은 해시코드가 나올 수도 있다. 13 | - 이런 경우 충돌이 발생했다고 하는데, 이 충돌을 해결하는 여러가지 방법이 있다. 14 | - 그 방법에는 분리 체인법, 선형 탐사, 2차 탐사, 이중해싱 등이 있다. 15 | -------------------------------------------------------------------------------- /호스팅.md: -------------------------------------------------------------------------------- 1 | - 웹 서비스, 메일 서비스 등의 인터넷 서비스를 위한 환경을 제공하는 것이다. 2 | - 예로, 네이버 블로그 서비스도 하나의 무료 호스팅이며, 이것을 저장하고 있는 네이버도 어딘가의 서버에 저장되어 있다. 3 | - 호스팅의 종류에는 서버 호스팅과, 웹 호스팅이 있다. 4 | - 서버 호스팅이란 서버를 통째로 빌려 운영하는 서비스이다. 5 | - 서버 한 대를 기업에서 단독으로 빌려 쓰거나 구매한 서버의 운영 대행을 맡기는 것을 말한다. 6 | - 서버를 운영하는 OS부터 원하는 소프트웨어를 자유롭게 설치하고 조율할 수 있어, 관리자가 사용하기 편리한 환경으로 만들 수 있다. 7 | - 서버 관리자는 홈페이지 소스나 데이터베이스 등 중요 정보에 쉽게 접근해 수정할 수 있어, 작업 효율이 높다. 8 | - 용량과 트래픽을 규모에 맞게 설정할 수 있다는 장점이 있다. 9 | - 많은 용량과 트래픽이 필요할 경우 서비스를 신청해 변경해야 하는 웹 호스팅과 달리, 관리자가 직접 설정할 수 있어 빠르게 설정할 수 있다. 10 | - 문제가 생겨도 관리자가 즉각적으로 대응할 수 있어 문제 해결도 빠른 편이다. 11 | - 혼자 서버 한 대를 독차지하므로 비용이 많이 든다는 단점이 있다. 12 | - 사용자가 서버나 네트워크, 프로그램 같은 전문 지식에 대한 이해가 없다면 유지, 관리가 쉽지 않다. 13 | - 별도의 시스템 엔지니어를 채용하는 방법이 있지만, 그만큼 비용은 더 증가한다. 14 | - 서버 호스팅은 접속량이 많고, 트래픽 등으로 서버 부하가 많은 대규모 사이트에 적합하다. 15 | - 웹 호스팅은 서버의 일부분만 빌려 쓰는 형식이다. 16 | - 이미 만들어진 서버의 한 공간에 들어가는 것과 같고, 원하는 상품을 선택할 수 있어 비용 절감에 큰 도움이 된다. 17 | - 웹 호스팅은 해당 서비스를 제공하는 호스팅 회사에서 직접 서버를 관리하기 때문에, 서버 관리의 부담이 없어 간편하게 사용할 수 있다. 18 | - 단점은 미리 정해진 상품에서만 선택해야 한다는 점이다. 19 | - 웹 호스팅은 개인용 또는 중소기업에서 홈페이지를 운영하기 적합한 호스팅 서비스이다. 20 | --------------------------------------------------------------------------------