- ์๋น์ค ์๊ฐ
- ํ ์๊ฐ
- ํ๋ก์ ํธ ๊ธฐ๊ฐ
- ๊ธฐ์ ๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ
- ํ์ ํ๊ฒฝ
- ์ญํ ๋ถ๋ด
- UI
- ๊ตฌํ ๊ธฐ๋ฅ
- ์ฃผ์ ์ฝ๋
- ํด๋ ๊ตฌ์กฐ
- ๋ฆฌํฉํ ๋ง ํ ๋ถ๋ถ
- ํ๊ณ ๋ฐ ์๊ฐ
์ค๊น ์ ํ๋ก๊น ๊ฒฝํ์ ๊ณต์ ํ๊ณ , ํ๋ก๊น ์ถ์ฒ ์ฝ์ค๋ฅผ ๊ณต์ ํ๋ SNS ํ๋ซํผ์ ๋๋ค. '(์ฐ๋ ๊ธฐ๋ฅผ) ์ค๋ค'์ '์กฐ๊น (jogging)'์ ํฉ์น '์ค๊น '์ ํํ ํ๋ก๊น ์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ์ฐ๋ฉฐ, ํ๊ฒฝ ๋ณดํธ์ ๊ฑด๊ฐํ ๋ผ์ดํ์คํ์ผ์ ๋์์ ์ถ๊ตฌํ๋ ์ปจ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- Follower, Following ๊ธฐ๋ฅ์ ํ์ฉํด, ์น๊ตฌ๋ฅผ ๋งบ์ ์ฌ์ฉ์๋ค์ ์์ ์ ํ๋ก๊น ๊ฒฝํ์ ๊ธฐ๋กํ์ฌ ๊ณต์ ํ๊ณ , ์น๊ตฌ์ ํ๋ก๊น ๊ฒฝํ๋ ๋๋ ์ ์์ต๋๋ค.
- ์์ ์ ํ ํผ๋์์ ํ๋ก์ฐํ ์ฌ๋์ ๊ฒ์๊ธ์ ํ์ธํ ์ ์๊ณ , ๋๊ธ๊ณผ ์ข์์ ๊ธฐ๋ฅ์ ํตํด ์๋ก ์ํตํ ์ ์์ต๋๋ค.
- ๋ณธ์ธ์ด ๊ฒฝํํ ์ข์ ํ๋ก๊น ์ฝ์ค๋ฅผ ๊ณต์ ํ ์ ์์ด ๋ ํจ์จ์ ์ธ ํ๋ก๊น ํ๋์ ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ณธ์ธ์ ํ๋ก๊น ์ ๊ณต์ ํ๊ณ ํ์ธ์ ํ๋ก๊น ์ ๊ฒฝํํจ์ผ๋ก์จ ํ๊ฒฝ ๋ณดํธ์ ๋ํ ์ธ์์ ๋์ผ ์ ์์ต๋๋ค.
๐ ์ค๊น ์ ํตํด ํ๋ก๊น ๊ฒฝํ์ ๊ณต์ ํ๋ฉฐ ์ํตํด๋ณด์ธ์๐
๐ ๋ฐฐํฌ URL
๐ ์ค๊น
ํ
์คํธ ๊ณ์
ID : jubging@gmail.com
PW : asd123
| ๊น์งํ | ์๋์ฃผ | ๊นํ์ | ์ ํ์ง |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| ๐ GitHub |
๐ GitHub |
๐ GitHub |
๐ GitHub |
๐2023.10.16 ~ 2023.11.08
- ๊ฐ๋ฐ ์ผ์ ์ ๋ ธ์ ์ ๊ฐํธ ์ฐจํธ๋ฅผ ํตํด ๊ด๋ฆฌํ์์ต๋๋ค.
| ์ฃผ์ฐจ | ์์ ๋ด์ฉ |
|---|---|
| ์ฌ์ ๋ชจ์ (10/12 ~ 10/13) |
- ์ฃผ์ ์ ์ ๋ฐ ๊ตฌ์กฐ๋ ์์ฑ - API ๋ช ์ธ ํ์ |
| 1์ฃผ์ฐจ (10/16 ~ 10/22) |
- ํ๋ก์ ํธ ๊ธฐ์ด ์
ํ
๋ฐ ํด๋ ๊ตฌ์กฐ ์ค์ - ์ปจ๋ฒค์ ๋ฐ Issue, PR ํ ํ๋ฆฟ ์ค์ - Figma๋ฅผ ํตํด ์์ด์ดํ๋ ์ ๋ฐ UI ์ ์ |
| 2์ฃผ์ฐจ (10/23 ~ 10/29) |
- ๊ณตํต ์ปดํฌ๋ํธ ์ ์ - ๊ฐ ๋งก์ ํ์ด์ง ๋งํฌ์ & ์คํ์ผ๋ง ๊ตฌํ - ํ์ด์ง ๋จ์ ๋ณ๋ก ํ์ ๊ธฐ๋ฅ ๊ตฌํ (๋ก๊ทธ์ธ, ํ์๊ฐ์ , ๊ฒ์๊ธ, ํ๋กํ ๋ฑ) |
| 3์ฃผ์ฐจ (10/30 ~ 11/5) |
- ํ์ด์ง ๋จ์ 2์ฐจ ๊ธฐ๋ฅ ๊ตฌํ (์ฝ์ค ๋ฑ๋ก, ๋๊ธ) - ์ถ๊ฐ๊ธฐ๋ฅ ๊ตฌํ (์ข์์, ๊ฒ์, ํ๋ก์ฐ) |
| 4์ฃผ์ฐจ (11/6 ~ 11/8) |
- ๋ฒ๊ทธ ์์ ๋ฐ ๋ฆฌํฉํ ๋ง - ๋ฐฐํฌ (Netlify) - README ์์ฑ |
| ์ฌ์ฉ ๊ธฐ์ |
|
| ํจํค์ง |
|
| ํฌ๋งทํฐ |
|
| ํ์ |
|
| ๋์์ธ |
|
| API |
|
| IDE |
|
ยท ์ ์ญ ์ํ๋ฅผ ๋
๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ด ํจ์จ์ ์ธ ํ์
ํ๊ฒฝ์ ๊ตฌ์ถํ๊ธฐ ์ํด ์ฌ์ฉํ์ต๋๋ค.
ยท React์ ํต์ฌ ๊ฐ๋
๊ณผ ์ ์ด์ธ๋ฆฌ๋ API๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ React๋ฅผ ๋ฐฐ์ด์ง ์ผ๋ง ์ ๋ ํ์๋ค๋ Recoil์ ์ด๋ ต์ง ์๊ฒ ์ ์ํ ์ ์์์ต๋๋ค.
ยท Promise ๊ธฐ๋ฐ์ API๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋น๋๊ธฐ ์์ฒญ์ ๋ณด๋ค ๊ฐ๊ฒฐํ๊ณ ์ง๊ด์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ์ต๋๋ค.
ยท ์ ์ญ์ ์ผ๋ก ์ค์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ํตํด ๊ธฐ๋ณธ URL, ํค๋ ๋ฑ์ ํ ๊ณณ์์ ์ค์ ํ๊ณ ๊ด๋ฆฌํ์์ต๋๋ค.
ยท Interceptor ๊ธฐ๋ฅ์ ํตํด ๋ชจ๋ ์์ฒญ์ด๋ ์๋ต์ ๊ณตํต์ ์ผ๋ก ์ ์ฉํด์ผ ํ๋ ํ ํฐ ์ธ์ฆ, ์๋ฌ ์ฒ๋ฆฌ ๋ฑ๊ณผ ๊ฐ์ ๋ก์ง์ ์ค์์์ ๊ด๋ฆฌํ์์ต๋๋ค.
โ
ฐ useDebounce Hook
ยท ์ฌ์ฉ์์ ์ฐ์์ ์ธ ์
๋ ฅ์ ์ ์ดํ๊ธฐ ์ํด ์์ฑํ Hook
ยท ์
๋ ฅ์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ํ, ํด๋น ๊ฐ์ ๋ฐํํ์ฌ ๋ถํ์ํ API ํธ์ถ์ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉํ์ต๋๋ค.
โ
ฑ useScrollTop Hook
ยท ์คํฌ๋กค ์์น ์ด๊ธฐํ
ยท ๋ผ์ฐํ
๊ฐ ํ์ด์ง ์ ํ ์ ์คํฌ๋กค ์์น๋ฅผ ํ์ด์ง ์๋จ์ผ๋ก ์ด๊ธฐํํ์ฌ, ์ฌ์ฉ์๊ฐ ์๋ก์ด ํ์ด์ง์ ๋ด์ฉ์ ๋ณผ ์ ์๋๋ก ํ์ต๋๋ค.
ยท ๋ชจ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ๋ฃจํธ ์ธ๋ถ์ ๋ ๋๋ง ํ์ฌ CSS ์คํ์ผ๋ง๊ณผ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์์ ์์ ๋กญ๊ฒ ์์
ํ๊ธฐ ์ํด ์ฌ์ฉํ์ต๋๋ค.
ํ์ ๊ฐ์ ์ํํ ์ํต๊ณผ ํ์ ์ ์ํด prettier์ ์ปค๋ฐ ์ปจ๋ฒค์ ์ ์ง์ ํ์์ต๋๋ค.
- Prettier Convention
{
"bracketSpacing": true, // ๊ฐ์ฒด ๋ฆฌํฐ๋ด์์ ๊ดํธ์ ๊ณต๋ฐฑ ์ฝ์
"jsxBracketSameLine": false, // JSX์ ๋ง์ง๋ง `>`๋ฅผ ๋ค์ ์ค๋ก ๋ด๋ฆด์ง ์ฌ๋ถ
"jsxSingleQuote": true, // JSX์ ํ๋ฐ์ดํ ์ฌ์ฉ ์ฌ๋ถ
"semi": true, // ์ธ๋ฏธ์ฝ๋ก ์ฌ์ฉ ์ฌ๋ถ
"printWidth": 80, // ์ค ๋ฐ๊ฟ ํ ํญ ๊ธธ์ด
"useTabs": false, // ํญ ์ฌ์ฉ ์ฌ๋ถ
"tabWidth": 2, // ํญ ๋๋น
"arrowParens": "always" // ํ์ดํ ํจ์ ๊ดํธ ์ฌ์ฉ ์ฌ๋ถ
}
- Git Commit Convention
| Emoji | Type | ์ค๋ช | ์์ |
|---|---|---|---|
| ๐ | FIX | ๋ฒ๊ทธ, ์ค๋ฅ ํด๊ฒฐ | ex) ๐ callback error |
| ๐ | ADD | ๋ฌธ์ ์์ฑ / ์์ | ex) ๐ LoginActivity |
| โจ | FEAT | ์๋ก์ด ๊ธฐ๋ฅ ๊ตฌํ | ex) โจ google login |
| ๐ฅ | DEL, REMOVE | ์ฝ๋ / ํ์ผ ์ญ์ | ex) ๐ฅ ์ค๋ณต ํ์ผ ์ญ์ |
| โป๏ธ | REFACTOR | ์ฝ๋ ๋ฆฌํฉํ ๋ง, ์ธ๋ฏธ์ฝ๋ก ์ค๋ฐ๊ฟ ํฌํจ | ex) โป๏ธ MVP architecture to MVVM |
| ๐ | CHORE | ๊ทธ ์ด์ธ์ ์ก์ผ/ ๋ฒ์ ์ฝ๋ ์์ , ํจํค์ง ๊ตฌ์กฐ ๋ณ๊ฒฝ, ํ์ผ ์ด๋, ๊ฐ๋ ์ฑ์ด๋ ๋ณ์๋ช , reformat ๋ฑ | ex) ๐ delete unnecessary import package |
| ๐ | DESIGN | UI ๊ฐ์ ์คํ์ผ ๋ด์ฉ์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๋ฐ์ดํธ | ex) ๐ ํ์๊ฐ์ ๋ ์ด์์ ์กฐ์ |
| ๐ก | COMMENT | ํ์ํ ์ฃผ์ ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ | ex) ๐ก ๋ฉ์ธ ๋ทฐ์ปจ ์ฃผ์ ์ถ๊ฐ |
| โ | TEST | ํ ์คํธ ์ฝ๋ ์ถ๊ฐ | ex) โ ๋ก๊ทธ์ธ ํ ํฐ ํ ์คํธ ์ฝ๋ ์ถ๊ฐ |
๋น ๋ฅด๊ณ ๊ฐํธํ Issue ๋ฐ PR ์์ฑ์ ์ํด template์ ์ ์ฉํ์์ต๋๋ค.
- Issue
# ๐ Description
์ค๋ช
์ ์์ฑํด์ฃผ์ธ์.
# ๐ Todo
- [ ] todo 1
- [x] todo 2
# ๐ ETC
๊ธฐํ์ฌํญ- Pull Request
# โก PR ์์ฝ
PR ๋ด์ฉ์ ์์ฝํ์ฌ ์์ฑํด์ฃผ์ธ์.
# ๐ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ
- ์ฃผ์ ๋ณ๊ฒฝ์ฌํญ ๋ชฉ๋ก์ ์์ฑ
# ๐ก ๊ด๋ จ ์ด์
Resolve {#์ด์๋ฒํธ}๊นํ๋ธ์์ ์ ๊ณตํ๋ ์นธ๋ฐ๋ณด๋๋ฅผ ์ฌ์ฉํด ํ๋ก์ ํธ ์งํ ์ํฉ์ ํ ๋์ ํ์ธํ ์ ์์ด ์ผ์ ๊ด๋ฆฌ์ ์์ํ์ต๋๋ค.
๐ํผ๊ทธ๋ง ๋งํฌ
| ์คํ๋์ฌ | ๋ก๊ทธ์ธ | ํ์๊ฐ์ |
|---|---|---|
![]() |
![]() |
![]() |
| 404 | ๊ณ์ ๊ฒ์ | ํ๋ก์&ํ๋ก์ |
|---|---|---|
![]() |
![]() |
![]() |
| ํ | ๋ด์ค๋ ํฐ | ์ข์์ |
|---|---|---|
![]() |
![]() |
![]() |
| ๋๊ธ ๋ฑ๋ก | ๋๊ธ ์ญ์ /์ ๊ณ | ์ฑํ |
|---|---|---|
![]() |
![]() |
![]() |
| ๊ฒ์๊ธ ๋ฑ๋ก | ๊ฒ์๊ธ ์์ /์ญ์ | ์ฝ์ค ๋ฑ๋ก/์์ธ ๋ณด๊ธฐ |
|---|---|---|
![]() |
![]() |
![]() |
| ํ๋กํ ์์ | ๊ณ์ ์ ๊ณ /๊ณต์ ,แแ ฆแแ ตแแ ณแฏ แแ ตแซแแ ฉ | ๋ก๊ทธ์์ |
|---|---|---|
![]() |
![]() |
![]() |
kakao Map API & react-kakao-maps-sdk
์นด์นด์ค ๋งต API์ React ์นด์นด์ค ์ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํจ๊ป ์ฌ์ฉํ๊ณ ์ฌ์ฉ์์ ํธ์์ฑ์ ์ํ์ฌ ์ค์๊ฐ ์์น ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ค๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค.
๋ํ, ๊ทธ๋ ค์ง ์ง๋ ์์ ๊ฒฝ๋ก์ ์ ์ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉ์์๊ฒ ๊ฒฝ๋ก๋ฅผ ๋ณด์ฌ์ฃผ๊ฒํ๊ธฐ ์ํด ์ ๋ค์ ์์์ ๊ณผ ๋์ ์ ๊ธฐ์ค์ผ๋ก ์ค์ ์ขํ๊ฐ์ ๊ตฌํ์ฌ ์ ์ฉํ์์ต๋๋ค.
์ ํ์ ์ธ ๋ฐฑ์๋ API ๋๋ฌธ์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋ ๋ถ๋ถ์ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ง๋์ ์ ์ ์ ๋ณด๋ฅผ JSON.stringify๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ก ๋ณํ์์ผฐ๊ณ ๋ฐ์ดํฐ ํต์ ์ดํ JSON.parse๋ก ๊ฐ์ฒดํํ์ฌ ์ง๋์ ์ ์ ๋ค์ ๋ํ๋ด์์ต๋๋ค.
const drawLineOnNewMap = () => {
if (clickPosition) {
const container = document.getElementById("newMap");
// ์ ์ ์์์ , ์ค๊ฐ์ , ๋์ ๊ณ์ฐ
const options = {
draggable: false,
zoomable: false,
isableDoubleClick: false,
disableDoubleClickZoom: false,
center: clickPosition,
center: new kakao.maps.LatLng(centerLat, centerLng),
level: 6,
};
// ์ง๋ ์์ฑ
const newMap = new kakao.maps.Map(container, options);
// ์ ์์ฑ
new kakao.maps.Polyline({
map: newMap,
path: linePoints,
strokeWeight: 3,
strokeColor: "#db4040",
strokeOpacity: 1,
strokeStyle: "solid",
});
// ์ง๋ ๋ฐ์ดํฐ
const mapState = {
center: {
lat: newMap.getCenter().getLat(),
lng: newMap.getCenter().getLng(),
},
level: newMap.getLevel(),
};
// ์ ๋ฐ์ดํฐ
const linePointsData = linePoints.map((point) => ({
lat: point.getLat(),
lng: point.getLng(),
}));
// ์ ๋ฐ์ดํฐ ๋ฌธ์์ดํ
const stringifylinePointsData = JSON.stringify(linePointsData);
// ์ง๋ ๋ฐ์ดํฐ ๋ฌธ์์ดํ
const serialized = JSON.stringify(mapState);
// ์ง๋ ์ข
ํฉ ๋ฐ์ดํฐ
const mapInfo = {
map: serialized,
line: stringifylinePointsData,
};
// ์ํ ์
๋ฐ์ดํธ ๋ฐ ์ฌ์ฉ์๋ฅผ ์๋ก์ด ๊ฒฝ๋ก๋ก ์ด๋์ํค๊ณ , mapInfo ๊ฐ์ฒด๋ฅผ state์ ๋ด์ ์ ๋ฌ
setMapInfo(mapInfo);
navigate(`/profile/${userInfo.accountname}/addcourse`, {
state: { data: mapInfo },
});
}
};
// ์์ธ ํ์ด์ง ์ง๋ ๋ํ๋ด๊ธฐ
useEffect(() => {
if (location.state.data) {
const container = document.getElementById("newMap");
// ์ง๋ ์ ๋ณด ๊ฐ์ฒดํ
const mapInfo = JSON.parse(location.state.data.map);
// ์ ์ ๋ณด ๊ฐ์ฒดํ
const lineInfo = JSON.parse(location.state.data.line);
// ์ง๋ ์ค๊ฐ ์ง์
const center = new kakao.maps.LatLng(
mapInfo.center.lat,
mapInfo.center.lng
);
const options = {
// ์๋ต
};
// ์ง๋ ์์ฑ
const newMap = new kakao.maps.Map(container, options);
// ์ ์์ฑ
const linePointsLatLng = lineInfo.map(
(point) => new kakao.maps.LatLng(point.lat, point.lng)
);
new kakao.maps.Polyline({
// ์๋ต
});
}
}, [location.state.data]);
// ํ๋กํ ํ์ด์ง๋ก ์ง๋ ๋ฐ์ดํฐ ์ ์ก ์ด๋
const handleSubmitMap = async (event) => {
event.preventDefault();
const mapData = {
product: {
itemName: courseName,
price: parseInt(courseLength),
link: courseReview,
itemImage: JSON.stringify(location.state.data),
},
};
const response = await postCourseUpload(mapData);
response && navigate(`/profile/${userInfo.accountname}`);
};๐ jubging
โโ ๐ฆ public
โ โโ ๐ favicon.ico
โ โโ ๐ index.html
โโ ๐ฆ src
โ โโ ๐ api
โ โโ ๐ assets
โ โ โโ ๐ fonts
โ โ โโ ๐ icon
โ โ โโ ๐ images
โ โโ ๐ components
โ โ โโ ๐ common
โ โ โ โโ ๐ Alert
โ โ โ โโ ๐ Button
โ โ โ โโ ๐ ChatList
โ โ โ โโ ๐ Header
โ โ โ โโ ๐ Input
โ โ โ โโ ๐ Modal
โ โ โ โโ ๐ Navbar
โ โ โ โโ ๐ Profile
โ โ โ โโ ๐ UserList
โ โ โโ ๐ kakaomap
โ โ โโ ๐ Post
โ โ โโ ๐ Splash
โ โโ ๐ context
โ โโ ๐ hooks
โ โโ ๐ pages
โ โ โโ ๐ AddCourse
โ โ โโ ๐ Chat
โ โ โโ ๐ ChatList
โ โ โโ ๐ CourseDetail
โ โ โโ ๐ Follow
โ โ โโ ๐ Home
โ โ โโ ๐ Loading
โ โ โโ ๐ Login
โ โ โโ ๐ NewsLetter
โ โ โโ ๐ NotFound
โ โ โโ ๐ Post
โ โ โโ ๐ Profile
โ โ โโ ๐ Search
โ โ โโ ๐ Sign
โ โ โโ ๐ SplashScreen
โ โ โโ ๐ Upload
โ โโ ๐ recoil
โ โโ ๐ routes
โ โโ ๐ styles
โ โโ ๐ App.js
โ โโ ๐ index.js
โ โโ ๐ .gitignore
โ โโ ๐ package-lock.json
โ โโ ๐ package.json
โ โโ ๐ README.md
- ์์ง ๊ตฌํํ์ง ๋ชปํ ์ฝ์ค ์์ ๋ฐ ์ญ์ ๊ธฐ๋ฅ ๊ตฌํ
- ์ค๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ์ฑ ๋์ด๊ธฐ
- ๋ฐ์ํ ์์ (pc, ํ๋ธ๋ฆฟ) ๋ฐ ์๋งจํฑ ํ๊ทธ๋ฅผ ์ฌ์ฉํ ์น์ ๊ทผ์ฑ ํฅ์
- ์ด๋ฏธ์ง ์์ถ ๋ฐ Sprite ๊ธฐ๋ฒ, Lazy-loading์ ํ์ฉํ์ฌ ์ด๋ฏธ์ง ๋ ๋๋ง ์๋ ํฅ์
- UI ๊ฐ์ ์ ํตํด ์ฌ์ฉ์์๊ฒ ์ข ๋ ์น์ ํ UX ์ ๊ณต
- useMemo, useRef ๋ฑ ๋ฆฌ์กํธ ํ ์ ์ฌ์ฉํ์ฌ ์ฌ๋ ๋๋ง ๋ฐฉ์ง
๋ฆฌ์กํธ ํ๋ก์ ํธ๊ฐ ์ฒ์์ด๋ผ ์ด๋ ค์ ์ง๋ง ์ด๋ฒ ๊ธฐํ๋ฅผ ํตํด ํ์ธต ๋ ์ฑ์ฅํ๋ค๋ ๋๋๊ณผ ์์ง์ ๋ถ์กฑํ ์ ์ด ๋งค์ฐ ๋ง๋ค๋ ๊ฑธ ๋๊ผ์ต๋๋ค.์ต๋ํ ๋งก์ ๋ถ๋ถ์ ํด๊ฒฐํ ๋ ค๊ณ ๋ ธ๋ ฅํ๊ฑฐ์ ๋นํด ๋ฏธํกํ ๋ถ๋ถ์ด ๋ง์ ์์ฝ์ง๋ง ๊ทธ๋๋ ํ์๋ค๊ณผ ํจ๊ปํ์ฌ์ ์ด๋ ค์ด ๋ด์ฉ์ ํด๊ฒฐํ๋ ๊ธฐ์ต๊ณผ ๊ตฌํ์ ์ฑ๊ณตํ์ฌ ๊ฒฐ๊ณผ๋ฌผ์ด ๋์์ ๋ ๊ธฐ์จ์ ์์ ์ ์์๊ฑฐ ๊ฐ์ต๋๋ค. ํ๋ก์ ํธ ๊ธฐ๊ฐ๋์ ๊ณ ์ํ ํ์๋ค์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋ฆฌ์กํธ ํ๋ก์ ํธ๊ฐ ์ฒ์์ด๋ผ ์ด๋ฐ์ ์ด๋ป๊ฒ ์งํํด์ผํ ์ง ๋ง์ด ์ด๋ ค์ ์ง๋ง, ํ์๋ค๊ณผ ๊ฐ์ด ๊ณต๋ถํ๋ฉด์ ๋ง์ด ๋ฐฐ์ธ ์ ์์์ต๋๋ค. ๋ํ ๊นํ๋ธ์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด์ ์ฒด๊ณ์ ์ธ ํ์ ์ ๊ฒฝํํด๋ด์ ์ข์๊ณ ์์ง ํ๋ก์ ํธ๊ฐ ๋ฏธ์์ฑ์ด์ง๋ง ๋์ด ์๋๊ธฐ ๋๋ฌธ์ ์์ผ๋ก๋ ๋ฆฌํฉํ ๋ง ํ๋ฉด์ ๋ ์ข์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ค์ด๋ด๊ณ ์ถ์ต๋๋ค. ๋๊น์ง ์ด์ฌํ ํจ๊ปํด์ค ํ์๋ถ๋ค, ํญ์ ์น์ ํ๊ฒ ๋์์ฃผ์ จ๋ ๋ฉํ ๋๊ณผ ๊ฐ์ฌ๋๋ค ๊ทธ๋ฆฌ๊ณ ๋ง์ ์์ง๊ฐ ๋ ํ๊ณ 11์กฐ๋ถ๋ค ๋ชจ๋ ๊ฐ์ฌํฉ๋๋ค!
๋ฆฌ์กํธ ๊ณต๋ถ๋ฅผ ์์ํ์ง ์ผ๋ง ์ ๋ผ์ ์ง์์ด ๋ถ์กฑํ ์ํ๋ก ํ๋ก์ ํธ๋ฅผ ์์ํ๊ฒ ๋์ด ๋ง์ ๊ฑฑ์ ์ ํ์ต๋๋ค ์์ํ๋ ๋๋ก ๋ชจ๋ฅด๋ ๊ฒ์ด ๋ง์๊ณ , ๋ณธ์ ์๋๊ฒ ํ์๋ค์๊ฒ ๋ถ๋ด์ ์ฃผ๋ฉด์์กฐ๊ธ ๊ดด๋กญํ๊ฒ ๋ ๊ฒ ๊ฐ์ ์ฃ์ก์ค๋ฌ์ ์ต๋๋ค ๊ทธ๋ผ์๋ ํ์๋ค์ด ๋์์ฃผ์ ๋๋ถ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ฌด๋ฆฌ ํ ์ ์๊ฒ ๋์์ต๋๋ค ๋, ํผ์ ํ๋ค๋ฉด ์ด๋ป๊ฒ ์์ํด์ผ ํ์์ง๋ ๋ชฐ๋์ Git, ์ปจ๋ฒค์ , Git Issue, PR ๋ฑ ์ฒด๊ณ์ ์ธ ํ์ ๊ณผ์ ์ ๋ฐฐ์ธ ์ ์๋ ๊ฒฝํ์ด ๋ ๊ฒ ๊ฐ์ ์ข์์ต๋๋ค. ์กฐ๊ธ์ฉ ์์ฑ๋๋ ๋ชจ์ต์ ๋ณด๋ฉฐ, ๋๋ ๋ฌด์ธ๊ฐ ํ ์ ์๊ฒ ๋ ๊ฒ ๊ฐ์์ ์กฐ๊ธ ๊ธฐ๋ปค์ต๋๋ค ์์คํ๊ณ ๊ฐ์ฌํ ๊ฒฝํ์ ํจ๊ป ํด์ค ํ์๋ค์๊ฒ ๊น์ ๊ณ ๋ง์์ ํํํ๊ณ ์ถ์ต๋๋ค ๊ฐ์ฌํฉ๋๋ค ๐ฅ
ํ๋ก ํธ์๋ ์ค์ฟจ์ ์์ํ๊ธฐ ์ ํ๋ก์ ํธ ๊ฒฝํ๊ณผ ํ์ ๊ฒฝํ์ด ์ ๋ฌดํ์์ต๋๋ค. ํ์ง๋ง ํด๋น ๊ณผ์ ์ ํตํด 2๊ฐ์ง์ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ์๊ณ ์ข์ ๊ฒฝํ์ด ๋์์ต๋๋ค. ๋ํ ์์ฑ๋ ๋๊ณ ๋ง์กฑ์ค๋ฌ์ด ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ง ๋ชปํ์์ง๋ง ๊ณผ์ ์์์ ๋ค์ํ ์๋๋ฅผ ํตํ์ฌ ๋ฐฐ์์ ์ป์ ์ ์์์ต๋๋ค. ์ด๋ฌํ ๋ฐฐ์์ ํตํด ๋ฆฌํํ ๋ง ๊ธฐ๊ฐ์ ๋ ์ง์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋๋ก ๋ ธ๋ ฅํ๊ฒ ์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก 1๋ฌ์ ์๊ฐ๋์ ๊ฐ์ด ๊ณ ์ํ ํ์๋ค๊ณผ ํ๋ก ํธ์๋ ์ค์ฟจ์์ ๋ง๋ ๋ชจ๋ ๋ถ๋ค์๊ฒ๋ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.


























