'전체'에 해당되는 글 287건

  1. 실내 미니농구대 추천, 스킬즈 SKLZ Pro Mini Hoop
  2. 오픈 소스 로그 수집 관리 플랫폼, Graylog 기술 및 도입 전략 정리
  3. Node.js, 구글 지메일(GMail) 발송하기
  4. CentOS, NGINX 설치하기
  5. Nano, 리눅스 왕초보를 위한 Vi, Emacs를 대체하는 문서편집기
  6. KpyM, Windows 환경에서 SSH 서비스 제공하기
  7. Mocha, Chai, Request로 원격 REST API 테스트 환경 구축하기
  8. Node.js, 쉘 스크립트 작성하기
  9. Node.js, 문자열 파씽하기
  10. Node.js, 텍스트 파일 읽기, 쓰기

실내 미니농구대 추천, 스킬즈 SKLZ Pro Mini Hoop

실내에서 농구를?

미니농구는 남자의 로망이다. 과거 농구대잔치에 열광하던 어린 시절 친구가 어머니의 탄압(?)으로 어쩔 수 없이 버리게 된 미니농구대를 얻어오면서 미니농구와의 인연이 시작되었다. 형과 함께 현주엽과 전희철에 빙의되어 매일 호쾌한 덩크로 땀에 쩔었던 기억이 난다. 재미난 점은 미니 농구로 슛 감각이 물이 올라 체육 시간에 내 백발백중 슛에 모두가 놀랐었다. 시간이 지나 성인이 되고 여러 취미도 해보고 돈 들여 운동도 해보았지만 마음 한켠에는 어린 시절의 유쾌한 재미를 느끼지 못해 매너리즘에 빠져있었다. 그리고 어렸을 때 내게 즐거움과 건강함(?)을 선사해주었던 미니농구대를 벌컥 질러버렸다.

미니농구대 어떤 녀석인가?



  • 위가 내가 구매한 미니농구대이다. 미니농구대 시장 조사 결과 역시 장난감도 고퀄로 뽑아내는 미국 답게 미국산 미니농구대의 완성도가 매우 높았다. 그 뒤를 이어 생김새를 그대로 따라한 중국산이 절반도 안되는 가격으로 아이 아버지들의 지갑을 유혹하고 있었다. 나는 그 중에 가장 완성도가 높다고 판단되는 SKLZ Pro Mini Hoop을 구매하였다. 이 제품도 일반, Micro, XL 등 사이즈가 나뉘는데 나는 일반 버전을 골랐다.

  • 크기는 45.72x30.48cm이다. 실제로 보면 작지도 크지도 않은 딱 실내에서 즐기기 좋은 크기이다.

  • 제품을 구매하면 농구공과 펌프, 조립 공구가 다 들어있어 따로 필요한 것이 없다. 농구공은 퀄리티가 끝내준다. 나름 미니농구력이 높은 나도 감탄했다. 물렁물렁하지도 않고 짱구도 아닌 것이 적절한 탄성이 있어 슛이 즐겁다. 아이들이 다칠 염려도 없겠다는 생각이 들었다.(물론 내가 할려고 산거다.) 펌프로 바람을 넣으면 금방 탱탱해진다.

  • 공에 바람을 넣고 미니농구대의 백보드와 림을 공구로 조립하면 모든 준비가 끝난다. 이제 설치할 일만 남았다.

미니농구대 설치는 어디에?



  • 이 제품은 작정하고 실내에서 할 수 있게 개발되었다. 백보드 상단에 약 4cm 너비의 걸이가 있는데 바로 방문의 상단에 걸치는 용도이다. 미니농구대를 방문에 걸고 문을 닫으면 견고하게 고정이 된다. 아이들 방문에 걸고 즐길 수 있게 고안된 것이다.

  • 내 경우 방문에 걸기가 용이치 않아 사진과 같이 너비가 좁은 곳에 걸었는데 이를 보완하기 위해 다이소에서 구매한 진동방지패드(개당 1,000원)와 초강력아크릴폼양면테이프(2,000원)로 충격 흡수를 완화했다.

  • 미니농구대 림의 스프링은 사진과 같이 탄성이 굉장히 좋다. 호쾌한 덩크를 해도 림이 실제 농구대처럼 내려갔다 곧 올라온다.(물론 실내이므로 살살 하자.) 역시 미제는 다르다는 생각이 들었다.

  • 실내이기 때문에 가정의 평화와 이웃과의 화목을 위해 드리블을 할 생각은 없지만 그래도 바닥 충격 흡수를 위해 숫자퍼즐EVA매트(10개 5,000원)를 깔았다. 바닥에 떨어지는 공의 소음을 줄여준다.

결론

혹시 자녀가 방문을 콕 닫고 스마트폰과 컴퓨터 게임만 하는가? 운동 부족이 걱정되어 헬스장에 보내고 있는지? 운동의 기본은 재미와 접근성이다. 이 기회에 자녀, 조카들에게 미니농구대를 선물하자.(물론 엄마들에게 등짝 스매싱을 맞을 수 있다.) 점프슛 몇번만 해도 버피 운동을 한 것 같은 유산소+무산소 운동 효과를 볼 수 있다.

저작자 표시 비영리 동일 조건 변경 허락
신고

오픈 소스 로그 수집 관리 플랫폼, Graylog 기술 및 도입 전략 정리

Graylog란?

GraylogELK 스택과 유사한 역할의 오픈 소스 로그 수집 플랫폼이다. 크게 Graylog Server(Java 기반), Elasticsearch(로드 데이터 저장소), MongoDB(환경설정 저장소)로 구성된다.

Graylog 특징

  • Graylog ServerSyslog TCP/UDP 스트림을 바로 수신할 수 있다. 실제 로그를 생성하는 애플리케이션에서는 Graylog Server를 수신지로 바로 로그를 전송하면 된다.

  • 애플리케이션에서 바로 스트림을 전송하지 않고 파일로 로그를 저장할 경우 각 애플리케이션 서버에서 Logstash, Graylog Collector Sidecar를 이용하여 주기적으로 Graylog Server로 전송하는 방법이 있다. 서버 수가 많을수록 아키텍처가 복잡해진다는 단점이 있다.

  • Graylog Server는 1개로도 운영이 가능하지만 n개의 클러스터 구성도 가능하다. 실제 운영 환경에서는 무중단 로그 수집을 위해 이 구성이 필수이다. 각 서버는 HTTP 헬스 체크 기능을 제공하므로 앞에 위치한 로드 밸런서에서 적절한 분기가 가능하다. [관련 링크] 로드 밸런서는 NGINX를 이용할 수 있다. TCP, UDP 트래픽에 대한 프록시 및 로드 밸런싱 기능을 제공한다. [관련 링크]

  • Graylog Web Interface는 앞서 설명한 로드 밸런서 역할의 서버에 같이 위치할 수 있다.

  • MongoDBGraylog의 환경설정 등의 메타데이터를 저장하는 역할을 수행한다.

  • Elasticsearch는 실제 로그 데이터가 수집될 저장소 역할을 한다. 역시 n개의 클러스터 구성이 권장된다. Graylog의 로그 백업 정책은 Elasticsearch의 아키텍처에 의존적이다.(Snapshot, Restore)

GELF 로그 포맷

  • GraylogGELF라는 자체 로그 포맷을 사용하여 로그를 전송할 수 있다. [관련 링크]

  • GELF는 여러 장점을 가진다. 로그를 UDP로 전송할 경우 건 당 8,192바이트로 메시지 크기가 제한되는데 GELF는 사용자가 신경쓰지 않아도 라이브러리가 분할 전송함으로서 용량 제한을 극복했다. 또한, 기본적으로 GZIP으로 로그를 압축하여 전송하기 때문에 네트워크 대역폭을 절약할 수 있다. 이런 여러 장점으로 인해 Graylog를 사용하지 않는 툴(대표적으로 Docker)에서도 GELF 포맷만 따로 사용할 정도다.

  • GELF는 단순한 Key-Value의 집합으로 Value에는 숫자 또는 문자열만 담을 수 있다.

  • GELF는 필수 필드와 사용자 커스텀 필드로 구분된다. 필수 필드에는 host, short_message, full_message, timestamp, level이 있다. 커스텀 필드명 앞에는 구분을 위해 _ 문자를 붙인다.

  • GELF는 기본적으로 JSON 형식을 지원하지 않는다. 다만, 특정 KeyJSON 문자열을 담아 보내면 Graylog Server의 해당 InputJSON Extractor를 설정하여 Key로 변환할 수 있다. 예를 들면 http.method라는 JSON 문자열에 속한 2차원 필드 구조는 http_method라는 1차원 필드명으로 변환된다. [관련 링크]

인덱스

  • Graylog는 모든 로그 데이터를 Elasticsearch 클러스터에 저장한다. 기본 설정은 2,000만개 로그가 쌓일 때마다 인덱스를 새로 생성하며 총 인덱스 개수가 20개를 초과하면 오래된 인덱스는 삭제한다.

  • Elasticsearch 클러스터에 생성되는 인덱스 이름은 graylog_0부터 시작하여 뒷자리 숫자가 순차적으로 증가하며 새로 생성된다.

  • 특정 로그를 인덱스에서 삭제하려면 ElasticsearchREST API를 이용하면 된다. [관련 링크]

  • Graylog가 생성하는 모든 인덱스는 graylog-internal이라는 이름의 인덱스 템플릿을 적용하여 로그를 저장한다. [관련 링크]

  • 로그 저장시 특정 필드(검색 대상으로 필요하지 않은 긴 문자열)를 인덱스 대상에서 제외하려면 Elasticsearch에 저장하기 전 커스텀 인덱스 템플릿을 생성하여 no로 설정을 해야 한다. (analyzed, not_anlayzed 설정된 필드만 검색 대상이 된다.) [관련 링크]

로드 밸런서


  • Graylog Server 클러스터의 무중단 운영은 로그의 유실 없는 관리를 위해 필수적이다. 따라서 앞단에 로드 밸런서가 존재해야 한다.

  • NGINX는 기본적으로 TCP/UDP 로드 밸런싱을 지원한다. 하지만 각 서버의 헬스 체크 기능을 활용하려면 NGINX Pro 버전을 구매해야 하는 단점이 있다.

  • HAProxyUDP 로드 밸런싱을 지원하지 않지만 각 서버의 헬스 체크 기능을 제공한다.

  • Keepalived + ipvsadm 조합이 유일하게 TCP/UDP 로드 밸런싱과 헬스 체크 기능을 모두 제공한다. 이 방법이 가장 현실적이다. [관련 링크]

  • Graylog Server 클러스터의 헬스 체크는 각 노드의 HTTP REST API를 호출하여 응답 코드로 식별이 가능하다. GET /api/system/lbstatus를 호출시 200 코드와 ALIVE 문자열을 리턴하면 정상, 503 코드와 DEAD 문자열을 리턴하면 해당 노드가 죽은 것이다. [관련 링크]

  • 애플리케이션에서 GELF UDP로 로그를 전송하면 로드 밸런서 사용이 불가능하다. 이유는 GZIP 압축된 전체 메시지 크기가 8,192바이트를 초과하면 Chunking이 작동하여 메시지가 분할 전송되는데 한 노드로 전부 가지 못하고 로드 밸런서에 의해 여러 노드로 분산 전송되면서 결국 로그가 깨지기 때문이다. 대부분의 로그는 어지간하면 8,192바이트 안에서 소화되기 때문에 애플리케이션에서 로그 정책을 잘 수립하면 문제가 없지만 항상 감안하고 있어야 한다.
저작자 표시 비영리 동일 조건 변경 허락
신고

Node.js, 구글 지메일(GMail) 발송하기

패키지 설치

$ npm install nodemailer nodemailer-smtp-transport --save

지메일 발송 예제

const nodemailer = require('nodemailer')
const smtpTransport = require('nodemailer-smtp-transport')

let transporter = nodemailer.createTransport(smtpTransport({
    service: 'gmail',
    auth: {
        user: '{your_google_id}@gmail.com',
        pass: '{your_google_password}'
    }
}))

let mailOptions = {
    from: '홍길동 <{your_google_id}@gmail.com>',
    to: '{your_google_id}@gmail.com',
    subject: 'Node.js Send Mail Test',
    text: '테스트입니다.'
}

transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
        return console.log(error)
    }
    console.log('Message %s sent: %s', info.messageId, info.response)
})

지메일 발송 오류시

  • 지메일 발송 오류가 발생할 경우 여기를 방문하여 보안 수준이 낮은 앱 허용: 사용으로 변경한다.

참고 글

저작자 표시 비영리 동일 조건 변경 허락
신고

CentOS, NGINX 설치하기

NGINX 설치

아래 순서로 NGINX를 설치한다.

### NGINX를 설치한다.
$ yum install nginx

### 설치 직후에는 NGINX 서비스가 정지되어 있다.
$ service nginx status
nginx is stopped

### NGINX의 Reverse Proxy 설정을 변경한다.
$ nano /etc/nginx/conf.d/default.conf
server {
  listen 80 default_server; # NGINX의 서비스 포트를 지정한다. 기본값은 80이다. 80 포트로 오는 모든 HTTP 요청을 NGINX가 처리한다.
  listen [::]:80 default_server;
  server_name _; # NGINX는 HTTP 요청 헤더의 Host 필드 값과 일치하는 server_name에 대해서만 서비스를 라우트한다. '_'로 지정하면 Host 필드 값과 상관없이 모두 라우트한다.n
  access_log /var/log/nginx/access.log;   # 액세스 로그 파일이 생성될 경로를 지정한다.

  # / 로 들어오는 요청을 ReDirect한다. ReWrite와는 다르다.
  location / {
    return 301 http://jsonobject.tistory.com
  }

  # /nodejs/hello 로 들어오는 요청을 로컬 3000 포트로 분기한다.
  location /nodejs/hello {
    proxy_pass http://127.0.0.1:3000;
}

### 방화벽에서 80 포트를 개방한다.
$ nano /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp -dport 80 -j ACCEPT

### 방화벽을 재시작한다.
$ service iptables restart

### NGINX를 재시작한다.
$ service nginx restart
Stopping nginx:                                            [FAILED]
Starting nginx:                                            [  OK  ]

server.access_log, server.error_log

NGINX 1.7.1 버전부터 syslog를 이용한 로그 전송을 지원한다. 아래와 같이 설정이 가능하다. Graylog에 연동하는 예도 있다. [링크]

access_log syslog:server={syslog_hostname}:{port};
error_log syslog:server={syslog_hotname}:{port};

참고글

저작자 표시 비영리 동일 조건 변경 허락
신고

Nano, 리눅스 왕초보를 위한 Vi, Emacs를 대체하는 문서편집기

개요

개발자에게 에디터는 자존심과도 같다. Vim, Emacs 중의 하나를 주무기로 콘솔에서 현란한 단축키를 시전하여 상대방에게 공포와 경외감을 심어주는건 한국에서 개발자가 갖추어야 할 덕목과도 같다. MS-DOS 시절 copy con, edlin부터 텍스트 편집을 해온 내 입장에서는 그냥 단축키 많이 외울 필요 없는 간편한 위지윅 에디터가 최고라는 생각이 든다. 사용하는 에디터와 IDE가 넘치다 보니 두뇌에서 단축키 대혼란이 펼치지기 때문이다. 자존심 배틀에 끼어들 동안 생산성을 확보하고 다른 기술을 연마하겠다. 오늘 설명할 글은 Linux 진영에서 새롭게 떠오른 강력한 위지윅 텍스트 에디터인 Nano이다. Nano는 정말 간편하다. 단축키를 별로 외우지 않아도 콘솔에서 버벅이지 않고 텍스트 편집이 가능하다.

설치

최근의 CentOS 운영체제라면 Nano는 기본적으로 설치되어 있다. 만약 설치되어 있지 않다면 아래와 같이 설치한다.

$ yum install nano

실행

텍스트 편집은 여느 편집기와 다를바 없다. 아래와 같이 아규먼트에 편집할 텍스트 파일명을 전달하여 실행한다.

### 가장 일반적인 편집기 실행 방법이다.
$ nano coolguy.txt

# 마우스 기능을 지원한다. 마우스 클릭으로 커서를 이동시킬 수 있다.
$ nano -m coolguy.txt

# 읽기 전용으로 불러온다. 검색 기능이 강화된 more라고 생각하면 된다.
$ nano -v coolguy.txt

# 평소 자주 쓰는 옵션은 alias를 지정해두면 편리하다.
$ nano ~/.bashrc
alias more='nano -S -m -v'
alias nano='nano -S -m'

단축키

간단한 편집에는 Nano가 상당히 편리하지만 역시 더 강력하게 사용하기 위해서는 몇가지 단축키를 암기할 필요가 있다.


검색

  • CTRL + W로 문자열을 검색할 수 있다. 단축키를 반복하면 같은 문자열을 순차적으로 계속 검색한다.

복사/붙여넣기

  • 마우스로 복사할 문자열의 앞에 커서 이동 후 CTRL + ^를 누른다. 다시 마우스 또는 키보드로 복사할 문자열의 끝으로 이동시킨다.
  • ALT + ^를 누르면 선택한 문자열이 복사된다. (반대로 CTRL + K를 누르면 선택한 문자열이 오려진다.)
  • 마우스로 붙여넣기할 위치에 커서 이동 후 CTRL + U를 누른다. 붙여넣기가 완료된다.

파일 저장

  • CTRL + O로 편집한 내용을 저장할 수 있다.

편집기 종료

  • CTRL + X로 편집기를 종료할 수 있다.

참고 글

저작자 표시 비영리 동일 조건 변경 허락
신고

KpyM, Windows 환경에서 SSH 서비스 제공하기

개요

Windows에서 KpyM Telnet/SSH Server를 사용하여 SSH 서비스를 제공하는 방법을 설명하고자 한다.

설치 및 SSH 서버 실행

  • 여기를 클릭하여 KpyM Telnet/SSH Server를 다운로드하여 설치한다. 현재 최신 버전은 1.19c이다.
  • 시작 → 프로그램 → KTS → Setup KpyM Telnet SSH Server를 실행 후 install service, start service를 차례로 실행 후 ESC 키를 눌러 종료한다. 이제 SSH 서버가 실행되었다.

UTF-8(한글) 출력 설정

  • 아래와 같이 정상적으로 UTF-8(한글)을 출력하기 위한 설정을 한다.
### C:\Program Files (x86)\KTS\kts.ini
buff_height = 0

### C:\Program Files (x86)\KTS\telnet.ini
export_code_page = 65001

SSH 서버 로그인

  • KpyM는 자신의 Windows 계정으로 그대로 로그인할 수 있다. 대소문자를 구분하지 않아도 된다.
저작자 표시 비영리 동일 조건 변경 허락
신고

Mocha, Chai, Request로 원격 REST API 테스트 환경 구축하기

개요

이번 글에서는 Mocha, Chai, Request 기반의 원격 REST API에 대한 테스트 환경을 구축하는 방법을 설명하고자 한다.

패키지 설치하기

아래와 같이 테스트를 위한 프로젝트를 생성하고 필요한 패키지를 설치한다.

$ md rest-api-test
$ cd rest-api-test
$ npm init -y
$ npm install mocha mocha-junit-reporter -g
$ npm install chai request --save
  • Mocha [링크]Node.js 기반의 Test 프레임워크이다. 어디서든 mocha 명령을 실행하기 위해 전역 범위로 패키지를 설치한다.

  • mocha-junit-reporter는 테스트 결과를 JUnit 형식의 XML 파일로 생성하여 Jenkins에서 인식할 수 있도록 해주는 리포터이다.

  • Chai [링크]는 테스트 시나리오 작성에 필요한 메써드를 제공하는 Assertion 라이브러리이다. 대표적으로 should, expect, assert를 제공한다.

  • Request [링크]는 직관적인 문법의 HTTP 클라이언트 라이브러리이다. 원격지의 REST API를 테스트하기 위해 사용한다.

테스트 케이스 작성하기

테스트 케이스는 반드시 프로젝트 루트의 /test 디렉토리에 작성해야 한다. 아래와 같이 test.js를 작성한다.

const request = require('request')
const expect = require('chai').expect;

describe('GET http://jsonobject.com', function () {
    it('200을 리턴해야 한다.', function (done) {
        request.get('http://jsonobject.com', function (err, res, body) {
            expect(res.statusCode).to.equal(200)
            done()
        })
    })
})

테스트 케이스 실행하기

테스트 케이스를 실행할 차례이다. 프로젝트 루트에서 아래와 같이 실행한다.

$ mocha


  GET http://jsonobject.com
    √ 200을 리턴해야 한다. (329ms)


  1 passing (343ms)

테스트 결과를 JUnit 형식의 리포트 파일로 생성하려면 아래와 같이 실행한다.

$ mocha --reporter mocha-junit-reporter

$ type test-results.xml
<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="Mocha Tests" time="0.384" tests="1" failures="0">
  <testsuite name="Root Suite" timestamp="2017-04-20T13:28:15" tests="0" failures="0" time="0">
  </testsuite>
  <testsuite name="GET http://jsonobject.com" timestamp="2017-04-20T13:28:15" tests="1" file="D:\Project\chai-http-test\test\rest-api-test.js" failures="0" time="0.384">
    <testcase name="GET http://jsonobject.com 200을 리턴해야 한다.." time="0.384" classname="200을 리턴해야 한다..">
    </testcase>
  </testsuite>
</testsuites>

참고 글

저작자 표시 비영리 동일 조건 변경 허락
신고

Node.js, 쉘 스크립트 작성하기

개요

Bash는 오랜 전통을 자랑하는 Linux 환경의 스크립트 인터프리터이다. 하지만 최근의 프로그래밍 언어에 익숙한 사람이라면 전통적인 쉘 스크립트는 어딘지 모르게 불편하다. 근래 가장 핫한 언어인 Node.js로 쉘 스크립트를 작성할 수 있다는 사실을 알면 흥미로울 것이다. 이번 글에서는 Node.js로 쉘 스크립트를 작성하는 방법을 설명하고자 한다.

패키지 생성 및 초기화

$ md node-sh
$ cd node-sh
$ npm -y init
$ npm install shelljs --save
  • node-sh이란 이름의 패키지를 생성한다. 패키지명은 반드시 공백이나 특수문자 없이 소문자로 작성되어야 하며 단어의 연결은 하이픈(-)으로 연결한다.
  • 외부 명령어를 쉽게 실행하기 위해 ShellJS 패키지를 추가로 설치한다.

스크립트 작성

패키지 생성이 완료되었으면 아래와 같이 스크립트를 작성할 index.js을 작성한다.

#!/usr/bin/env node
const shell = require('shelljs')

shell.cd('~')

if(shell.exec('ls -la').code !== 0) {
  shell.echo('Error: command failed')
  shell.exit(1)
}
  • 스크립트 첫 줄의 #!/usr/bin/env node은 이 스크립트가 Node.js 인터프리터로 실행되어야 함을 알려준다.
  • 스크립트 첫 줄을 Shebang이라고 부르는데 Unix/Linux 환경만 지원하고 Windows 환경은 지원하지 않는다.

스크립트 실행

아래와 같이 스크립트를 실행할 수 있다.

$ ./index.js
# 'ls -la' 명령의 실행 결과가 출력된다.
  • Windows 환경이라도 Cygwin Bash 또는 Git Bash를 통해 실행이 가능하다. 스크립트 저장시 반드시 개행 형식을 유닉스 방식으로 저장해야 한다.

파이프 적용

쉘 스크립트이기 때문에 파이프 기능 또한 적용된다. 정렬되지 않은 JSON 문자열을 파이프로 받아 정렬된 문자열을 출력하는 스크립트를 만들어보자.

#!/usr/bin/env node
process.stdin.resume()
process.stdin.setEncoding('utf8')
process.stdin.on('data', function (data) {
    process.stdout.write(JSON.stringify(JSON.parse(data), null, 2))
})
  • 실행 결과는 아래와 같다.
$ echo '{"a":"1", "b":"2"}' | ./index.js
{
  "a": "1",
  "b": "2"
}

참고 글

저작자 표시 비영리 동일 조건 변경 허락
신고

'SW 개발 > Node.js > Shell Script' 카테고리의 다른 글

Node.js, 쉘 스크립트 작성하기  (0) 2017.04.20

Node.js, 문자열 파씽하기

Voca 라이브러리

  • Voca는 JavaScript 문자열 라이브러리이다. Java 진영의 StringUtils와 기능이 유사하다. 아래와 같이 저장소에서 패키지를 설치한다.
$ npm install voca --save
  • Voca의 사용 예는 아래와 같다.
const v = require('voca');

// 탭 식별자로 문자열을 배열로 분리한다.
v.split('문자열\t문자열', '\t'); // ['문자열', '문자열']

// 문자열의 모든 문자를 치환하다.
v.replaceAll('문자열|문자열', '|', '&#124;'); // '문자열&#124;문자열'

// 특정 문자 또는 문자열로 시작할 경우 true를 반환한다.
v.startsWith('문자열', '문자'); // true

// 문자열 앞뒤의 공백을 제거한다.
v.trim(' 문자열  '); // '문자열'

참고 글

저작자 표시 비영리 동일 조건 변경 허락
신고

Node.js, 텍스트 파일 읽기, 쓰기

텍스트 파일 읽기

const fs = require('fs');

const article = fs.readFileSync("source.txt");
lineArray = article.toString().split('\n');

텍스트 파일 쓰기

const fs = require('fs');

const text = 'UTF-8로 저장될 텍스트';
fs.writeFileSync("target.txt", '\ufeff' + text, {encoding: 'utf8'});
  • Node.js는 기본적으로 파일을 저장할 때 BOM 정보를 저장하지 않기 때문에 \ufeff를 텍스트에 앞에 명시해줘야 한다.

참고 글

저작자 표시 비영리 동일 조건 변경 허락
신고