Skip to content

Commit 82a4e80

Browse files
authored
Merge pull request #21 from seoki180/main
[5주차/서키] 워크북제출합니다.
2 parents c212905 + 2cd56a6 commit 82a4e80

File tree

2 files changed

+107
-0
lines changed

2 files changed

+107
-0
lines changed

keyword/chapter05/README.md

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
* 환경 변수
2+
프로그램을 개발할때 개발환경과 배포환경이 다를 수 있다(서버, 데이터베이스, 세부설정 등등) 예를 들어 개발환경에서는 디버깅을 편하게 하기 위해서 여러 정보를 로깅하거나 콘솔에 띄우게 되는데, 배포에서는 그럴 필요도 없고, 그러면 안되기 때문에 둘의 환경을 따로 설정해야 한다.
3+
이럴때 둘의 환경변수파일 (.env)를 설정해 적용시킨다.
4+
외부코드에 노출되면 안되는 정보를 저장하며 Nodejs 에서는 dotenv 패키지를 활용해 사용한다
5+
```jsx
6+
#hardcoded
7+
...
8+
password = "realpassword"
9+
...
10+
11+
#using env file
12+
...
13+
passwod = process.env.password
14+
...
15+
```
16+
* CORS
17+
Cross-Origin Resource Sharing
18+
브라우저가 자신의 출처가 아닌 다른 출처(도메인, 스킴, 포트)로부터 자원을 로딩하는 것을 혀용하도록 하는 HTTP header기반 메커니즘
19+
브라우저는 보안상 서로 다른 출처에 바로 요청을 보내는 것을 막는다. 하지만 요즘 웹은 서버랑 프론트가 서로 다른 곳에 위치하기 떄문에 서버에서 cors()를 설정해야 서로 다른 출처에서 데이터를 보내는것을 허락 할 수 있다.
20+
```jsx
21+
...
22+
app.use(cors()) // nodejs 서버에서 cors() 허용함
23+
...
24+
```
25+
* DB Connection, DB Connection Pool
26+
DB connection은 데이터베이스와 쿼리를 한번 날릴때마다 새로 DB와 연결을 시도한다.
27+
따라서 연결시마다 DB의 메모리, 리소스를 많이 사용하게 된다.
28+
DB connection Pool은 connection을 미리 여러개 만들어놓고 필요할 때마다 연결을 하나씩 빌려 쓰는 방식이다. 이러한 방식으로 연결 오버헤드를 줄일수 있다.
29+
```jsx
30+
const connection = mysql.createConnection({
31+
..
32+
})
33+
34+
connection.connect()
35+
..
36+
37+
connection.query(query,(err,result)=>{
38+
..
39+
})
40+
41+
connection.end()
42+
...
43+
44+
--------------------------------------------------------------
45+
const pool = mysql.createPool({
46+
connectionLimit : 10,
47+
...
48+
})
49+
50+
pool.getConnection((err,connection)=>{
51+
connection.query(...)
52+
connection.release()
53+
})
54+
```
55+
* 비동기 (async, await)
56+
코드 실행을 기다리지 않고 다음 작업을 먼저 처리하는 방식이다. async는 비동기 함수를 선언할 때 사용하고 await는 비동기 작업이 끝날 때까지 기다린다.
57+
DB를 연결하거나 API를 호출할때 작업이 오래걸리기 때문에 동기로 처리하게 되면 데이터가 올때까지 프로그램이 멈춰 다른 코드 실행이 전부 중단 될 수 있다.
58+
```jsx
59+
const data = db.query('SELECT * FROM users'); // 응답 올 때까지 멈춤
60+
console.log('여기까지 코드가 멈춘다!');
61+
62+
---------------------------------------------------------------
63+
64+
async function fetchData() {
65+
const data = await db.query('SELECT * FROM users'); // 기다리긴 하지만 코드 전체는 안 멈춤
66+
console.log('데이터 가져옴:', data);
67+
}
68+
69+
fetchData();
70+
console.log('나는 먼저 실행된다!');
71+
```
72+
* try/catch/finally
73+
js 예외처리 문법으로
74+
try 구문 안에 에러가 날 수 있는 코드를 실행하고,
75+
try 안에 에러가 발생하면 catch에서 에러를 처리한다.
76+
이후 try-catch에서 에러를 잡든 못잡든 finally의 구문을 마지막에 무조건 실행한다.
77+
try에서 err를 throw한 순간 try블록은 멈추고 catch에서 에러를 처리한다. 문법을 통해 예상치 못한 에러로 중단되는 것을 막고, 에러를 처리해서 서비스가 중단되지 않도록 한다.

mission/chapter05/README.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
미션 수행
2+
3+
https://github.com/seoki180/9th_node_practice/tree/feature/chapter05
4+
5+
6+
7+
1-1. 특정 지역에 가게 추가하기 API
8+
9+
**1-2. 가게에 리뷰 추가하기 API**
10+
11+
* 리뷰를 추가하려는 가게가 존재하는지 검증이 필요합니다.
12+
13+
1-3. 가게에 미션 추가하기 API
14+
15+
**1-4. 가게의 미션을 도전 중인 미션에 추가(미션 도전하기) API**
16+
17+
* 도전하려는 미션이 이미 도전 중이지는 않은지 검증이 필요합니다.
18+
19+
20+
**Controller → Service → Repository → DB로 이어지는 요청 흐름을 정리해 주세요.**
21+
22+
23+
도메인 주도로 개발(store, user, mission 엔드포인트 사용)
24+
25+
라우터 -> 컨트롤러 -> 서비스 -> 모델 -> DB 로 이어지는 서비스 흐름 작성,
26+
27+
28+
회원가입 API에 비밀번호 해싱 과정을 추가해 주세요.
29+
30+
-> crypto 라이브러리를 사용하여 비밀번호 해싱, salt 생성 과정을 추가함

0 commit comments

Comments
 (0)