<목차>
- JavaScript event loop
- Array, LinkedList
- AWS S3
27. JavaScript event loop
- 비동기 작업을 처리하는 JavaScript 런타임의 중심적인 메커니즘
- 싱글 스레드 환경에서 비동기 적업을 효율적이게 관리
- 콜 스택 : 모든 동기적 작업이 실행되는 곳. 함수 호출은 스택에 푸시, 실행이 완료되면 팝되어 스택에서 제거
- 힙 : 객체가 저장되는 메모리 영역, 변수와 객체들의 동적 할당이 이루어짐
- 태스크 큐 : 이벤트 핸들러, 타이머, 네트워크 요청 완료 콜백과 같은 비동기 작업의 콜백 함수들이 대기하는 곳. 이벤트 루프는 콜 스택이 비었을 때 태스크 큐에서 대기중인 태스크를 콜 스택으로 이동시켜 실행
- 마이크로태스크 큐 : 프로미스의 .then(),.catch(), .finally() 콜백과 같은 더 높은 우선순위를 가진 작은 태스크들이 대기하는 곳. 일반 태스크 큐보다 높은 우선순위, 이벤트 루프는 각 일반 태스크 실행 후 마이크로태스크 큐를 비운다.
이벤트 루프의 작동 과정
1. 콜 스택 확인 : 현재 콜 스택이 비어 있는지 확인, 비어있지 않다면 스택의 가장 위에 태스크 실행
2. 마이크로태스크 큐 처리 : 콜 스택이 비면, 이벤트 루프는 마이크로태스크 큐의 모든 태스크를 처리, 이 과정에서 새로운 마이크로태스크가 추가될 수 있음, 그 경우 이들도 모두 처리될 때까지 계속 진행
3. 태스크 큐 처리 : 마이크로태스크 큐가 비면, 이벤트 루프는 태스크 큐에서 다음 태스크를 하나 가져와 콜 스택에 푸시하고 실행, 실행이 끝나면 다시 콜 스택과 마이크로태스크 큐의 상태 확인, 다시 태스크 큐의 태크스를 처리
4. 반복 : 위 과정 반복
=> 이 과정으로 비동기적 이벤트 처리와 동기적 코드 실행을 균형있게 관리
Q. Javascript event loop에 대해서 설명해주세요.
28. Array, LinkedList
Array
- 메모리 상에서 연속적인 위치에 요소들을 저장하는 자료구조
- 인덱스를 통해 직접 접근가능, 특정 요소에 접근하는데 걸리는 시간이 매우 빠름 = "랜덤 액세스"
- 배열은 크기가 고정되어있다.
- 배열의 크기를 동적으로 변경하기 어렵다
- 요소를 추가하거나 삭제할 때 다른 요소들을 이동해야하기 때문에 시간이 소요된다.
- 인덱스를 통한 빠른 데이터 접근이 필요할때 적합
- 데이터의 크기가 변하지 않을 때 사용하기 좋다.
- 책꽂이 : 책들이 일렬로 꽂혀잇는데 각 책은 특정 위치에 있음. 이를 이용해 원하는 책을 빠르게 찾음. 하지만 책을 추가하거나 제거할 때는 주변 책들으 ㄹ옮겨야 하므로 시간이 조금 걸림
LinkedList
- 요소들이 물리적으로 연속적인 위치에 저장되지 않고 각 요소가 다음 요소의 참고(주소)를 가지고 있는 형태의 자료구조
-연결 리스트의 각 요소를 노드라고 함
- 각 노드는 데이터와 '다음'노드'에 대한 참조(링크)를 포함
- 연결 리스트는 요소의 추가와 삭제가 쉽다는 장점
- 추가와 삭제가 빈번하게 일어나고 크기가 동적으로 변할 때 유리
- 특정 요소에 접근하기 위해서는 처음부터 순차적으로 탐색해야함
- 놀이기차 : 각 칸(노드)는 다음 칸을 가리키는 연결고리(링크)를 가지고 있음, 한칸에서 다음 칸으로 갈 수 있다. 칸을 추가하거나 제거하는 것은 매우 수비다, 연결고리를 풀고 다른 칸을 연결하면 됨, 하지만 기차의 맨 앞에서 시작해서 원하는 칸을 찾기 위해 다음 칸으로 이동해야함
Q. Array, LinkedList에 대해 설명해주시고 각각 어떻게 사용하는지 말씀해주세요.
배열과 연결리스트에 대해 설명하겠습니다. 우선 배열은 메모리 상에서 연속적인 위치에 요소들을 저장하는 자료구조로 책꽂이와 비슷합니다. 책꽂이에 책들이 일렬로 꽂혀있고 각 책은 특정 위치에 있는 것 처럼 배열의 요소도 메모리상에 인덱스를 가지고 위치합니다. 위치 또는 인덱스를 이용해 원하는 책을 빠르게 찾을 수 있는 것 처럼 배열도 인덱스를 이용해 원하는 요소에 빠르게 접근할 수 있습니다. 하지만 책을 추가하거나 제거할 때는 주변 책들을 옮겨야 하므로 시간이 조금 걸리듯이 배열도 크기가 고정되어있고 동적으로 변경하기 어려워 요소를 추가하거나 삭제할 때는 다른 요소들을 이동시켜야 하기 때문에 시간이 소요됩니다. 배열과 비교해서 연결리스트는 놀이기차와 유사합니다. 연결리스트는 요소들이 물리적으로 연속적인 위치에 저장되지 않고 각 요소가 다음 요소의 참고주소를 가지고 있는 형태의 자료구조를 말합니다. 놀이 기차의 각 칸을 다음 칸에 연결시키는 것처럼 노드와 노드가 연결되어 있고 다음 노드의 참조를 포함하고있습니다. 칸을 추가하거나 제거하는 것은 쉬운 것 처럼 연결리스트도 요소를 추가하거나 삭제하는 것은 쉽지만 특정 요소에 접근하기 위해선 처음부터 연결된 노드를 순차적으로 탐색해야한다는 단점이 있습니다. 정리하자면 데이터의 크기가 변하지 않고 원하는 요소에 빠르게 접근해야할 땐 배열이 적합하고 요소를 추가, 제거하거나 크기가 동적으로 변할 때 연결 리스트가 유리합니다.
29. AWS S3
- 아마존 웹 서비스가 제공하는 객체 스토리지 서비스
장점
- 높은 내구성과 가용성
- 확장성
- 비용 효율성
- 보안
- 다양한 데이터 관리 옵션
Q. AWS S3를 사용하는 이유와 사용 경험에 대해서 답변해주세요
AWS S3는 아마존 웹 서비스가 제공하는 객체 스토리지 서비스 입니다. 저는 사용한 경험이 없지만 몇가지 장점에 대해 설명해 드리겠습니다. S3는 활용도와 다양한 기능 때문에 전세계적으로 널리 사용되고 있습니다. 높은 내구성과 가용성, 확장성, 비용 효용성, 보안, 다양한 데이터 관리 옵션등을 장점으로 꼽고 있습니다. 보통 백엔드에서 많이 사용되고 있지만 프론트엔드에서도 활용이 가능합니다.... 잘 모르겠습니다 ^^;;