# Docker를 써서 Express 웹앱 개발하기

- Author: @smithsolution
- Published: 2025-03-16
- Updated: 2025-03-16
- Source: http://blex.me/@smithsolution/docke%EB%A5%BC-%EC%8D%A8%EC%84%9C-express-%EC%9B%B9%EC%95%B1-%EA%B0%9C%EB%B0%9C%ED%95%98%EA%B8%B0
- Tags: 미분류

---

Express.js는 Node.js 기반의 경량 웹 프레임워크로, 서버 및 API를 쉽게 구축할 수 있도록 도와줍니다.
미들웨어와 라우팅 기능을 제공하여 요청을 처리하고, 다양한 플러그인과 함께 확장할 수 있죠.
RESTful API 및 SSR을 지원하며, 빠르게 웹 애플리케이션을 개발할 수 있는 구조를 제공하여 nodeJS 런타임의 등장이후, 스타트업 뿐만 아니라, 다양한 SI업체에서도 흔하게 사용하는 프레임워크입니다.

그래서 이번 포스팅에서는 해당 프레임워크를 사용하여 웹앱을 개발해보도록 하겠습니다.

## 이미지파일을 만들자!
- Express 웹앱 실행할 수 있는 전용 컨테이너를 만들어 배포하기 위해서는 전용 이미지를 만들어야 합니다.
- 일단 vsocde를 실행해줍니다. 그리고 아래와 같이 5번째 아이콘을 눌러 탭을 새롭게 엽니다.

<center>
![](https://static.blex.me/images/content/2025/3/16/202531618_xiOHNKbE3rlvj7iaHDpo.png)
</center>

- 그리고 REMOTE EXPLORER 옵션에서 ***WSL Targets***를 선택해줍니다.

<center>
![](https://static.blex.me/images/content/2025/3/16/202531618_10R9QOu6Ywn9PmE0MXlq.png)
</center>

- 그리고 워크스페이스 디렉토리( `/workspace` )로 들어가줍니다.

<center>
![](https://static.blex.me/images/content/2025/3/16/202531618_nwKYCIscvGbCGkP61SjQ.png)
</center>

- 그리고 아래와 같이 세개의 파일을 만들어줍니다.

<center>
![](https://static.blex.me/images/content/2025/3/16/202531618_PsPqMkmeyWfSWrFaq0GT.png)	
</center>

- 각 파일에 아래 코드를 넣어주도록 하겠습니다.
### 1.Dockerfile
```
# 1. 베이스 이미지
FROM node:18

# 2. 작업 디렉터리 설정
WORKDIR /app

# 3. package.json, package-lock.json 복사 (없으면 실패)
COPY package*.json ./

# 5. npm 패키지 설치
RUN npm install

# 6. 전체 프로젝트 복사
COPY . .

# 7. 포트 설정
#EXPOSE 3000

# 8. 실행 명령어
CMD ["node", "server.js"]
```

<center>
![](https://static.blex.me/images/content/2025/3/16/202531618_rRYSMLMO8rXjqRtIe3EA.png)
</center>
	
### 2.package.json
```
{
    "name": "node-web-server",
    "version": "1.0.0",
    "description": "A simple Node.js web server using Express",
    "main": "server.js",
    "scripts": {
      "start": "node server.js",
      "dev": "nodemon server.js"
    },
    "dependencies": {
      "express": "^4.18.2"
    },
    "devDependencies": {
      "nodemon": "^3.0.1"
    },
    "engines": {
      "node": ">=14.0.0"
    },
    "license": "MIT"
  }
```

<center>
![](https://static.blex.me/images/content/2025/3/16/202531618_5r6ocTe4uZwVytbU7Ysd.png)
</center>

### 3.server.js
```
const express = require("express");
const app = express();
const PORT = 3000;

app.get("/", (req, res) => {
    res.send("Hello, World! 🚀");
});

app.listen(PORT, () => {
    console.log(`Server is running at http://localhost:${PORT}`);
});
```

<center>
![](https://static.blex.me/images/content/2025/3/16/202531618_nfUi3d0mikJPX08xVpMJ.png)
</center>
	
- 이렇게 만들어진 세개의 파일을 가지고 이미지를 만들어보겠습니다.
```
docker build -t my-node-app .
```

<center>
![](https://static.blex.me/images/content/2025/3/16/202531618_C7NLd3gRdBNYnmBt7Ki5.png)
</center>
	
- 이제 ***my-node-app*** 이라는 이름의 이미지가 만들어졌는지 확인해보겠습니다.
```
docker images
```

<center>
![](https://static.blex.me/images/content/2025/3/16/202531618_8CvNByFailwG1FAB5Etl.png)
</center>

(이미지 크기가 1.59GM이네요! 아무래도 런타임도 같이 패키징되다 보니 용량이 많이 먹는 것 같습니다)

- 이제 만들어진 이미지로 새 컨테이너를 만들고 배포해봅시다.
```
docker run -d -p 3000:3000 --name node_container my-node-app
```

- 터미널 상에서 실행하는 방법은 다음과 같고, 
```
docker ps
curl http://localhost:3000
```

<center>
![](https://static.blex.me/images/content/2025/3/16/202531618_jDGuPHJW0ghEOM8JQt8e.png)
</center>
	
- 웹브라우저에서도 url( ***http://localhost:3000*** )을 통해 웹앱에서 값을 불러올 수 있는 것을 확인할 수 있습니다.

<center>
![](https://static.blex.me/images/content/2025/3/16/202531618_qJ53Pia2DaTfEGhyRQ72.png)
</center>

> 지금까지 Docker를 써서 Express 웹앱을 개발해보았습니다! 다음 스테이지로 넘어가보겠습니다!
