Peer Session Week 2 - boostcamp-2020/IssueTracker-14 GitHub Wiki
- NGINX์ Jenkins Docker์ ๋ํด ํ์
-
NGINX ๋?
Nginx(์์ง x๋ผ ์ฝ๋๋ค)๋ ์น ์๋ฒ ์ํํธ์จ์ด๋ก, ๊ฐ๋ฒผ์๊ณผ ๋์ ์ฑ๋ฅ์ ๋ชฉํ๋ก ํ๋ค. ์น ์๋ฒ, ๋ฆฌ๋ฒ์ค ํ๋ก์ ๋ฐ ๋ฉ์ผ ํ๋ก์ ๊ธฐ๋ฅ์ ๊ฐ์ง๋ค.
- Nginx๋ ์์ฒญ์ ์๋ตํ๊ธฐ ์ํด ๋น๋๊ธฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ก ๊ฐ์ง๋ค. ์ค๋ ๋/ํ๋ก์ธ์ค ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ ์ํ์น HTTP ์๋ฒ์ ๋ค๋ฅด๊ฒ ์์ฒญ ์๋งํผ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ์ง ์๊ธฐ ๋๋ฌธ์ CPU ๋ถํ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ ๋ค.
- ๋ค๋ฅธ ์น ์๋ฒ์ ๋น๊ตํ์ฌ ๊ตฌ์ฑ ํ์ผ์ ์ฝ๊ณ ์กฐ์ํ๊ธฐ ์ฝ๋ค.
- ์ํค๋ฐฑ๊ณผ Nginx ๋ฌธ์ ์ฐธ๊ณ
-
์ ๋๋ฌธ์ NGINX๋ฅผ ์ฌ์ฉํ๋๊ฐ
-
์น ์๋ฒ๋ก์จ์ NGINX
-
React
๋ก ๊ฐ๋ฐํ ์น ์ดํ๋ฆฌ์ผ์ด์ ์build
์ฐ์ถ๋ฌผ์ธhtml
,css
,js
์ ๊ฐ์ ์ ์ ํ์ผ๋ค์ ๋ฐฐํฌํ๊ธฐ ์ํ ์น ์๋ฒ๋ก ์ฌ์ฉ
-
-
๋ฆฌ๋ฒ์ค ํ๋ก์๋ก์จ์ 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
์ ๊ฐ์ ์ญํ ์ ์ํํ๋ ํ๋ก์ ์๋ฒ๊ฐ ํ์
-
-
-
NGINX ์ค์น ๋ฐ ๊ตฌ์ฑ ํ์ผ ์ค์
-
์ค์น ๊ณผ์
-
์ฒ์์
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
-
-
๊ตฌ์ฑ ํ์ผ ์ค์
-
/etc/nginx/nginx.conf
์ค์ # /etc/nginx/nginx.conf events { worker_connections 768; } http { server { listen 80; location / { root /home/boostcamp/IssueTracker-16/web/client/public; index index.html index.htm; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://localhost:3000; } } }
-
-
Jenkins๋ฅผ ์ด์ฉํ ์๋ ๋ฐฐํฌ๋ฅผ ์ค์ ํ๋ ์ค ๋ง์ง๋ง์ผ๋ก GitHub Webhook๋ง ์ค์ ํ๋ฉด ๋๋๋ฐ ๊ณ์ํด์ ๋๋ ์๋์ ๊ฐ์ ์๋ฌ!

๊ตฌ๊ธ์ ์ฐพ์ ๋ณธ ๊ฒฐ๊ณผ 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์ ์์ด๋์ ํจ์ค์๋๋ฅผ ๋ฃ๋๋ก ํ์ธ์...

SW ๋น๋, ํ ์คํธ, ๋ฐฐํฌ ๋ฑ์ ํ์คํฌ๋ฅผ ์๋ํํ ์ ์๋ ์คํ์์ค ์๋ํ ์๋ฒ.
๋ํ์ ์ธ CI(Continuous Integration) ํด ์ค์ ํ๋.
์ ๊ธฐ์ ์ธ ๋น๋์์ ๋์๊ฐ Git๊ณผ ์ฐ๋ํ์ฌ ์ปค๋ฐ์ ๊ฐ์งํ๋ฉด ์๋์ ์ผ๋ก ํ ์คํธ๊ฐ ํฌํจ๋ ๋น๋๊ฐ ์๋ํ๋๋ก ์ค์ ํ ์ ์๋ค.
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์ ์ ์ํ ์ ์๋ค.
(ํ์ฌ๋ ๋ก๊ทธ์ธ๋ ์ํ)
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๋ฅผ ํด๋ฆญ
[General] - GitHub project ์ฒดํฌ ํ Github Repo URL์ ์์ฑํด์ค๋ค.
[์์ค์ฝ๋ ๊ด๋ฆฌ] - ๋๊ฐ์ด Repo URL์ ์ ๊ณ credential๋ก Github ID, password๋ฅผ ์ ๋ ฅํด์ค๋ค.
- ๋ธ๋์น๋ backend ๋ธ๋์น๋ก ์ค์ ํ๋ค. (backend ๋ธ๋์น์ merge๋ ๋๋ง๋ค ๊ฐ์ง)
[๋น๋์ ๋ฐ] - GitHub hook trigger for GITScm polling๋ฅผ ์ฒดํฌํด์ค๋ค.
Github Repo์ ๋ค์ด๊ฐ์ [settings] - [Webhooks]์์ payload URL์ <ip์ฃผ์>:<jenkinsํฌํธ>/github-webhook/์ผ๋ก ํด์ค๋ค.
docker ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๋ช
๋ น์ด๋ฅผ ๋น๋์ ์ ์ด์ค๋ค.
๋น๋ ํ์ docker๋ฅผ ์คํํ๋ ๋ช
๋ น์ด๋ฅผ ์ ์ด์ค๋ค. ์ด์ ์ jenkins ์์คํ
์ค์ ์์ public ssh ์ค์ ์ ํด์ฃผ์ด์ผ ํ๋ค.
๊ฐ๋จํ๊ฒ SUCCESSFUL์ ๋์์ฃผ๋ Post build task๋ฅผ ์ค์ ํ๋ฉด ๋!
- J090 ๋ฐ์ง์
- J153 ์ด์ ํ
- J165 ์ดํ์ฃผ
- J041 ๊น์์ค
- J100 ์๊ฒฝ๋
- J113 ์์๋ฆผ
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๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ทฐ์ปจ์์ ์ฒ๋ฆฌํด์ฃผ๋ฉด ์ด๋จ์ง!
- ๊ฐ๋ฐ์ ์๋๋.. ๋ฐฉํฅ์ด๋..
- ์ฌ์ค ์๋๊ฐ ๋น ๋ฅธ์ง๋ ๋ชจ๋ฅด๊ฒ ๊ณ ๋ฐฉํฅ์ด ์ณ์์ง๋ ๋ชจ๋ฅด๊ฒ ์ผ๋ ๊ทธ๋ฅ ํ์ ใ ใ
- Frame๊ณผ Bound์ ์ฐจ์ด
-
๊ณตํต
-
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๋ฅผ ์ฌ์ฉ
- Creator ํด๋ก์ ธ์์ unowned ์ฌ์ฉ ์ด์
- (Team 14 -> Team 16)