전체 글 221

js reduce()

reduce()는 배열의 각 요소를 순회하며 callback 함수의 실행 값을 누적하여 하나의 결과값을 반환함 arr.reduce(callback[, initalValue]) callback 함수 4가지 인수 1. acc : callback 함수의 반환값을 누적 2. cur : 배열의 현재 요소 3. index(Optional) : 배열의 현재 요소의 인덱스 4. arr(Optional) : 호출한 배열 initialValue(Optional) 최초 callback 함수 실행시 acc 인수에 제공되는 초기값 initialValue 미설정시 초기값을 배열의 첫번째 요소 사용 빈배열에서 initialValue미 설정시 에러 발생 Ex) 가장 간단한 표현 const a = [1, 3, 5, 7, 9]; let..

coding/JS 2022.12.19

시간 복잡도, 공간 복잡도

빅오 표기법이란 코드를 분류하거나 비교할 수 있도록 하는 시스템 알고리즘 성능을 분석하기 위해 빅오 표기법 사용 빅오란 입력된 내용이 늘어날수록 알고리즘에 실행시간이 어떻게 변하는지 설명하는 공식적인 방법 입력의 크기와 실행시간의 관계 시간, 공간 복잡도에 대한 이해가 가능함(정확도 보단 전체적인 추세를 가늠함) 빅오의 특징 산수는 상수 시간 -> O(1) 변수 배정(할당)은 상수 시간 -> O(1) 배열 엘리먼트를 인덱스로 접근하면 상수 시간 -> O(1) 객체를 키를 사용하여 접근하면 상수 시간 -> O(1) 루프는 루프의 길이(n) * 루프 안 연산 -> O(n) 중첩 루프라면 -> O(n^2) 빅오 표기 O(1) : 상수 시간 입력 크기(n)에 상관없이 일정한 연산을 수행 O(logn) : 로그 ..

coding/IT, CS 2022.11.26

기술 면접 준비 - 네트워크

- GET과 POST GET URI와 헤더에 데이터를 담아서 전송 데이터 크기가 제한적 URI에 포함된 데이터는 사용자에게 그대로 노출됨(보안에 취약) GET요청은 캐싱이 가능하므로 단순 조회, 데이터가 사용자에게 노출되어도 상관 없을때 사용 POST URI와 헤더, body에 데이터를 담아서 전송 GET요청 보다 담을 수 있는 데이터 크기가 큼 body 안에 담긴 데이터는 사용자에게 노출 되지 않으므로 안정적인 데이터 전송이 가능함(개발자 도구에선 노출) - HTTP와 HTTPS HTTP HyperText Transfer Protocol 텍스트 기반의 통신규약, 인터넷에서 데이터를 주고 받을 수 있는 프로토콜 특징 비연결성 : 클라이언트가 서버에 요처을 보내고 응답을 하면 연결을 끊는 방식 무상태성 :..

NginX란

NginX란 트래픽이 많은 웹사이트의 서버(WAS)를 도와주는 비동기 이벤트 기반구조의 경량 웹서버 프로그램 정적 파일을 응답해주는 웹서버로 활용되거나 리버스 프록시를 활용하여 WAS의 부하를 줄일 수 있는 로드밸런서의 역할을 수행함 웹서버 : 단순히 정적 파일 응답. HTML, CSS, JS 같은 정적인 정보를 사용자(브라우저)에 전송해주는 역할 WAS(Web Application Server) : 클라이언트 요청에 대해 동적 처리가 이뤄진 후 응답. 비즈니스 로직, 데이터 처리를 하는 서버 NginX의 특징 아파치(apache) 보다 동작이 단순하고 전달자 역할만 하기 때문에 가볍고, 동시접속에 특화되어 여러 요청을 한 번에 처리할 수 있음 리버스 프록시 서버로 활용하여 서버의 부하를 줄 일 수 있는..

coding/IT, CS 2022.11.19

MVC, MVP, MVVM 패턴의 이해

역할을 분리하는 이유 각각의 역할을 나눠 코드를 관리하기 위함 역할이 나눠져 있기 때문에 유지보수와 개발 효율이 좋음. MVC 패턴 MODEL + VIEW + CONTROLLER가 합쳐진 모습 가장 많이 사용되는 디자인 패턴 중 하나 사용자가 컨트롤러(Action)를 통해서 모델을 변화시키면 뷰가 업데이트되는 형태 - 모델(Model) : 데이터가 변경되고 조작되는지에 대한 비즈니스 로직을 나타낸다. - 뷰(View) : UI 컴포넌트를 나타내고, 뷰는 컨트롤러가 폼 형태로 되돌려준 결과를 보여준다. - 컨트롤러(Controller) : 들어오는 요청을 처리하고, 모델에서 뷰로 가는 과정을 통해 사용자의 데이터를 가져온다. MVC 패턴 동작 1. 사용자의 Action으로 컨트롤러에 들어옴 2. 컨트롤러는..

coding/IT, CS 2022.11.18

기술 면접 준비 - 기초 CS 지식

- 객체지향 프로그래밍(OOP) 데이터를 추상화 시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법 장점 : 코드재사용이 용이, 유지보수가 쉬움, 대형 프로젝트에 적합 단점 : 설계시 시간과 노력이 필요 클래스 : 추상화를 거쳐 공통된 속성, 행위를 정의한 객체를 만들기 위한 메타정보 객체 : 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것 - 객체지향 프로그래밍 4가지 특성 추상화 : 공통된 상태, 행위를 파악하여 타입을 정의하는 것 캡슐화 : 상태와 기능을 결합시켜 묶는것 코드 재활용이 용이하고, 정보은닉을 목적으로 함 상속 : 부모 클래스의 속성과 기능을 그대로 이어 받아 사용하고, 일부분만 수정하여 다시 정의하여 사용 다형성 : 하나의 변수,..

기술 면접 준비 - 데이터베이스

- RDBMS(관계형) 데이터는 엄격한 스키마에 따라 테이블에 저장 관계를 통해 연결된 여러 개의 테이블에 저장 사용 데이터가 자주 수정되는 서비스 스키마의 변경이 없고, 명확한 스키마 구조를 필요로 할 때 장점 명확한 데이터 구조 보장(정해진 스키마에 따라 데이터를 저장하기 때문에) 중복 데이터 방지 단점 관계로 인한 시스템 복잡도를 고려하여 구조화해야 함 시스템이 복잡하면 쿼리문이 복잡해지고, 성능이 저하됨 - NoSQL(비 관계형) 정해진 스키마가 없고, 테이블 개념의 컬렉션에 저장 관계 설정을 하지 않음 사용 데이터가 자주 변경되지 않는 서비스 정확한 데이터 구조를 사용하지 않거나 데이터 구조의 변경, 확장을 필요로 할 때 막대한 양의 데이터를 다룰 때(수평적 확장 용이) 장점 테이블 간의 복잡한..

이진 탐색법

이진 탐색법이란 데이터가 정렬돼 있는 배열에서 특정한 값을 찾아내는 알고리즘 데이터 집합에서 원하는 데이터를 찾을 때까지 집합을 이분하여 탐색하는 방법 데이터 양이 많을 때 사용 시 효율적 정렬된 배열 안에서 특정 값의 유무를 파악 시 사용됨 이진 탐색법 조건 데이터가 반드시 순서대로 정렬된 상태여야 함 이진 탐색법 과정 1. 배열의 중간 값과 특정 값을 비교 2. 특정값이 중간 값보다 크다면 배열의 중간값 이하의 값을 제외한 배열을 만듦 3. 다시 특정값을 새로 만든 배열의 중간 값과 비교하여 작다면 중간 값보다 큰 값들을 제외하고 배열을 만듦 4. 위의 과정을 반복하여 특정값이 중간값과 일치하거나, 더 이상 배열을 새로 만들 수 없을 때 특정값의 유무를 확인 이진 탐색 코드 const binarySe..

coding/IT, CS 2022.11.15

기술 면접 준비 - JavaScript

- 이벤트 루프 task 큐와 call 스택을 수시로 감시하여 call 스택에 처리할 함수가 없고, task 큐에 처리할 함수가 존재하면 task 큐에 있는 함수를 call 스택으로 전달하는 역할 자바스크립트는 싱글 스레드로 그 자체로는 비동기 작업을 할 수 없지만, 웹 브라우저의 도움을 받아서 구현이 가능함 ex) 비동기 함수를 호출 → WebAPI에서 처리 → 개발자가 지정한 작업(콜백 함수)이 task큐에 등록 → 이벤트 루프에 의해 call 스택으로 전달 → 처리 - 프로토타입(Prototype) 자바스크립트는 프로토타입 기반의 객체 지향 프로그래밍을 지원하며, 자바스크립트의 대부분은 객체이고, 모든 객체는 부모 객체와 연결되어 있음 이때 부모 객체를 프로토타입이라고 함 프로토타입 체인을 이용하여..

readline 모듈

readline 모듈이란 한 번에 한 줄씩 데이터를 읽기 위한 인터페이스를 제공하는 모듈 자바스크립트에서는 readline 모듈을 이용하면 콘솔을 통해 값을 입력받을 수 있다. 즉, 입출력을 한 줄씩 처리하는 모듈(알고리즘 문제 풀 때) 사용 방법 1. 모듈 불러오기 const readline = require("readline"); 2. readline 모듈을 이용해 입출력을 위한 인터페이스 객체 생성 const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); 3. rl 변수 설정 rl.on("line", (line) => { // 한 줄씩 입력받은 후 실행할 코드 // 입력된 값은 line에 저장된다. ..

coding/Node.js 2022.11.12