개념 복습 250630
어설프게 아는 지식 남들에게 설명 할 수 있을 정도로 확실히 하기
1. 자바스크립트에서 비동기 처리는 어떻게 동작하나?
-
기본 개념
-
콜 스택
- 실행 중인 함수의 지역 변수, 매개변수, 실행 위치 정보 등이 포함된 컨텍스트 정보가 관리
- LIFO 처리
-
메모리 힙
- 전역변수, 참조 타입(객체나 함수 같이 큰 데이터)을 저장하는 공간
- 참조 타입값의 주소값은 콜 스택에 저장된다
-
Web APIs
- 웹 브라우저에 구현된 API (DOM event, AJAX, Timer 등)
-
태스크 큐
-
매크로 태스크 큐 : setTimeout, setInterval, I/O 이벤트 콜백 등의 처리
-
마이크로 태스크 큐 : Promise.then(), catch(), finally() 등의 처리
-
-
이벤트 루프
-
콜 스택이 비어있는지 지속적으로 확인
-
콜 스택이 비어있다면 매크로 태스크 큐에서 하나 꺼내 실행 후 마이크로 태스크 큐의 작업을 모두 처리 하는 방식
-
-
-
비동기 처리 흐름
- 비동기 처리 async/await 작업의 await 이후 코드는 내부적으로 Promise 처리로 동작하며, 마이크로태스크 큐에 등록된다. 콜 스택이 비워진 직후, 이벤트 루프에 의해 마이크로태스크 큐의 작업이 모두 처리되면서 콜 스택으로 옮겨져 실행된다
2. 리액트에서 자주 사용하는 훅 설명
-
useState: 컴포넌트 상태(state)를 선언하고 관리할 때 사용
-
useEffect: 컴포넌트가 마운트/언마운트되거나 특정 값이 변경될 때 부수 효과(side-effect)를 처리할 때 사용
-
useContext: 전역 상태 관리에 사용되는 Context API 값을 컴포넌트에서 가져올 때 사용
-
useRef: 렌더 사이클과 무관하게 유지되는 mutable 값을 저장하거나 DOM 요소에 접근할 때 사용
-
useMemo: 값 계산 비용이 큰 연산 결과를 메모이제이션(캐싱)할 때 사용
-
useCallback: 함수를 메모이제이션해 불필요한 렌더링을 방지할 때 사용
SQL JOIN 관련해서 설명
-
INNER JOIN: 두 테이블에서 조건이 일치하는 행만 가져옴.
-
LEFT JOIN: 왼쪽 테이블의 모든 행 + 조건이 맞으면 오른쪽 테이블 데이터도 가져옴. 조건이 맞지 않으면 NULL.
-
RIGHT JOIN: 오른쪽 테이블의 모든 행 + 조건이 맞으면 왼쪽 테이블 데이터도 가져옴.
-
FULL JOIN: 양쪽 테이블의 모든 행을 가져오며, 조건이 맞지 않으면 NULL.
HTTP(HyperText Transfer Protocol) 프로토콜 관련해서 설명
-
웹에서 클라이언트(브라우저 등)와 서버가 데이터를 주고받는 통신 규약
-
무상태(Stateless): 각 요청(request)은 독립적으로 처리되며, 서버는 이전 요청 상태를 기억하지 않는다.
-
요청(Request): 클라이언트 → 서버로 보내는 메시지. 메서드(GET, POST, PUT 등), URL, 헤더, 바디를 포함
-
URL : 서버의 주소 + 요청할 자원을 식별하는 경로 (프로토콜, 호스트명, 경로, 쿼리 문자열 등 포함)
-
요청/응답에 대한 메타 정보 전달 (Content-Type, Authorization, User-Agent, Accept 등 포함)
-
요청이나 응답의 실제 데이터 내용
-
-
응답(Response): 서버 → 클라이언트로 보내는 메시지. 상태코드(200, 404 등), 헤더, 바디를 포함
-
HTTP 메서드: 작업을 나타냅니다.
-
GET: 데이터 조회
-
POST: 데이터 생성
-
PUT/PATCH: 데이터 수정
-
DELETE: 데이터 삭제
-
타입스크립트와 자바의 타입선언 차이점
-
Java
-
컴파일 후에도 JVM 바이트코드에 타입 정보가 유지됨. 즉, 런타임에서도 타입 정보로 리플렉션(reflection) 같은 작업 가능
-
타입 선언이 필수이며, 변수나 메서드 시그니처에서 항상 타입을 명시해야 한다.
-
명시적이고 엄격한 객체지향 언어 기반 타입 시스템
-
-
TypeScript
-
컴파일 시 타입 정보는 제거되어 자바스크립트 코드에는 남지 않음. 즉, 런타임에는 타입 정보가 전혀 없다.
-
타입 선언은 선택적(optional) 이고, 타입 추론에 맡길 수도 있다.
-
구조적 타입 시스템 (structural typing) 기반 → 타입 이름보다 구조가 중요
-
SSR 렌더링 시 CSS-in-js 문제
-
서버가 렌더링 시 CSS 생성 작업까지 해야 하므로 서버 부하가 증가
-
서버에서와 클라이언트에서의 해시 불일치 리스크가 존재