๋์ฒด ๋ญ๋ฐ ๐ฟ ํ์๋ผ ๐ฟ
3649 ๋จ์ด beginnersprogrammingjavascriptwebdev
HTML
, ์ฝ๊ฐ์ Javascript์ ๋ค์ด๊ฐ๊ณ , ํด์ผ ํ ์ผ ๋ชฉ๋ก์ ๋ง๋ค์์ต๋๋ค.๊ทธ๋ฌ๋ ๋น์ ์ ์๋ก ๊ณ ์นจํ๊ณ ํ! ๋ชจ๋ ๊ฒ์ด ์ฌ๋ผ์ก์ต๋๋ค!
๋ฐ์ดํฐ๋ฅผ ์ ์งํ๋ ค๋ฉด ๋ฐฑ์๋ ์๋ฒ๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ๊นจ๋ซ๊ณ ๊ฐ์๊ธฐ Django, NodeJS, Server, Nginx, Apache, Postgres, SQL๊ณผ ๊ฐ์ ๋จ์ด๊ฐ ์ด์ง๋ฌ์์ง๋๋ค.
ํ์ง๋ง ๊ฑฑ์ ํ์ง ๋ง์ธ์. ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์ด ์คํ ์์ค ๊ฒฝ์ด๋ก์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ํ๊ธฐ ์ ์ ์ด๋ฏธ ์์์ผ ํ ์ฌํญ
1. API๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์์์ผ ํฉ๋๋ค.
2.Graphql ์๋ ๋ฐฉ์
3.Apollo ํด๋ผ์ด์ธํธ์ ๊ธฐ๋ณธ ์ฌํญ(๊ทธ๋๋ก ์งํ)Nice Video on basic setup for apollo client
Hasura๊ฐ ๋จ์ํํ๋ ๊ฒ
Hasura๊ฐ ๋จ์ํํ๋ ๊ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ๋๋ ์์ฑ(sql, mongo, postgres), ์์ฒด ์๋ฒ ์ค์ (nginx, apache), ํด๋น ์๋ฒ ํธ์คํ (aws, gcp, azure)์ ๋๋ค.
ํ์๋ผ๊ฐ ๋ถ์กฑํ ๊ฒ
์๋ฒ ์์ฒด๊ฐ ๋ฐ์ดํฐ์ ๋ํด ๋ณต์กํ ์์ ์ ์ํํ๋๋ก ๋น์ฆ๋์ค ๋ก์ง์ ์์ฑํ๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. ์๋ฒ ์์ฒด๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค! ์ฌ๊ธฐ์ ํ์ถ๊ตฌ๋ AWS Lambda ๋๋ ๋ค๋ฅธ ์๋ฒ๋ฆฌ์ค ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์๊ตฌ ์ฌํญ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋๋ค.
๊ฐ๋จํ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ด ๊ฒ์์ ์ํด Hasura์์ ๊ฐ๋จํ LeaderBoard๋ฅผ ๋ง๋ ๋ฐฉ๋ฒ:
๊ฐ๋จํ ๊ฒ์์ ๋ง๋ค์์ต๋๋ค. game link
React๋ก ๋ง๋ ๊ฐ๋จํ ์นด๋ ํ๋ฆฌํผ ๋ฉ๋ชจ๋ฆฌ ๊ฒ์์ ๋๋ค. ์ฌ๊ธฐ GITHUB repository์ด ์์ต๋๋ค.
์ด์ Hasura์์ ๋ด heroku ๊ณ์ ์ ์ฐ๊ฒฐํ๋ postgres ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค๊ณ LeaderBoard๋ผ๋ ํ ์ด๋ธ์ ๋ง๋ค์์ต๋๋ค.
์ด๋ฌํ ๊ฒ๋ค์ ๋ฏ์ค๊ฒ ๋ค๋ฆด ์ ์์ง๋ง ํ๋ก๊ทธ๋จ์ ์ค์นํ๊ธฐ ์ํด ์ํํ๋ ๋ค์>๋ค์>๋ค์>์ค์น์ ๊ฐ์ด ๊ฐ๋จํฉ๋๋ค.
ํ ์ด๋ธ์๋ ๋ฌธ์์ด์ธ Name , ์ซ์์ธ score , UUID ์ธ ID ์ 3๊ฐ ์ด์ด ์์ต๋๋ค. is (hasura์ ๋์์ ์๋ ์์ฑ๋จ)
์ด์ Leaderboard API๋ฅผ ํธ์ถํ ๋ React์ ๋ํด apollo client์ ์ฌ์ฉํ์ฌ ์๋ ์์ฑ๋ Graphql ์ฟผ๋ฆฌ ์กฐ๊ฐ์ ํธ์ถํ๊ณ ์ง์! ์ฐ๋ฆฌ๋ ๋ชจ๋ ์ง๋์๋ฅผ ์ป์ต๋๋ค.
๋ด๊ฐ ์คํํ ํน์ ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
query getLeaderBoard {
Leaders {
Name
Score
}
}
๊ทธ๋ฌ๋ฉด ์ด๋ฆ๊ณผ ์ ์๊ฐ ํฌํจ๋ ๋ฆฌ๋๋ณด๋๊ฐ ๋ฐํ๋ฉ๋๋ค.
Hasura ๋์๋ณด๋์์ ์ด๋ฌํ ์ฟผ๋ฆฌ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ ์ ์์ต๋๋ค.
์ด์ ๋๊ตฐ๊ฐ๊ฐ ๊ฒ์์์ ์ด๊ธฐ๋ฉด useEffect๊ฐ ๋ ๋ค๋ฅธ ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ฌ ์ด๋ฒ์๋ ์์ํ์ ํ๋ ์ด์ด๋ฅผ ์ถ๊ฐํฉ๋๋ค.
mutation AddScore($Name: String!, $Score: Int!) {
insert_Leaders_one(object: { Name: $Name, Score: $Score }) {
id
}
}
ํ๋๋ ํ๋ ์ด์ด์ ์ด๋ฆ(๋ก์ปฌ ์ํ์ ์ฌ์ฉ์๋ก๋ถํฐ ๊ฐ์ ธ์ด)๊ณผ ํ๋์ ์ ์(useContext์ ์ํ๋ก ์ ์ง๋จ)์ ๋๋ค.
์ด API๋ ๋ฆฌ๋๋ณด๋์ ํ๋ ์ด์ด๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ด์ ์ด๋ณด ์ด์ฌ์์๊ฒ ์ด๊ฒ์ ๋ง์ ๊ฒ์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฐฑ์๋ ์ค์ , ๋ฐฐํฌ ๋ฐ ๊ธฐํ ๋ง์ ์์ ์ ๋ช ์ฃผ ๋์ ์ ์ฝํ ์ ์์ต๋๋ค.
์ด์ ๋๋ ์ด๋ณด์๊ฐ ๋ ๋ด ์์ ์ ์๊ฐํ๊ณ Hasura๊ฐ ๋๋ฌด ์ข์ ์ ํ์ด๋ผ๊ณ ๋งํ๊ณ ๋ ๋ง์ด ์ฌ์ฉํ๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค!
์ ๋ง์ ๋ค์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ธ์ ๋ ์ง ์ ๊ฒ ์ฐ๋ฝํ์ ์ ์ github์ ๋ณด์ค ์ ์์ต๋๋ค.
๋ค์ ์๊ฐ๊น์ง...
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๋์ฒด ๋ญ๋ฐ ๐ฟ ํ์๋ผ ๐ฟ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/i_am_onkar/what-the-hell-is-hasura-466ํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค