회고

[취업준비일지] - 34

Happy Programmer 2022. 11. 23. 23:05

1.NextJS는 리액트 기반의 프레임워크로 리액트의 전반적 기능 개선을 위해 사용된다. 
주 기능은 SSR(Server Side Rendering)으로 리액트만으로는 구현하기 힘들지만 NextJS를 통해서 편하게 구현할 수 있다.
이는 SEO등을 개선하는 것에 유리하다.


2.react의 경우는 router를 사용할 경우 각각 route 설정을 해줘야 하지만 Next에서는 파일과 폴더를 통해 페이지와 라우트를 나눌 수 있다.


3.NextJS 프로젝트를 시작하고 싶으면 npx create-next-app 명령어를 통해 생성할 수 있다.


4.pages 폴더가 2번에서 말했던 라우팅의 기능을 수행하는데
_app.js는 세팅, index.js는 기본 페이지(/), 나머지 파일들은 해당 경로의 페이지를 의미한다. (mypage.js = /mypage)

하지만 경로의 하위 경로를 지정하는 것(/mypage/setting 등)에는 폴더를 사용해야 하기 때문에 폴더와 파일명이 겹치는 특이한 일이 생길 수 있기 때문에 하위 경로가 필요할 경우 폴더명으로 작성 후 동일 파일명은 폴더 내부 index.js로 지정하면 동일한 기능(/mypage)을 한다.
이런 방식을 중첩 경로라고 부른다.


5.프로세스는 프로그램의 인스턴스라고 볼 수 있으며 
운영체제에서 자원을 할당받는 작업의 단위라고 할 수 있다.

프로세스는 Code, Data, Heap, Stack을 보유하며 프로세스별 최소 1개의 스레드를 가지고 있다.

스레드는 프로세스 내부 실행의 흐름으로 볼 수 있다.
개별적으로 할당받는 스택을 제외한 나머지 자원은 프로세스의 code, data, heap을 공유하는 특징을 가지고 있어 시스템 처리량이 향상되고 자원 소모가 줄어들고 속도도 빨라진다.

하지만 스레드는 프로세스가 가지고 있는 자원들을 공유해 사용하는 것이기 때문에 여러개의 스레드가 공유 자원을 사용해 발생하는 문제도 생길 수 있으며 디버깅이 어렵다는 단점이 있다.


6.멀티 프로세스는 하나의 프로그램을 하나의 프로세스가 아닌 여러개의 프로세스로 병렬작업으로 구성하는 방식으로 
여러 스레드가 동시에 프로세스의 자원을 변경하다 생기는 문제를 방지할 수 있지만 
프로세스간 공유 메모리가 없기 때문에 프로세스 변경 시 데이터 초기화 후 
다시 캐시 정보를 불러와야 하는 등 공유메모리가 없는 것이 
장점이 아닌 단점으로 받아들여 질 수 있는 경우도 있다.
(Context Switching 오버헤드 등)


7.멀티 스레드는 하나의 프로그램을 여러개의 스레드로 구성해 작업을 함께 처리하도록 하는 것으로 휴식하는 스레드가 없기 때문에 처리 속도가 빠르며 공유 자원으로 작업하기 때문에 효율적이다.

하지만 하나의 자원을 공유한다는 점에서 안정성이 문제될 수 있는데
덩치가 커질수록 설계가 어렵고 문제 발생시 디버깅이 어려우며 
많은 프로세스 중 하나라도 문제를 발생시키면 전체가 영향을 받는다.




(1).백준 3276 ICONS는 특정 갯수의 자갈을 가지고 있을 때 
배치할 경우 최소의 행+열값을 알고 싶다는 문제였다.
언제나 이런 값들의 최저값은 x=y이기 때문에
x와 y의 값을 순차적으로 1씩 증가시키며 비교하는 방식으로 해결했다.

let input = 2
let x = 1
let y = 1

while(input > x*y){
    x+=1
    if(input <= x*y){
        break
    }
    y+=1
}

console.log(x,y)