Skip to content

Commit f1e5cfe

Browse files
committed
2차 세미나 도전 과제
1 parent ad39c0a commit f1e5cfe

File tree

15 files changed

+889
-7
lines changed

15 files changed

+889
-7
lines changed

.gitignore

+1-4
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,4 @@ dist
126126
# Serverless Webpack directories
127127
.webpack/
128128

129-
# End of https://www.toptal.com/developers/gitignore/api/node
130-
131-
# deploy test!
132-
.env
129+
# End of https://www.toptal.com/developers/gitignore/api/node

seminar2-advanced/nodemon.json

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"watch": ["src", ".env"],
3+
"ext": "js,ts,json",
4+
"ignore": ["src/**/*.spec.ts"],
5+
"exec": "ts-node --transpile-only ./src/index.ts"
6+
}

seminar2-advanced/package.json

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"name": "seminar2-advanced",
3+
"version": "1.0.0",
4+
"main": "index.js",
5+
"license": "MIT",
6+
"scripts": {
7+
"dev": "nodemon",
8+
"build": "tsc && node dist"
9+
},
10+
"dependencies": {
11+
"express": "^4.18.1"
12+
},
13+
"devDependencies": {
14+
"@types/express": "^4.17.14",
15+
"@types/node": "^18.8.3",
16+
"nodemon": "^2.0.20"
17+
}
18+
}

seminar2-advanced/src/api/blog.ts

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import express, { Request, Response, Router } from 'express';
2+
3+
const router: Router = express.Router();
4+
5+
router.get('/', (req: Request, res: Response) => {
6+
const blog = {
7+
title: '쥰쥬닝의 10월 8일 일기',
8+
desc: '나는 오늘 서버 2차세미나를 들었다. 어제 술을 많이 마셔서 힘들다. 빨리 집가고 싶다.',
9+
createdAt: '2022.10.08',
10+
};
11+
return res.status(200).json({
12+
status: 200,
13+
message: '블로그 조회 성공',
14+
data: blog,
15+
});
16+
});
17+
18+
module.exports = router;

seminar2-advanced/src/api/comment.ts

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import express, { Request, Response, Router } from 'express';
2+
3+
const router: Router = express.Router();
4+
5+
router.get('/', (req: Request, res: Response) => {
6+
const comment = {
7+
blogId: 1,
8+
comment: '엄청난 하루를 보내고 있군요!',
9+
createdAt: '2022.10.08',
10+
};
11+
return res.status(200).json({
12+
status: 200,
13+
message: '댓글 조회 성공',
14+
data: comment,
15+
});
16+
});
17+
18+
module.exports = router;

seminar2-advanced/src/api/index.ts

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import express, { Router } from 'express';
2+
const blog = require('./blog');
3+
const user = require('./user');
4+
const comment = require('./comment');
5+
const movie = require('./movie');
6+
const members = require('./members');
7+
const router: Router = express.Router(); // express 라우팅 시스템을 받아올거!
8+
9+
router.use('/user', user);
10+
router.use('/blog', blog);
11+
router.use('/comment', comment);
12+
router.use('/movie', movie);
13+
router.use('/members', members);
14+
module.exports = router; // 모듈로 반환

seminar2-advanced/src/api/members.ts

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import express, { Request, Response, Router } from 'express';
2+
import { Member } from '../interfaces/member';
3+
4+
const router: Router = express.Router();
5+
6+
router.get('/', (req: Request, res: Response) => {
7+
const members: Member[] = [
8+
{
9+
name: '권세훈',
10+
group: 'ob',
11+
age: 24,
12+
},
13+
{
14+
name: '남지윤',
15+
group: 'ob',
16+
age: 23,
17+
},
18+
{
19+
name: '김혜수',
20+
group: 'ob',
21+
age: 25,
22+
},
23+
{
24+
name: '이종현',
25+
group: 'ob',
26+
age: 26,
27+
},
28+
{
29+
name: '박수린',
30+
group: 'yb',
31+
age: 21,
32+
},
33+
];
34+
return res.status(200).json({
35+
status: 200,
36+
message: '멤버 조회 성공',
37+
data: members,
38+
});
39+
});
40+
41+
module.exports = router;

seminar2-advanced/src/api/movie.ts

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import express, { Request, Response, Router } from 'express';
2+
3+
const router: Router = express.Router();
4+
5+
router.get('/', (req: Request, res: Response) => {
6+
const movie = {
7+
title: '기생충',
8+
desc: '전원백수로 살 길 막막하지만 사이는 좋은 기택(송강호) 가족. 장남 기우(최우식)에게 명문대생 친구가 연결시켜 준 고액 과외 자리는 모처럼 싹튼 고정수입의 희망이다. 온 가족의 도움과 기대 속에 박사장(이선균) 집으로 향하는 기우. 글로벌 IT기업 CEO인 박사장의 저택에 도착하자 젊고 아름다운 사모님 연교(조여정)가 기우를 맞이한다. 그러나 이렇게 시작된 두 가족의 만남 뒤로, 걷잡을 수 없는 사건이 기다리고 있었으니…',
9+
playdate: '2019.05.30',
10+
};
11+
return res.status(200).json({
12+
status: 200,
13+
message: '영화 조회 성공',
14+
data: movie,
15+
});
16+
});
17+
18+
module.exports = router;

seminar2-advanced/src/api/user.ts

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import express, { Request, Response, Router } from 'express';
2+
3+
const router: Router = express.Router();
4+
5+
router.get('/', (req: Request, res: Response) => {
6+
const user = '지윤';
7+
return res.status(200).json({
8+
status: 200,
9+
message: '유저 조회 성공',
10+
data: user,
11+
});
12+
});
13+
14+
module.exports = router;

seminar2-advanced/src/index.ts

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// src/index.ts
2+
import express, { NextFunction, Request, Response } from 'express';
3+
4+
const app = express(); // express 객체 받아옴
5+
const PORT = 3000; // 사용할 port를 3000번으로 설정
6+
7+
app.use(express.json()); // express 에서 request body를 json 으로 받아오겠다.
8+
9+
app.use('/api', require('./api')); // use -> 모든 요청
10+
// localhost:8000/api -> api 폴더
11+
// localhost:8000/api/user -> user.ts
12+
13+
//* HTTP method - GET
14+
app.get('/', (req: Request, res: Response, next: NextFunction) => {
15+
res.send('마! 이게 서버다!');
16+
});
17+
18+
app.listen(PORT, () => {
19+
console.log(`
20+
#############################################
21+
🛡️ Server listening on port: ${PORT} 🛡️
22+
#############################################
23+
`);
24+
}); // 8000 번 포트에서 서버를 실행하겠다!
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export interface Member {
2+
name: string;
3+
group: string;
4+
age: number;
5+
}

seminar2-advanced/tsconfig.json

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"compilerOptions": {
3+
"target": "es6", //? 어떤 버전으로 컴파일
4+
"allowSyntheticDefaultImports": true, //? default export가 없는 모듈에서 default imports를 허용
5+
"experimentalDecorators": true, //? decorator 실험적 허용
6+
"emitDecoratorMetadata": true, //? 데코레이터가 있는 선언에 대해 특정 타입의 메타 데이터를 내보내는 실험적인 지원
7+
"skipLibCheck": true, //? 정의 파일 타입 체크 여부
8+
"moduleResolution": "node", //? commonJS -> node 에서 동작
9+
"module": "commonjs", //? import 문법
10+
"strict": true, //? 타입 검사 엄격하게
11+
"pretty": true, //? error 메시지 예쁘게
12+
"sourceMap": true, //? 소스맵 파일 생성 -> .ts가 .js 파일로 트랜스 시 .js.map 생성
13+
"outDir": "./dist", //? 트랜스 파일 (.js) 저장 경로
14+
"allowJs": true, //? js 파일 ts에서 import 허용
15+
"esModuleInterop": true, //? ES6 모듈 사양을 준수하여 CommonJS 모듈을 가져올 수 있게 허용
16+
"typeRoots": [
17+
"./src/types/express.d.ts", //? 타입(*.d.ts)파일을 가져올 디렉토리 설정
18+
"./node_modules/@types" //? 설정 안할시 기본적으로 ./node_modules/@types
19+
]
20+
},
21+
"include": [
22+
"./src/**/*" //? build 시 포함
23+
],
24+
"exclude": [
25+
"node_modules", //? build 시 제외
26+
"tests"
27+
]
28+
}

0 commit comments

Comments
 (0)