์ปคํผ๋ฅผ ์ข์ํ๋ ํ๋์ธ์ด๋ผ๋ฉด ์์ฝ๊ฒ ๋ก๊ทธ์ธํ์ฌ ์ปคํผ์ ๊ด๋ จ๋ ์ํ์ ํ๋งคํ๊ณ ์ผ์์ ๊ณต์ ํ ์ ์๋ SNS ์๋น์ค์ ๋๋ค. ์ปคํผ์์ ์ผ์์ ๊ฒ์๊ธ๋ก ๊ณต์ ํ๋ฉฐ ์ข์์์ ๋๊ธ์ ํตํด ์ฌ์ฉ์์ ์ํตํฉ๋๋ค. ๋ค์ํ ์ฌ๋๋ค์ ํ๋ก์ฐํ๊ณ , ๋ง์์ ๋๋ ํผ๋๊ฐ ์๋ค๋ฉด '์ข์์'๋ฅผ ๋๋ฅด๊ฑฐ๋ ๋๊ธ์ ๋ฌ ์๋ ์์ต๋๋ค. ๋ํ, ๋ค๋ฅธ ์ฌ์ฉ์์ ์ฑํ ์ฐฝ์ ์ด์ฉํด ์ฆ๊ฑฐ์ด ๋ํ๋ ๋๋ ์ ์์ต๋๋ค.
๐งท ๋ฐฐํฌ URL
๊น๋ฏผ์ | ๊น์ง์ | ๊นํํฌ | ์ฑ์งํ |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
๐ BradleyyKim | ๐ jsk3342 | ๐ greenT-Hee | ๐ jihoon-chae |
๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ๋ผ์ฐํ ํ์ฉ ๋ฐ ์ํ๊ด๋ฆฌ, ๋น๋๊ธฐ ํต์ ๊ฐ๋ ๋ฑ ๊ธฐ์ด์ ์ธ ํ์ฉ์ ํ์ตํ๊ณ ๊ตฌ์ฒด์ ์ธ ์ดํด๋ฅผ ๋ชฉํ๋ก ์ ์
- ๋น ๋ฅธ ๊ธฐ๋ฅ ๊ตฌํ์ ๋ชฉํ
- ์ ์ ์์ ์ํธ์์ฉ์ด ํฐ ํ๋ก์ ํธ์์ ๋์ ์ธ UI์ ํ์์ฑ ์ฒด๊ฐํ๊ธฐ ์ํจ
- ์น ์๋น์ค์ ๊ท๋ชจ์ ์ปค์ง์ ๋ฐ๋ผ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ์ค์์ฑ์ ์ง์ ํ์ธํ๊ธฐ ์ํจ
- DOM ์ด๋ฒคํธ์ ๋ณต์ก์ฑ์ ์ง์ ์ฒด๊ฐํ๋ฉด์ virtual DOM์ ํ์์ฑ์ ์ฒด๊ฐํ๊ธฐ ์ํจ
- Front-End : HTML CSS JavaScript Sass
- Back-End : ์ ๊ณต๋ API ์ฌ์ฉ
- ๋ฒ์ ๊ด๋ฆฌ ๋ฐ ์ด์ : Github, Jira, Slack
- ๐ ํ์๋ก: Github Wiki, Notion
- ๐ merge convention, commit convention, prettier ์ฌ์ฉ
- ๋์์ธ : Figma, Illustrator
Jira | Slack |
---|---|
![]() |
![]() |
.
โโโ๐ src
โโโ๐ pages
| โโโ ...html
โโโ๐ css
โโโ๐ img
โโโ๐ js
- splash ๊ตฌํ
- ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํ
- ํ์๊ฐ์ ๊ตฌํ
- ํ๋กํ ์์ ๊ตฌํ
- ํํผ๋ ๊ตฌํ
- ๊ฒ์๊ธ ๋ฑ๋ก(upload)
- ํ ์คํธ ์ ๋ ฅ ๋ฐ ์ ๋ก๋ ๊ตฌํ
- ์ฌ๋ฌ ์ด๋ฏธ์ง ์ ๋ก๋ ๊ตฌํ
- POST์์ฒญ์ผ๋ก API์ ๋ฐ์ดํฐ ์ ์ฅ
- ๊ฒ์๊ธ ์์ธ ํ์ด์ง(postDetail)
- myProfile ํ์ด์ง์์ ์ด๋ฏธ์ง ํด๋ฆญ ์ postId๊ฐ์ ๋ถ๋ฌ์ ์์ธ ํ์ด์ง UI ๊ตฌํ
- API์ ์ ์ฅ๋ ๊ฐ์ธ ๋ก๊ทธ์ธ ํ ํฐ์ ์ด์ฉํด GET์์ฒญ์ ํตํด UI ๊ตฌ์ฑ
- ๋๊ธ UI ๊ตฌํ
- ๋๊ธ ์์ฑ ๊ธฐ๋ฅ(commentLoad)
- ๋๊ธ ์์ฑ ์ reload๋ฅผ ํตํด ๋๊ธ ์ค์๊ฐ ์ถ๊ฐ ๊ตฌํ
- ๊ฒ์ํ์ด์ง(search)
- ๊ฒ์ ๊ฒฐ๊ณผ ๋ฐ์ค ์ค์๊ฐ ๊ตฌํ ์์
-
์ํ๋ฑ๋ก (product)
- ์ด๋ฏธ์ง ์ ๋ก๋ ๊ธฐ๋ฅ ๊ตฌํ
- ์ํ ๋ฐ์ดํฐ POST ์์ฒญ
-
์ํ์์ (productModification)
- ์ด๋ฏธ์ง ์ ๋ก๋ ๊ธฐ๋ฅ ๊ตฌํ
- ์ํ ๋ฐ์ดํฐ GET์์ฒญ/ PUT ์์ฒญ
-
์ฑํ ๋ฐฉ(chatRoom)
- ํ ์คํธ ์ ๋ ฅํ ์ ์ก ๋ฒํผ ํด๋ฆญ์ ์ฑํ ์ฐฝ์ ๋ ๋๋ง
- ์ด๋ฏธ์ง ์ ๋ก๋์ ์ฑํ ์ฐฝ์ ๋ ๋๋ง
-
myProfile & yourProfile
- ์ ์ ์ ๋ณด, ์ํ&๊ฒ์๊ธ ๋ฆฌ์คํธ GET
-
404, ๊ณต์ฉ ๋ฐ ํ๋กํ ๋ชจ๋ฌ, ์ญ์ , ๋ก๊ทธ์์ ๊ธฐ๋ฅ ๊ตฌํ
-
follwing & follower
- ํ๋ก์/ ํ๋ก์ฐ API GET, DELETE, POST
- ํ๋ก์ฐ ๋ฒํผ ๋๋ฅด๋ฉด ์ซ์ ์ฆ๊ฐ ๋ฐ์
-
์ข์์ ๊ธฐ๋ฅ
- ์ข์์ API POST, DELETE ์์ฒญ
-
์ผ๋ฌ์คํธ ๋ก๊ณ ๋์์ธ
- ์นดํ์ธ ๋ง์ผ ์บ๋ฆญํฐ ๋ก๊ณ ๋ฐ ์์ด์ฝ ์ ์
2022.06.09 ~ 2022.07.29
splash | ๋ก๊ทธ์ธ ํ์ด์ง | ํ์๊ฐ์ ํ์ด์ง |
---|---|---|
![]() |
![]() |
![]() |
ํ ํ์ด์ง | ์ฑํ ํ์ด์ง | 404 ํ์ด์ง |
---|---|---|
![]() |
![]() |
![]() |
๊ฒ์๊ธ ์์ฑ ํ์ด์ง | ๊ฒ์๋ฌผ ์์ธ ํ์ด์ง |
---|---|
![]() |
![]() |
๊ฒ์๊ธ ์์ | ๊ฒ์๊ธ ์ญ์ | ๋๊ธ ๊ธฐ๋ฅ |
---|---|---|
![]() |
![]() |
![]() |
๋ง์ด ํ๋กํ ํ์ด์ง | ์ ์ด ํ๋กํ ํ์ด์ง | ํ๋ก์ฐ/ํ๋ก์ ๊ธฐ๋ฅ |
---|---|---|
![]() |
![]() |
![]() |
๋ก๊ทธ์์ ํ์ด์ง | ํ๋กํ ์์ ํ์ด์ง |
---|---|
![]() |
![]() |
์ํ ๋ฑ๋ก ํ์ด์ง & ์ํ ๋งํฌ ์ด๋ | ์ํ ์์ ํ์ด์ง | ์ํ ์ญ์ ํ์ด์ง |
---|---|---|
![]() |
![]() |
![]() |
-
๋ฌธ์ ์ํฉ
- ํ๋์ htmlํ์ผ๊ณผ API๋ก yourProfile, myProfile & ๋์ ํ๋ก์/ํ๋ก์ ๋ฆฌ์คํธ์ ๋ค๋ฅธ ์ ์ ์ ํ๋ก์/ํ๋ก์ ๋ฆฌ์คํธ ๋์์ ๊ตฌํํด์ผ ํจ
- following/follower ๋ฆฌ์คํธ์์ ํ๋กํ๋ก ๋์ด๊ฐ ๋, ํด๋น ์ ์ ์ ๋ง๋ yourProfile์ ๋ณด์ฌ์ค์ผ ํจ
- ํ ํฐ์์๋ ์๋๋ฐฉ์ accountname์ ๊ฐ์ ธ์ฌ ์ ์๋ค๋ ๊ฒ๊ณผ ํด๋ฆญ ํ์ ๋ ํด๋น ์ ์ ์ accountname๋ง์ ์ ํํ๊ฒ ์ง์ด๋ด์ง ๋ชปํ๊ณ ์์์
-
์์ธ ์ถ๋ก
- GET ์์ฒญ url๋ค์ accountname์ ๋ฃ์ด์ค์ผ ํ๋๋ฐ, ๋์ ํ๋กํ์ ๋ก์ปฌ์คํ ๋ฆฌ์ง์์ getItem์ผ๋ก ์ฌ์ฉํ๋ฉด ๋์ง๋ง ์๋๋ฐฉ ํ๋กํ accountname์ ๊ฐ์ ธ์ค์ง ๋ชปํ์
-
ํด๊ฒฐ ๋ฐฉ๋ฒ
- Location (ํ์ฌ URL) Property ์ค์์ query string์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ search string์ ์ฌ์ฉํ์ฌ ํด๊ฒฐ
- search string์ url์์
?
๋ฅผ ํฌํจํ ๋ท๋ถ๋ถ์ string ํ์์ผ๋ก ๋ฐํํด์ฃผ๋ ์ญํ
์ค์ ์ ์ฉ ์ฝ๋)
followingList.html์์ ์ ์ ๋ฅผ ์ ํํ ๋ ๋์ด๊ฐ๋ aํ๊ทธ์ href ์ฃผ์๋ฅผ
?accountname=์ ์ ์ accountname
๋ถ์ฌ์ ๋ณด๋link.setAttribute( 'href', '../pages/myProfile.html?accountname=' + resJson[i].accountname );
ํ๋กํ html๋ก ๋์ด์์ ์๋๋ฐฉ์ accountname์ location.search๋ก ๋ณ์์ ๋ด์ ์ฌ์ฉ
๋ด ๊ณ์ ์ผ ๊ฒฝ์ฐ์๋ ๋ก์ปฌ์คํ ๋ฆฌ์ง์์, ์๋๋ฐฉ ํ๋กํ์ด๋ฉด url์ query string๊ฐ์ด accountname์ ๋ค์ด๊ฐ๊ฒ ์ฒ๋ฆฌ
-
location.searchโ
?accountname=์ ์ ์์ด๋
-
location.search.replace(โ?โ,โโ) โ
accountname=์ ์ ์์ด๋
-
location.search.replace(โ?โ,โโ).split(โ=โ) โ
['accountname', '์ ์ ์์ด๋']
๐ userInfo.js (ํ๋กํ ์๋จ, ์ ์ ์ ๋ณด API GET ์์ฒญ ์ฝ๋)
const myAccountname = `${window.localStorage.getItem('accountname')}`;
const yourAccountname = location.search.replace('?', '').split('=')[1];
const accountname = yourAccountname ? yourAccountname : myAccountname;
//ํ๋กํ ์ ๋ณด ๋ณด์ฌ์ฃผ๊ธฐ
async function infoUser() {
try {
const res = await fetch(url + '/profile/' + accountname, {
method: 'GET',
..์๋ต..}
}
- ๋ง์ดํ๋กํ๋ก/์ ์ดํ๋กํ๊ณผ ํ๋ก์/ํ๋ก์๊ฐ ์๋ก ๊ฐ์ html ํ์ผ์ ๊ณต์ ํ๊ณ ์์ด, 404 ์๋ฌ๋ฅผ ๋ง์ด ๊ฒช๊ฒ ๋จ
- JS์์ ํํ๊ฒ ์ฌ์ฉํ๋ ๋ค๋ก๊ฐ๊ธฐ์ธ
window.history.back()
๋๋window.history.go(-1)
๋ง ์ผ์ ๋ ์๋ฌ ๋ฐ์ - Location Porperty๋ฅผ ์ฌ์ฉํด์ ์์ธ์ฒ๋ฆฌ๋ก Error ํด๊ฒฐ
const btnBack = document.querySelector('.btnBack');
btnBack.addEventListener('click', () => {
location.href = window.history.back();
});
- location pathname: ์์น์ ๋ํ URL์ ๊ฒฝ๋ก๋ฅผ ํฌํจํ๋ ๋ฌธ์์ด
- ์ฌ์ฉ ์๋: html ํ์ผ๋ช ์ ๋ฝ์์ ์กฐ๊ฑด์์ ์ฌ์ฉํ๊ธฐ ์ํด
const locationPath = location.pathname.split('.')[0].split('/')[3];
const btnBack = document.querySelector('.btnBack');
btnBack.addEventListener('click', () => {
if (accountname == yourAccountname) {
location.href = `../pages/${locationPath}.html?accountname=${yourAccountname}`;
} else if (accountname == myAccountname) {
location.href = `../pages/${locationPath}.html`;
}else {
location.href = window.history.back();
}
});
- ํ์๋ค๊ณผ ๊ฐ๊น์ด ๊ฑฐ๋ฆฌ์ ๊ฑฐ์ฃผํ์ฌ, ๋ฌผ๋ฆฌ์ ํ๋ค์ด ์๋ค๋ ์ฅ์ ์ ํตํด ์ต์ ์ฃผ 2ํ ์คํ๋ผ์ธ ๋ง๋จ์ ํตํด ๋น ๋ฅธ ํผ๋๋ฐฑ์ผ๋ก ๋น์ฉ ์ ๊ฐ
- ํ์ ๊ฐ ์ด์๊ฐ ๋ฐ์ํ์ ๋, ๋๋ฉด์ ํตํ ์์งํ ๋ํ๋ฅผ ํตํด ๋ฐ๋ก ํด๊ฒฐํ์ฌ ์๊ฐ ์ ์ฝ
- ๋ก๊ทธ์ธ ๊ธฐ๋ฅ๊ณผ ๋ฐฐํฌ ํ์ด์ง๋ฅผ ์ฐ์ ์ ์ผ๋ก ๊ตฌํํจ์ผ๋ก์จ ์์คํ ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ๊ธฐ๋ฅ๋ค์ ๋น ๋ฅด๊ฒ ๊ตฌํ
- ์๋์ ์ธ ์ปค๋ฐ ์ (over 760 commits)
- API์ ๋น๋๊ธฐ๋ก ํต์ ํ๋ ๋ก์ง์ ๋ํ ์ดํด๊ฐ ์ด๋ ค์
- ํ์ ์ ๋ฐ์ด ์ค๊ฐ์ ์ฝ๋ก๋์ ๊ฑธ๋ฆฐ ๊ฑด๊ฐ ์ด์
- ์ด๋ฐ์ ์ปค๋ฐ ์ปจ๋ฒค์ ์ด ํผ์ฌ๋์ด ์ฌ์ฉ๋ ์ด์
- JIRA๋ฅผ ๋์ ํ์ฌ 1์ฃผ์ผ ๋จ์๋ก ์คํ๋ฆฐํธ์ ํ ์ผ์ ์์ฑํ์ฌ ์ํ ํ ์ผ์ ๊ด๋ฆฌ
- Slack๊ณผ Github ๋ธ๋์น๋ฅผ ์ฐ๊ฒฐํ์ฌ ํ์์ ์ปค๋ฐ์ ํ์ธํ๊ณ , ์ด๋ค ๊ธฐ๋ฅ์ ์์ ํ๋ ์ง ์ฆ๊ฐ ํ์ธ
- github ํ์ด์ง๋ฅผ ์ด๊ธฐ์ ๋น ๋ฅด๊ฒ ๋ฐฐํฌํ์ฌ ์ง์์ ์ผ๋ก QAํ ์คํธ ์งํํ์ฌ ์ฆ๊ฐ์ ์ผ๋ก ํธ๋ฌ๋ธ ์ํ ๋ฐ ์ด์๋ฅผ ํด๊ฒฐ
- ์ ์ดํ๋ ๋ถ๋ถ
- ๊ฐ๋จํ CI/CD action ๊ธฐ๋ฅ์ผ๋ก ์๋ ๋ฐฐํฌ ์ํ ๋ฐ ๊ฐ๋ ์ดํด
- API ๋ช ์ธ์ ๋ํด ๊ตฌ์ฒด์ ์ผ๋ก ๋ฏธ๋ฆฌ ํ์ ํด ์๋ฒ์ ํต์ ์ ์ํํ๊ฒ ์ ์ง
- ๋น๋๊ธฐ ์์ ์ ๋ํ ์ดํด๋ฅผ ํตํด ์ ์ฐํ๊ฒ ์ด๋ฒคํธ๋ฅผ ๋์
- ํด๋ ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ์ง์ ํด ํ์ผ ๊ฒฝ๋ก ๋ฌธ์ ์ ๊ฑฐ
- ์์ ์ git branch ๋ํ ์ดํด๋ฅผ ํตํด branch ๊ตฌ์ฒด์ ์ผ๋ก ์ธ๋ถํํ์ฌ ์๋ฌ ๋ฐฉ์ง
- ํ์ ๊ฐ ํ์ด์ง ๋ณ๋ก ์์ ์งํํ์ฌ ์ถฉ๋ ์ต์ํ
- ์ฌ์ฌ์ฉ์ฑ์ ๊ณ ๋ คํ์ฌ javaScript ๊ธฐ๋ฅ์ ๊ตฌํํด ๋ชจ๋ํ ๋ฆฌํฉํ ๋ง ๋จ๊ณ๋ฅผ ์ํ ๊ธฐ๋ฐ์ ๋ง๋ จ
- ๊ฐ์ ๋ฐ ํ์ตํ ๋ถ๋ถ
- ๊ธฐ๋ฅ ๋ณต์ก๋๊ฐ ์ฌ๋ผ๊ฐ ์๋ก javaScript ๊ธฐ๋ฅ๋ณ๋ก ๊ตฌํํ๋ ๊ฒ์ด ๋ ๋ซ๋ค๋ ๊ฒฐ๋ก ์ ๋๋ฌ
- ํ์ผ์ ๊ธฐ๋ฅ๋ณ๋ก ์ธ๋ถํํ์ฌ ๋ผ์ฐํ ์ฃผ์ ๋ณ๊ฒฝ
- MVC ํจํด์ ๋ํด ํ์ตํ์ฌ ๋ชจ๋ํ ํจํด์ ๋ง์ถ์ด ํ๋ก์ ํธ ์ํคํ
์ณ๋ฅผ ๊ตฌํ
- ์ถ์ํ ๋จ๊ณ์ ๋ฐ๋ผ ํจ์๋ฅผ ๋ถ๋ฅ ๋ฐ ๊ธฐ๋ฅ๋ณ ๋ชจ๋ํ ์์
- ๊ธฐ๋ฅ ๋ณต์ก๋๊ฐ ์ฌ๋ผ๊ฐ ์๋ก javaScript ๊ธฐ๋ฅ๋ณ๋ก ๊ตฌํํ๋ ๊ฒ์ด ๋ ๋ซ๋ค๋ ๊ฒฐ๋ก ์ ๋๋ฌ