본문 바로가기

verdantjuly/Today I Learned

TIL 20240129

728x90

이번 주 목표

집중력 있게 공부하기

오늘 목표

집중력 있게 공부하기

오늘 한 것

CS 공부

Go (~ for문 무한루프 까지)

오늘 스케줄

06:00 기상, 샤워, 아침 식사

07:00 산책

08:00 알고리즘 1문제 이상 풀기

09:00 기업 지원 2곳 이상 하기 

10:00 CS 공부

11:00 GO

12:00 점심 식사

13:00 resmemory

17:00 저녁 식사

18:00 Nest.js 공부

22:00 취침

 

 

1. 프로세스

운영체제에서 할당하는 작업의 단위

노드, 웹 브라우저 같은 프로그램 = 개별적인 프로세스

프로세스 간에는 메모리 등의 자원을 공유하지 않는다. 

2. 스레드

프로세스 내에서 실행되는 흐름의 단위

프로세스는 스레드를 여러 개 생성해 여러 작업을 동시에 처리

스레드들은 부모 프로세스의 자원을 공유한다. 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있다. 

 

노드의 싱글 스레드 = 스레드는 실제로 여러 개이나 개발자가 직접 제어할 수 있는 스레드는 1개

 

사용할 수 있는 스레드가 1개 뿐이기 때문에 에러를 발생시키면 서버가 멈춰버린다. 

3. 서버로서의 노드

I/O 작업이 많이 일어나는 서버

개수는 많지만 크기는 작은 데이터를 실시간으로 주고 받는 데에 적합

실시간 채팅 어플리케이션, 주식 차트, JSON 데이터를 제공하는 API 서버 O

 

이미지, 비디오 처리, 대규모 데이터 처리 와 같이

CPU를 많이 사용하는 서버로는 X

 

노드의 생산성은 매우 좋지만

Go처럼 비동기에 강점을 보이는 언어에 비해 느림.

 

TIL 20240129 1-3 참고 자료 : Node.js교과서 1. 노드 시작하기 

 

4. 원시타입

string, number, bigint, boolean, undefined, Null

 

5. 참조타입

Object 형식의 타입, 주소를 참조하여 메모리에 저장된 것을 갖고 옴. 참조한 값이 바뀌면 자동으로 바뀜.

 

 

6. Var, Let, Const

  1. Var : 중복 선언 가능 - 함수레벨 스코프
  2. let : 중복 선언 불가, 값 재할당 가능 - 블록레벨 스코프
  3. const : 중복 선언 불가, 재할당 불가능, 선언과 동시에 값을 할당 - 블록레벨 스코프

var의 경우 호이스팅 으로 인하여 선언 된 라인 이전에 var 값을 사용.
이는 호이스팅 즉 변수들을 해당 스코프의 최상위로 올리는 과정에서

var는 선언과 동시에 초기화가 되지만 let, const는 초기화가 되지 않음.

 

* 호이스팅 : 변수 선언이 어디에 있든 상관없이 다른 코드보다 먼저 실행되는 특징

 

7. 스코프

식별자(ex. 변수명, 함수명, 클래스명 등)의 유효범위

 

8. SQL Injection

해커에 의해 조작된 쿼리문에 DB에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법

 

9. 정규화

정규화란 RDBMS에서 중복을 최소화하기 위해 데이터를 분해하는 작업

 

TIL 20240129 4-9 참고 자료 : https://velog.io/@alli-eunbi/Node-js-%EB%B0%B1%EC%97%94%EB%93%9C-%EB%A9%B4%EC%A0%91-%EC%A7%88%EB%AC%B8-%EC%A0%95%EB%A6%AC#http%EC%99%80-https%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

10. := 짧은 변수 선언

함수 내에서만 사용 가능.

 

11. 기본 자료형

bool

string

int  int8  int16  int32  int64
uint uint8 uint16 uint32 uint64 uintptr

byte // uint8의 별칭

rune // int32의 별칭
     // 유니코드에서 code point를 의미합니다.

float32 float64

complex64 complex128

12. 명시적인 초깃값 없이 선언된 변수는 그것의 zero value 가 주어집니다.

13. Type 변환

14. 자동 타입 유추

15. 상수

16. for 반복문

반복문은 for밖에 없다. 

17. for문에서 ; 생략 가능

package main

import "fmt"

func main() {
	sum := 1
	for sum < 1000 {
		sum += sum
	}
	fmt.Println(sum)
}

 

18. 반복 조건을 생략하면 무한 루프

package main

func main() {
	for {
	}
}

 

 

TIL 20240128 10 - 18 참고 자료 : 

https://go-tour-ko.appspot.com


정리 

 

스레드

프로세스 내에서 실행되는 흐름의 단위

프로세스는 스레드를 여러 개 생성해 여러 작업을 동시에 처리

스레드들은 부모 프로세스의 자원을 공유한다. 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있다. 

 

노드의 싱글 스레드 = 스레드는 실제로 여러 개이나 개발자가 직접 제어할 수 있는 스레드는 1개

 

사용할 수 있는 스레드가 1개 뿐이기 때문에 에러를 발생시키면 서버가 멈춰버린다.

 

서버로서의 노드

I/O 작업이 많이 일어나는 서버

개수는 많지만 크기는 작은 데이터를 실시간으로 주고 받는 데에 적합

실시간 채팅 어플리케이션, 주식 차트, JSON 데이터를 제공하는 API 서버 O

 

이미지, 비디오 처리, 대규모 데이터 처리 와 같이

CPU를 많이 사용하는 서버로는 X

 

노드의 생산성은 매우 좋지만

Go처럼 비동기에 강점을 보이는 언어에 비해 느림.

 

KPT

Keep

자세히 알고 싶어 하는 것

Problem

시간을 꽉 채워 쓰지 못하는 것

Try

집중력 늘리기

소감

어제보다 많이 해서 좋다. 

 

 

 

 

 

 

 

 

'verdantjuly > Today I Learned' 카테고리의 다른 글

TIL 20240201  (0) 2024.02.01
TIL 20240131  (0) 2024.01.31
TIL 20240128  (0) 2024.01.28
TIL 20240127  (0) 2024.01.27
TIL 20240125  (0) 2024.01.25