TYPESCRIPT · 심층 가이드
TypeScript 파일/IO 완전 정리
TypeScript 자체에는 파일이라는 개념이 없어서, 읽고 쓰는 코드는 전부 Node나 Deno 같은 런타임 API와 그 타입 정의에 기대게 됩니다.
언어 스펙에 표준 입출력이 없다는 점이 이 영역의 성격을 그대로 결정합니다. 브라우저에서 도는 같은 문법의 코드에는 fs가 아예 없고, Node에서 쓰려면 @types/node를 설치해야 컴파일러가 process와 node:fs를 알아봅니다. 모듈 방식에 따라 require와 import가 갈리고 __dirname을 쓸 수 있는지도 달라지므로, 코드보다 설정에서 먼저 막히는 일이 흔한 구간입니다.
텍스트 파일 읽기와 텍스트 파일 쓰기로 경로와 인코딩을 다루는 감을 잡은 다음, 구조가 있는 데이터로 넘어가 JSON 저장과 CSV 파싱을 나란히 비교해 보면 직렬화 형식마다 무엇을 보존하고 무엇을 잃는지가 눈에 들어옵니다. 환경 변수 읽기와 명령행 인자는 파일 바깥에서 들어오는 입력을 다루는 주제이고, 이 셋을 한데 묶어 어느 쪽 값을 우선할지 규칙을 정하는 마지막 단계가 설정 로드입니다. 순서를 지키면 뒤로 갈수록 새로 배울 것이 줄어듭니다.
가장 위험한 구멍은 JSON.parse의 반환 타입이 any라는 사실입니다. 여기에 인터페이스를 단언으로 붙이면 컴파일러는 만족하지만 실제 파일 내용은 아무도 검사하지 않았고, 필드 하나가 빠진 채 한참 뒤 엉뚱한 곳에서 undefined로 터집니다. 파싱 직후 좁히는 가드를 두는 편이 낫습니다. 인코딩을 생략한 readFile이 문자열이 아니라 Buffer를 돌려준다는 점도 함께 기억할 만합니다.
01텍스트 파일 읽기
TypeScript에서 텍스트 파일 읽기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
TypeScript code
// 텍스트 파일 읽기
import { readFileSync } from "node:fs";
console.log(readFileSync("package.json", "utf8").slice(0, 20));파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
02텍스트 파일 쓰기
TypeScript에서 텍스트 파일 쓰기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
TypeScript code
// 텍스트 파일 쓰기
import { writeFileSync } from "node:fs";
writeFileSync("sample-2.txt", "hello\n", "utf8");파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
03텍스트 파일 추가 쓰기
TypeScript에서 텍스트 파일 추가 쓰기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
TypeScript code
// 텍스트 파일 추가 쓰기
import path from "node:path";
console.log(path.join("logs", "2026", "app-3.log"));파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
04JSON 저장
TypeScript에서 JSON 저장 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
TypeScript code
// JSON 저장
console.log({ env: process.env.NODE_ENV ?? "development", args: process.argv.slice(2) });파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
05CSV 파싱
TypeScript에서 CSV 파싱 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
TypeScript code
// CSV 파싱
import { readFileSync } from "node:fs";
console.log(readFileSync("package.json", "utf8").slice(0, 20));파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
06환경 변수 읽기
TypeScript에서 환경 변수 읽기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
TypeScript code
// 환경 변수 읽기
import { writeFileSync } from "node:fs";
writeFileSync("sample-6.txt", "hello\n", "utf8");파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
07명령행 인자
TypeScript에서 명령행 인자 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
TypeScript code
// 명령행 인자
import path from "node:path";
console.log(path.join("logs", "2026", "app-7.log"));파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
08경로 합치기
TypeScript에서 경로 합치기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
TypeScript code
// 경로 합치기
console.log({ env: process.env.NODE_ENV ?? "development", args: process.argv.slice(2) });파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
09디렉터리 목록
TypeScript에서 디렉터리 목록 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
TypeScript code
// 디렉터리 목록
import { readFileSync } from "node:fs";
console.log(readFileSync("package.json", "utf8").slice(0, 20));파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
10임시 파일
TypeScript에서 임시 파일 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
TypeScript code
// 임시 파일
import { writeFileSync } from "node:fs";
writeFileSync("sample-10.txt", "hello\n", "utf8");파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
11존재 여부 확인
TypeScript에서 존재 여부 확인 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
TypeScript code
// 존재 여부 확인
import path from "node:path";
console.log(path.join("logs", "2026", "app-11.log"));파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
12표준 입력 읽기
TypeScript에서 표준 입력 읽기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
TypeScript code
// 표준 입력 읽기
console.log({ env: process.env.NODE_ENV ?? "development", args: process.argv.slice(2) });파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
13설정 로드
TypeScript에서 설정 로드 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
TypeScript code
// 설정 로드
import { readFileSync } from "node:fs";
console.log(readFileSync("package.json", "utf8").slice(0, 20));파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
14직렬화
TypeScript에서 직렬화 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
TypeScript code
// 직렬화
import { writeFileSync } from "node:fs";
writeFileSync("sample-14.txt", "hello\n", "utf8");파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
15로그 파일 회전 흉내
TypeScript에서 로그 파일 회전 흉내 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
TypeScript code
// 로그 파일 회전 흉내
import path from "node:path";
console.log(path.join("logs", "2026", "app-15.log"));파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
정리하며
JSON.parse는any를 돌려주므로 단언 대신 검증 가드를 통과시킵니다.readFile에 인코딩을 넘기지 않으면Buffer가 나온다는 점을 전제합니다.- 경로는 문자열 이어붙이기 대신
path.join으로 만들어 플랫폼 차이를 흡수합니다. process.env값은 모두 문자열이거나 없으므로 숫자·불리언은 직접 변환합니다.
더 깊이 들어가고 싶다면 TypeScript 학습 라이브러리에서 다른 주제 가이드를 이어서 보거나, 언어 비교에서 같은 개념이 다른 언어에서 어떻게 표현되는지 확인해 보세요.