CS
[CS] 프록시(Proxy)란
프록시(Proxy)란 프록시(Proxy)는 "대리"의 의미로, 인터넷과 관련해서 쓰이는 경우, 특히 내부 네트워크에서 인터넷 접속을 할 때에, 빠른 액세스나 안전한 통신등을 확보하기 위한 중계서버를 "프록시 서버"라고 일컫는다. 클라이언트와 Web서버의 중간에 위치하고 있어, 대신 통신을 받아 주는 것이 프록시 서버이다. 프록시(Proxy)의 사용 목적 1. 개인정보 보호 프록시 서버 X - 사용자가 네이버에 들어갈 때 IP 주소가 전달 프록시 서버 O - 프록시 서버의 IP를 전달. 즉, 사용자의 IP를 보호할 수 있다. 2. 속도 향상 - 캐시 사용 사용자가 특정 페이지를 요청할 때, 프록시 서버를 통해 웹 페이지를 가져온다. 가져온 웹 페이지를 프록시 서버의 DB에 저장하고 사용자에게 전달. 같은 ..
[CS] OOP의 특징 (추상화/캡슐화/상속/다형성)
OOP 객체지향 프로그래밍 기본의 만들었던 내용을 재사용할 수 있다는 장점이 있다. 프로그램을 독립된 단위인 객체들의 모임으로 보고 각각 객체는 메시지를 주고 받고 데이터를 처리함. 추상화(Abstraction) 어떤 실체로부터 공통적인 부분이나 관심 있는 특성들만 한곳에 모은 것 구현 세부사항 대신 기능 측면에서 클래스의 모델링을 목적으로 한다. 인터페이스와 구현을 분리한다. 캡슐화(encapsulation) 데이터 보호 비슷한 역할을 하는 속성과 메소드들을 하나의 클래스로 모아, 접근 지정자를 통해 제어하는 것 은닉화 : 객체의 세부 내용이 외부에 드러나지 않아 외부에서 데이터를 직접 접근하는 것을 방지한다. 캡슐 내부의 로직이나 변수들을 감추고 외부에는 기능(api)만을 제공하는것 상속(inheru..
[CS] 트랜젝션
트랜잭션이란 트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위이다. 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위이다. 하나의 트랜잭션은 Commit되거나 Rollback된다. 트랜잭션의 성질 Atomicity(원자성) 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다. 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다. Co..
[CS] OSI 7 계층
OSI 7 계층 OSI 7 계층은 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것 계층을 나눈 이유는 통신이 일어나는 과정이 단계별로 파악할 수 있기 때문 1계층 - 물리계층(Physical Layer) 이 계층에서는 주로 전기적, 기계적, 기능적인 특성을 이용해서 통신 케이블로 데이터를 전송 사용되는 통신 단위는 비트이며 이것은 1과 0으로 나타내어지는, 즉 전기적으로 On, Off 상태라고 생각하면 된다. 이 계층에서는 단지 데이터를 전달만 할뿐 전송하려는(또는 받으려는)데이터가 무엇인지, 어떤 에러가 있는지 등에는 전혀 신경 쓰지 않는다. 이 계층에 속하는 대표적인 장비는 통신 케이블, 리피터, 허브등이 있다. 케이블, 리피터, 허브를 통해 데이터 전송 2계층 - 데이터 링크계층(DataLin..
[CS] 해시(Hash)와 해시 충돌 해결 방법
해시(Hash) 데이터를 효율적으로 관리하기 위해 임의의 길이 데이터를 고정된 길이의 데이터로 매핑 해시 함수: 데이터를 효율적으로 관리하기 위해 임의의 길이의 데이터를 수학적 연산을 통해 고정된 길이의 데이터로 매핑하는 함수이다. 해시 함수에 의해 얻어지는 값을 해시 코드, 해시라고 한다. 해시 테이블: 키와 값을 매핑해둔 데이터 구조이다. 해시 함수로 얻은 해시를 키로 활용하여 index로 사용하고 해당 index에 데이터를 저장하여 효율적인 검색을 위해 사용된다. 해시 순서 해당 원소의 해시 함수를 이용하여 해시값을 얻는다. 해시값을 주소로 하는 위치에 원소를 저장한다. 저장 후 검색 시에도 원소의 해시값으로 계산하여 해당 위치로 이동한다. 추상 자료형 사전구조 인터페이스와 기능 구현을 분리한 자료..
[CS] 프로세스와 스레드
프로세스(Process) 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태 프로세스는 Code, Data, Stack, Heap 영역의 네가지 구조로 되어있다. 코드 영역(code area) : 프로그래머가 작성한 프로그램이 코드 영역에 작성된다. 데이터 영역(data area) : 코드가 실행되면서 사용한 변수나 파일들의 각종 데이터들이 모여있다. 스택 영역(stack area) : 호출한 함수가 종료되면 되돌아올 메모리의 주소를 스택에 저장하거나 변수 사용 범위에 영향을 미치는 영역을 구현 할때 사용된다. 힙 영역(heap area) : 동적으로 할당되는 데이터들을 위해 존재하는 공간이다. 서로 다른 프로세스간의 메모리 공간 접근은 허용되지 않는다. 운영체제 관점에서는 프로세스가..
리액티브 프로그래밍(Reactive Programming)
Reactive programming (반응형 프로그래밍) 리액티브 프로그래밍은 데이터 흐름(data flows)과 변화 전파에 중점을 둔 프로그래밍 패러다임(programming paradigm)이다. 이것은 프로그래밍 언어로 정적 또는 동적인 데이터 흐름을 쉽게 표현할 수 있어야하며, 데이터 흐름을 통해 하부 실행 모델이 자동으로 변화를 전파할 수 있는 것을 의미한다. 예를 들어, 데이터 A의 변화에 따라 데이터 B의 값이 변화하는 방식을 리액티브 프로그램이라 칭함. 리액티브 프로그래밍을 사용하는 이유 좋은 프로그램은 메인스레드가 멈추거나 느려지지 않도록 해서, 사용자들에게 부드러운 사용자 경험과 좋은 성능을 제공할 수 있어야 한다. 메인스레드를 자유롭게 유지하려면 무겁고 시간이 오래 걸리는 작업은 ..
객체지향 5원칙 SOLID
객체지향 5원칙(SOLID)이란 SOLID란 유명한 Clean Code의 저자 로버트 C. 마틴(Robert C. Martin)이 2000년대 초에 명명한 객체 지향 프로그래밍의 다섯 가지 기본 원칙을 마이클 페더스가 원칙의 앞 글자를 따서 다시 SOLID라는 이름으로 소개한 것. SRP(The Single Responsiblity Principle) : 클래스나 모듈을 변경할 이유가 하나, 단 하나뿐이어야한다는 원칙이다. OCP(The Open Close Principle): 클래스는 확장에는 열려있어야 하며 변경에 닫혀 있어야 한다. LSP(The Liskov Substitution Principle) : 서브타입은 그것의 기반 타입에 대해 대체 가능해야한다. DIP(The Dependency Inv..
멱등성과 HTTP메소드
멱등성 (Idempotent) 같은 연산을 여러번 실행해도 그 결과가 달라지지 않는 성질을 의미. ex) const sum = (a,b) => a+b 동일한 인자를 넣고 여러번 실행시켜도 같은 값을 반환하기 때문에 멱등성을 갖는다. HTTP Method 의 멱등성 멱등성의 개념은 HTTP 에서도 동일하게 적용될 수 있다. 동일한 요청을 한번 보내는 것과, 여러번 보내는 것이 서로 동일한 효과를 지니고, 서버의 상태도 동일하게 남을 때 해당 HTTP Method 가 멱등성을 갖는다고 이야기한다. 멱등성을 따질 때에는 서버의 상태만 바라보면 되며, HTTP 응답 Status는 신경쓰지 않아도 된다. 멱등성을 갖는 메소드 GET : 서버에 존재하는 리소스를 단순히 읽어오기만 하는 메소드이기 때문에 당연히 여러..
계층화 아키텍처 (Layered Architecture) / MVC Pattern / Node.js에서의 적용
계층화 아키텍처란 "좋은 코드(협업 가능한 코드)를 작성하기 위해 특정 역할과 관심사로 코드를 모듈화 하는 것" 그렇다면 좋은 코드란 무엇일까 확장성(extensibility) - 시스템의 규모가 커질 경우를 대비할 수 있어야 한다. 재사용성(reusability) - 반복되는 로직을 함수로 분리하고, 설계한 구조를 재사용 할 수 있어야 한다. 유지-보수 가능성(maintability) - 여러 로직이 뒤엉키면 코드는 유지 보수가 어려워진다. 가독성(readability) - 어려운 로직 일수록 더 가독성이 높아야 한다. 어려운 로직을 쉽고 간단하게 구현하는 것이 좋은 코드다. 프로젝트의 구조 또한 한 눈에 그려져야 한다. 테스트 가능성(testability) - 테스트를 하기 쉬운 코드는 모듈화가 잘 ..