목록전체 글 (213)
포도가게의 개발일지
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영역에 더 이상 사용하지 않고 자리만 차지하고 있는 객체들을 제거하는 역할을 합니다. 자동으로 실행되기 때문에 ..
@SpringBootTest ApplicationContext에 모든 Bean들을 등록한다. SpringBoot 어플리케이션을 실행했을 때와 동일하게 컨테이너에 Bean들을 등록한다. @DataJpaTest ApplicationContext에 JPA에 필요한 설정들만 등록한다. 기본적으로 in-memory embedded DB(ex. H2)를 사용한다. Component Scan을 하지 않아 컨테이너에 @Component 빈들이 등록되지 않는다. Jpa관련 테스트를 할때 @DataJpaTest를 이용해서 진행하면 필요한 Configuration만 주입받아서 빠르게 테스트를 진행할 수 있고 롤백도 되어서 간단하게 결과를 확인할 수 있는 장점이 있다. 하지만 메모리 DB인 H2 데이터베이스를 이용하지 않고 ..