전체 글

· CS
Design Pattern 일종의 설계 기법이며, 설계 방법이다. 목적SW 재사용성, 호환성, 유지 보수성을 보장. 특징디자인 패턴은 아이디어임, 특정한 구현이 아님.프로젝트에 항상 적용해야 하는 것은 아니지만, 추후 재사용/호환/유지 보수 시 발생하는 문제를 예방하기 위해 패턴을 만들어 둔 것임. 원칙SOLID(객체지향 설계 원칙) 1. Single Responsibility Principle(SRP, 단일 책임 원칙) 하나의 클래스는 하나의 역할만 해야 함.2. Open - Close Principle(OCP, 개방-폐쇄 원칙) 확장(상속)에는 열려있고, 수정에는 닫혀 있어야 함.3. Liskov Substitution Principle(LSP, 리스코프 치환 원칙) 자식이 부모의 자리에 항상 교체될..
· 알고리즘
1. 최대공약수 GCD(Gratest Common Divisor) 공통된 약수 중 가장 큰 것 2. 최소공배수 LCM(Least Common Multiple) 공통된 배수 중 가장 작은 것최소공배수 = 두 자연수의 곱 / 최대공약수 2개의 자연수를 입력 받아 최대공약수를 구하기 위해선 2부터 두 자연수 중 작은 자연수까지 나누어보면 가장 큰 공약수를 구할 수 있다. 그러나, 이 방법으로 최대공약수를 구하게 되면 시간 복잡도가 O(N)이 된다. 보다 효율을 높이기 위해서 유클리드 호제법이란 알고리즘을 사용하면 시간 복잡도를 O(logN)으로 줄일 수 있다. 호제법이란? 상대방 수를 나누어서 결국 원하는 수를 얻는 방법  X % Y = R일 때 (단, X > Y), X와 Y의 최대공약수는 Y와 R의 최대공약..
· 알고리즘
1. 순열 - 중복을 허용하지 않고, depth를 이용하는 방법static void permutation(int[] arr, int depth, int n, int k) { if (depth == k) { for (int i = 0; i  - 중복을 허용하지 않고, boolean[] isVisited 배열과 LinkedList를 사용하는 방법static void permutation(int n, int k) { if (list.size() == k) { for(int num: list) { System.out.print(num + " "); } System.out.println(); return; } for(int i =..
· CS
서브넷팅(Subnetting) 서브넷의 등장 배경 흔히 사용되는 IPv4 주소 체계는 클래스를 나누어 IP를 할당한다. 하지만 이 방식은 비효율적일 수 있다. 예를 들어 어떤 기관에 A 클래스를 할당한다면 16,777,214개의 호스트를 할당할 수 있게 된다. 그런데 이 기관이 100개의 호스트만 할당한다면 16,777,114개의 호스트는 낭비되게 된다. 이러한 비효율성을 해결하기 위해 네트워크 장치들의 수에 따라 효율적으로 사용할 수 있는 서브넷(subnet)이 등장하게 되었다. 서브넷(subnet)과 서브넷 마스크(subnet mask) 서브넷은 IP 주소에서 네트워크 영역을 부분적으로 나눈 '부분 네트워크'를 뜻한다. 이러한 서브넷을 만들 때 사용되는 것이 바로 서브넷 마스크이다. 즉, 서브넷 마스..
· CS
HTTP 버전별 구분 전체 HTTP/0.9 (1991년) HTTP/1.0 (1996년) HTTP/1.1 (1997년): 가장 많이 사용 중 RFC2068 (1997) -> RFC2616 (1999) -> RFC7230~7235 (2014) 현재 표준 스펙을 보려면 RFC7230 이후를 봐야 한다 HTTP/2.0 (2015년): HTTP 1.1의 성능 개선 및 확장 HTTP/3.0 (진행 중) 핵심 HTTP 1.1이 모든 것의 기반이다 HTTP 0.9 특징 HTTP 초기 버전을 구분하기 위해 부르는 버전 (1991년) 요청은 단일 라인으로 구성되며, 리소스에 대한 method는 GET만 존재 응답도 극도로 단순 (파일 내용 자체로만 구성) HTTP 헤더도 없고, HTML파일만 전송 가능했던 것이 특징 /*..
· CS
NoSQL NoSQL이란? Not Only SQL의 약자로 기존 RDBM 형태의 관계형 데이터베이스가 아닌 비관계형 데이터베이스를 지칭한다. 기존의 정형화된 데이터 뿐만 아니라 메신저 텍스트, 음성 등 반정형화/비정형화된 데이터도 저장하고 다뤄야하는 수요가 생겼다. 이렇듯 데이터를 다룰 RDBMS로만 트래픽을 감당하기 어려워졌고, 이를 해결하기 위해 NoSQL이 등장했다. NoSQL은 대량의 분산된 데이터를 저장하고 조회하는 데 특화되었으며 스키마 없이 사용 가능하거나 느슨한 스키마를 제공한다. 또한 대량의 데이터를 빠르게 처리하기 위해 메모리에 임시 저장하고 응답하는 등의 방법을 사용한다. 동적인 스케일 아웃을 지원하기도 하며, 가용성을 위해 데이터 복제 등의 방법을 제공한다. NoSQL의 핵심은 수평..
· CS
데이터베이스 데이터베이스(DB, database)란? 데이터베이스는 특정 조직의 업무를 수행하는 데 필요한 상호 관련된 데이터들의 모임이다. 1. 통합된 데이터(Integrated Data): 자료의 중복을 배제한 데이터의 모임이다. 2. 저장된 데이터(Stored Data): 컴퓨터가 접근할 수 있는 저장 매체에 저장된 자료이다. 3. 운영 데이터(Operational Data): 조직의 고유한 업무를 수행하는 데 존재 가치가 확실하고 없어서는 안 될 반드시 필요한 자료이다. 4. 공용 데이터(Shared Data): 여러 응용 시스템들이 공동으로 소유하고 유지하는 자료이다. 데이터베이스의 특징 1. 실시간 접근성(Real-Time Accessibility): 수시적이고 비정형적인 질의(조회)에 대하여..
· CS
개요 인터넷은 구조적이고 조직화되어 있는 시스템이다. 네트워크(network, 또는 망)는 컴퓨터나 교환기, 라우터와 같은 통신 장치들을 서로 연결한 그룹이다. 인터넷(internet-소문자 i)은 서로 통신할 수 있는 둘 또는 그 이상의 네트워크이다. 인터넷(Internet-대문자 I)이라 부르는 가장 대표적인 인터넷(소문자 i)은 100만 개 이상의 네트워크가 상호 연결된 네트워크이다. 전 세계적으로 거의 모든 국가에서 정부 기관, 학교, 연구기관, 회사와 도서관 등과 같은 기관뿐만 아니라 일반 개인들도 인터넷을 사용하고 있다. 이 중의 대부분은 일반 사용자이다. 이렇게 엄청난 규모의 통신 시스템은 1969년부터 시작되었다. 커버 범위에 따른 네트워크 네트워크가 연결하고 커뮤니케이션할 수 있는 물리적..
· CS
프로세스 & 스레드란? 프로세스 (Process) 스레드 (Thread) 운영체제로부터 자원을 할당받은 작업의 단위 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위 프로세스의 작업의 단위라는 단어와 스레드의 실행 흐름의 단위라는 단어가 이해가 잘 가지 않을 수 있다. 웹 브라우저로 예시를 들어보겠다. 웹 브라우저가 하나의 프로세스라고 생각했을 때, 웹 브라우저는 여러 웹 페이지를 불러오는 작업을 처리할 수 있다. 이 때, 여러 탭을 열어 놓는 것을 여러 스레드가 동시에 작업을 처리하는 것으로 볼 수 있다. 각 탭은 독립적으로 웹 페이지를 불러오지만, 모두 같은 웹 브라우저의 자원을 공유한다. 즉, 한 탭(스레드) 에서의 작업이 다른 탭의 작업에 직접적으로 영향을 주지는 않지만, 모두 같은 프로세스 ..
· CS
운영체제(Operating System)란? 운영체제(Operating System, OS)는 컴퓨터의 하드웨어와 소프트웨어 자원을 효율적으로 관리하고 조정하여 사용자와 응용 프로그램이 컴퓨터 시스템을 편리하고 효과적으로 사용할 수 있도록 하는 핵심 소프트웨어이다. 본질적으로, 운영체제는 컴퓨터의 모든 하드웨어와 소프트웨어 간의 상호 작용을 조율하는 "실행 관리자" 역할을 수행한다. 운영체제 없이는 각 응용 프로그램이 하드웨어 자원을 직접 관리해야 하므로, 프로그래밍이 매우 복잡해지고, 자원 관리의 효율성이 크게 떨어질 뿐 아니라, 시스템의 안정성과 보안이 심각하게 위협받을 수 있다. 운영체제는 이러한 문제를 해결하기 위해 개발되었으며, 하드웨어를 직접 제어하고 관리하는 복잡한 작업을 추상화하여, 개발자..
오승미
프로그래밍 공부