📄 Document2023. 4. 2. 09:11Node.js 란?

💡 Node.js Node.js는 Chrome V8 JavaScript 엔진으로 빌드 된 JavaScript Runtime이며 nvm. 즉, 노드를 통해 다양한 자바스크립트 어플리케이션을 실행할 수 있으며, 서버를 실행하는데 많이 사용된다. JavaScript를 서버에서도 사용할 수 있도록 만든 프로그램이다. V8 이라는 JavaScript 엔진 위에서 동작하는 자바스크립트 런타임(환경)이다. 서버사이트 스크립트 언어가 아닌 프로그램(환경)이다. 웹 서버와 같이 확장성 있는 네트워크 어플리케이션을 제작하기 위해 만들어졌다. 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도 소프트웨어 없이 동작한다. 사용 이유 Node.js를 사용하려면 JavaScript를 배워야 한다. Jav..

Java Thread
📘 Backend/Java2023. 4. 2. 09:06Java Thread

📘 Thread 데이터와 어플리케이션이 확보한 자원을 활용하여 소스코드 실행 즉, 하나의 코드 실행 흐름 Thread 프로세스에서 실행 제어만 분리한 것 프로세스로부터 자원을 할당받고 그 자원을 이용하는 실행의 단위 프로세스의 Stack만 할당받고 코드 & 데이터 & 힙영역은 공유하기 떄문에 좀 더 효율적인 통신 가능 캐시 메모리를 비우지 않아도 되서 더 빠름 자원 공유로 인한 문제가 발생할 수 있으니 이를 염두에 둔 프로그래밍을 해야함 한 프로세스에 여러개의 스레드가 생성될 수 있음 즉, 캐시 메모리나 PCB에 저장해야하는 내용이 적고 비워야 하는 내용도 적기 때문에 상대적으로 더 빠른 컨텍스트 스위칭 📘 구현과 실행 Thread 클래스를 상속하는 방법 (다른 클래스 상속 불가, 권장 X) Thread..

Java GC & Equality & Override/Overload
📘 Backend/Java2023. 4. 2. 09:06Java GC & Equality & Override/Overload

📘 Garbage Collector 힙 영역에서 사용하지 않는 객체들을 제거하는 작업 이 작업이 필요한 이유는 개발자가 메모리를 직접 해제할 수 없는 언어이기 떄문 동작 방식 간단한 Serial GC 방식으로 설명함 좀 더 진보된 GC는 G1 GC, ZGC가 있으며 이 문서에선 다루지 않음 Garbage Collection Minor GC, Major GC로 구분된다 Minor GC는 young 영역, Major GC는 old 영역에서 일어난다고 정의함 GC를 수행할 때는 GC를 수행하는 스레드 이외의 스레드는 모두 정지함 이를 Stop-the-world 라고 한다 Minor GC는 Eden 영역이 가득 참으로부터 시작된다 Eden 영역에서 참조가 남아있는 객체를 Mark하고 Survivor 영역으로 복..

Java Object Mapper & Type Casting
📘 Backend/Java2023. 4. 2. 09:03Java Object Mapper & Type Casting

📘 ObjectMapper Jackson 라이브러리의 클래스 JSON - > Java 객체로 Deserialization Java 객체 -> JSON으로 Serialization ObjectMapper는 생성 비용이 비싸기 때문에 Bean & Static으로 처리하는걸 권장 Serialization // Object Mapper를 이용한 직렬화 try { Question question = Question.builder() .questionId(1L) .title("제목") .content("내용") .build(); objectMapper.writeValue(new File("src/question.json"), question); } catch (IOException e) { e.printStackT..

Java Stream
📘 Backend/Java2023. 4. 2. 08:34Java Stream

📘 Stream 많은 수의 데이터를 다룰 때 컬렉션이나 배열에 데이터를 담고 원하는 결고를 얻기 위해 for문이나 iterator를 사용해서 코드를 작성해왔다. 그러나 이런 방식으로 작성된 코드는 너무 길고 가독성과 재사용성이 떨어진다. 또 다른 문제는 데이터 소스마다 다른 방식으로 다뤄야 한다는 단점이 있다. 예를 들면 List를 정렬할 때는 Collections.sort()를 사용하고, 배열을 정렬할 때는 Arrays.sort()를 사용해야 한다. 이러한 문제를 해결하기 위해 만든것이 Stream이다. 스트림은 데이터 소스를 추상화하고 데이터를 다루는데 자주 사용되는 메서드들을 정의 해놓았다. 스트림의 특징 데이터 소스(원본)을 변경하지 않는다. Iterator처럼 일회용이다. 작업을 내부 반복으로 ..

Java Lambda Expression
📘 Backend/Java2023. 4. 1. 12:12Java Lambda Expression

📘 Lambda 함수형 프로그래밍을 지원하는 문법요소 메소드를 하나의 식(expression)으로 표현한 것으로 코드의 간결성,명확성을 목표로 함 익명의 객체이기 때문에 java의 문법요소를 해치지 않으면서 함수형 인터페이스를 사용가능함 기본적으로 반환타입과 이름을 생략 가능하며, 익명 함수(anonymous function) 라고 불림 Lambda의 기본형식 //기존 메서드 표현 방식 void sayhello() { System.out.println("HELLO!") } //위의 코드를 람다식으로 표현한 식 () -> System.out.println("HELLO!") 메소드를 Lambda식으로 만드는 예시 int sum(int num1, int num2) { return num1 + num2; } ↓..

Java Annotation
📘 Backend/Java2023. 4. 1. 12:03Java Annotation

📘 Annotation 컴파일러에게 문법 에러를 체크하도록 정보 제공 프로그램 빌드 시 코드 자동 생성할수 있도록 정보 제공 런타임에 특정 기능 실행하도록 정보 제공 표준 Annotation 자바에서 기본적으로 제공하는 애너테이션입니다. Annotation Name Description @Override 컴파일러에게 메서드를 오버라이딩하는 것이라고 알림 @Deprecated 앞으로 사용하지 않을 대상을 알릴 때 사용 @FunctionalInterface 함수형 인터페이스라는 것을 알 @SuppressWarning 컴파일러가 경고메세지를 나타내지 않음 메타 Annotation 애너테이션에 붙이는 애너테이션으로, 애너테이션을 정의하는 데에 사용됩니다. Annotation Name Description @Ta..

image