import fs from 'fs';
console.log("파일 읽기 시작");
// 동기적으로 파일 읽기
const data = fs.readFileSync('./test.txt', 'utf8');
console.log("파일 내용:", data);
console.log("파일 읽기 끝");
// 출력 결과
파일 읽기 시작
파일 내용: (test.txt의 내용)
파일 읽기 끝
import fs from 'fs';
console.log("파일 읽기 시작");
// 비동기적으로 파일 읽기 (콜백 방식)
fs.readFile('./test.txt', 'utf8' (err, data) => {
if (err) {
console.error("파일 읽기 실패:", err);
return;
}
console.log("파일 내용:", data);
})
console.log("파일 읽기 끝");
import { promises as fs } from 'fs';
console.log('파일 읽기 시작');
// 비동기적으로 파일 읽기 (Promise 방식)
fs.readFile('./test.txt', 'utf8')
.then((data) => {
console.log('파일 내용:', data);
})
.catch((err) => {
console.error('파일 읽기 실패:', err);
});
console.log('파일 읽기 끝');
import { promises as fs } from 'fs';
console.log('파일 읽기 시작');
async function readFile() {
try {
const data = await fs.readFile('.test.txt', 'utf8');
console.log('파일 내용:', data);
} catch (err) {
console.error('파일 읽기 실패:', err);
}
}
readFile();
console.log('파일 읽기 끝');
import { promises as fs } from 'fs';
async function readMultipleFiles() {
console.log('여러 파일 읽기 시작');
try {
// Promise.all을 사용한 병렬 처리
const [file1, file2] = await Promise.all([
fs.readFile('./file1.txt', 'utf8'),
fs.readFile('./file2.txt', 'utf8'),
]);
console.log('file1 내용:', file1);
console.log('file2 내용:', file2);
} catch (err) {
console.error('파일 읽기 실패:', err);
}
}
readMultipleFiles();
기술 | 장점 | 단점 | 사용 사례 |
---|---|---|---|
콜백 | 간단하게 비동기 작업을 구현할 수 있음 | 코드 중첩(콜백 지옥), 가독성 떨어짐 | 간단한 비동기 작업 (예: 이벤트 처리) |
Promise | 콜백보다 가독성이 좋고, 체인 형태로 작업 관리 가능 | 체인이 길어지면 복잡할 수 있음 | 비동기 작업이 여러 단계로 이루어져 있을 때 |
async/await | Promise의 장점을 그대로 가져오면서, 동기 코드처럼 작성 가능 | 모든 비동기 작업을 기다리므로 병렬 실행이 필요하면 추가 작업 필요 | 가독성이 중요하고, 비동기 작업이 많이 않을 때 |
특징 | 동기(Synchronous) | 비동기(Asynchronous) |
---|---|---|
작업 처리 방식 | 순차적으로 실행 (Blocking) | 동시에 처리 가능 (Non-blocking) |
효율성 | 작업업이 오래 걸리면 전체가 멈춤 | 작업이 오래 걸려도 다른 작업을 계속 진행 |
사용 사례 | 간단한 작업, 오류가 없는 상황 | 네트워크 요청, 파일 읽기, 데이터베이스 |
동기 방식 선택
비동기 방식 선택
// posts.service.js
import mysql from 'mysql2';
export const getPosts = (callback) => {
const query = 'SELECT * FROM posts ORDER BY created_at DESC';
db.query(query, (err, posts) => {
if (err) return callback(err);
callback(null, posts);
});
};
// 사용 예시
getPosts((err, posts) => {
if (err) {
console.error('조회 실패:', err);
return;
}
console.log('게시글 목록:', posts);
});
// posts.service.js
import { pool } from './database.js';
export const getPosts = () => {
return pool
.promise()
.query('SELECT * FROM posts ORDER BY created_at DESC')
.then(([posts]) => posts);
};
// 사용 예시
getPosts()
.then((posts) => console.log('게시글 목록:', posts))
.catch((err) => console.error('조회 실패:', err));
// posts.service.js
import { pool } from './database.js';
export const getPosts = async () => {
try {
const [posts] = await pool
.promise()
.query('SELECT * FROM posts ORDER BY created_at DESC');
return posts;
} catch (err) {
console.error('조회 실패:', err);
throw err;
}
};
// 사용 예시
async function fetchPosts() {
try {
const posts = await getPosts();
console.log('게시글 목록:', posts);
} catch (err) {
console.error('에러:', err);
}
}