두 달간 회사에서 인턴하며 진행했던 프로젝트에 관해 정리한 내용!
nodejs를 사용했는데 서버는 express가 아닌 restify를 사용했다.
웹툰 사이트와 유사한 웹사이트를 최대한 실무에서 사용하는 방식을 가지고 개발했다.
클라이언트는 다른 분이 도맡아 하셨기에 난 오롯이 백엔드 서버 부분만 구현했다 !
개발 도구
server - restify
client - next.js
db - mysql
memory - redis
deploy - rds, ec2, amplify
git - https://github.com/leejinagood/WebtoonSite.git
📁 Controller : 기본적인 파라미터 값과 응답 값 관리
📁 Route : api의 엔드포인트 관리
📁 Service : api의 로직 관리
📁 Admin : admin 관련 api
📄 server.js : 기본적으로 실행하는 파일, 관련 파일들을 호출
📄 redis.js : redis 연결 파일
📄 database.js : db 연결 파일
기본적인 실행은 server.js에서 실행하며 터미널에서 node server.js로 실행한다.
const restify = require('restify');
// 모듈 설치 및 설정
const server = restify.createServer();
server.use(restify.plugins.bodyParser()); // JSON 데이터 파싱을 위한 미들웨어
server.use(restify.plugins.queryParser());
// 기본 포트번호 설정
const port = process.env.PORT || 4000;
// CORS 정책 설정
const corsMiddleware = require('restify-cors-middleware');
const cors = corsMiddleware({
preflightMaxAge: 5,
origins: ['https://imgur.com', 'https://kauth.kakao.com', 'https://main.d3uyndzg7v4qmk.amplifyapp.com', 'https://endearing-cranachan-04b6ee.netlify.app' ,'http://localhost:3000'], // 클라이언트 도메인 주소
allowHeaders: ['Authorization'],
});
server.pre(cors.preflight);
server.use(cors.actual);
// 서버 설정 및 라우트 호출
require('./routes/webtoonRoute')(server);
require('./routes/webtoonListRoute')(server);
require('./admin/routes/webtoonAddRoute')(server);
require('./admin/routes/webtoonDeleteRoute')(server);
require('./admin/routes/webtoonShowRoute')(server);
require('./admin/routes/adminAuthRoute')(server);
require('./routes/commentRoute')(server);
require('./routes/likeRoute')(server);
require('./routes/userRoute')(server);
// 서버 시작
server.listen(port, () => {
console.log("---------------------------구동 시작---------------------------"); // 로그 기록
});
잘 실행이 되었다.
//package.json
{
"name": "server",
"version": "1.0.0",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"aws-sdk": "^2.1438.0",
"axios": "^1.4.0",
"bcrypt": "^5.1.0",
"cookie-parser": "^1.4.6",
"dotenv": "^16.3.1",
"express-session": "^1.17.3",
"figlet": "^1.6.0",
"jsonwebtoken": "^9.0.1",
"mysql2": "^3.5.2",
"nodejs": "^0.0.0",
"querystring": "^0.2.1",
"redis": "^4.6.7",
"restify": "^11.1.0",
"restify-cookies": "^0.2.6",
"restify-cors-middleware": "^1.1.1",
"restify-router": "^0.6.2",
"restify-session": "^1.1.1",
"route": "^0.2.5"
},
"description": ""
}