타입스크립트란?

타입스립트란 자바스크립트에 타입을 부여한 언어입니다. 타입스크립트는 자바스크립트와 다르게 브라우저에서 실행하기 위하여 변환하는 '컴파일(compile)' 과정이 필요합니다.


타입스크립트를 사용하는 이유

에러의 사전 방지

자바스크립트는 유연함이 장점인 언어이지만 데이터를 확정짓는 능력은 부족합니다. 이러한 자바스크립트의 안정성과 구조를 더해주는 도구인 타입스크립트를 사용하고, 컴파일 과정을 통하여 데이터를 확정짓는 능력을 축소하며 의도하지 않은 코드의 동작을 막을 수 있습니다.

 

코드 가독성 및 유지보수성 향상

코드에 명시적으로 타입 정보가 드러나므로, 개발자가 변수나 함수의 역할과 데이터를 더 쉽게 이해할 수 있습니다. 이는 팀원 간의 협업이나 시간이 지난 후 코드를 다시 볼 때 매우 유용합니다.

 

확장성과 안정성

 대규모 프로젝트에서 복잡한 구조를 관리하고 예측 불가능한 버그를 줄이는 데 큰 도움이 됩니다.

728x90

'TypeScript' 카테고리의 다른 글

[Type Script] 타입스크립트의 타입 정리  (0) 2025.06.28

다중 작업 환경과 CPU 컨텍스트 스위칭

컴퓨터가 한 번에 여러 프로그램을 실행하는 것처럼 보이는 것을 다중 작업(Multitasking)이라고 합니다. 이는 두 가지 방식으로 나뉩니다.

  • 멀티프로세스(Multiprocess): 여러 독립적인 프로그램(예: 웹 브라우저, 워드 프로세서)이 동시에 실행되는 것입니다. 각각의 프로그램은 운영체제로부터 독립적인 메모리 공간을 할당받습니다.

  • 멀티스레드(Multithread): 하나의 프로그램(프로세스) 안에서 여러 작은 작업 단위(스레드)가 동시에 실행되는 것입니다. 스레드들은 프로세스의 메모리 공간을 공유해요.

과거에 CPU가 하나밖에 없을 때, CPU는 한 번에 하나의 작업만 처리할 수 있기 때문에 실제로 여러 프로세스가 동시에 완벽히 병렬로 실행되는 건 불가능했습니다.  하지만 운영체제(OS)가 '시분할(Time-sharing)'이라는 기술을 사용해서 마치 여러 프로그램이 동시에 실행되는 것처럼 보이게 만듭니다. 여기서 중요한 개념이 바로 컨텍스트 스위칭(Context Switching)입니다.

  • 컨텍스트 스위칭: CPU가 한 프로세스(또는 스레드)에서 다른 프로세스로 작업을 전환할 때, 현재 실행 중인 프로세스의 상태(어디까지 작업했는지, 어떤 값을 가지고 있었는지 등)를 잠시 저장하고, 다음에 실행할 프로세스의 상태를 불러와서 작업을 이어서 진행하는 과정이에요. 이 '프로세스의 문맥 개체'가 바로 그때 저장하고 불러오는 정보 묶음을 말합니다. 컨텍스트 스위칭은 매우 빠르게 일어나서 사용자 입장에서는 프로그램들이 동시에 실행되는 것처럼 느껴집니다.


모듈이란?

모듈(Module)은 프로그램을 구성하는 독립적인 '작은 부품 단위'입니다. 하나의 프로그램 코드를 기능별로 쪼개어 놓은 작은 파일이나 코드 묶음이라고 생각하면 이해하기 쉽습니다.

  1. 코드의 재사용성:
    • 특정 기능(예: 날짜를 특정 형식으로 변환하는 함수, 사용자 정보를 검증하는 함수)을 하나의 모듈로 만들면, 해당 기능을 여러 프로젝트나 프로그램의 여러 부분에서 필요할 때마다 가져다 쓸 수 있어요.
    • 똑같은 코드를 여러 번 작성할 필요 없이, 이미 검증된 모듈을 '재활용'하여 개발 시간을 단축시킵니다.
  2. 유지보수 용이성:
    • 프로그램이 커질수록 모든 코드를 하나의 거대한 파일에 넣는 것은 비효율적이에요. 모듈로 나누면 각 기능별로 코드가 분리되어 있어서, 특정 기능에 문제가 발생해도 해당 모듈만 집중적으로 수정하고 테스트할 수 있어요. 이는 전체 코드에 미치는 영향을 최소화하고 유지보수를 훨씬 쉽게 만듭니다.
  3. 코드의 조직화 및 가독성:
    • 관련 있는 코드들을 하나의 모듈 안에 묶어 놓으면, 프로그램의 논리적인 구조를 한눈에 파악하기 쉽고 코드의 가독성이 높아집니다.
    • 개발자가 특정 기능을 찾거나 이해하는 데 시간을 덜 들이게 됩니다.
  4. 네임스페이스 오염 방지:
    • 모듈을 사용하지 않고 모든 변수나 함수를 전역(Global) 공간에 선언하면, 다른 파일에서 같은 이름의 변수를 선언했을 때 서로 충돌하여 예기치 못한 오류가 발생할 수 있습니다.
    • 모듈은 자신만의 독립적인 스코프를 가집니다. 따라서 모듈 내부의 변수나 함수는 기본적으로 외부에서 접근할 수 없어요. 필요한 것만 명시적으로 **export(내보내기)**하고, 필요한 곳에서만 **import(가져오기)**하여 전역 스코프를 깨끗하게 유지할 수 있습니다.

자바스크립트에서의 모듈:

과거에는 여러 모듈 시스템(CommonJS, AMD 등)이 있었지만, 현재는 ES2015(ES6)에서 공식적으로 도입된 **ES 모듈(ES Modules, ESM)**이 표준으로 널리 사용됩니다.

  • export: 모듈 내부의 변수, 함수, 클래스 등을 외부에서 사용할 수 있도록 공개할 때 사용합니다.
  • import: 다른 모듈에서 export된 것들을 가져와서 현재 파일에서 사용합니다.
728x90

동기식 (Synchronous)

동기식은 작업을 순차적으로, 즉 한 번에 하나씩 처리하는 방식입니다. 마치 한 줄로 서서 차례를 기다리는 것과 같습니다.

 

  • 순차적 실행: 첫 번째 작업이 완전히 끝나야만 다음 작업이 시작됩니다.
  • 블로킹(Blocking): 현재 작업이 완료될 때까지 이후의 모든 작업은 대기(멈춤)합니다.
  • 예측 가능한 흐름: 코드의 작성 순서대로 작업이 실행되기 때문에 흐름을 이해하기 쉽고 예측하기 용이합니다.

장점

  • 구현이 단순하고 직관적: 코드를 작성하고 이해하기 쉽습니다.
  • 실행 순서가 명확: 디버깅(오류 찾기)이 비교적 용이합니다.

단점

  • 효율성 저하 (블로킹): 시간이 오래 걸리는 작업(예: 네트워크 통신, 파일 읽기)이 발생하면, 그 작업이 끝날 때까지 전체 프로그램이 멈춰 버립니다. 사용자 인터페이스(UI)가 멈추는 '먹통' 현상이 발생할 수 있습니다.
  • 자원 낭비: 대기하는 동안 다른 유용한 작업을 할 수 없으므로 자원 활용이 비효율적일 수 있습니다.

비동기식 (Asynchronous)

비동기식은 작업을 동시에, 또는 독립적으로 처리하는 방식입니다. 작업을 시작해두고 완료되기를 기다리지 않고 바로 다음 작업을 시작합니다. 마치 여러 손님이 동시에 주문을 하고, 커피가 나오는 대로 받아 가는 것과 같습니다.

 

 

  • 비순차적 실행: 작업을 시작한 후, 그 작업이 완료되기를 기다리지 않고 다음 코드를 실행합니다.
  • 논블로킹(Non-blocking): 오래 걸리는 작업이 백그라운드에서 진행되는 동안에도 메인 프로그램은 다른 작업을 계속 처리할 수 있습니다.
  • 콜백, Promise, async/await: 작업 완료 시점을 알리거나 결과를 처리하기 위해 콜백 함수, Promise, async/await 같은 메커니즘을 사용합니다.
  • 자식 프로세스: 비동기 처리를 위해 프로세스가 다른 프로세스를 생성하여 작업을 위임할 수 있습니다.
  • 오래 걸리는 작업을 메인 스레드에서 직접 처리하지 않고, 버퍼에 저장하거나 별도의 스레드에 작업을 위임하여 메인 스레드가 멈추지 않고 다른 일을 할 수 있게 합니다.

장점

  • 성능 및 효율성 향상: 오래 걸리는 작업 동안에도 다른 작업을 처리할 수 있어, 시스템 자원을 효율적으로 사용하고 전반적인 응답 속도가 빨라집니다.
  • 사용자 경험 개선: 웹 애플리케이션에서 페이지가 멈추지 않고 계속 상호작용이 가능하여 사용자 경험이 향상됩니다.

단점

  • 구현 복잡성 증가: 코드의 실행 순서가 명확하지 않아 로직이 복잡해질 수 있고, 디버깅이 어려울 수 있습니다. (흔히 '콜백 지옥'이라 불리는 문제)
  • 예측 불가능성: 나중에 시작된 작업이 먼저 끝날 수도 있어서, 작업 간의 엄격한 순서가 필요한 경우에는 별도의 동기화 메커니즘이 필요할 수 있습니다.

 

 

728x90

'CS' 카테고리의 다른 글

세션(Session)이란?  (1) 2025.08.03
Prisma ORM에 대하여  (0) 2025.08.02
클린 아키텍쳐(Clean Architecture)란?  (0) 2025.07.12
객체 지향이란?  (0) 2025.06.29
데이터 정규화(Normalization)란?  (0) 2025.06.26