본문 바로가기
백엔드/Node.js

Node.js 프로젝트 시작하기: 효율적인 파일 구조와 라우팅 관리

by hyunji00pj 2024. 11. 13.

이번 포스팅에서는 sns 서버 구축에 앞서 Node.js 프로젝트의 초기 파일 구조와 필요한 json모듈 애플리케이션의 메인 설정에 대해 알아보려고 한다.

 

Node.js 애플리케이션을 개발할 때 일반적으로 사용되는 구조 중 하나로, 코드의 관리를 용이하게 하고, 기능별로 파일을 구분하여 프로젝트의 유지보수를 향상시킬 수 있다.

 

 

 

 

 

Project\Server폴더 안에 아래와 같이 폴더와 파일을 만들었다 

파일 구조 설명

각 파일과 폴더의 역할은 다음과 같다

  • app.js
    • 이 파일은 애플리케이션의 메인 진입점입니다. Express 앱을 설정하고, 미들웨어를 구성하며, 라우터를 연결하는 기본 서버 설정을 포함합니다.
  • package.json
    • Node.js 프로젝트에서 필수적인 파일로, 프로젝트의 메타데이터와 의존성(dependencies) 목록을 관리합니다. npm install을 실행하면 package.json에 명시된 모든 패키지가 설치됩니다.
  • router/
    • 이 폴더는 애플리케이션의 라우팅 로직을 모듈화하여 관리합니다. 라우터를 통해 관련된 경로들을 그룹화하고, 각 경로에 대한 요청 처리를 담당합니다.
    • auth.js
      • 인증 관련 라우트를 처리하는 파일입니다. 로그인, 로그아웃, 회원 가입 등 인증과 관련된 API 엔드포인트가 구현됩니다.
    • tweets.js
      • 트윗 관련 기능(트윗 작성, 트윗 조회, 트윗 수정, 트윗 삭제)을 처리하는 라우터입니다. 각기 다른 HTTP 메서드(GET, POST, PUT, DELETE)를 통해 해당 기능들을 제공합니다.


package.json 파일 설정

package.json 파일은 프로젝트의 설정을 중앙에서 관리하며, 프로젝트의 의존성을 일관되게 유지하고, 필요한 스크립트를 쉽게 실행할 수 있게 해주므로 Node.js 개발에서 중요하다. package.json파일로 개발자는 프로젝트의 의존성을 수동으로 관리하는 복잡성에서 벗어나고, 팀원 간의 작업 환경을 통일할 수 있다.

 

모듈 시스템 설정:

type: 최근 JavaScript는 CommonJS와 ES 모듈 두 가지 시스템을 사용합니다. package.json에서 type을 module로 설정하면 ES 모듈로 작업하겠다는 것을 명시할 수 있어, 최신 자바스크립트 기능을 활용할 수 있다.

{
  "name": "twitter_server",  // 프로젝트의 이름입니다.
  "version": "1.0.0",        // 프로젝트의 버전입니다.
  "main": "app.js",          // 프로젝트의 메인 엔트리 파일입니다.
  "type": "module",          // ES 모듈 시스템 사용을 명시합니다. (CommonJS 대신에)
  "scripts": {               // 커맨드 라인에서 실행할 수 있는 스크립트를 정의합니다.
    "test": "echo \"Error: no test specified\" && exit 1",  // 테스트 스크립트
    "start": "nodemon app.js"  // 애플리케이션을 nodemon을 사용하여 시작합니다.
  },
  "keywords": [],            // 프로젝트와 관련된 키워드 배열입니다.
  "author": "",              // 프로젝트의 저자 정보입니다.
  "license": "ISC",          // 프로젝트의 라이선스 정보입니다.
  "description": "",         // 프로젝트의 설명입니다.
  "devDependencies": {       // 개발 시에만 필요한 종속성을 나열합니다.
    "nodemon": "^3.1.7"      // nodemon 라이브러리를 지정된 버전으로 포함합니다.
  },
  "dependencies": {          // 프로덕션 환경에서 필요한 종속성을 나열합니다.
    "body-parser": "^1.20.3",// 요청 본문을 파싱하는 미들웨어입니다.
    "ejs": "^3.1.10",        // 템플릿 엔진 EJS를 지정된 버전으로 포함합니다.
    "express": "^4.21.1"     // Express.js 웹 프레임워크를 지정된 버전으로 포함합니다.
  }
}

"start": "nodemon app.js" 으로 nodemon을 사용하여 npm start 명령어를 통해 실행할 수 있게된다.(디버깅할때 훨씬 편리함) nodemon은 파일이 수정될 때마다 자동으로 Node.js 애플리케이션을 재시작해주는 유틸리티이다.

 

package.json파일 생성 및 설정에 대한 확인은 다음 글에서 자세히 확인할 수 있다

https://hyunji00pj.tistory.com/49

 

package.json 파일 생성 및 설정 방법

package.json 파일은 Node.js 프로젝트에서 필수적인 구성 파일로, 프로젝트의 메타데이터와 종속성을 관리합니다. 프로젝트 폴더 내에서 npm init 명령어를 사용하여 이 파일을 생성하고 설정할 수 있

hyunji00pj.tistory.com

 

 

app.js (메인)파일 설정

Node.js 환경에서 Express.js를 사용하여 웹 서버를 구성하는 기본 예시이다

// Express.js 모듈을 임포트합니다.
import express from 'express'

// 사용자 정의 라우터 파일을 임포트합니다.
import tweetsRouter from './router/tweets.js'
import authRouter from './router/auth.js'

// Express 애플리케이션 객체를 생성합니다.
const app = express()

// 요청 본문을 JSON 형태로 파싱할 수 있게 미들웨어를 설정합니다.
app.use(express.json())

// '/tweets' 경로로 들어오는 요청을 tweetsRouter가 처리하도록 설정합니다.
app.use('/tweets', tweetsRouter)

// '/auth' 경로로 들어오는 요청을 authRouter가 처리하도록 설정합니다.
app.use('/auth', authRouter)

// 요청이 위에서 정의된 경로와 일치하지 않을 경우, 404 Not Found 에러를 응답합니다.
app.use((req, res, next) => {
    res.sendStatus(404)
})

// 서버를 8080 포트에서 실행합니다.
app.listen(8080)

 

1. 모듈 임포트:

import express from 'express'
import tweetsRouter from './router/tweets.js'
import authRouter from './router/auth.js'

 

  • express: Express 모듈을 임포트합니다. 이는 Node.js의 웹 애플리케이션 프레임워크로, 웹 서버 기능을 손쉽게 구현할 수 있게 도와줍니다.
  • tweetsRouter와 authRouter: 사용자 정의 라우터 모듈을 임포트합니다. 각각 트윗과 인증(authentication) 관련 라우팅 로직이 구현되어 있습니다.

 

2. Express 애플리케이션 생성

const app = express()
  • express() 함수를 호출하여 새 Express 애플리케이션을 생성합니다.

3. 미들웨어 설정 :

app.use(express.json())
  • express.json(): 서버가 JSON 요청 본문을 파싱할 수 있도록 미들웨어를 설정합니다. 이는 클라이언트로부터 받은 JSON 형식의 데이터를 쉽게 처리할 수 있게 해줍니다.

4. 라우터 사용 :

app.use('/tweets', tweetsRouter)
app.use('/auth', authRouter)
  • 각 라우터 모듈을 특정 경로에 연결합니다. 예를 들어, /tweets 경로로 들어오는 요청은 tweetsRouter가 처리하고, /auth 경로로 들어오는 요청은 authRouter가 처리합니다.

5. 404 에러 처리 :

app.use((req, res, next) => {
    res.sendStatus(404)
})
  • 요청이 기존의 라우트나 미들웨어와 일치하지 않을 경우, 404 상태 코드를 클라이언트에 전송합니다. 이는 요청된 리소스가 서버에 없음을 나타냅니다.

6. 서버 실행 :

app.listen(8080)
  • listen 메소드를 사용하여 8080 포트에서 서버를 실행합니다. 이로써 서버가 클라이언트의 요청을 수신할 준비가 완료됩니다.

위 코드는 Express.js를 사용하여 API 서버를 구성하는 간단한 예제로, 특정 경로에 대한 요청 처리를 모듈화하여 관리하는 방법이다. 각 라우터는 특정 도메인 로직(예: 트윗 관리, 사용자 인증)을 캡슐화하고, 애플리케이션의 구조를 깔끔하게 유지하도록 한다.

 

router에 대한 설정은 다음 포스팅에서 계속 하겠다👋

'백엔드 > Node.js' 카테고리의 다른 글

회원관리 서버 구축 (Node.js Express 프레임워크 )  (2) 2024.11.13
sns 서버 구축 (Node.js Express 프레임워크 )  (0) 2024.11.13
package.json 파일 생성 및 설정 방법  (0) 2024.11.13
fetch  (2) 2024.11.09
Node.js  (2) 2024.11.08