728x90

전체 글 164

Index & B-Tree [CS]

- 인덱스란 DB에서 데이터의 저장, 수정, 삭제에 대한 성능을 희생시켜 검색 성능을 높여주는 방법이다. 인덱스의 가장 큰 특징은 데이터들이 정렬이 되어있다는 점이다. - 인덱스는 where 절에서 ‘자주 조회’하고 ‘수정 빈도’가 낮으며 ‘데이터 중복’이 적은 컬럼을 선택하는 것이 좋다. join 조건으로 자주 사용되는 컬럼도 인덱스로 사용하면 좋다. - 하지만 인덱스를 사용하는 것이 무조건 좋은 것은 아니다. 인덱스는 INSERT, UPDATE, DELETE 같은 DML에 취약하다. 데이터가 추가되거나 값이 바뀐다면 인덱스 테이블 내에 있는 값들을 다시 정렬을 해야 한다. 또한 인덱스를 관리하기 위해서는 DB에 저장공간이 추가로 필요하기 때문에 인덱스 생성은 마지막 수단으로 강구해야 할 문제이다. -..

CS 2022.12.14

Process & Thread[CS]

- 프로세스(Process)란 메모리에 올라와 실행중인 프로그램이며, 운영체제로부터 시스템 자원을 할당받는 작업의 단위이다. - 프로그램이 실행되면 프로세스로 변경된다. 프로세스 실행 과정은 다음과 같다. - 생성 상태 : 프로그램을 메모리에 가져와 실행 준비가 완료된 상태, PCB가 생성된다. - 준비 상태 : 프로세스가 메모리에 적재된 상태로, 실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태 - 실행 상태 : 선택된 프로세스가 CPU를 사용하는 상태 - 대기 상태 : 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때 까지 기다리는 상태- - 완료 상태 : 프로세스가 종료된 상태, PCB가 삭제된다. - PCB(Process Control Block)은 프로세스의 정보를 포함..

CS 2022.12.14

Deadlock [CS]

- Deadlock이란 두 개 이상의 프로세스가 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며, 서로의 작업이 끝나기만을 기다리는 것이 영원히 끝나지 않는 상황을 말한다. - Deadlock은 4가지의 발생조건이 있다. 4가지 조건이 모두 만족해야 발생할 가능성(무조건 발생하는 것 아님)이 있으며, 하나라도 만족하지 않으면 Deadlock이 발생하지 않는다. (1) 상호 배제(Mutual Exclusion) : 한 자원에 대한 여러 프로세스 동시 접근 불가 (2) 점유 대기(Hold and Wait) : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다림 (3) 비선점(No Preemption) : 프로세스는 다른 프로세스의 자원을 강제로 가져올 수 없음 (4) 순환 ..

CS 2022.12.14

ORM [CS]

- ORM(Object Relational Mapping)이란 객체-관계 매핑의 줄임말이다. 즉, 객체라는 개념을 구현한 클래스와 RDB에서 쓰이는 데이터인 테이블을 자동으로 매핑하는 것을 의미한다. 그러나 클래스와 테이블은 서로가 기존부터 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생하는데, 이를 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결한다. 따라서 ORM을 이용하면 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 된다. - ORM은 SQL문이 아닌 클래스의 매서드를 통해 DB를 조작할 수 있고, 객체로 작성되었기 때문에 재활용할 수 있다. 또한 매핑하는 정보가 명확하기 때문에 ERD를 보는 의존도를 낮출 수 있..

CS 2022.12.14

MSA [CS]

- MSA(Micro Service Architecture)란 하나의 큰 어플리케이션을 여러개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 형태이다. 아래와 같은 특징을 지닌다. (1) 마이크로 서비스는 스스로 돌아갈 수 있음 (2) 독립적으로 배포가 가능한 서비스임 (3) 각 서비스는 다른 서비스에 대한 의존적이 작아야 함 (4) 각 서비스는 개별 프로세스로 구동되며, REST API와 같은 가벼운 방식으로 통신되어야 함 - 위와 같은 특징으로 인해 서비스 확장성이 좋고, 클라우드 환경에 적합하다는 단점이 있다. 또한 에러 관리 측면에서도 부분적 서비스 장애에 대한 격리가 수월하다. - 하지만 서비스간 호출시 API를 사용하기 때문에 비용이 증가하며, 데이터 관리 관점에서 데이터가 여러..

CS 2022.12.14

이미지 업로드를 위한 웹서버 구현

1. 폴더 생성 및 이동 mkdir upload && cd upload 2. 프로젝트 생성 (-y 옵션으로 기본값으로 package.json 생성) npm init -y 3. 패키지 추가 설치 npm install express cors express-fileupload morgan lodash body-parser --save express - 노드 JS에서 REST API를 만들기 위한 엄청 유명한 웹 생성 프레임워크 cors - CORS (Cross-Origin Resource Sharing) 요청들을 허용하기 위한 또 다른 Express 미들웨어 express-fileupload - 파일 업로드를 위한 간단한 익스프레스 미들웨어 입니다. multipart/form-data 요청을 파싱 morgan..

Web Server 2022.12.08

Elasticsearch 정리 #2 (데이터 색인과 텍스트 분석)

- RDBMS에서는 특정 단어가 들어간 데이터를 검색하려면 like 검색을 해야해서 속도가 느리다. 하지만 엘라스틱서치는 데이터를 저장할 때 루씬기반의 역 인덱스 구조를 만들어 저장하기때문에 검색이 빠르다. 물론 대다수에 문서에 등장하는 단어라면 오히려 더 속도가 떨어 질 수 도 있다(ex) a, the, and 등). 하지만 Elasticsearch에서는 이 단어들을 불용어(stopword)로 등록하고 인덱스에서도 제거하며, 검색어에 등장해도 무시하게 설정이 되어 있다. - 엘라스틱 서치에서는 이 특정 단어를 Term이라고 부른다. 또한 역 인덱스를 데이터가 저장되는 과정에서 만들기 때문에 데이터를 입력할 때 저장이 아닌 색인을 한다고 표현한다. - 엘라스틱서치는 문자열 필드가 저장될 때 데이터에서 검..

Elasticsearch 2022.11.30

Elasticsearch 정리 #1 (기초 개념)

- 엘라스틱서치는 (1)루씬(Lucene) 기반의 오픈소스 검색 엔진이다. HTTP 기반의 REST API를 활용하여 요청 및 응답에 JSON을 활용해 다양한 플랫폼에서 개발이 가능하며, 정형화되지 않은 문서도 자동으로 색인하고 검색할 수 있다(Schemaless). 또한 (2)멀티테넌시가 가능하고 전문 검색 엔진을 제공한다. logstash 또는 fluentd로 로그를 변환하고 kibana를 연결하여 준실시간으로 로그를 분석하고 시각화 할 수 있다. NoSQL의 일종으로 분류할 수 있고, 기본적으로 검색엔진이지만 MongoDB 같은 대용량 스토리지로도 활용이 가능하다. - (1) 아래 그림을 보면 RDB와 루씬 기반의 데이터 구조의 극명한 차이점을 볼 수 있다. RDB는 행을 기반으로, 엘라스틱서치는 ..

Elasticsearch 2022.11.30

Elasticsearch Query 모음

GET - 버전 및 세부정보 확인 GET / - 모든 컬럼 조회 GET _search { "query": { "match_all": {} } } - fluentd-test 인덱스에서 message 필드값이 "test" 인 모든 컬럼 조회 (timestamp 기준으로 내림차순 정렬) GET fluentd-test/_search { "sort" : { "created": "desc"}, "query": { "match": { "message": "test" } } } - 모든 인덱싱 조회 GET _cat/indices (+) 컬럼명까지 같이 조회 : GET _cat/indices?v - fluentd-test 인덱스의 매핑구조 조회 GET fluentd-test/_mapping - 특정 인덱싱 조회 GET ..

Elasticsearch 2022.11.15

Kubenetes 정리#3(helm)

- 컨테이너 인프라 환경을 구성하는 도커와 쿠버네티스에 대해 알아보았다. 새로 개발한 어플리케이션으 쿠버네티스에서 사용하는 과정은 docker build -> docker push -> kubectl create -> kubectl expose 이다. 이러한 과정을 흔히 파이프라인(Pipeline)이라고 한다. 대부분의 IT작업은 파이프라인 자동화를 시켜 진행한다. - 자동화는 흔히 CI/CD 두 가지로 정의 된다. 간단히 설명하면 CI는 빌드/테스트 자동화 과정이고, CD는 배포 자동화 과정이다. CI를 마친 어플리케이션은 신뢰할 수 있는 상태가 되며 CD는 CI과정을 거친 어플리 케이션을 실제 사용하는 환경에 자동으로 배포하는것을 말한다. - CI/CD를 컨테이너 인프라 관점에서 보자면, 개발자가 소..

Kubenetes 2022.09.29