코딩공부/개발지식 61

[16회 - 데일리과제] 이분탐색 / 스토리지 엔진 & DB Lock

1. 이분탐색에 대해 설명해보세요. 이분탐색은 정렬된 배열에서 데이터를 찾는 알고리즘입니다. 찾고자 하는 값과 배열의 중간값을 비교하여 탐색 범위를 절반씩 줄여나갑니다. 중간값이 찾는 값보다 크면 왼쪽 부분을, 작으면 오른쪽 부분을 탐색합니다. 이 과정을 반복하여 원하는 값을 찾을 때까지 수행합니다. 이분탐색은 O(log N)의 시간복잡도를 가지며 데이터가 많아질수록 유리합니다. 단, 정렬된 배열에서만 적용할 수 있다는 제약이 있습니다. 따라서 정렬된 데이터는 이분탐색, 정렬되지 않은 데이터에서는 선형탐색이 더 적합합니다. 2. 스토리지 엔진과 DB Lock에 대해 설명해보세요. 스토리지 엔진은 데이터베이스에서 데이터를 저장, 구성 및 액세스하는 방법을 관리하는 소프트웨어입니다. 디스크 또는 메모리에서 ..

[15회 - 데일리과제] 선택 정렬 / Redis

1. 선택정렬 알고리즘에 대해 설명해주세요. 선택 정렬(Selection Sort)은 배열에서 가장 작은 값을 찾아서 배열의 맨 앞에 위치시키고, 그 다음 작은 값을 찾아서 두 번째 위치에 위치시키는 방식으로 정렬하는 알고리즘입니다. 선택 정렬은 비교 정렬이며, 제자리 정렬이라고도 합니다. 선택 정렬의 장점으로는 구현이 쉽고 코드가 직관적이라는 점이 있습니다. 또한, 정렬을 위한 비교 횟수는 많지만 실제로 교환하는 횟수는 적기 때문에 많은 교환이 일어나야 하는 자료 상태에서 효율적으로 사용될 수 있습니다. 선택 정렬의 단점으로는 속도가 느리다는 점이 있습니다. 선택 정렬은 항상 O(n^2)의 시간 복잡도를 갖기 때문에 시간이 오래 걸리는 정렬 방식입니다. 선택 정렬의 과정은 다음과 같습니다: 1. 주어진..

[14회 - 데일리과제] 시간복잡도&공간복잡도 / typeORM & Sequelize

1. 시간복잡도와 공간복잡도에 대해 설명하시오. 시간 복잡도는 데이터가 입력 되었을 때 어떤 문제를 해결하는데 걸리는 알고리즘의 수행 시간을 의미하며, 공간 복잡도는해당 알고리즘이 수행하는 동안의 메모리 사용량을 의미합니다. 빠른 반응이 필요한 경우엔 시간 복잡도가 중요하고, 용량을 아껴야 하는 경우에는 공간 복잡도가 중요해집니다. 최근에는 과거 메모리 공간이 부족하던 때와 달리 컴퓨터 성능의 발달로 공간 복잡도 보다는 시간 복잡도를 중심으로 프로그래밍을 작성하는 경우가 많다고 합니다. 2. typeORM과 Sequelize의 차이점을 얘기해주세요. TypeORM과 Sequelize는 Node.js에서 사용하는 객체지향매핑(ORM) 라이브러리입니다. TypeORM은 주로 TypeScript와 함께 사용되..

[13회 - 데일리과제] 정규화

1. 정규화에 대해 설명해주세요. 정규화란 데이터베이스에서 중복을 최소화하고 데이터 무결성을 향상시키는 프로세스를 말합니다. 정규화는 여러 단계로 이루어져 있으며, 각 단계마다 테이블을 분해하는 방법이 다릅니다. 정규화를 진행하면 데이터베이스의 설계가 개선되고, 데이터의 중복과 무결성 문제를 해결할 수 있습니다. 그러나 과도한 정규화는 데이터베이스의 복잡성이 증가하여 성능에 영향을 미칠 수 있으니 적절하게 사용해야 합니다. 제1정규형은 릴레이션의 모든 도메인이 원자값(Atomic Value)만을 포함하도록 분해하는 것입니다. 즉, 하나의 속성에 여러 개의 값이 들어가 있으면 안됩니다. 제2정규형은 제1정규형을 만족하면서 부분 함수적 종속을 제거하는 것입니다. 즉, 기본키가 아닌 다른 속성들이 기본키의 일..

[12회 - 데일리과제] 트랜젝션 / 인덱스

1. 트랜젝션에 대해 설명해주세요. 트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미합니다. 트랜잭션의 주요 목적은 데이터의 무결성과 일관성을 보장하는 것입니다. 여러 작업을 단일 트랜잭션으로 그룹화하여 트랜잭션 내의 모든 작업이 성공적으로 실행되거나 아무 것도 실행되지 않도록 할 수 있습니다. 트랜잭션은 신뢰할 수 있고 일관된 데이터 처리를 보장하는 ACID속성을 따릅니다. 트랜잭션은 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability)의 4가지 특징을 가집니다. 원자성은 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면..

[11회 - 데일리과제] RDBMS와 NoSQL의 특징 및 차이

1. RDBMS와 NoSQL의 특징 및 차이 RDBMS와 NoSQL은 데이터 저장 방식이 다릅니다. RDBMS는 관계형 데이터베이스로 데이터를 저장하고, 스키마가 정적입니다. 반면에 NoSQL은 유연한 스키마 구조를 갖습니다. RDBMS는 수직 확장이 용이하고, NoSQL은 수평 확장이 용이합니다. RDBMS의 장점으로는 데이터의 분류, 정렬, 탐색 속도가 비교적 빠르며, SQL이라는 구조화된 질의를 통해 데이터를 다룰 수 있습니다. 작업의 완전성을 보장하며, 데이터의 UPDATE가 빠릅니다. 단점으로는 반드시 스키마 규격에 맞춰서 데이터를 다뤄야 하며, 데이터 처리에 대한 부하 발생시 처리가 어렵습니다. NoSQL의 장점으로는 데이터간의 관계를 정의하지 않아 테이블간의 관계 (join)가 불필요하며, ..

[10회 - 데일리과제] 웹서버와 웹어플리케이션서버/ 프로그래밍언어와 스크립트 언어

1. 웹 서버 (Web Server)와 웹 어플리케이션 서버 (Web Application Server)의 차이점은 무엇인가요? 웹 서버는 정적 데이터를 처리하고, 웹 어플리케이션 서버는 동적 데이터를 처리합니다. 이 특징으로, 실무에서는 이 둘을 연동하여 사용하는데, WAS는 동적 처리에 최적화 되어 있는 서비스이기 때문에 처리 속도를 위해, 정적처리는 웹서버에서 처리를 하고, 동적 컨텐츠는 WAS에서 처리합니다 2. 프로그래밍 언어 (Programming Language)와 스크립트 언어 (Scripting Language)의 차이점은 무엇인가요? 스크립트 언어는 일반적으로 스크립트를 지원하는 프로그래밍 언어 유형입니다. 스크립트는 다른 프로그램을 제어하기 위해 작성된 프로그램입니다. 스크립트 언어는..

[9회 - 데일리과제] 정규표현식 / 호이스팅

1. 정규 표현식에 대해 설명해보세요. 정규 표현식(Regular Expression)은 문자열에서 특정한 패턴을 찾거나 대체하는데 사용되는 문자열 처리 기법입니다. 정규 표현식은 특수한 문자와 규칙을 사용하여 문자열의 패턴을 정의하고, 이 패턴을 사용하여 문자열에서 원하는 부분을 찾거나 대체할 수 있습니다. 2. 자바스크립트의 호이스팅이란 무엇인가요? 호이스팅(Hoisting)은 자바스크립트에서 변수와 함수 선언이 코드의 최상단으로 이동하는 것처럼 동작하는 현상입니다. 이 현상은 자바스크립트 엔진이 코드를 실행하기 전에 코드를 스캔하면서 변수와 함수 선언을 찾아내고 이들을 메모리에 저장하는 과정에서 발생합니다.

[8회 - 데일리과제] 클라우드 컴퓨팅 / 멀티스레드&멀티프로세스

1. 클라우드 컴퓨팅에 대해 설명해보세요. 클라우드 컴퓨팅은 사용자의 직접적인 활발한 관리 없이 특히, 데이터 스토리지 (클라우드 스토리지)와 컴퓨팅 파워와 같은 컴퓨터 시스템 리소스를 필요 시 바로 제공 (on-demand availability)하는 것을 말합니다. 일반적으로는 인터넷 기반 컴퓨팅의 일종으로 정보를 자신의 컴퓨터가 아닌 클라우드에 연결된 다른 컴퓨터로 처리하는 기술을 의미합니다. 2. 멀티스레드와 멀티프로세스의 차이점은? 멀티스레딩 (Multithreading)은 하나의 프로세스 안에서 여러 개의 실행 흐름 (스레드)을 두는 방식으로 여러 실행을 동시에 실행하도록 하나의 프로세스를 운영하는 방식입니다. 멀티 프로세싱 (Multiprocessing)은 다수의 프로세서로 다수의 "프로세스..

[7회 - 데일리과제] 모듈 / 테스트

1. 모듈이란 무엇인가요? Node.js에서 모듈을 사용하는 방법은 무엇인가요? 모듈이란 관련 코드를 단일 코드 단위로 캡슐화하는 것입니다. Node.js에서 모듈을 사용하는 방법은 require() 함수를 사용하여 모듈을 가져오는 것입니다. require() 함수를 사용하여 다른 파일의 exports 객체를 가져와서 사용할 수 있습니다. 2. 테스트에 대해 어떤 것을 알고 있나요? 테스트는 소프트웨어 개발의 중요한 부분입니다. 프로그래머가 알아야 할 테스트의 종류로는 단위 테스트(Unit Test), 통합 테스트(Integration Test), 시스템 테스트(System Test), 인수 테스트(Acceptance Test) 등이 있습니다. 단위 테스트는 응용 프로그램에서 테스트 가능한 가장 작은 소..