티스토리 뷰

Development/Node.js

Node.js - file

ShinyOcean 2021. 6. 30. 04:59

 

안녕하세요 :)

 

이번 포스팅에서 다루어볼 내용은 node.js에서의 file 다루기 입니다.

node.js의 파일시스템은 파일을 다루는 기능과 디텍터리를 다루는 기능 두가지로 구성되어있고, 비동기식 IO 와 동기식 IO기능을 함께 제공합니다.

 

동기식은 하나의 파일이 작업이 끝날때 까지 대기하고 다음작업을 수행하는 방식, 비동기식은 파일작업을 요청만 하고 다음작업을 바로수행하는 것입니다. 만약 비동기식에서 파일작업이 끝난다면 이벤트를 받아 처리합니다.

 

 

그럼 바로 동기식 IO 파일시스템을 이용해서 텍스트파일과 Json 파일을 콘솔에 출력해 보겠습니다.

 

 

fs라는 변수로 파일시스템 모듈을 객체화 시켜주고 해당객체의 readFileSync()함수를 통해 두개의 파일을 스트링 타입으로 저장후 출력하였습니다.

변수에 초기화 해주기 위해사용한 인자로는 타켓파일의 경로와 문자포멧형식입니다.

 

 

 

 

이번엔 비동기식 IO 파일시스템을 이용해보겠습니다.

비동기식에서는 fs모듈의 readFile()메소드를 사용하며 두개의 인자는 동기식과 동일하지만 타겟 파일의 데이터를 함수의 두번째 파라미터인 data 값에 초기화하고 함수 내부에 data를 어떻게 활용할것인지 작성합니다.

 

 

비동기식은 파일시스템에 요청을 보낸후 이후 코드를 처리하고 있다가 이벤트가 발생하면 이를 처리하기때문에 중간중간에 만약 다른 코드를 넣는다면 그코드가 먼저 수행되고 파일시스템 이벤트가 처리되는것을 확인할수 있습니다. 아래에 예를 첨부하겠습니다.

 

 

 

물론 파일시스템은 파일 데이터를 읽어오는것 뿐만아닌 작성하는것까지도 가능합니다. 지금부터는 파일에 데이터를 작성하는것을 다루어보겠습니다.

 

대부분의 쓰기 작업은 비동기식으로 진행하기 때문에 간단한 예제코드를 통해 파일에 데이터를 기입해보겠습니다.

 

<입력 전>

 

<파일에 비동기식으로 데이터 입력>

해당코드는 동기식 read를 통해 비동기식 write가 발생하기 이전에 파일의 내용을 출력하고, write이후에는 비동기식 read를 통해 변경된 내용을 콘솔에 출력해주는 예제 입니다. 

이처럼 파일의 비동기식 write를 위해서는 아래와 같은 함수를 사용합니다.

 

fs.writeFile('경로', '내용', 콜백함수(err){

   콜백함수내용;

})

 

<입력 후>

 

 

 

하지만 위와 같은 방식으로 white후 이벤트처리를 하면 각각의 작업간에 동기화문제가 발생할수 있습니다. 만약 white 중인 파일을 닫지않고 read한다면 write한 데이터를 제대로 읽어들일수 없을것입니다. 그리고 write함수를 사용하니 기존에 있던 내용은 삭제된것을 볼수 있습니다.

 

이를위해 앞으로 네가지 open과 close를 포함한 네가지(open, read, write, close)를 통해 파일에 접근하고 이를 운용해보겠습니다. 파일을 약간의 옵션과 함께 open하고 write한다면 기존데이터가 보존된 상태로 새로운 데이터를 기입할수 있습니다.

 

그렇다면 open 시에 read를 위해 open한것인지 write를 위해 오픈한것인지 등 구분이 필요합니다 이때 사용하는 옵션이 플래그입니다, 대표적인 플래그로 r w w+ a+ 가 있습니다. 예제코드를 통해 알아보겠습니다.

 

만약 w 플래그를 사용하여 파일을 open후 데이터를 기입한다면 다음과 같습니다.

 

<코드 실행전>
<w 플래그로 open 후 write>

 

<결과>

 

위와 같이 기존의 내용들은 모두 삭제되고 새로 기입한 내용만 출력되는것을 확인할수 있습니다. 하지만 플래그를 a+로 해준다면 아래와 같습니다.

 

 

어떤가요? 플래그만 하나 바꾸어 주었을뿐인데 기존의 데이터가 보존된 상태로 write된것을 확인할수 있습니다.

 

 

마자막으로 node.js의 파일시스템을 이용하여 새로운 디렉터리를 만들고 삭제하는것을 다루어보겠습니다.

 

예제 코드는 다음과 같습니다.

 

<디렉터리 생성 예제>

 

<디렉터리 삭제 예제>

 

'Development > Node.js' 카테고리의 다른 글

Node.js - 다른 웹사이트의 데이터  (0) 2021.07.04
Node.js - http  (0) 2021.06.30
Node.js - event  (0) 2021.06.30
Node.js - url  (1) 2021.06.29
Node.js - 배열과 콜백함수  (0) 2021.06.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함