아보카도 Blog

TIL 5일차 API, 특강: 프로세스, 스레드, 비동기 본문

개발일지

TIL 5일차 API, 특강: 프로세스, 스레드, 비동기

수수 아보카도 2022. 11. 18. 21:31

오늘은 발표 준비하는 데에 시간을 많이 썼다. 오후에는 발표와 특강이 있었다.

우리가 썼던 API중에서 마음에 들었던 건 방명록 post 기능이었다.

방문자가 쓴 이름과 코멘트 내용을 등록하기 버튼을 누르면 dictionary 형태로 app.py로 올리고

정보를 mongoDB로 올리면 msg가 뜨게 하고 방명록 카드가 생성된다.

피드백 시간에는 이 메세지를 alert보다는 modal로 처리하는 것도 좋을 것이라는 얘기를 들었다.

우리가 여기에 사용한 것은 Flask 프레임워크이다.

이는 서버를 구동시켜주는 편한 코드 모음으로, 서버를 구동하기 위해 필요한,

복잡한 일들을 쉽게 가져다 쓸 수 있다.

 

더군다나 너무나 당연한 얘기지만 나는 아직까지도 헷갈리는 프론트엔드와 백엔드.

우리 내일배움캠프에서 진행하는 3개의 트랙중에 React는 프론트엔드, Spring과 Node.js는 백엔드라고 생각하면 쉽다.

예로 들어, 프론트엔드에는 우리가 다뤘던 html, css, javascript가 있고,

백엔드에는 app.py라는 이름으로 저장했던 python!!

앞으로는 헷갈리지말고 꼭꼭 바르게 사용하자.

 


 

특강시간에는 박민수 리액트 튜터님이 프로세스, 스레드, 비동기에 대해 강의해주셨다.

강연 내용 출처: https://teamsparta.notion.site/adea78f8538745f3b907b10904a261d6

 

1. 프로세스와 스레드

우선 CPU와 메모리관리라는 이름으로 CPU와 RAM, HDD가 어떻게 상호작용하는지에 대해 배웠다.

HDD는 디스크고 데이터를 저장한다. 이를 작업하기 위한 책상 역할로 RAM이 필요하다. RAM은 메모리이다.

따라서 위 사진은 디스크에 있는 OS가 메모리에 프로그램을 탑재하는 과정이다.

 

프로세스란, 메모리에 적재되어 실행되고 있는 프로그램의 인스턴스이다.

여기서 인스턴스는 설계된 것 (붕어빵 틀)을 바탕으로 구현된 구체적인 실체 (붕어빵)이다.

또한 프로세스는 운영체제로부터 시스템 자원을 할당 받은 작업의 단위이다.

이때 시스템 자원은 CPU시간으로, 실행되기 위해 필요한 독립된 메모리 영역이다.

 

프로세스의 주소 공간은 Code, Data, Stack, Heap으로 이루어져 있고,

프로세스마다 최소 한 개의 스레드를 갖는다.

여기서 스레드는 프로세스의 자원을 이용하는 여러 실행 흐름의 단위이다.

 

* 멀티 프로세스

 + 여러 개의 자식 프로세스로 위험 분산

 - 문맥 교환에서의 오버헤드, 프로세스 간 통신 기법(IPC), 문맥 교환(Context Switching), 프로세스 제어블록(PCB)

 

* 멀티 스레드

 + 프로세스에 비해 메모리 공간 적게 필요, 통신 방법 간단

 - 자원 공유 동기화 문제,  스레드 하나에 문제가 생기면 전체 프로세스가 영향을 받는다.

 

* 스레드 세이프: 멀티스레드 환경에서 여러 스레드가 동시에 사용되어도 안전함.

 

 

2. 비동기

비동기는 서로 말도 비슷하고 설명도 비슷해서 아직도 아리송하다.

우선 제어문의 의미부터 이상하다. 함수의 코드를 실행할 권리가 제어문이란다.

이때 동시성이란, 함수 A와 함수B가 동시에 진행되는 것처럼 보이는 것이고,

이 동시성에 관련하여 (논)블로킹과 (비)동기로 구분된다.

 

블로킹은 A에서 B로 호출할 때, B의 리턴값을 기다린 후 진행하는 것이고,

논블로킹은 B의 완료 여부와 상관 없이 진행하는 것이다.

 

동기는 A가 B의 리턴값을 계속 확인하며 신경쓰는 것이고

비동기는 신경 안쓰는 것...

 

한 번 봐서는 논블로킹과 비동기가 같은 말처럼 보이지만

논블로킹인데 동기인 경우가 있고, 블로킹인데 비동기인 경우가 있다니 같은 말은 아닌 걸로...

 

자바의 비동기는 대부분 멀티 스레드 방식으로 이루어 진다. (예외: Spring WebFlux는 eventloop 활용)

JVM (Java Virtual Machine)에 의해 스레드 스케줄링이 이루어진다.

예를 들어 Request 요청 처리나 DB 접근 등이 있다.

 

자바스크립트의 비동기는 싱글 스레드를 사용한다. 또 논블로킹 환경에서 실행된다.

여기에서 질문, 싱글 스레드인데 비동기를 어떻게 처리하느냐!

나도 잘 모른다;;

다만 호출 스택- 백그라운드- 태스크큐-또다시 호출스택으로 함수들이 옮겨지면서 작업이 되는 것 같다는 추측...

자바 스크립트의 스레드 모습인데,

호출 스택에서 동기 코드를 담당하고

백 그라운드에서 비동기 작업이 이루어지며

테스크 큐에서 비동기가 끝난 후 콜백 함수들이 여기에서 대기하고 있다가

이벤트 루프를 통해 호출 스택으로 함수가 옮겨진다.

 

주말동안 푹 쉬고 다음주 새로운 팀과 새로운 프로젝트,

파이썬 문법 기초와 자료구조 알고리즘 원격 수업도 잘 들읍시다!

 

 

'개발일지' 카테고리의 다른 글

TIL 6일차: 서버-클라이언트, API, Ajax 등의 개념 정리  (1) 2022.11.21
WIL 1주차  (0) 2022.11.18
미니프로젝트 KPT 회고  (0) 2022.11.18
TIL 4일차 API, Query, Ajax  (0) 2022.11.17
TIL 3일차 자바스크립트 함수  (0) 2022.11.16