[node.JS] ChatGPT API 활용

김제현·2023년 7월 4일
post-thumbnail

Node.JS

1. npm

  • Node Package Manager로 Node.js 프로젝트에서 패키지를 관리하기 위한 패키지 관리도구이다. npm을 사용해 다른 개발자들이 만든 오픈 소스 JavaScript 패키지를 쉽게 가져와서 사용할 수 있다. 모듈마다 사용법이 다르며 모듈마다 사용법을 참고해 사용하면 된다.
    설치명령 전: npm init(initialize) -> npm을 시작하는 명령어 -> package.json 생성
    설치명령: npm i(install) (모듈이름)
    package.json: 설치된 모듈들을 정리해주는 메모장 같은 역할로 내용을 대략적으로 확인하기 위함이 목적이다.
    package-lock.json: package.json의 내용을 상세하게 확인하기 위해 만들어진 파일이다.
    node_modules: 설치한 모듈들이 기록되는 장소
// 사용법 예시
var figlet = require('figlet'); // require -> figlet 모듈을 요구

2. Express

  • node.js 기반의 웹 프레임워크

    포트 (Port)
    - 선착장의 개념으로 요청을 할 때 들어올 수 있는 특정 입구를 의미한다.
    - Express 애플리케이션은 특정 포트에서 실행되며 클라이언트는 요청을 보낼 때 해당 포트 번호를 명시하여 Express 애플리케이션과 통신한다. 예를 들어, 웹 브라우저에서 http://localhost:3000을 방문하면 Express 애플리케이션은 3000번 포트에서 실행 중이라는 것을 의미한다. Port가 듣고 있어야 서버에 접속했을 때 프로그램이 실행될 수 있는 것이다. 포트마다 다른 프로그램을 실행할 수 있다.

3. Babel

  • Babel은 JavaScript 코드를 변환하기 위한 도구로, 기본적으로 최신 버전의 JavaScript를 이해하지 못하는 오래된 환경에서도 동작할 수 있도록 ES6+ (ECMAScript 2015 이상) 코드를 ES5 이하 버전의 JavaScript 코드로 변환해준다. 이를 통해 개발자는 최신 JavaScript 기능을 사용하면서도 브라우저 호환성 문제를 해결할 수 있다.

Set up

1. npm install --save-dev @babel/core
2. npm install @babel/preset-env --save-dev
3. babel.config.json파일 생성 후 코드 추가

{
  "presets": ["@babel/preset-env"]
}
  • 일반적으로 프로젝트는 "런타임 종속성(runtime dependencies)"와 "개발 종속성(devDependences)" 두 가지 종류의 종속성을 가지게 된다.
  • Runtime Dependencies: 애플리케이션의 실행에 필요한 패키지로 실제로 애플리케이션의 동작에 영향을 준다. Express.js나 React 등의 라이브러리가 해당되며 'npm install express'와 같이 명령을 실행한다.
  • DevDependencies: 주로 개발 과정에서 도움이 되는 패키지로 프로젝트 개발, 빌드, 테스트, 디버깅 등의 작업에 필요하다. 테스트 프레임워크인 Mocha나 빌드 도구인 Babel과 같은 패키지가 이에 해당한다. 'npm install --save-dev @babel/core'과 같이 명령을 실행하면 프로젝트의 package.json파일에 devDependencies 항목에 추가된다.

3. HTTP 메소드

  • 요청의 목적, 종류를 알려주기 위해 사용하는 수단
  • Frontend -> Backend 요청방식 : GET, POST
  • 간단히 말해 GET 요청방식은 주소창에서 데이터를 전달하고, POST 요청방식은 내부적으로 body에 데이터를 전달하는 방식이다.
  • Callback 함수: 다른 코드의 인수로서 넘겨주는 실행 가능한 코드 즉 끝나고 실행할 코드를 의미한다.
// app.get(HTTP메소드)('라우팅', 콜백함수() => {})
app.get('/', (req,res) => { // (req, res) => (요청, 응답)
	res.send('Hello world!'); // 응답(res)에 'Hello world!'를 담겠다는 의미
})

4. Nodemon && Babel

  • Nodemon: 파일이 수정되는걸 감시해주는 패키지
  • Nodemon과 Babel은 개발환경에서 함께 사용될 수 있는데, 일반적으로 Nodemon은 개발중인 Node.js 애플리케이션의 변경을 감지하고, 변경사항이 발생할 때마다 애플리케이션을 재시작한다. Nodemon은 주로 개발 환경에서 사용되므로, Babel과 함께 사용하여 개발 중에 최신 JavaScript 문법을 사용하고, 코드를 자동으로 변환하고, 애플리케이션을 재시작 할 수 있다.

    npm install -g --save-dev @babel/node
    npm install nodemon --save-dev

  "scripts": {
    "dev": "nodemon --exec babel-node index.js",
  }

5. Pug

  1. pug 설치 - npm i pug
  2. pug를 뷰엔진으로 설정

6. GET - params, query

app.get('/user/:id', (req, res) => {
  // 주소창에 localhost:3000/kjh로 접속하면 콘솔창에 id: 'kjh'를 받을 수 있음.
  const p = req.params; 
  console.log(p);
  console.log(p.id); // kjh
  // ex) localhost:3000/user/asdf?id=kjh&name=jehyeon
  const q = req.query;
  console.log(q); // {id: 'kjh', name = 'jehyeon'}
  console.log(q.id);
  
  res.send({'message': 'Hello World!'});

7. CORS ISSUE

  • CORS는 웹 애플리케이션에서 다른 도메인 간에 리소스 공유를 가능하게 하는 보안 메커니즘이다. 브라우저는 기본적으로 동일 출처 정책을 따르며, CORS는 이를 극복하기 위한 메커니즘으로 서버는 CORS 설정을 통해 클라이언트의 요청을 허용하고, 클라이언트는 사전 요청을 보내서 서버의 허용 여부를 확인한다. 그러므로 CORS 이슈는 다른 도메인 간의 AJAX 요청이나 리소스 로딩 시에 발생할 수 있으며, 서버와 클라이언트 간의 적절한 설정이 필요하다. 간단히 말해 HTML의 요청을 응답이 잘되도록 하는 것이다.
const cors = require('cors');
app.use(cors({
  origin: '*'
}));

8. JSON

  • JavaScript Object Notation의 약자로, 데이터를 표현하기 위한 경량의 형식이다. 텍스트틑 기반으로 구조화된 데이터를 나타내며 자바스크립트 객체와 유사한 형식을 가지고 있어 데이터 교환에 널리 사용된다.
  • JSON은 간단하고 가독성이 높은 형식으로 데이터를 표현한다. 기본적으로 키-값 쌍의 집합인 객체(object)와 순서화된 리스트인 배열을 지원한다. 키는 문자열이고, 값은 문자열, 숫자, 객체, 배열, null등의 자료형을 가질 수 있다.
}
// name, age, city, hobbies라는 키를 가진 객체를 표현
  "name": "John Doe",
  "age": 30,
  "city": "New York",
  "hobbies": ["reading", "music", "sports"]
}
  • JSON.parse() 함수를 사용하여 jsonString을 JavaScript 객체로 변환하고, 변환된 객체의 속성에 접근하여 값을 출력
const jsonString = '{"name":"John Doe","age":30,"city":"New York","hobbies":["reading","music","sports"]}';
const parsedObject = JSON.parse(jsonString);

console.log(parsedObject.name); // "John Doe"
console.log(parsedObject.age); // 30
console.log(parsedObject.hobbies); // ["reading", "music", "sports"]
  • JavaScript 객체를 JSON 형식의 문자열로 직렬화
const obj = {
  name: "John Doe",
  age: 30,
  city: "New York",
  hobbies: ["reading", "music", "sports"]
};

const jsonString = JSON.stringify(obj);
console.log(jsonString);

9. Playground 활용법

  • Open AI 활용
  • Temperature: 무작위성을 의미한다. 값이 높을수록 랜덤하게 나오며 값이 0에 가까울수록 질문에 대한 대답이 일관성 있게 나온다.
  • Maximum length: 값이 커질수록 답이 길게 나올 수 있다. 글자수와 토큰의 값은 일치하지 않으므로 주의해야 한다.
  • Top P: 랜덤 정도와 비슷하며 Top p가 높을 수록 창의적인 값이 나오게 된다. 창의성을 결정하는 요소이다. Temperature와 Top P의 값을 조절하면서 원하고자 하는 대답을 위해 알맞게 설정해야 한다.
  • Frequency + Presence penalty: 등장하는 단어가 반복되면 페널티를 주는 것.

0개의 댓글