오늘 뭐했냐/개발에 대한 주저리 124

23.09.27 모듈화(Modularization)

모듈화 코드를 작은 독립적인 모듈 또는 컴포넌트로 분해하는 프로세스를 의미한다. 모듈이란? 특정 기능이나 목적을 수행하는 코드의 논리적 단위입니다. 모듈은 일반적으로 관련된 함수, 클래스 또는 파일로 구성된다. 모듈의 특징 독립성: 각 모듈은 독립적으로 동작할 수 있어야 하며, 다른 모듈에 크게 의존하지 않고 자체적으로 기능을 수행할 수 있어야 한다. 인터페이스: 모듈은 외부와 상호작용하기 위한 인터페이스를 정의하는데, 이 인터페이스는 모듈 외부에서 모듈의 기능을 호출하거나 데이터에 접근하는 방법을 규정한다. 재사용성: 모듈화된 코드는 다른 프로젝트나 부분에서 재사용될 수 있어야 한다. 가독성: 모듈화된 코드는 논리적으로 구성되어 있어 코드를 읽고 이해하기 쉬워진다. 유지보수성: 모듈은 수정 또는 업데이..

23.09.26 의존성 주입(Dependency Injection, DI)

기존에도 찾아봤던 내용이지만 그 때는 이해하기 힘들었다. 대부분 스프링에 대한 내용만 있었고, 나중에 다시 공부할 일이 있을거란 생각으로 가볍게 보고 넘어갔는데 이번에 Nest.JS 강의를 보면서 의문이 들어서 조금 더 끈질기게 찾아보고 이해하려고 하다보니 조금은 알 것 같아서 찾아본 내용을 정리하려고 한다. 의존성 주입 의존성 (Dependency): 의존성은 한 객체가 다른 객체에 의존하는 상황이다. 주입 (Injection): 의존성을 생성자, 메서드 매개변수, 또는 속성으로 받아서 사용한다. 이를 통해 객체는 직접 의존성을 생성하지 않고 외부로부터 주입 받게 된다. 의존성 주입을 사용하는 이유 결합도 감소(Decoupling): 객체 간의 결합도를 낮추어 코드의 변경이나 유지 보수가 더 쉬워진다...

23.09.25 실행 컨텍스트(Execution Context)(다시 정리)

기존에 정리한 글이 있어서 다시 보니까 글이 너무 난잡해서 오히려 더 내용을 모르겠어서 다시 정리했다. 솔직히 지금도 잘한다 말할 순 없지만 이것도 이렇게 쓰다보니 느는 것 같긴다. 실행 컨텍스트 실행할 코드에 제공할 환경 정보들을 모아 놓은 객체이며, 자바스크립트의 동적 언어로서의 성격을 가장 잘 파악할 수 있는 개념이다. 언제 생길까? 전역공간 함수를 실행한다. eval() 함수를 실행한다. block을 만든다 (ES6+) 어떻게 동작할까? // ------------------- (1) var a = 1; function outer() { function inner() { console.log(a); var a = 3; // --------------- (2) } inner(); // -------..

23.09.24 미들웨어(Middleware)

미들웨어(Middleware) 소프트웨어 애플리케이션에서 클라이언트와 서버 간의 요청(request)과 응답(response) 사이에서 동작하는 소프트웨어 구성 요소 또는 함수입니다. 미들웨어는 애플리케이션의 중간에 위치하여 다양한 작업을 수행하고 요청과 응답 데이터를 처리, 변환 또는 조작하는 역할을 한다. 그래서 무엇을 할 수 있냐? 요청 파싱(Request Parsing) 로그 기록(Logging) 인증과 권한 부여(Authentication and Authorization) 캐싱(Caching) 압축(Compression) 에러 처리(Error Handling) 라우팅(Routing) 응답 변환(Response Transformation) 클라우드 컴퓨팅에서 미들웨어는? 조직이 클라우드 네이티브 ..

23.09.23 B-Tree

B-Tree B트리는 이진트리에서 발전되어 모든 리프노드들이 같은 레벨을 가질 수 있도록 자동으로 벨런스를 맞추는 트리입니다. 또한 정렬된 순서를 보장하고, *멀티레벨 인덱싱을 통한 빠른 검색을 할 수 있기 때문에 DB에서 사용하는 자료구조 중 한 종류라고 합니다. *멀티레벨 인덱싱 : 데이터를 여러 수준의 인덱스로 구성하여 데이터 접근을 빠르게 하는 기술 B트리는 이진트리와 다르게 하나의 노드에 많은 수의 정보를 가지고 있을 수 있습니다. 최대 M개의 자식을 가질 수 있는 B트리를 M차 B트리라고 하며 다음과 같은 특징을 같습니다. 노드는 최대 M개 부터 M/2개 까지의 자식을 가질 수 있습니다. 노드에는 최대 M−1개 부터 [M/2]−1개의 키가 포함될 수 있습니다. 노드의 키가 x개라면 자식의 수는..

23.09.22 Call by reference

Call by reference 함수 호출 방식 중 하나로, 함수에 변수를 전달할 때 메모리 상의 해당 변수의 주소를 전달하는 방법을 의미합니다. 이로 인해 함수 내에서 해당 변수의 값을 변경하면, 이 변경은 원래의 변수에도 반영됩니다. 즉, 원본 변수와 함수 내의 매개변수는 동일한 메모리 주소를 참조하게 됩니다. Call by reference의 특징: 변수의 주소 전달: 함수를 호출할 때 변수의 실제 메모리 주소가 전달됩니다. 원본 데이터 수정: 함수 내에서 매개변수를 변경하면, 이 변경은 원본 변수에도 반영됩니다. 메모리 효율: 데이터의 복사본을 만들지 않기 때문에 큰 데이터 구조를 전달할 때 메모리 사용이 효율적입니다. 주의 사항: 함수 내에서 매개변수의 값을 변경하면 원본 데이터도 변경되므로 실..

23.09.21 Base64 인코딩

Base64 바이너리 데이터를 ASCII 문자열로 표현하기 위한 인코딩 방식입니다. 문자 세트: Base64 인코딩에 사용되는 문자 세트는 대문자 A-Z, 소문자 a-z, 숫자 0-9, 그리고 '+' 와 '/' 총 64개의 문자로 이루어져 있습니다. 또한, *패딩에 '=' 문자가 사용됩니다. *패딩: 데이터를 특정 크기나 형식에 맞추기 위해 추가하는 여분의 데이터를 의미 작동 방식: *바이너리 데이터를 3바이트씩 그룹화합니다. 즉, 24비트의 데이터 블록을 형성합니다. 이 24비트 블록을 4개의 6비트 블록으로 나눕니다. 각 6비트 블록은 Base64 문자 세트의 하나의 문자에 매핑됩니다. 따라서, 3바이트의 바이너리 데이터는 4개의 Base64 문자로 변환됩니다. 데이터의 길이가 3의 배수가 아닐 경우..

23.09.20 동시성과 병렬성

동시성 (Concurrency) 정의: 여러 작업이 시간적으로 겹치게 실행되는 것. 이것은 실제로 작업들이 동시에 실행되는 것을 의미하는 것은 아니며, 단일 코어 시스템에서도 동시성을 구현할 수 있습니다. 목적: 동시성은 효율성과 반응성을 향상시키기 위해 사용됩니다. 예를 들어, 한 작업이 I/O 바운드 작업 (예: 디스크에서 데이터 읽기)을 수행하는 동안 다른 작업을 수행하여 시스템의 활용도를 높일 수 있습니다. 구현: 쓰레드, 코루틴, 비동기 I/O 등과 같은 기술로 구현됩니다. 병렬성 (Parallelism) 정의: 두 개 이상의 작업이 동시에, 즉 동시에 실행되는 것. 병렬성은 일반적으로 여러 코어나 프로세서에서 작업을 동시에 실행하여 작업을 빠르게 완료하는 데 초점을 맞춥니다. 목적: 병렬성의 ..

23.09.19 복합 인덱스(Composite Index, Compound Index)

복합 인덱스 데이터베이스 테이블에서 두 개 이상의 컬럼을 합쳐서 하나의 인덱스로 생성한 것이다. 이러한 인덱스는 여러 컬럼의 조합에 대한 쿼리 성능을 개선하는 데 유용하다. 복합 인덱스의 특징: 순서 중요: 복합 인덱스에서 컬럼의 순서는 매우 중요하다. index(first_name, last_name)은 first_name 후에 last_name 순으로 데이터를 정렬 한다. 따라서 first_name에 대한 검색은 빠르지만, last_name만을 사용하여 검색하면 인덱스가 사용되지 않을 수 있다. 효율적인 검색: 복합 인덱스는 해당 컬럼들의 조합에 대한 검색이나 정렬에서 효율적이다. 데이터베이스 공간: 인덱스는 추가적인 저장 공간을 사용하므로, 불필요한 복합 인덱스는 피하는 것이 좋다. 복합 인덱스 사..

23.09.18 해시테이블 다시 학습

해시 테이블 해시함수를 사용하여 변환한 값을 색인(index)으로 삼아 키(key)와 데이터(value)를 저장하는 자료구조를 말한다. 기본연산으로는 탐색(Search), 삽입(Insert), 삭제(Delete)가 있다. 구성요소 버킷 (Bucket) 해시 테이블의 각 슬롯을 나타내며, 하나 이상의 키-값 쌍을 저장할 수 있다. 충돌 해결 방법에 따라 버킷의 구현이 달라진다. 해시 함수 (Hash Function) 키를 받아 정수 값을 반환하는 함수로, 반환된 정수 값은 버킷의 인덱스로 사용된다. 해시 함수는 균등하게 값을 분포시켜야 하며, 동일한 키에 대해서는 항상 동일한 해시 값을 반환해야 한다. 해시 함수의 품질과 특성은 해시 테이블의 성능, 효율성, 그리고 안정성에 큰 영향을 미친다. 충돌 해결 ..