-
Notifications
You must be signed in to change notification settings - Fork 10
Project Tech Log
bohyeon edited this page Dec 21, 2019
·
2 revisions
- 1μ£Όμ°¨ - μλΉμ€ κΈ°ν + κ°λ° μΈν + λΈλμΉ μ λ΅
- 2μ£Όμ°¨ - μΈνλΌ + κ°λ°νκ²½ μ€μ (husky + ESLint)
- 3μ£Όμ°¨ - μΊλ¦ν° μ λλ©μ΄μ + μ€μκ° μμ§μ νμ
- 4μ£Όμ°¨ - κ²μ μμΈμν© + socket test + μμΌ μ¬μ°κ²° μ΄μ
- 5μ£Όμ°¨ - μΊλ¦ν° μμ§μ λ²κ·Έ + OAuth λ‘κ·ΈμΈ
- 6μ£Όμ°¨ - μ¬μ΄λ + λλ©μΈ + μ격ν μ±ν κΈΈμ΄ κ²μ¬ + μ λλ©μ΄μ μΆκ°
- 7μ£Όμ°¨ - 리ν©ν λ§
- μΉ κ²μ (OX ν΄μ¦)
- websocketμΌλ‘ μ€μκ° ν΅μ ꡬν (μ€μκ° νμ ν΄μ μλμλ¦¬μΈ μμΌ ν΅μ κ²½ν)
- MVC ν¨ν΄ μ€μ΅μ΄ κ°λ₯
- κ²μ λ‘μ§μΌλ‘ μΈν 볡μ‘μ± κ΄λ¦¬λ₯Ό κ²½ν
- νμ΄ κ°λ°νλ©΄μ μ¬λ―Έλ₯Ό λλ μ μλ κΈ°ν
- κ°λ° λꡬ : VSCode
- κ°λ° νκ²½ : Client, Server λ λ€ ES6+, ES Module λ°©μμΌλ‘ ꡬν
- μ½λ© 컨벀μ
: ESLintλ₯Ό μ¬μ©ν΄ 컨벀μ
μ ν΅μΌ. airbnbλ₯Ό λ°λ₯΄κ³ , μΆκ°μ μΌλ‘ νμ κΈ°νΈμ λ§μΆ° μΈλΆμ¬νμ μ‘°μ¨
- else μ μ°κ³ ifμ returnμ μ΄μ©ν΄μλ§ λΆκΈ°
- space 2μΉΈ & ν μ€ 100μ μ νμΌλ‘ λ€μ¬μ°κΈ°λ₯Ό μ€μ΄κ³ ν μ€μ λ§μ λ΄μ©μ΄ λ€μ΄κ° μ μκ² νλ€.
- Classμ private λ©μλλ₯Ό νννκΈ° μν΄ underscoreλ₯Ό μ¬μ©
- ES5 trailing commaλ₯Ό μ¬μ© λ±
- git-flowλ₯Ό μ°Έκ³ νκ³ νλ‘μ νΈ κ·λͺ¨μ λ§κ² κ°λ΅ν
- κΆκΈνλ€λ©΄, μ΄ λ§ν¬λ₯Ό μ°Έκ³ !
- GitHub νλ‘μ νΈ, GitHub issues
- νμ΅ κΈ°κ° λμ κΎΈμ€ν μ¬μ©νλ λꡬλ€μ΄κ³ , githubκ³Ό μ°λμ΄ μ½κ³ μ λμ΄μλ€.
- travis
- jenkinsμ λΉκ΅. jenkinsμ λ€λ₯΄κ² μλ²κ° λ°λ‘ νμ μλ λ± κ°λ¨νκ³ νμν κΈ°λ₯(docker νκ²½ μ΄μ©)λ€μ΄ λͺ¨λ μ§μλκΈ° λλ¬Έμ μ±ννλ€.
- μ 리 λ§ν¬
-
νλ‘μ νΈ κ΅¬μ±μ Minimize + Dockerize
- μ¬μ©ν μλΉμ€λ μ΅μννλ€.
- React νμΌ μ 곡νλ μλ² μμ΄, production build react νμΌμ μ μ νμΌ λ°°ν¬ κΈ°λ₯μ΄ μλ NGINXμμ λ°°ν¬νκΈ°λ‘ κ²°μ νλ€.
- μ΄μ λ°λΌ μ¬μ©ν μλΉμ€λ NGINX, Node.js app, MySQL 3κ°μ§λ‘ μ νλ€.
- λν 3κ°μ§ μλΉμ€λ NCPμ λ¨μΌ μλ²λ₯Ό μ¬μ©ν΄ docker-composeλ‘ μ€ννκΈ°λ‘ νλ€.
-
Docker
- Docker νμ΅ λͺ©μ (Dockerμ νμ₯ μ©μ΄μ± λ±)
- Production build React νμΌμ κ°μ§ NGINX docker μ΄λ―Έμ§
- μ²μ μκ°νλ λ°©μμ React νμΌλ€μ΄ μλ client ν΄λλ‘ μ΄λν λ€, npm run buildλ₯Ό ν΅ν΄ production buildλ₯Ό λ§λ€κ³ , λ§λ€μ΄μ§ νμΌμ NGINX μ€μ νμΌμ΄ μλ ν΄λλ‘ μ΄λνκ³ μ νλ€.
- νμ§λ§, dockerfileμμ ν΄λλ₯Ό λ€λ₯Έ ν΄λλ₯Ό μ΄λνλ λͺ λ Ήμ΄λ λΆκ°λ₯νκΈ°μ client ν΄λμ NGINX μ€μ νμΌμ λ£κ³ , docker μ΄λ―Έμ§λ₯Ό client ν΄λμμ λΉλ νκΈ°λ‘ νλ€.
- λν λΉλ νλ κ³Όμ μμ 2κ°μ§ μ΄λ―Έμ§λ₯Ό μ¬μ©νλλ°, λ μ΄λ―Έμ§ λΉλ κ³Όμ μμ νμΌμ΄ 곡μ λμ§ μλ λ¬Έμ κ° μμλ€. μ΄λ₯Ό COPYμ --from μ΅μ μ ν΅ν΄ ν΄κ²°ν μ μμλ€.
- Travis CI μ²μ μ μ©νμ λ, μ΄λ€ λΈλμΉλ Pull Request μ λͺ¨λ κ°λ° μλ²μ μλ λ°°ν¬λ μ μλλ‘ μ€μ νμλ€. κ·Έ μ΄μ λ νμ¬ μμ κ²°κ³Όκ° NCPμ κ°λ° μλ²μμλ μ μλνλμ§ λ°λ‘ νμΈνκ³ μ νκΈ° λλ¬Έμ΄λ€.
- κ·Έλ¬λ λ°μλ κ²°κ³Όλ¬Όμ΄ develop λΈλμΉμ μλ μ½λλ ν¬ν¨λμ§ μμμλ€. κ·Έ μ΄μ λ PR μ μ΅μ μ develop λΈλμΉκ° μλμΌλ‘ λ°μλ λ€ docker μ΄λ―Έμ§ λΉλ νλ κ²μ΄ μλκ³ , PRλ₯Ό ν λΈλμΉμ μλ μ½λλ‘λ§ docker μ΄λ―Έμ§λ₯Ό λΉλ νκΈ° λλ¬Έμ΄μλ€.
- μ΄λ₯Ό 2κ°μ§ λ°©λ²μΌλ‘ ν΄κ²°νμλλ°, λ¨Όμ Pull Request μ developμ ν΄λΉ κΈ°λ₯ ꡬν λΈλμΉμ pull λ°κ³ PR 보λ΄λ κ², κ·Έλ¦¬κ³ PRλ testλ§ νκ² νκ³ , μλ λ°°ν¬λ develop, master λΈλμΉμ merge(push) λ λλ§ μ€νλλλ‘ μ€μ νλ€.
- masterμ develop λΈλμΉμ merge λ λλ§ λ°°ν¬νκ³ μΆμλ€. κ·Έλ°λ° merge κ΄λ ¨ μ€μ μ΄ μ‘΄μ¬νμ§ μμλ€.
- masterλ develop λΈλμΉμ mergeκ° λλ©΄ pushκ° μΌμ΄λλ€.
- masterμ develop λΈλμΉμ push ν λλ§ λ°°ν¬νλλ‘ μ€μ νλ€.
- νλ‘μ νΈ settingμ νλ©° ESLint ruleμ μ νκ³ VScode μ€μ μ νλ€. λν huskyλΌλ commit lintλ₯Ό λ°κ²¬νμκ³ commit styleλ ν΅μΌμ±μ μ£Όκ³ μΆμλ€. νμ§λ§ husky rule μ€μ λ³κ²½μμ μ‘°κΈ μ΄λ €μ΄ λΆλΆμ΄ μμλ€. μ°λ¦¬κ° μ¬μ©ν typeμΌλ‘ husky μ€μ μ λ°κΏμΌ νλλ° λ¦¬μμΉν΄λ μ λμ€μ§ μμλ€. -> package.jsonμμ commitlint μ€μ μ ruleμ μ μ©ν μ μμλ€.
- λ§μ μμ§μμ΄ μ€μκ°μΌλ‘ ννλμ΄μΌ νλ€. DOMμ μ§μ μ μΈ μ‘°μλ³΄λ€ μ±λ₯μ΄ ν¨μ¬ λΉ λ₯Έ canvasλ₯Ό μ¬μ©νλ€.
- κ±·λ λͺ¨μμ 보μ¬μ£ΌκΈ° μν΄ μΌμ νλ μλ§λ€ μ΄λ―Έμ§λ₯Ό λ°κΏμ€μΌ νλλ°, μ΄λ―Έμ§μ κ²½λ‘λ₯Ό λ³κ²½(
img.src = "..."
) νκ±°λ μ΄λ―Έμ§ κ°μ²΄λ₯Ό μ¬μμ±(new Image()
) νλ κ²λ³΄λ€ κ·Έλ €λ΄λ μμλ§ λ°κΏμ£Όλ κ²(drawImage(...)
)μ΄ λΉμ©μ΄ λ μ κΈ° λλ¬Έμ sprite μ΄λ―Έμ§λ₯Ό μ¬μ©νλ€.
- μΊλ¦ν°κ° μμ§μΈ νμλ κ·Έμ μμΉμ μΊλ¦ν° μ΄λ―Έμ§λ μ§μμ€ νμκ° μλ€. κ·Έλ°λ° κ·Έλ κ² λλ©΄ κ²ΉμΉλ μμμ μλ λ€λ₯Έ μΊλ¦ν°κ° μ§μμ§λ μ΄μκ° μμκΈ° λλ¬Έμ μΊλ¦ν°κ° μμ±λ λλ§λ€ μλ‘μ΄ canvasλ₯Ό μμ±ν΄μ κ°κ° canvasλ₯Ό κ°μ§κ² νλ€.
- νλμ canvasμμ λ§€λ² λͺ¨λ μΊλ¦ν°λ₯Ό μ§μ λ€κ° λ€μ 그릴 μλ μμμ§λ§, μ¬λ¬ μΊλ¦ν°μ μμ§μμ΄ λΉλ²νκ² μΌμ΄λλ μλΉμ€μμ 맀 μμ§μλ§λ€ λͺ¨λ μΊλ¦ν°λ₯Ό μ§μ°κ³ λ€μ κ·Έλ €μ£Όλ κ²λ³΄λ€λ κ°κ°μ canvasμμ μΌμ΄ μνλκ² νλ κ² λ ν¨μ¨μ μ΄λΌκ³ νλ¨νλ€.
- μμ§μ΄λ μ λλ©μ΄μ μ μν΄, μΊλ¦ν° μ΄λ―Έμ§λ₯Ό λͺ¨μ μ λ§κ² λ°κΎΈκ³ μμΉλ₯Ό μ΄λμν€λ λ‘μ§μ μΌμ νλ μλ§λ€ λ°λ³΅μ μΌλ‘ μνν΄μΌ νλ€. μ΄λ₯Ό μν΄ setTimeoutμ΄ μλλΌ requestAnimationFrame ν¨μλ₯Ό μ¬κ·μ μΌλ‘ νΈμΆνλ λ°©μμ μ ννλ€. μ΄ ν¨μλ λΈλΌμ°μ κ° μ€μ νλ©΄μ 그리λ μ£ΌκΈ°μ λ°λΌ μ§μ λ ν¨μλ₯Ό νΈμΆνκΈ° λλ¬Έμ, μλ°μ€ν¬λ¦½νΈλ‘ μμ±λ λ‘μ§μ΄ νλ μ μμ μμ νΈμΆλλλ‘ λ³΄μ₯νλ€. μ΄λ° λ°©μμΌλ‘ νλ©΄ νλ μμ΄ λλ½λ μΌλ μκ³ , μΌμ κ°κ²©μΌλ‘ λ‘μ§μ μννλ κ²μ΄ 보μ₯λκΈ° λλ¬Έμ 맀λλ¬μ΄ μ λλ©μ΄μ μ νννκΈ° μν΄ μ μ νλ€κ³ νλ¨νλ€.
- λͺ¨λ μΊλ¦ν°μ μμ§μμ΄ λͺ¨λ μ¬μ©μλ€μκ² λμΌνκ² λ³΄μ¬μΌ νλ€. μ΄λ₯Ό μν΄μ μλ²μμ μ¬λ¬ μ μ λ€μ ν€λ³΄λ μ λ ₯μ λ°μ μμ§μΌ μ μλ μμΉμΈμ§ κ³μ° ν, λͺ¨λ μ μ λ€μκ² ν΄λΉ μΊλ¦ν°μ μμ§μμ μλ €μ£Όκ² νλ€.
- λ€μ΄λ΄λ―Ήν κ²μ μμλ₯Ό μν΄, μ¬λ¬ μΊλ¦ν°μ μμ§μμ μ€μκ°μΌλ‘ 보μ¬μ€ λΏλ§ μλλΌ λ€λ₯Έ μΊλ¦ν°κ° μλ μμΉμλ μ΄λνμ§ λͺ»νκ² ν΄μ μλ‘ κΈΈμ λ§μ μ μκ² νλ €κ³ νλ€. μΊλ¦ν° κ° μΆ©λμ κ²μ¬νκΈ° μν΄μλ κ° μ΄λ―Έμ§ κ°μ 거리 κ°μ κ³μ°νκ±°λ κ²Ήμ³μ Έ μλ ν½μ μ ν¬λͺ λ κ°μ κ²μ¬ν΄μΌ νλλ°, κ²μ μμ§ μμ΄ λͺ¨λ ν½μ κ°μ λΉ λ₯΄κ² κ³μ°νκΈ°μλ λ¬΄λ¦¬κ° μλ€κ³ νλ¨νλ€. κ·Έλμ μΊλ¦ν°λ§λ€ μμΉν μ μλ μΉΈμ λ§λ€κ³ , κ° μΉΈμλ νλμ μΊλ¦ν°λ§ λ€μ΄κ° μ μκ² ν΄μ μΆ©λκ³Ό λΉμ·ν μΈν°λμ μ ꡬννλ€.
- μΉκ²μμ΄λΌλ νΉμ±μ, κ²μ μ€μ λ°© λκ°κΈ° λ²νΌμ λ§μλμλ λ€λ‘κ°κΈ°λ ν λ«κΈ°λ₯Ό ν΅ν΄ μΈμ λ μ§ κ²μμ μ½κ³ λΉ λ₯΄κ² λκ° μ μμλ€. λλ¬Έμ μμλ³΄λ€ λ무 μ¦μ μ μ λ€μ μ΄νλ‘ μΈν΄ κ²μ μ§νμμ μμΈ μν©μ΄ λ§μλ€.
- κ²μμ΄ μ§νλμ§ μλ μνμμ μ μ μ μ¦μ μ μ /μ΄νμ΄ μμΈ μν©μ λ°μμν€μ§ μμμ§λ§, κ²μ μ§ν μ€μμ μ μ κ° λκ°κ² λλ€λ©΄, κ²μ λ‘μ§μ΄ μ½κ² λ€μμΌ μ΄μμλ μ μ κ° μλλ°λ κ²μμ΄ κ³μ μ§νλλ λ±μ λ²κ·Έ λ° μμΈ μν©μ λ§μ£Όνμλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄, κ²μ μμ ν 맀 λΌμ΄λμ μμ λ° μ’ λ£ μμ μ μΈμ λ° νμ¬ λΌμ΄λλ₯Ό νμΈνμ¬ κ²μ μ§νμμμ μμΈ μ¬ν©μ μ κ±°ν μ μμλ€.
- νλ² μ°κ²°λλ©΄ κ³μ ν΄λΉ socketμΌλ‘ μ μ λ₯Ό ꡬλΆν΄μ μλΉμ€λ₯Ό μ΄μ©νκ² νκ³ μΆμλ€. κ·Έλ°λ° μλΉμ€μ μμΌ μ°κ²°μ ν΄μ μ μ νμ, μΌμ μκ°μ΄ μ§λλ©΄ μ°κ²°μ΄ λκΈ°κ³ λ€μ μ¬μ°κ²°λλ μ΄μκ° μμλ€. socket.ioλ₯Ό μ΄μ©ν μ°κ²°μ κΈ°λ³Έ μ΅μ μ΄ polling λ°©μμ΄κΈ° λλ¬Έμ΄μλλ°, μ΅μ μΌλ‘ websocketμ μ€μ ν΄λΉ μ΄μλ₯Ό ν΄κ²°ν μ μμλ€.
- polling λ°©μμ μ£ΌκΈ°λ§λ€ μμ²μ 보λ΄κ³ μλ΅μ λ°μΌλ©΄μ μ°κ²°μ μ μ§νλ λ°©μμ΄κΈ° λλ¬Έμ μ°κ²°μ΄ μ£ΌκΈ°μ μΌλ‘ λκΈ°κ³ μ€λ²ν€λλ λ°μνλ€. websocket λ°©μμ connectionμ κ³μ μ μ§νκΈ° λλ¬Έμ μ€λ²ν€λλ μ κ³ μ°κ²°μ΄ μ£ΌκΈ°μ μΌλ‘ λκΈ°μ§λ μλλ€.
- socket testμ λν μλ£κ° λ§μ§ μμμ μ΄λ €μμ κ²ͺμμ§λ§ socket-ioλ₯Ό νμ©νλ©΄ mock clientλ₯Ό μμ±ν μ μκ³ , μλ²λ λ²λ€λ§λ app.jsλ₯Ό μ΄μ©ν΄μ ν μ€νΈλ₯Ό μν μλ²λ‘ μμ±ν΄ μ€ μ μμλ€. mock clientμ μμ±ν μλ²λ₯Ό μ΄μ©ν΄μ socket testλ₯Ό μμ±νλ€.
- μ λ°©λ²μΌλ‘ νΉμ socket eventμμ μ λλ‘ λ μλ΅κ³Ό λ°μ΄ν°κ° μ€λμ§ νμΈν μ μμκ³ , eventλ€κ°μ νλ¦λ ν μ€νΈν μ μμλ€.
- μ€μ μλ²μμ μ μ₯νκ³ μλ μΊλ¦ν°λ€μ μμΉμ, μ€μ λ‘ ν΄λΌμ΄μΈνΈκ° νμνλ νλ©΄μμ 보μ΄λ μμΉκ° λ€λ₯Έ μ΄μκ° λ°κ²¬λμλ€. λλΆμ΄ μ¬λ¬ μ¬μ©μκ°μλ μλ‘κ° μμΉκ° λ€λ₯΄κ² 보μλ€.
- μμΈ1: μμΌ
- μμΌ ν΅μ μ μ°κ²°μ§ν₯μ΄κΈ° λλ¬Έμ, 무차λ³μ μΌλ‘ λ€μ΄μ€λ μ¬μ©μλ€μ μ λ ₯μ λν΄ μ μ΄νκΈ°κ° νλ€μλ€. κ±°μ λμλ€λ°μ μΌλ‘ λ€μ΄μ€λ μμ§μ μ΄λ²€νΈλ€μ λͺ¨λ λΉλκΈ°λ‘ λ³λ ¬μ μΌλ‘ μ€νλλ€. κ·Έλ¦¬κ³ λλΆλΆ κ°μ μμμ μ¬μ©νκΈ° λλ¬Έμ, λμΌ μμμ λμμ μ½κ³ μ°λ©΄μ μμμ΄ μνμ§ μκ² λ³κ²½λμ΄ μμΉκ° κΌ¬μ΄λ λ²κ·Έκ° λ°μνλ€.
- μμΈ2: requestAnimationFrame
- 맀λλ¬μ΄ μ λλ©μ΄μ μ μν΄ requestAnimationFrame ν¨μλ₯Ό μ¬μ©νλλ°, μ΄ ν¨μλ μ±λ₯κ³Ό μ΅μ νλ₯Ό μν΄ νλ©΄μ΄ λ³΄μ΄κ³ μμ§ μμ λλ (λ€λ₯Έ νμ κ°μκ±°λ νμ΄ λ΄λ €κ° μμ λ) μ λλ©μ΄μ μ μννμ§ μλ€κ° λ€μ νλ©΄μ΄ λ³΄μΌ λ μννλ€. κ·Έλ°λ° μμΌ μ΄λ²€νΈλ μ μμ μΌλ‘ μνλκΈ° λλ¬Έμ, λ€λ₯Έ νμ κ°μλ λμμ λ€λ₯Έ μΊλ¦ν° μμ§μμ ννλμ§ μλ€κ° νλ©΄μ λ€μ 보λ μκ° νλμ μμ§μλ§ λ³΄μ¬μ£ΌκΈ° λλ¬Έμ μμΉκ° λ€λ₯΄κ² νμλλ μ΄μκ° λ°μνλ€.
- ν΄κ²°: μμ§μ μ΄λ²€νΈ μ²λ¦¬ ν(Queue) ꡬν
- μλ²μμ νλμ μμ§μ΄λ λ‘μ§μ΄ λλ λκΉμ§λ, μλ‘ λ€μ΄μ¨ μμ§μ μ΄λ²€νΈλ₯Ό νμ μ μ₯ν΄λκ³ μ΄μ λ‘μ§μ΄ λλ νμ μνλ μ μλλ‘ ν΄μ μ΄λ²€νΈλ₯Ό μμ°¨μ μΌλ‘ μ μ΄νλ€. ν΄λΌμ΄μΈνΈμμλ λ§μ°¬κ°μ§λ‘, λμΌν μΊλ¦ν°μ μμ§μ μ΄λ²€νΈμ λν΄ νλ‘ μ μ΄ν΄μ μμ°¨μ μΌλ‘ μ€νλκ² νλ€. νλ©΄μ΄ λ³΄μ΄μ§ μλ λμμλ νμ μμλ¨λ€κ° νλ©΄μ λ€μ λ³Ό λ μμ°¨μ μΌλ‘ νμ μλ λ‘μ§μ μννλ λ°©λ²μΌλ‘ μ΄μλ₯Ό ν΄κ²°νλ€.
- JWT
- νμ¬ μ¬μ©μκ° λ‘κ·ΈμΈν μ¬μ©μμΈμ§ νλ³νκΈ° μν΄ cookieμ μ¬μ©μμ github idλ₯Ό κ°μ§κ³ μλ JWTλ₯Ό μ μ₯νμλ€. JWTμ νΉμ±μ cookieλ₯Ό λ³κ²½νλ©΄ 볡νΈνκ° μ λλ‘ λμ§ μκΈ° λλ¬Έμ μμ λμ§ μμ μ¬μ©μμ μ λ³΄λ§ μ μμ μΌλ‘ 볡νΈννμ¬ μ¬μ©ν μ μλ€.
- μ¬μ©μμ github idλ λ―Όκ°ν μ 보λ μλμ§λ§ μ‘°μνλ©΄ μλλ μ 보μ΄κΈ° λλ¬Έμ JWTκ° μ ν©νλ€κ³ νλ¨νλ€.
- GitHub OAuth appμ 2κ° μμ±ν μ΄μ
- github oauth appμ μμ±ν λ Homepage URLκ³Ό Authorization callback URLμ΄ νμνλ€. κ·Έλ°λ° developmentμμμ urlκ³Ό prodcuction modeμΌ λμ urlμ΄ λ€λ₯΄κΈ°λλ¬Έμ github oauth appμ 2κ° μμ±νμ¬ νλλ development modeμΌ λ μ¬μ©νκ³ νλλ production modeμμ μ¬μ©νμλ€.
- ν λΌμ΄λκ° λλ λλ§λ€ νλ Έμ€ μ΄λ―Έμ§λ₯Ό canvas requestAnimationFrameμ μ΄μ©ν΄ λνλκ²νλ€. κ·Έλ°λ° λ¬Έμ λ requestAnimationFrameμ νμ λ³΄μ§ μλ μνμμλ μ€νμν€μ§μκ³ λ€μ νμ λ³Ό λ μ€νμν€κΈ° λλ¬Έμ λ€λ₯Έ νμ 보λ€κ° λμμ€λ©΄ νλ²μ νλ Έμ€κ° μ¬λ¬λ² λ±μ₯νλ€. μ¬μ©μκ° νμ¬ νμ λ³΄κ³ μλμ§ μκΈ° μν΄μ Page Visibility APIλ₯Ό μ¬μ©νλ€. κ·Έλμ μ¬μ©μκ° λ³΄κ³ μμ§ μλ€λ©΄ μ λλ©μ΄μ μ μ€νμν€μ§ μλλ€.
- μΉ κ²μμ΄κΈ° λλ¬Έμ λ무 λ§μ μ¬μ΄λ μμ보λ€λ, κ°λ³κ² λ°°κ²½ μμ κ³Ό κ²μ μμ/λ μ¬μ΄λ ν¨κ³Όλ§ λ£κΈ°λ‘ νλ€.
- μ¬μ΄λ μ¬μμ΄λ λ³Όλ₯¨ λ±μ μκ°μ μΌλ‘ 보μ¬μ€ νμκ° μμκΈ° λλ¬Έμ, μ¬μ΄λλ₯Ό μν΄ μ»΄ν¬λνΈλ₯Ό λ§λ€μ΄ μ°κ±°λ λ³λμ λͺ¨λμ μ€μΉν΄ μ¬μ©νκΈ°λ³΄λ€ html5 audio λ₯Ό μ¬μ©νλ€.
- audioλ₯Ό μΌλ° λ³μμ μ μ₯νλ©΄, μ»΄ν¬λνΈκ° 리λ λλ§ λ λλ§λ€ κ°λμ© μ€λ³΅ μμ± λ° μ¬μλλ μ΄μκ° μμ΄μ νλλ‘ μ μ§νκΈ° μν΄ audio κ°μ²΄λ₯Ό 리μ‘νΈ stateλ‘ λ§λ€μλ€. μ΄λ κ² λ§λ stateλ₯Ό κ°μ§κ³ 컀μ€ν ν μ λ§λ€ μλ μμλλ°, νλμ μ»΄ν¬λνΈμμλ§ μ¬μ©ν΄μ μ¬μ¬μ©μ±μ΄ κ±°μ μμκΈ° λλ¬Έμ μ»΄ν¬λνΈ λ΄λΆ stateλ‘λ§ μ¬μ©νλ€.
- λλ©μΈμ Google Domainsμμ ꡬμ νλ€. ꡬμ ν κ²½λ‘λ₯Ό μ μ©νκΈ° μν΄μ SSL μΈμ¦μλ₯Ό λ°κΈ λ°μμΌ νλλ°, μ΄λ Let's Encryptμ Certbotλ₯Ό μ΄μ©νλ€.
- μ²μμλ docker-composeλ₯Ό ν΅ν΄ μ€νμ€μΈ NGINXμ μ€μ μ λ³κ²½νμ¬ SSL μΈμ¦μλ₯Ό νΉμ ν΄λμ μ μ₯νκ³ μ νμΌλ, μ λλ‘ μλλμ§ μμλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄, μ€ν μ€μΈ docker 컨ν μ΄λλ₯Ό λͺ¨λ λ©μΆκ³ , μλ‘μ΄ NGINX μ΄λ―Έμ§λ₯Ό dockerλ₯Ό ν΅ν΄ μ€νν΄ μΈμ¦μλ₯Ό λ°μ μ μμλ€. λν λ°μ μΈμ¦μλ₯Ό docker volumeμ μ΄μ©ν΄ μΈμ¦μκ° μ μ₯λ ν΄λλ₯Ό μ§μ ν΄μ SSL μΈμ¦μ μ μ©μν¬ μ μμλ€.
- μ±ν
μ ν λλ§λ€ μΊλ¦ν° μμ λ§νμ μ΄ κ·Έλ €μ§κ² μ μ©νκΈ° λλ¬Έμ, κΈμμλ‘λ§ μ±ν
μ κ²μ¬νλ κ²μ΄ μλλΌ λ§νμ μμ κΈμλ€μ΄ λͺ¨λ λ€μ΄κ°λμ§ νμΈν΄μΌ νλ€.
- μ±ν μ°½ λλ°°μλ λ€λ₯΄κ² λ§νμ μ μ΄μ©ν λλ°°λ μΊλ¦ν°λ₯Ό κ°λ¦¬λ λ± μ μ κ²½νμ ν¬κ² λ§μΉ μ μλ€.
- UTF-8μμ κ°μ₯ κΈΈμ΄κ° κΈ΄ κΈμλ μμκ°μ λ¬Έμ λλ¬Έμ μ μ μμ κΈμλ§ νμ΄νν μ μκ² ν΄μΌνλ€.
- canvas contextμ κΈΈμ΄μΈ‘μ λ©μλλ₯Ό μ¬μ©ν΄ μ¬μ©μ€μΈ ν°νΈ, ν°νΈ ν¬κΈ°μ λ§μΆ° canvasμ κ·Έλ €μ§λ μ€μ ν μ€νΈμ κΈΈμ΄λ₯Ό μΈ‘μ νλ€.
- νμμ μ ν λ§νμ λμ΄μ λ§μΆ°μ κΈμλ₯Ό μλΌμ€¬λ€.
- 맀μ§λλ² μμν
- ν¨μ μμ λ¨μλ‘ μͺΌκ°κΈ°
- μ€λ³΅μ½λ μμ κΈ° (ν¨μ λ§λ€κΈ°)
- ν΅μΌμ±μ μν΄ λΉ μ§ μ£Όμ μΆκ° λ° λ³΄μ
- λ³μ, ν¨μλͺ κ³ λ―Όν΄λ³΄κΈ°