Peer Session Week 2 - boostcamp-2020/IssueTracker-14 GitHub Wiki

Peer Session Week 2

20201106(๊ธˆ)

Web FullStack

์ง„ํ–‰๋‚ด์šฉ

  • NGINX์™€ Jenkins Docker์— ๋Œ€ํ•ด ํšŒ์˜

NGINX

  1. NGINX ๋ž€?

    Nginx(์—”์ง„ x๋ผ ์ฝ๋Š”๋‹ค)๋Š” ์›น ์„œ๋ฒ„ ์†Œํ”„ํŠธ์›จ์–ด๋กœ, ๊ฐ€๋ฒผ์›€๊ณผ ๋†’์€ ์„ฑ๋Šฅ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค. ์›น ์„œ๋ฒ„, ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ๋ฐ ๋ฉ”์ผ ํ”„๋ก์‹œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„๋‹ค.

    • Nginx๋Š” ์š”์ฒญ์— ์‘๋‹ตํ•˜๊ธฐ ์œ„ํ•ด ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋กœ ๊ฐ€์ง„๋‹ค. ์Šค๋ ˆ๋“œ/ํ”„๋กœ์„ธ์Šค ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋Š” ์•„ํŒŒ์น˜ HTTP ์„œ๋ฒ„์™€ ๋‹ค๋ฅด๊ฒŒ ์š”์ฒญ ์ˆ˜๋งŒํผ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— CPU ๋ถ€ํ•˜์™€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ ๋‹ค.
    • ๋‹ค๋ฅธ ์›น ์„œ๋ฒ„์™€ ๋น„๊ตํ•˜์—ฌ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ฝ๊ณ  ์กฐ์ž‘ํ•˜๊ธฐ ์‰ฝ๋‹ค.
    • ์œ„ํ‚ค๋ฐฑ๊ณผ Nginx ๋ฌธ์„œ ์ฐธ๊ณ 
  1. ์™œ ๋•Œ๋ฌธ์— NGINX๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๊ฐ€

    1. ์›น ์„œ๋ฒ„๋กœ์จ์˜ NGINX

      • React ๋กœ ๊ฐœ๋ฐœํ•œ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ build ์‚ฐ์ถœ๋ฌผ์ธ html, css, js ์™€ ๊ฐ™์€ ์ •์  ํŒŒ์ผ๋“ค์„ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ์›น ์„œ๋ฒ„๋กœ ์‚ฌ์šฉ
    2. ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋กœ์จ์˜ NGINX

      • ํ”„๋ก ํŠธ ์—”๋“œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์œผ๋กœ webpack-dev-server๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ต์…˜์œผ๋กœ ์‚ฌ์šฉ

         devServer: {
         	port: 4000,
         	compress: true,
         	hot: true,
         	proxy: {
         	'/api': {
         		target: 'http://localhost:3000',
         	},
         	historyApiFallback: {
         	  rewrites: [{ from: /^\/*$/, to: '/index.html' }],
         	},
         }
      • ๋กœ์ปฌ์—์„œ๋Š” webpack-dev-server๋กœ ์ ‘๊ทผํ•˜๋Š” URI์˜ path๊ฐ€/api๋กœ ์‹œ์ž‘ํ•˜๋ฉด API ์„œ๋ฒ„๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก proxy ์˜ต์…˜์„ ์„ค์ •

         fetch('/api/issues');
         // -> http://localhost:4000/api/issues
         // -> [webpack-dev-server]
         // -> http://localhost:3000/api/issues
         // -> [API server]
      • ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ๋„ webpack-dev-server์™€ ๊ฐ™์€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋ก์‹œ ์„œ๋ฒ„๊ฐ€ ํ•„์š”

  2. NGINX ์„ค์น˜ ๋ฐ ๊ตฌ์„ฑ ํŒŒ์ผ ์„ค์ •

    1. ์„ค์น˜ ๊ณผ์ •

      • ์ฒ˜์Œ์— sudo apt-get install nginx ๋ช…๋ น์œผ๋กœ ์„ค์น˜๋ฅผ ํ•˜๋ ค ํ–ˆ์œผ๋‚˜, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ

         dpkg: dependency problems prevent configuration of nginx:
          nginx depends on nginx-core (>= 1.10.3-0ubuntu0.16.04.2) | nginx-full (>= 1.10.3-0ubuntu0.16.04.2) | nginx-light (>= 1.10.3-0ubuntu0.16.04.2) | nginx-extras (>= 1.10.3-0ubuntu0.16.04.2); however:
           Package nginx-core is not configured yet.
           Package nginx-full is not installed.
           Package nginx-light is not installed.
           Package nginx-extras is not installed.
          nginx depends on nginx-core (<< 1.10.3-0ubuntu0.16.04.2.1~) | nginx-full (<< 1.10.3-0ubuntu0.16.04.2.1~) | nginx-light (<< 1.10.3-0ubuntu0.16.04.2.1~) | nginx-extras (<< 1.10.3-0ubuntu0.16.04.2.1~); however:
           Package nginx-core is not configured yet.
           Package nginx-full is not installed.
           Package nginx-light is not installed.
           Package nginx-extras is not installed.
        

        ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€ ์ถœ์ฒ˜

      • nginx ์ €์žฅ์†Œ์™€ ๊ณต๊ฐœ ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์žฌ์„ค์น˜

        # nginx ์ €์žฅ์†Œ ์ถ”๊ฐ€
        $ sudo vi /etc/apt/sources.list.d/nginx.list
        
        # ํŒŒ์ผ๋‚ด ๋‚ด์šฉ ์ถ”๊ฐ€
        deb [arch=amd64] http://nginx.org/packages/mainline/ubuntu/ bionic nginx
        deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx
        
        # nginx ๊ณต๊ฐœ ํ‚ค ์ถ”๊ฐ€
        $ wget http://nginx.org/keys/nginx_signing.key
        $ sudo apt-key add nginx_signing.key
        
    2. ๊ตฌ์„ฑ ํŒŒ์ผ ์„ค์ •

Jenkins Docker๋ฅผ ํ™œ์šฉํ•œ ์ž๋™๋ฐฐํฌ

๋ฌธ์ œ์ 

Jenkins๋ฅผ ์ด์šฉํ•œ ์ž๋™ ๋ฐฐํฌ๋ฅผ ์„ค์ •ํ•˜๋˜ ์ค‘ ๋งˆ์ง€๋ง‰์œผ๋กœ GitHub Webhook๋งŒ ์„ค์ •ํ•˜๋ฉด ๋˜๋Š”๋ฐ ๊ณ„์†ํ•ด์„œ ๋‚˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ!

Screen Shot 2020-11-02 at 9 14 17 PM

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

๊ตฌ๊ธ€์„ ์ฐพ์•„ ๋ณธ ๊ฒฐ๊ณผ 403 No valid crumb was included in the request๋Š” Jenkins์˜ CSRF์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ์˜€๋‹ค. ๊ทธ๋ž˜์„œ 'Configure Global Security'์—์„œ CSRF Protection์˜ Crumb Issuer๋ฅผ ์ถ”๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ด ์ตœ๋Œ€ํ•œ ๋А์Šจํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ๋ณด์•˜์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜๋‹ค. ๊ณ„์†ํ•ด์„œ ๋ฌด์˜๋ฏธํ•œ ์‹œ๋„๊ฐ€ ์ด์–ด์กŒ๊ณ  ๊ตฌ๊ธ€์— ๋‚˜์™€์žˆ๋Š” ํ•ด๋‹น ๊ด€๋ จ๋œ ์ •๋ง ๊ฑฐ์˜ ๋ชจ๋“  ๊ธ€์„ ์‚ดํŽด ๋ณด๋˜ ์ค‘ ์–ด๋–ค ์‚ฌ์ดํŠธ์˜ ์ž‘์€ ๋ถ€๋ถ„์— Nginx ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋ผ๋Š” ๊ธ€์„ ๋ณด์•˜๋‹ค. Nginx์˜ Authentication๊ณผ ๊ด€๋ จํ•ด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด ๊ฒƒ์ด๋ผ์„œ Payload URL์— id์™€ pw๋ฅผ ๊ฐ™์ด ์ž…๋ ฅํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ๋“œ๋””์–ด ์„ฑ๊ณต. Nginx๋ฅผ ์ด์šฉํ•ด์„œ ๋„์šฐ์‹œ๋Š” ๋ถ„๋“ค์€ ๊ผญ Payload URL์— ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ๋„ฃ๋„๋ก ํ•˜์„ธ์š”...

Screen Shot 2020-11-02 at 9 15 00 PM

Jenkins

Jenkins๋ž€?

SW ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๋“ฑ์˜ ํƒœ์Šคํฌ๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ์†Œ์Šค ์ž๋™ํ™” ์„œ๋ฒ„.

๋Œ€ํ‘œ์ ์ธ CI(Continuous Integration) ํˆด ์ค‘์˜ ํ•˜๋‚˜.

์ •๊ธฐ์ ์ธ ๋นŒ๋“œ์—์„œ ๋‚˜์•„๊ฐ€ Git๊ณผ ์—ฐ๋™ํ•˜์—ฌ ์ปค๋ฐ‹์„ ๊ฐ์ง€ํ•˜๋ฉด ์ž๋™์ ์œผ๋กœ ํ…Œ์ŠคํŠธ๊ฐ€ ํฌํ•จ๋œ ๋นŒ๋“œ๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

Jenkins ์„ค์น˜

sudo apt install openjdk-8-jre # java ์„ค์น˜
sudo wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add - # repository key ์ถ”๊ฐ€
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins # jenkins ์„ค์น˜

cloud์—์„œ ๊ธฐ๋ณธํฌํŠธ์ธ 8080์„ ์—ด์–ด์ฃผ๊ฑฐ๋‚˜ ํฌํŠธ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.

sudo vi /etc/default/jenkins

HTTP_PORT = 8080

์›น์—์„œ ip์ฃผ์†Œ:(jenkins ํฌํŠธ)์— ์ ‘์†ํ•˜๋ฉด jenkins์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋‹ค.

image

(ํ˜„์žฌ๋Š” ๋กœ๊ทธ์ธ๋œ ์ƒํƒœ)

adminPassword๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์œ ์ €๋ฅผ ์ƒ์„ฑํ•œ ๋’ค ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜

Jenkins๋Š” ๊ฐ ์„œ๋น„์Šค์™€ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ณตํ•œ๋‹ค.

[Jenkins ๊ด€๋ฆฌ] - [ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ด€๋ฆฌ]๋ฅผ ๋“ค์–ด๊ฐ€ ํ•„์š”ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•œ๋‹ค.

Nodejs Plugin, Public Over SSH Plugin์„ ์„ค์น˜ํ–ˆ๋‹ค.


์ž๋™๋ฐฐํฌ

์ž๋™๋ฐฐํฌ์˜ ํฐ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

GitHub web hooks ์—ฐ๋™์„ ํ†ตํ•œ GitHub Push ๊ฐ์ง€ - ์ƒˆ๋กœ merge๋œ github repo ๋ฐ›์•„์˜ค๊ธฐ - ๋นŒ๋“œ๋ฅผ ํ†ตํ•œ ๋„์ปค ์ด๋ฏธ์ง€ ์ƒ์„ฑ - ๋นŒ๋“œ ํ›„์— ์ƒˆ๋กœ์šด ๋„์ปค ์ด๋ฏธ์ง€๋กœ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

[์ƒˆ๋กœ์šด item]์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

Freestyle Project๋ฅผ ํด๋ฆญ

image

Github ์—ฐ๋™

[General] - GitHub project ์ฒดํฌ ํ›„ Github Repo URL์„ ์ž‘์„ฑํ•ด์ค€๋‹ค. image

[์†Œ์Šค์ฝ”๋“œ ๊ด€๋ฆฌ] - ๋˜‘๊ฐ™์ด Repo URL์„ ์ ๊ณ  credential๋กœ Github ID, password๋ฅผ ์ž…๋ ฅํ•ด์ค€๋‹ค.

  • ๋ธŒ๋žœ์น˜๋Š” backend ๋ธŒ๋žœ์น˜๋กœ ์„ค์ •ํ•œ๋‹ค. (backend ๋ธŒ๋žœ์น˜์— merge๋ ๋•Œ๋งˆ๋‹ค ๊ฐ์ง€)

[๋นŒ๋“œ์œ ๋ฐœ] - GitHub hook trigger for GITScm polling๋ฅผ ์ฒดํฌํ•ด์ค€๋‹ค. image

Github Repo์— ๋“ค์–ด๊ฐ€์„œ [settings] - [Webhooks]์—์„œ payload URL์„ <ip์ฃผ์†Œ>:<jenkinsํฌํŠธ>/github-webhook/์œผ๋กœ ํ•ด์ค€๋‹ค. image

๋นŒ๋“œ

docker ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ๋นŒ๋“œ์— ์ ์–ด์ค€๋‹ค. image

๋นŒ๋“œ ํ™˜๊ฒฝ

๋นŒ๋“œ ํ›„์— docker๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์ ์–ด์ค€๋‹ค. ์ด์ „์— jenkins ์‹œ์Šคํ…œ ์„ค์ •์—์„œ public ssh ์„ค์ •์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. image

๋นŒ๋“œ ํ›„ ์กฐ์น˜

๊ฐ„๋‹จํ•˜๊ฒŒ SUCCESSFUL์„ ๋„์›Œ์ฃผ๋Š” Post build task๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋! image

14์กฐ ๐Ÿ‘

๋ฉค๋ฒ„

  • J090 ๋ฐ•์ง„์˜
  • J153 ์ด์œ ํƒ
  • J165 ์ดํ•œ์ฃผ

16์กฐ ๐Ÿ‘

๋ฉค๋ฒ„

  • J041 ๊น€์„์ค‘
  • J100 ์‹œ๊ฒฝ๋•
  • J113 ์–‘์•„๋ฆผ

iOS

Team 14 Team 16
S060 ์ตœ๋™๊ทœ S061 ์ตœ์ฒ ์›…
S065 ํ™๋™ํ˜„ S064 ํ™๊ฒฝํ‘œ

์ง„ํ–‰์ˆœ์„œ

  • Team 14:

    • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ
      • ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ
    • ๋„คํŠธ์›Œํฌ ๋ ˆ์ด์–ด ์ถ”์ƒํ™”
    • ์ฝ”๋””๋„ค์ดํ„ฐ ํŒจํ„ด ์ ์šฉ
      • ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ํ™œ์šฉํ•œ ์˜์กด์„ฑ ์ฃผ์ž…
    • ์Šค์™€์ดํ”„ ์•ก์…˜์ด WWDC ์˜ˆ์ œ์˜ ์ฝ”๋“œ์™€ ๋‹ฌ๋ž๋˜ ๋ฌธ์ œ
      • WWDC ์˜ˆ์ œ์—์„œ๋Š” CollectionViewListCell์—์„œ ์Šค์™€์ดํ”„ ์•ก์…˜์„ ์„ค์ •ํ•ด์คฌ์œผ๋‚˜, ์‹ค์ œ ๊ตฌํ˜„์—์„  CollectionViewListCell์— ํ”„๋กœํผํ‹ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„ UICollectionLayoutListConfiguration์—์„œ ์„ค์ •ํ•ด์ค˜์•ผ ํ–ˆ์Œ
  • Team 16:

    • Frame๊ณผ Bound์˜ ์ฐจ์ด
      • interaction ์ฒ˜๋ฆฌ ์‹œ..
    • ์Šค์™€์ดํ”„ ์•ก์…˜ ์ง์ ‘ ๊ตฌํ˜„
      • ํŠนํžˆ delete๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๋‹ค๋ฅธ ์…€์ด ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋˜๋ฉด ํ˜„์žฌ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋˜์–ด์žˆ๋Š” ์…€์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ œ๊ฑฐํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์—์„œ ๋งŽ์ด ์• ๋ฅผ ๋จน์—ˆ์Œ
      • ์Šคํฌ๋กค์„ ์—ผ๋‘์— ๋‘ฌ์„œ cell์„ reloadํ•˜๋Š” ํ˜•ํƒœ๋กœ ํ•ด์•ผํ•˜์ง€ ์•Š์„๊นŒ ์‹ถ์—ˆ๋Š”๋ฐ ์• ํ”Œ์˜ tableView ๋“ฑ์˜ ๊ตฌํ˜„์„ ๋ด๋„ ์Šคํฌ๋กค ํ•  ๋•Œ๋Š” ํ˜„์žฌ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋‹ค ํ’€๋ฆฌ๋Š” ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์–ด์„œ ์šฐ๋ฆฌ๋„ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ ๋“ฏ ์‹ถ๋‹ค.
    • bottom sheet(or pullupview)๊ฐ€ ์ด๋™๋˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์€ ์–ด๋””์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•˜๋Š”๊ฐ€
      • ์ž์‹ ์ด ์›€์ง์ด๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ž์ฒด์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฑด ์กฐ๊ธˆ ์–ด์ƒ‰ํ•ด ๋ณด์ž„? bottom sheet๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ทฐ์ปจ์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด ์–ด๋–จ์ง€!
    • ๊ฐœ๋ฐœ์€ ์†๋„๋ƒ.. ๋ฐฉํ–ฅ์ด๋ƒ..
      • ์‚ฌ์‹ค ์†๋„๊ฐ€ ๋น ๋ฅธ์ง€๋„ ๋ชจ๋ฅด๊ฒ ๊ณ  ๋ฐฉํ–ฅ์ด ์˜ณ์€์ง€๋„ ๋ชจ๋ฅด๊ฒ ์œผ๋‹ˆ ๊ทธ๋ƒฅ ํ•˜์ž ใ…Žใ…Ž
  • ๊ณตํ†ต

    • A, B ์ƒํ™ฉ์—์„œ ๋‘˜ ๋‹ค ์“ฐ์ด๋Š” struct S๊ฐ€ A์—์„œ๋Š” ๋‚ด์šฉ์˜ 50%๊ฐ€ ์“ฐ์ด๊ณ  B์—์„œ๋Š” 100%๊ฐ€ ์“ฐ์ธ๋‹ค๋ฉด A์ƒํ™ฉ์—์„œ ๋ถˆํ•„์š”ํ•œ ๋‚ด์šฉ๊นŒ์ง€ ๊ฐ–๊ณ ์žˆ๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๊ฐ€์ง€๋Š” struct S' ๋ฅผ ์ƒˆ๋กœ ๊ตฌํ˜„ํ•ด์•ผํ• ์ง€..? ์•„๋‹ˆ๋ฉด S์˜ ํ•ด๋‹น ๋‚ด์šฉ์„ ์˜ต์…”๋„ ์ฒ˜๋ฆฌ๋ฅผ ํ• ์ง€..?

    • ํ•˜๋‹จ์—์„œ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๋ทฐ ๋„ค์ด๋ฐ:

      • PullUpView VS Bottom Sheet
      • Action Sheet๋ผ๊ณ  ํ•˜๋‹ˆ๊นŒ Bottom Sheet๊ฐ€ ์ซŒ ๋” ์ข‹์ง€ ์•Š๋‚˜์š”?? ๋ผ๊ณ  ํ•œํ‘œ...
    • ์˜ค์˜ˆ ๊ธˆ์š”์ผ์ด๋‹ค ใ…‹ใ„ทใ…‹ใ„ทใ…‹ใ„ท

  • Q&A

    • (Team 14 -> Team 16)
      • ์•ฑ ๋ฐฐํฌ์—์„œ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์•ˆ๋˜๋˜ ๋ฌธ์ œ..(๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ์—ฌ๋Ÿฌ๋ถ„)
    • (Team 16 -> Team 14)
      • Creator ํด๋กœ์ ธ์—์„œ unowned ์‚ฌ์šฉ ์ด์œ 
        • ์ฒ˜์Œ main์ด ๋˜๋Š” coordinator๋ฅผ sceneDelegate ์—์„œ ์ƒ์„ฑํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์กฐ๊ฑด ์žˆ์„๊ฒŒ ๋ณด์žฅ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์–ด์ฐจํ”ผ ์—†๋‹ค๋ฉด unowned๋‚˜ weak๋‚˜ ๋‘˜๋‹ค ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ตฌ์กฐ๋ผ ๋˜‘๊ฐ™์ด ์œ„ํ—˜ํ•˜๋‹ค๊ณ  ํŒ๋‹จ๋˜์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ ์ค„์–ด๋“œ๋Š” unowned๋ฅผ ์‚ฌ์šฉ
โš ๏ธ **GitHub.com Fallback** โš ๏ธ