목록분류 전체보기 (198)
포도가게의 개발일지
호이스트(hoisting) function getX() { console.log(x); // undefined var x = 100; console.log(x); // 100 } getX(); // error가 안나는 이유는 JS는 호이스팅을 통해 선언과 할당부를 나누게 된다. ->호이스팅 되어 아래처럼 바뀌게 된다. function getX() { var x; console.log(x); // undefined x = 100; console.log(x); // 100 } getX(); 함수 선언문 vs 함수 표현식 - 함수는 함수 이름으로 호출되는게 아니라 식별자를 통해 호출 된다. - 함수 선언문에 경우 암묵적으로 함수이름을 가진 식별자를 함수가 포함된 스코프에 암묵적으로 생성한다. // 함수 포현식..
V8 엔진이란? - Google에서 만든 JavaScript 컴파일러로 C++언어를 기반으로 만들어 졌습니다. 때문에 독립적으로 실행이 가능하며, 다른 웹 브라우저 없이 JavaScript, Node.js 코드를 컴파일 할 수 있습니다. 1. V8은 JS파일을 파서(Parser)에게 넘긴다. 2. 파서는 js파일을 분석하고 파싱하여 AST로 변환하게 된다. * AST는 컴파일러에서 널리 사용되는 자료 구조인데, 우리가 일반적으로 작성한 소스 코드를 컴퓨터가 알아먹기 쉽게 구조화한다고 생각하면 된다. function hello (name) { return 'Hello,' + name; } // 해당 자바스크립트를 파싱하여 AST로 변환하게 되면 아래와 같은 구조로 바뀐다. { type: 'FunctionD..
[Node] Chat Server 부하줄이기(분산처리)[1]에서는 서로 다른 서버로 연결되는 버튼을 만들어 수동으로 유저를 서버에 분리해줬다. 하지만 실제 서비스에서는 트래픽을 분산 시키기 위하여 로드 밸런스를 이용하여 정책을 통해 서버에 분산하게 된다. 2번째 목표로 Nginx를 리버스 프록시서버로 사용하여 로드밸런스를 통해 유저를 서버에 분산 시킬 것이다. CORS Error - Access-Control-Allow-Origin header가 없다고 한다. 추가해주자 CORS가 뭘까? 교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여..
🤭 소프트웨어 설계의 5가지 원칙 — SOLID 1. 단일 책임 원칙 (SRP; Single Responsibility Principle) 객체는 단 하나의 책임 만을 가져야 하고 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐 이어야 한다. 같은 이유로 변화하는 것끼리 묶고, 다른 이유로 변화하는 것끼리는 분리하라. 2. 개방-폐쇄 원칙 (OCP: Open-Closed Principle) 기존의 코드를 변경하지 않으면서(closed) 기능을 추가(Open)할 수 있어야 한다. 소프트웨어 엔티티가 확장에 대해 개방(Open)되어야 하지만, 변경에 대해서는 폐쇄(Closed)되어야 한다. 클래스 자체를 변경하지 않고도(Closed) 그 클래스를 둘러싼 환경을 바꿀 수 있어야 한다. 3. 리스코프 치환 원칙..
DI란? - 의존성을 주입한다 의존이란? - 객체 A가 객체 B의 속성이나 기능을 사용하려할때 인스턴스를 만들어 사용하게 되는데 이러한 경우 A가 B의 의존적이다라고 한다. - public class Robot { public static void Robot(){ // 이렇게 직접 객체를 새롭게 생성하여 일체형으로 사용하게되는 것이 강한 결합을 의미한다. // 주입을 하지 않아 코드를 직접 수정해주어야 한다. Battery batteryA = new BatteryA(); -> // Battery batteryA = new BatteryB(); batteryA.name(); } } interface Battery{ void name(); } class BatteryA implements Battery{ p..
Tree란? - 노드들이 나무 가지처럼 연결된 비선형(acyclic) 계층적 자료구조이다. - 트리는 트리 내에 다른 하위 트리(sub tree)가 있고 하위 트리 안에 또 다른 하위트리가 있는 재귀적 자료구도이다. 루트 노드(root node): 부모가 없는 노드, 트리는 하나의 루트 노드만을 가진다. 단말 노드(leaf node): 자식이 없는 노드, ‘말단 노드’ 또는 ‘잎 노드’라고도 부른다. 내부 노드(internal): 단말 노드가 아닌 노드 간선(edge): 노드를 연결하는 선, link, branch라고도 부른다. - 간선은 정점의 개수 -1개를 가진다. (노드 5개면 간선 4개) 형제(sibling): 같은 부모를 가진 노드 노드의 크기(size): 자신을 포함한 모든 자식 노드의 수 노..
G = (V,E) G = graph, V = vertex(점), E = edge(선) 그래프란? - 정점과 간선으로 이루어진 자료 구조 그래프의 표현법 1. G의 인접행렬 - 메모리 사용량 O(V^2) - 한정점에 연결된 간선을 모두 순회할 때, 항상 O(V)의 사간을 사용 - 정점에 비해 간선이 몇 개 없는 그래프에서 비효율적으로 작동 - 메모리 사용량이 많음, 작은 메모리의 유리 2. 인접리스트 - 메모리 사용량 O(V+E) - 메모리 사용량이 적으며, 희소 그래프를 표현하는 데 유리 - 한 정점에서 시작하는 간선을 모두 순회할 때, 연결된 정점의 개수만큼의 시간을 소요
JVM - Java의 가장 큰 장점은 OS에 종속적이지 않고 Java 파일 하나만 만들면 어느 디바이스든 JVM 위에서 실행 할 수 있다는 것이다. JVM이란 Java Virtual Machine, 자바 가상머신의 약자이다. JVM은 Java Byte Code를 OS에 맞게 해석 해주기 때문에 자바는 운영체제와 독립적으로 동작이 가능하다. - JVM은 크게 Garbage collector, Execution Engine, Class Loader, Runtime Data Area 4가지 영역으로 나누어집니다. 1. Garbage collector(GC) Runtime Data Area 중 Heap영역에 더 이상 사용하지 않고 자리만 차지하고 있는 객체들을 제거하는 역할을 합니다. 자동으로 실행되기 때문에 ..