코딩공부/개발지식 61

데이터베이스 인덱스(Index)의 이해와 활용

인덱스란 무엇인가?인덱스는 데이터베이스에서 검색 속도를 향상시키기 위해 사용되는 자료 구조입니다. 책의 찾아보기와 유사한 역할을 하며, 원하는 정보를 빠르게 찾을 수 있게 해줍니다.예를 들어, 도서관에서 책을 찾는 상황을 생각해 봅시다. 인덱스가 없다면 모든 책장을 일일이 살펴봐야 하지만, 도서 분류 시스템(인덱스)이 있다면 원하는 책의 위치를 빠르게 찾을 수 있습니다. 인덱스의 작동 원리인덱스는 주로 B-tree(Balanced Tree) 구조를 사용합니다. B-tree의 주요 특징은 다음과 같습니다:a) 균형 트리: 모든 리프 노드가 같은 레벨에 있어 검색 성능이 일정합니다.b) 탐색 트리: 항상 정렬된 상태를 유지하여 빠른 검색이 가능합니다.c) 다중 데이터 저장: 하나의 노드에 여러 데이터를 저장..

도커(Docker)와 쿠버네티스(Kubernetes)의 개념

[ 공부배경 ]개발 공부를 시작하고, 내일배움캠프 끝자락쯤에 도커라는 단어를 들어봤다.최종프로젝트로 바빠서 뭐하는 기술이지? 궁금해했지만새로운 기술보다는 프로젝트 마무리가 더 급했다.이후 프로젝트도 끝나고, 이력서 수백개씩 넣고 취업을 했고 1년이 지났다.이제 이직준비를 하면서 많은 회사에서 도커와 쿠버네티스 경험을 필요로 한다는 것을 보고 궁금해졌다.가볍게 유뷰트를 보고 정리해보려고 한다. 0. 요약 1. 서버와 컨테이너의 개념컨테이너는 일종의 서버로, 프로그램 소프트웨어가 실행되는 장소이다.서버는 단순히 하드웨어를 의미하며, 컴퓨터와 유사한 개념으로 이해하면 된다.모든 회사는 IT 서비스를 제공하기 위해 소프트웨어를 운영한다.개발자는 자신의 PC에서 소스 코드를 작성하고, 이를 테스트하기 위해 임시 ..

Part 1. 전산기초

좋은 코드란 무엇인가? ‘좋은 코드’의 기준이 조금씩 다르고 각각의 경험을 기반으로 좋은 코드를 정의하고 있다. 세간에 좋은 코드의 정의는 정말 많다. 읽기 쉬운 코드 중복이 없는 코드 테스트가 용이한 코드 결론은? 좋은 코드를 왜 작성해야 하는지부터 고민했던 과정을 글로 정리해보았다. 코드 간의 의존성을 고민하자. 합의된 규칙으로 일관성있게 작성하자. 적절하게 확장 가능하도록 설계하자. 어쩔 수 없는 코드는 주석과 함께 격리하자. 답은 테스트 코드 기반의 자동화 테스트다. 객체지향 프로그래밍 (OOP) 객체 지향적 설계 원칙 SRP(Single Responsibility Principle) : 단일 책임 원칙클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 한다. O..

[7회] Call by value vs Call by reference / DDD vs MSA

1. Call by value와 Call by reference에 대해 설명해주세요. 자바스크립트에서는 원시 타입(primitive type)의 값은 call by value(값에 의한 호출)로 전달되고, 객체 타입(object type)은 call by reference(참조에 의한 호출)로 전달됩니다. Call by value는 변수에 저장된 값을 복사해서 전달하는 방식입니다. 이 방식에서는 변수의 복사본이 전달되므로 함수 내부에서 전달 받은 값을 변경해도 원래 변수의 값은 변경되지 않습니다. 반면에 call by reference는 변수 자체가 전달됩니다. 이 방식에서는 해당 변수의 주소를 전달하므로 함수 내부에서 전달 받은 값을 변경하면 원래 변수의 값도 변경됩니다. Call by value는 변..

[26회 - 데일리과제] Nest.js 라이프사이클

1. Nest.js 라이프사이클에 대해 설명해주세요. 💘 NestJS는 Node.js를 위한 프레임워크로, 서버 사이드 애플리케이션 개발을 위해 사용됩니다. 기본적인 순서는 다음과 같습니다. Middleware => Guards => Pre-Interceptors => Pipes => Controller => Service => Post-Interceptors => ExceptionFilter => Response 1. Middleware 전역으로 바인딩 되어있는 미들웨어를 가장먼저 실행 합니다. (main.ts 에 app.use로 바인딩 되어있는 미들웨어들) Express와 비슷한 방식으로 바인딩 된 순서대로 순차적으로 실행 됩니다. 2. Guards 사용자의 권한을 체크하는 로직이 들어간다 예를들어 ..

[6회] 자료구조 & 알고리즘 / 주소창에 “www.google.com” 쳤을때 일어나는 일

1. 자료구조 및 알고리즘 개념에 대해 설명해주세요. 자료구조는 데이터를 저장하고 관리하는 방법입니다. 궁극적인 목표는 데이터를 빠르고 안정적으로 처리하는 것입니다. 알고리즘은 어떠한 문제를 해결하기 위해 정해진 절차로 특정 문제를 효율적이고 빠르게 해결하는 것을 목표로 합니다. 🔥꼬리질문🔥 2. 주소창에 “www.google.com” 쳤을때 일어나는 일을 설명해주세요. 첫째 DNS 조회를 합니다.입력받은 주소를 DNS서버에 보내 해당 도메인 IP주소로 변환합니다. 둘째 서버 연결을 합니다. 받은 IP주소로 해당 서버에 연결을 시도합니다. 셋째 서버에 HTTP요청을 합니다. 넷째 서버는 요청받은 값에 대한 응답을 생성합니다. 다섯째 응답받은 값을 렌더링합니다. 여섯째 렌더링 된 값을 웹페이지에 표시합니다..

[5회] TypeORM & Query builder / JWT & 세션 & 쿠키

1. TypeORM 및 Query builder 개념에 대해 설명해주세요. TypeORM은 Node.js에서 관계형 데이터베이스를 사용하는 데 사용되는 ORM입니다. ORM은 객체 지향 프로그래밍 언어와 관계형 데이터베이스 간의 매핑을 제공하는 소프트웨어 도구입니다. Query Builder는 TypeORM의 기능 중 하나로 SQL 쿼리에 대한 깊은 이해없이 데이터베이스에 대한 복잡한 쿼리를 작성할 수 있습니다. 🔥꼬리질문🔥 N+1 문제는 데이터베이스 쿼리 성능 문제로, 1번의 쿼리로 N건의 데이터를 가져왔는데, 관련 컬럼을 얻기 위해 쿼리를 N번 추가로 수행하는 문제를 말합니다. 이 문제는 쿼리결과 건수마다 참조 정보를 얻기 위해 건수만큼 반복해서 쿼리를 수행하..

[25회 - 데일리과제] Redis & Memcached / XSS & CSRF

1. Redis와 Memcached의 차이점에 대해 설명해주세요. Redis와 Memcached는 모두 키-값 저장소이지만 몇 가지 주요 차이점이 있습니다. Redis는 Memcached보다 더 광범위한 데이터 유형을 지원합니다. Redis는 정수, 문자열, 목록 및 해시와 같은 다양한 데이터 유형을 저장할 수 있는 반면 Memcached는 문자열만 저장할 수 있습니다. Redis는 Memcached보다 더 많은 기능을 제공합니다. Redis는 스트림, 큐 및 세션을 포함한 다양한 기능을 제공하는 반면 Memcached는 이러한 기능을 제공하지 않습니다. Redis는 Memcached보다 확장성이 뛰어납니다. Redis는 분산된 방식으로 실행할 수 있는 반면 Memcached는 분산된 방식으로 실행할 수..

[4회] RDBMS & NoSQL / REST API

1. RDBMS과 NoSQL에 대해 설명해주세요. RDBMS는 관계형 데이터베이스로 데이터를 테이블에 저장하는 데이터베이스입니다. 엔티티 간의 관계를 정의하고 스키마를 엄격하게 관리합니다. 반면 NoSQL은 키-값, JSON문서, 그래프 등의 다양한 방법으로 데이터를 저장하는 데이터베이스입니다. 일관성이 낮은 대량의 데이터를 저장하는 애플리케이션에 적합합니다. RDBMS는 데이터를 테이블에 저장하는 관계형 데이터 모델을 사용합니다. NoSQL 데이터베이스는 JSON 문서, 키-값 쌍 또는 그래프와 같은 다양한 방법으로 데이터를 저장할 수 있습니다. RDBMS는 데이터가 항상 일관되게 유지되도록 하는 ACID 속성을 지원합니다. NoSQL 데이터베이스는 일관성 속성을 지원하지 않을 수 있습니다. RDBMS..

[3회] 자바스크립트&타입스크립트 / Let Var Const 차이점

1. 자바스크립트와 타입스크립트의 차이점을 설명해주세요. 자바스크립트는 동적타입의 인터프리터 언어로 런타임에서 오류를 발견할 수 있습니다. 반면 타입스크립트는 정적타입의 컴파일언어로 컴파일타임에 오류를 발견할 수 있습니다. 주요 차이점은 타입시스템의 유무입니다. 자바스크립트는 빠른 코드 작성과 작고 간단한 프로젝트에는 적합하지만, 타입스크립트는 대규모 프로젝트와 유지보수가 필요한 프로젝트에는 더욱 적합합니다. 동적타입은 변수의 타입이 실행 시간에 결정되는 것을 의미합니다. 즉, 변수를 선언할 때 타입을 지정하지 않습니다. 반면 정적타입은 변수의 타입을 컴파일 시간에 결정하는 것을 의미합니다. 즉 변수를 선언할 때 반드시 타입을 지정해야 합니다. 인터프리터 언어는 컴파일 과정 없이 코드를 한 줄씩 읽어가며..