- ์นด์นด์ค2021
- Python
- ์ํฐ๋
- golang
- ์น๋ฆฐ์ด
- nestjs
- LCs
- ์ด๋ถํ์
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- ๋นํธ๋ง์คํน
- go
- DP
- ์นด์นด์ค ์ฝํ
- ์ฌ๊ท
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- BFS
- ๋นํธ๋งต
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋ค์ต์คํธ๋ผ
- ํ๋ฆฌ์จ๋ณด๋ฉ
- js
- Union-Find
- ์๊ณ ๋ฆฌ์ฆ
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- ์์ฝ๋
- C++
- DFS
- ํธ๋ฆฌ
- ๋ฐฑ์ค
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- Today
- Total
Hello Ocean! ๐ผ
[TIL] ํ๋ฆฌ์จ๋ณด๋ฉ ์ธ ๋ฒ์งธ ๊ณผ์ _RedBrick ๋ณธ๋ฌธ
์ธ ๋ฒ์งธ ๊ณผ์ ๐ฅ
์ธ ๋ฒ์งธ ๊ณผ์ ๋ ๋ ๋๋ธ๋ฆญ์์ ๋ด์ฃผ์ ๊ณผ์ ์๋ค.
๊ณผ์ ์๊ตฌ์ฌํญ์ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด, ์ด๋ฒ ๊ณผ์ ์ ํต์ฌ์ ์ค์๊ฐ ๋ฐ์์ด์๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ํ ์ํฐํฐ๋ค๋ ๊ฐ์๊ธฐ ๋์ด๋์ DB์ค๊ณ์๋ ๋ง์ ๊ณ ๋ฏผ์ด ํ์ํ๋ค.
Socket ํต์ ์ด์ฉ ๐
์ ์ ๊ฐ ํ๋ก์ ํธ๋ฅผ ์์ ํ ๋, ์๋์น ์๊ฒ ์ฌ์ดํธ๊ฐ ์ข ๋ฃ๋์ด๋ ์์ ๋ด์ฉ์ด ๋ณด์กด๋๋๋ก ์์ ์ฌํญ์ด ์ค์๊ฐ์ผ๋ก ๋ฐ์๋์ด์ผ ํ๋ค.
๊ณ ๋ฏผ 1. ์ค์๊ฐ ํต์ ์ ์ด๋ป๊ฒ ๊ตฌํํ ๊ฒ์ธ๊ฐ?
์๊ตฌ์ฌํญ์ ๋ถ์ํ๋ฉด์, Socketํต์ ์ด ๋ ์ค๋ฅด๊ธด ํ์ง๋ง, ์ค์ ๋ก ์ด๋ป๊ฒ ๊ตฌํํ์ จ๋์ง ๊ถ๊ธํ๋ค.
๊ทธ๋์ ๋ ๋๋ธ๋ฆญ์์ ์๋น์ค์ค์ธ ์์ฆ๋ฉ์ ํ์๊ฐ์ ์ ํด์, ํฌ๋กฌ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ด์ฉํ์ฌ ์ค์๊ฐ์ผ๋ก ์ด๋ป๊ฒ ๋ฐ์์ด ๋๋์ง ํ์ธํด๋ณด์๋ค.
ํ์ธ ๊ฒฐ๊ณผ, ํธ์ง์ฌํญ์ด ์๊ธธ ๋ ๋ง๋ค Socket ํต์ ์ ์ฌ์ฉํ์ฌ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ณ ์์๋ค.
๋ฐ๋ผ์ Socket ํต์ ์ ์ฌ์ฉํ ๋งํ ๋ ๋ ํ ๊ทผ๊ฑฐ๊ฐ ์๊ฒผ๊ธฐ ๋๋ฌธ์, Socket์ ์ด์ฉํ๋ค.
์ด๋ ๊ฒ ์ง์ ์ฌ์ดํธ์์ ์ด๋ค ํต์ ๋ค์ด ์ด๋ฃจ์ด์ง๋์ง๋ฅผ ํ์ธํด๋ณด๋ ๊ฒฝํ์ด ์ฒ์์ด๋ผ ์ ๊ธฐํ๋ค.
๊ณ ๋ฏผ 2. ์ด๋ค '๋จ์'๋ก Socket ํต์ ์ ํ ๊ฒ์ธ๊ฐ?
ํธ์ง์ด ์ด๋ฃจ์ด์ง ๋ ๋ง๋ค, ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง์ ์ ์กํด์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ๋ ์์๊ฒ ์ง๋ง
ํ๋ก์ ํธ๋ ์ฌ๋ฌ ๊ฐ์ ์ฌ์, ์ฌ์ ์ฌ๋ฌ ๊ฐ์ ์คํ๋ผ์ดํธ๋ฅผ, ์คํ๋ผ์ดํธ๋ ์ฌ๋ฌ๊ฐ์ ๋ธ๋ญ์ ํฌํจํ ์ ์๋ ๊ฝค๋ ๋ณต์กํ ๊ตฌ์กฐ์๊ธฐ ๋๋ฌธ์ ํ๋ก์ ํธ ๋จ์๋ก ํต์ ํ๋ ๋ฐฉ๋ฒ์ ์ ํํ๋ค.
@WebSocketGateway({ namespace: "project" })
export class SocketGateway {
constructor(
@InjectModel(Project.name) private project: Model<ProjectDocument>
) {}
@SubscribeMessage("update")
handleMessage(@MessageBody() data) {
return this.project
.findOneAndUpdate({ projectId: data.projectId }, data, {
returnOriginal: false
})
.exec();
}
handleDisconnect(client: Socket) {
console.log(`Client disconnected: ${client.id}`);
}
handleConnection(client: Socket) {
console.log(`Client Connected: ${client.id}`);
}
}
Test Code๐งช
์ด๋ฒ ๊ณผ์ ๋ฅผ ํ๋ฉด์, ์ ๋๋ก ๋ ํ ์คํธ ์ฝ๋๋ฅผ ์ฒ์์ผ๋ก ์์ฑํด๋ณด์๋ค.
Game Module๊ด๋ จ Unit Test์ E2E Test๋ฅผ ์์ฑํ๋ค.
E2E Test
Postman์ผ๋ก testํ๋ ๊ฒ์, ์ฝ๋๋ก ์ฎ๊ธด๋ค๋ ๋๋์ด ๋ค์ด์ ๊ฐ๋ ์ ์ดํดํ๊ธฐ๊ฐ ์ฌ์ ๋ค.
๋ฌผ๋ก , ์คํจ ์ํฉ์ ๊ฐ์ ํด์ testํ๋ ๊ฒ์ ์ฝ์ง ์์์ง๋ง Unit Test๋ฅผ ์์ฑํ๋ ๊ฒ ๋ณด๋ค๋ ์์ํ๋ค.
Unit Test
์ด๋ฒ ๊ณผ์ ๋ฅผ ์ํํ๋ฉด์ ๋ด๋นํ๋ ๋ถ๋ถ ์ค์ ๊ฐ์ฅ ์ด๋ ค์ ๋ ๋ถ๋ถ์ด๋ค.
Unit Test๊ฐ ๋ญ๊ฐ? ๋ผ๋ ๊ณ ๋ฏผ๋ถํฐ ์์ํด์
์ค์ ๊ตฌํํ ๋ mock ๊ฐ์ฒด๋ฅผ ์ด๋ป๊ฒ ๋ง๋ค์ด์ผ ํ๋ฉฐ,, ์ด๋ค ๊ฒ์ ํ ์คํธ ํด์ผํ๋์ง๋,, ๋๋ฌด ์ด๋ ค์ ๋ค.
์์ฑํ gameService Unit Test ์ฝ๋
๋น๊ต์ ํ ์คํธ ์ฝ๋์ ๊ฒฝํ์ด ์์๋ ํจ๋ฏผ๋๊ป ์์ฒญ๋๊ฒ ๋ง์ ์ง๋ฌธํญํ์ ํ๋ฉฐ ๊ฒจ์ฐ ์์ฑํ ์ฝ๋์ด๋ค. ใ ใ
์ด ๊ณผ์ ๋ฅผ ๋๋ผ ๋ ๊น์ง ์ดํดํ ๋ถ๋ถ์ผ๋ก๋,
Unit Test ๋์์ด ๋๋ ๊ฐ์ฒด์ ์์กด์ฑ์ด ์๋ ๊ฐ์ฒด๋ค์ mock ๊ฐ์ฒด๋ก ๋ง๋ค์ด ์ฌ์ฉํ๋ค.
mock ๊ฐ์ฒด๋ ๊ฐ์ง๋ก ๋ง๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค.
์ฌ์ ํ ์ดํดํ์ง ๋ชปํ ๋ถ๋ถ์ผ๋ก๋,
Unit Test์์ ์ด๋ค ๊ฒ์ ํ ์คํธํด์ผ ํ๋๊ฐ?
expect()๋ฅผ ์ฌ์ฉํด์ ์ด๋ค ๊ฒ์ ๊ฒ์ฌํด์ผํ๋๊ฐ?
→ ์คํ ๊ฒฐ๊ณผ๋ก return๋ ๊ฐ๋ค์ ๋ณ์๋ก ๋ง๋ค์ด ๋๊ณ , ์คํ ๊ฒฐ๊ณผ์ ๊ฐ์์ง ํ์ธํ๋ ๋ฐฉ์์ผ๋ก ์งํํ๋๋ฐ ์ด๋ ๊ฒ ํ๋๊ฒ ๋ง๋ ๊ฒ์ธ์ง ๊ต์ฅํ ์๋ฌธ์ด ๋ค์๋ค.
๋๋ฌด ์ด๋ ต๊ณ , ์ดํด๋ ์๋๊ณ , ๊ณผ์ ์๊ฐ์ ์ด๋ฐํ๊ณ ใ ใ ..
๊ทธ๋์ ์ฌ์ค ์ฝ๋๋ฅผ ์ค๊ฐ์ ๋ ์์ฑํ๊ธฐ ์ ๊น์ง๋ "๋ฐ์๋ฐ ๊ตณ์ด ์ด๊ฒ๊น์ง ํด์ผํ๋?"๋ผ๋ ์๊ฐ์ด ๋ค์๋ค.
ํ์ง๋ง, ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์, ๋ด๊ฐ ์์ฑํ gameService์ ์์์น ๋ชปํ ๋ฒ๊ทธ๊ฐ ์๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค.
๊ทธ ๋ ๊นจ๋ฌ์๋ค. ์ด๋ฐ ์ด์ ๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด๊ตฌ๋!
๊ทธ๋์ ์์ผ๋ก ํ ์คํธ ์ฝ๋ ๊ด๋ จํด์ ๊น์ด ๊ณต๋ถํด๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
๋ด๊ฐ ํ ์คํธ์ ๋ํด ๋๋ฌด ์์ผํ๊ฒ ์๊ฐํ๊ณ ์์๋ ๊ฒ ๊ฐ๋ค.
๋ฏธํกํ ์ ์ด ๋ง์ ์ฝ๋์ด์ง๋ง, ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ๋๊น์ง ๋์์ ์ค ํจ๋ฏผ๋์๊ฒ ๋ชน์ ๊ฐ์ฌํ๋ค.
Maximum Call Stack Error ๐
๊ณํํ๋ ๊ตฌํ์ ๋ชจ๋ ๋ง์น๊ณ , ์๋ฒฝ์ ์ ์ฒด์ ์ผ๋ก ํ ์คํธ๋ฅผ ์งํํ๋ค.
๊ทธ๋ฐ๋ฐ...!
์๋ฒ์์ Maximum Call Stack Error๊ฐ ๋ฐ์ํ๋ค..
์ค์๊ฐ์ผ๋ก ํ๋ก์ ํธ ์์ ์ฌํญ์ ๋ฐ์ํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์๋๋ฐ, ๊ณผ์ ์ ์ถ ์๊ฐ์ด ์ด๋ฐํ์ฌ, ์ด ๋ฌธ์ ๋ ์์ง ํด๊ฒฐ๋์ง ๋ชปํ๋ค...
ํ์ง๋ง, Mongoose์์ ์ปฌ๋ ์ ๊ฐ ๊ด๊ณ ์ค์ ์ ์๋ชปํด์ ๋ฐ์ํ ๊ฒ์ผ๋ก ์ถ์ธก๋๊ณ ์๋ค...
์ํ์ ์ผ๋ก ๊ด๊ณ๊ฐ ์ฐธ์กฐ๋์ด ์์ด, ํ๊ณ ํ๊ณ ๋ค์ด๊ฐ๋ฉด์ call stack error๊ฐ ๋ฐ์ํ ๊ฒ์ด ์๋๊ฐ ํ๋..
์ด๋ฏธ ํ๋ฆฌ์จ๋ณด๋ฉ ์ฝ์ค๋ ๋๋ฌ์ง๋ง, ์ด ๋ฌธ์ ๋ฅผ ๊ฐ์ธ์ ์ผ๋ก ํด๊ฒฐํด ๋ณผ ์์ ์ด๋ค.
์๊ฐ ์ด๋ง๋ ๐คช
Maximum Call Stack Error๋ฅผ ๋ฐ๊ฒฌํ ์์ ์๋, ๊ณผ์ ์ ์ถ์ ํด์ผํ๋๋ฐ ์๋ฌ๋ฅผ ์ด์ ์์ผ ๋ฐ๊ฒฌํ ๊ฒ์ด ๋๋ฌด ์๋ง์ค๋ฌ์ ๋ค. ํ์ง๋ง, ์๋ฌ๋ฅผ ๊ฒช์ด์ผ ์ฑ์ฅํ ์ ์๋ค๊ณ ํ๋ ๋ง์ฒ๋ผ, ์ด ์๋ฌ ๋๋ถ์ ์ด๋ฐ ๋ฐฉ์์ผ๋ก mongoose๋ฅผ ์ด์ฉํ๋ฉด ์๋๋ค๋ ๊ฒ์ ๊นจ๋ฌ์ ์ ์์๋ค.
๊ทธ๋์, ์ง๊ธ์ ์ด ์๋ฌ๋ฅผ ๋ง์ฃผํ ๊ฒ์ด ์คํ๋ ค ์ข๋ค! ์์ผ๋ก๋ ์๋ฌ์ ์ ๋งํ๊ธฐ ๋ณด๋ค ๋ฐฐ์์ ๊ธฐํ๋ก ์ผ๋ ๊ธ์ ์ ์ธ:) ๊ฐ๋ฐ์์ ์์ธ๋ฅผ ์ด์ด๊ฐ๋ ค๊ณ ํ๋ค.
Test Code์ ์ค์์ฑ์ ๊นจ๋ซ๊ฒ ๋์๋ค. Test ๊ด๋ จ ์์ ์ ์ฝ์ด๋ณผ ์์ ์ด๋ค!
2๋ฐ 3์ผ๋ณด๋ค๋ ์งง์ ์๊ฐ์ด์ง๋ง ๋ฐฐ์ฐ๋ ๊ฒ์ด ๋ง์ ๊ฒ ๊ฐ์ ์ ๋ง ์ ์ตํ ์๊ฐ์ด๋ค. ๋ชธ์ ์ข ํผ๊ณคํ์ง๋ง..
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CKA ์ทจ๋ ํ๊ธฐ] ์ด์ ๋๋ Kubernetes ์ ๋ฌธ๊ฐ ?! (0) | 2024.07.09 |
---|---|
[AWS EC2] key-pair๋ฅผ ์ด์ฉํ ssh ์ฐ๊ฒฐ (0) | 2024.06.24 |
[TIL] ํ๋ฆฌ์จ๋ณด๋ฉ ๋ง์ง๋ง, ์ผ๊ณฑ ๋ฒ์งธ ๊ณผ์ _Cardoc (0) | 2021.12.02 |
[TIL] ํ๋ฆฌ์จ๋ณด๋ฉ ๋ ๋ฒ์งธ ๊ณผ์ _MAPIA (0) | 2021.11.25 |
[TIL] ํ๋ฆฌ์จ๋ณด๋ฉ ์ฒซ ๋ฒ์งธ ๊ณผ์ ํ๊ณ ๋ก (0) | 2021.11.12 |