/////
Search
๐Ÿง‘โ€๐Ÿ’ป

๋ฐœํ‘œ ์ž๋ฃŒ

๋ฐœํ‘œ ์‹œ์—ฐ ์˜์ƒ(2023๋…„ 1์›” 5์ผ)

1. ํŒ€ ์†Œ๊ฐœ

1) ํŒ€๋ช…

HI 25
โ€ข
ํ™๋Œ€์˜ H ์ธ์ฒœ์˜ I
โ€ข
25์‹œ, ํ•˜๋ฃจ์— ์ฃผ์–ด์ง„ 24์‹œ๊ฐ„ ๋ณด๋‹ค ๋” ๋„˜์–ด์„œ ์„ฑ์‹คํžˆ ์›€์ง์ด์ž

2) ํŒ€์›

3) HI25 ์˜ ์•ฝ์†

๊ณต๋™ ๋ชฉํ‘œ : ์™„์„ฑ๋œ ํ”„๋กœ์ ํŠธ
์ค‘์š” ๊ฐ€์น˜ : ์†Œํ†ต

2. ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

1) ๊ธฐ์ˆ  ์Šคํƒ

2) ํ”„๋กœ์ ํŠธ ์ปจ์…‰

โ€ข
๋…ธ๋‚˜๋จน์ž ์„œ๋น„์Šค์˜ ์—ญํ•  ์‹์žฌ๋ฃŒ ๋˜๋Š” ๋ฐ˜์ฐฌ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์˜จ๋ผ์ธ ๊ณต์œ  ๋ƒ‰์žฅ๊ณ 
๋…ธ๋‚˜๋จน์ž
โ€ข
โ€˜๋…ธ๋А๋‹คโ€™ ์—ฌ๋ ค๋ชซ์œผ๋กœ ๊ฐˆ๋ผ ๋‚˜๋ˆ„๋‹ค
์ฃผ์š” ๋Œ€์ƒ
โ€ข
1์ธ ๊ฐ€๊ตฌ ๋˜๋Š” ์†Œ์ˆ˜์˜ ์ธ์›์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ฐ€๊ตฌ
์„œ๋น„์Šค ๋ชฉ์ 
โ€ข
์‹์žฌ๋ฃŒ(๋˜๋Š” ๋ฐ˜์ฐฌ)๋ฅผ ๋งค๊ฐœ์ฑ„๋กœ ์ง€์—ญ์‚ฌํšŒ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ˜•์„ฑ
โ€ข
์—ฌ๋ถ„์˜ ์‹์žฌ๋ฃŒ ๋ฐ ๋ฐ˜์ฐฌ ๊ณต์œ , ๊ณต๋™๊ตฌ๋งค ๋ฅผ ํ†ตํ•œ ๊ฒฝ์ œ์ ์ธ ์†Œ๋น„, ์ž์›์˜ ๋‚ญ๋น„ ๋ฐฉ์ง€
์ฃผ์š” ํƒ€๊ฒŸ 1์ธ ๊ฐ€๊ตฌ ๋˜๋Š” ์†Œ์ˆ˜์˜ ์ธ์›์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ฐ€๊ตฌ
์„œ๋น„์Šค ๋ชฉ์  ย 
โ€ข
ํŒ๋งค์ƒํ’ˆ ๋“ฑ๋ก ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ฌด๋ฃŒ ๋‚˜๋ˆ”, ๊ณต๋™๊ตฌ๋งค ์ œ์•ˆ, ์œ ์ €์˜ ๊ฐœ์ธ๋ฌผํ’ˆ ํŒ๋งค ๋“ฑ๋ก
โ€ข
ํฌ์ŠคํŒ… ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์‚ฌ์ง„๊ณผ ๊ธ€์„ ๊ธฐ๋กํ•˜๋ฉฐ 1์ธ ๊ฐ€๊ตฌ์— ๋„์›€์ด๋˜๋Š” ์ •๋ณด๋ฅผ ๊ณต์œ 

3. ์—ญํ•  ๋ถ„๋‹ด ๋ฐ ๊ธฐ๋Šฅ ์‹œ์—ฐ

โ€ข
๋…ธ๋‚˜๋งˆ์ผ“ ๊นƒํ—ˆ๋ธŒ README url ๋ถ€๋ถ„ ์ฐธ๊ณ 

4. ํ˜‘์—… ๋ฐฉ์‹

1) ๊นƒํ—ˆ๋ธŒ ์ปจ๋ฒค์…˜

2) ์ฝ”๋“œ ์ปจ๋ฒค์…˜

3) ๊นƒํ—ˆ๋ธŒ ํ˜‘์—… ํ”„๋กœ์„ธ์Šค

1.
์ด์Šˆ ๋“ฑ๋ก
2.
๋ธŒ๋žœ์น˜์ƒ์„ฑ ํ›„ PR push
3.
PR ๊ธฐ๋ก์„ ๋ณด๊ณ  ์ฝ”๋“œ๋ฆฌ๋ทฐ
4.
merge

5. ์ฃผ์š” ์ฝ”๋“œ

1) useContext

โ€ข
token, accountname์ด ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ apiํ†ต์‹ ์„ ํ•  ๋•Œ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌ.
โ€ข
์ „์—ญ์—์„œ ํ•„์š”ํ•œ token, accountname์„ useContext๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ด€๋ฆฌ
โ€ข
useContext๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ prop drilling์„ ๋ฐฉ์ง€
โ€ข
useContext์—์„œ token, accountname๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— token, accountname ์ •๋ณด๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์š”์ฒญ ๋ฐฉ์ง€
โ€ข
accountname์˜ ๊ฒฝ์šฐ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•  ๊ฒฝ์šฐ ๋ณด์•ˆ ์ƒ์˜ ์œ„ํ—˜์ด ์žˆ์–ด ์ถ”ํ›„ ๋ฆฌํŒฉํ† ๋ง ์˜ˆ์ •
//context.js const AuthContextProvider = ({ children }) => { const [state, dispatch] = useReducer(authReducer, { user: { token: localStorage.getItem('token'), accountname: localStorage.getItem('accountname'), }, }); const value = useMemo( () => ({ ...state, dispatch, }), [state], ); return ( <AuthContext.Provider value={value}>{children}</AuthContext.Provider> ); };
JavaScript
๋ณต์‚ฌ
// index.jsx import { AuthContextProvider } from './context/context'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <AuthContextProvider> <App /> </AuthContextProvider> );
JavaScript
๋ณต์‚ฌ
//SearchUser.jsx const SearchUser = () => { const { user } = useContext(AuthContext); useEffect(() => { if (keyword) { const getUserData = async () => { const data = await FetchApi.searchUser(keyword, user.token); }; getUserData(); } }, [keyword]); return ( //์ค‘๋žต ); }; export default SearchUser;
JavaScript
๋ณต์‚ฌ

2) CustomHook

โ€ข
๋ชจ๋‹ฌ ๊ตฌํ˜„ ์‹œ ๋ชจ๋‹ฌ์ด ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ๋™์ผํ•œ ๋กœ์ง์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌ.
โ€ข
์ด๋ฅผ, useModal ์ด๋ผ๋Š” ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋งŒ๋“ฆ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ์ค‘๋ณต ์ตœ์†Œํ™” ๋ฐ ์ƒํƒœ ๊ด€๋ฆฌ ๋กœ์ง์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ž„.
//useModal.jsx import { useState } from 'react'; const useModal = () => { const [isShowModal, setIsShowModal] = useState(false); const [isShowInnerModal, setIsShowInnerModal] = useState(false); const handleShowModal = () => { setIsShowModal(true); }; const handleCloseModal = () => { setIsShowModal(false); }; const handleShowInnerModal = () => { setIsShowInnerModal(true); }; const handleCloseInnerModal = () => { setIsShowInnerModal(false); setIsShowModal(false); }; return [ isShowModal, isShowInnerModal, handleShowModal, handleCloseModal, handleShowInnerModal, handleCloseInnerModal, ]; }; export default useModal;
JavaScript
๋ณต์‚ฌ
// PostCard.jsx const PostCard = ({ data }) => { const [ isShowModal, isShowInnerModal, handleShowModal, handleCloseModal, handleShowInnerModal, handleCloseInnerModal, ] = useModal(); }; return ( //์ค‘๋žต {!isShowModal ? null : author.accountname === user.accountname ? ( <Modal CloseModal={handleCloseModal}> <ModalBtn name='์‚ญ์ œ' onClick={handleShowInnerModal} /> <ModalBtn name='์ˆ˜์ •' onClick={handleGoPostEdit} /> </Modal> ) : ( <Modal CloseModal={handleCloseModal}> <ModalBtn name='์‹ ๊ณ ํ•˜๊ธฐ' onClick={handleShowInnerModal} /> </Modal> )} ); }; export default Comment;
JavaScript
๋ณต์‚ฌ

6. ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

[๋ฌธ์ œ ์ƒํ™ฉ] - ํฐํŠธ ํŒŒ์ผ(Spoqa Han SanS Neo)์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์„œ ํ”„๋กœ์ ํŠธ ํด๋” ์•ˆ์— ์ €์žฅํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์œผ๋‚˜ ์ ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. - ๊ฐœ๋ฐœ์ž๋„๊ตฌ์—์„œ ๋ Œ๋”๋ง๋œ ๊ธ€๊ผด์ด Spoqa Han Sans Neo๊ฐ€ ์•„๋‹Œ ๋ง‘์€ ๊ณ ๋”•์ด ์ ์šฉ๋˜๊ณ  ์žˆ์—ˆ๋‹ค.
[ํ•ด๊ฒฐ ๊ณผ์ •] - ๊ธฐ์กด์—๋Š” ํฐํŠธ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ url์˜ ์ธ์ž๋กœ ์ง์ ‘์ ์œผ๋กœ ๋ถˆ๋Ÿฌ ์™”์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฆฌ์•กํŠธ์—์„œ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ธ์ž๋กœ ์ง์ ‘์“ธ ๊ฒฝ์šฐ ๋ฆฌ์•กํŠธ ์‹คํ–‰์‹œ ๊ฒฝ๋กœ๊ฐ€ ๋ฐ”๋€Œ์–ด๋ฒ„๋ฆฌ๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ํŒŒ์ผ(์ด๋ฏธ์ง€, ํฐํŠธ)๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋Š” ๊ฐ ํŒŒ์ผ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ถ€๋ถ„์— ๋ฐ”๋กœ ๊ฒฝ๋กœ๋ฅผ ์ ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋”ฐ๋กœ import๋ฅผ ํ•ด์„œ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค.
๊ฒฝ๋กœ๋ฅผ ์ธ์ž๋กœ ์ง์ ‘ ์“ด ๊ฒฝ์šฐ (error๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ)
ํฐํŠธ ๊ฒฝ๋กœ๋ฅผ ๋ณ€์ˆ˜ํ˜•ํƒœ๋กœ import ํ•ด์„œ ๊ฐ€์ ธ์˜ฌ ๊ฒฝ์šฐ
- ๊ฒฝ๋กœ๋ฅผ importํ•ด์„œ ๊ฐ€์ ธ์™”์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํฐํŠธ๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์•˜๋‹ค. ๋ฉ˜ํ† ๋‹˜๊ป˜์„œ Spoqa Han SanS Neo๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ํฐํŠธ๋Š” ์ ์šฉ์ด ๋˜๋Š”์ง€ ํ™•์ธํ•ด์ฃผ์…จ๋Š”๋ฐ ๋‹ค๋ฅธ ํฐํŠธ์˜ ๊ฒฝ์šฐ ์ ์šฉ์ด ์ž˜ ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํฐํŠธ ํŒŒ์ผ ์ž์ฒด์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ํžŒํŠธ๋ฅผ ์–ป๊ฒŒ๋˜์–ด ํฐํŠธ ํŒŒ์ผ์„ ๋‹ค์‹œ ๋‹ค์šด ๋ฐ›์•˜๋”๋‹ˆ Spoqa Han SanS Neo๊ฐ€ ์ž˜ ์ ์šฉ ๋˜์—ˆ๋‹ค. ๊ฒฐ๋ก ์€ ํฐํŠธ ํŒŒ์ผ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. - ๊ทธ๋Ÿฌ๋‚˜ ํฐํŠธ๊ฐ€ ์–ด๋–ค ํƒœ๊ทธ์—๋Š” ์ ์šฉ์ด ๋˜๊ณ , ์–ด๋–ค ํƒœ๊ทธ๋Š” ์ ์šฉ์ด ์•ˆ๋ผ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ด๋Š” CSS ์šฐ์„ ์ˆœ์œ„ ๋ฌธ์ œ์˜€๋‹ค. ๊ธฐ์กด์—๋Š” font-family๋ฅผ * (์ „์ฒด ์„ ํƒ์ž)์— ์ž‘์„ฑํ•˜์˜€๋Š”๋ฐ reset css์— ์ ํžŒ font:inherit์€ ํƒœ๊ทธ ์„ ํƒ์ž์— ์ž‘์„ฑ๋˜์–ด์žˆ์–ด ๊ฐ€์ค‘์น˜ ์ ์ˆ˜๊ฐ€ ๋” ๋†’๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ์„ ํƒ์ž์— ์ž‘์„ฑํ•œ font-family๊ฐ€ ๋ฌด์‹œ๋˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ, reset css์— ํฌํ•จ๋˜์ง€ ์•Š์€ ํƒœ๊ทธ๋“ค(button)๋งŒ ํฐํŠธ๊ฐ€ ์ ์šฉ์ด ๋˜๊ณ , ๋‚˜๋จธ์ง€๋Š” ์ ์šฉ์ด ์•ˆ๋˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ๋‹น์‹œ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•œ style
- ๊ทธ๋ž˜์„œ ์ „์ฒด ์„ ํƒ์ž(* ์• ์Šคํ„ฐ๋ฆฌ์Šคํฌ)๊ฐ€ ์•„๋‹Œ body ํƒœ๊ทธ์— font-family์„ ์ฃผ์—ˆ๊ณ , reset css์— font-inherit์ด ์ ํžŒ ๋ถ€๋ถ„๊ณผ ๊ฐ€์ค‘์น˜ ์ ์ˆ˜๊ฐ€ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ›„์ž ์šฐ์„ ์˜ ์›์น™์œผ๋กœ ๋’ค์— ์ž‘์„ฑ๋œ body์˜ font-family๊ฐ€ ์ ์šฉ์ด ๋˜๊ณ , body์— ํฌํ•จ๋œ ํƒœ๊ทธ๋“ค์ด ์ด๋ฅผ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
์• ์Šคํ„ฐ๋ฆฌ์Šคํฌ์— ์ ์šฉ
body ํƒœ๊ทธ์— ์ ์šฉ

7. ์ถ”ํ›„ ํ”„๋กœ์ ํŠธ ๊ฐœ์„  ๊ณ„ํš

1) ๊ฐœ์„ ํ•  ์ 

โ€ข
API ํŒŒ์ผ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ (ex: ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…, ์ƒํ’ˆ๋“ฑ๋ก ๋“ฑ)
โ€ข
๋ณด์•ˆ๋ฌธ์ œ๋กœ ์ธํ•ด ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— accountname ๊ฐ’ ๋นผ๊ธฐ
โ€ข
์ค‘์ฒฉ ์‚ผํ•ญ์—ฐ์‚ฐ์ž ์ œ๊ฑฐ - ๊ฐ€๋…์„ฑ์— ์ข‹์ง€ ์•Š์€ ์ค‘์ฒฉ ์‚ผํ•ญ์—ฐ์‚ฐ์ž ์ฝ”๋“œ๋ฅผ if๋ฌธ์œผ๋กœ ๊ต์ฒดํ•˜๊ธฐ

2) ์ถ”๊ฐ€ ๊ธฐ๋Šฅ

โ€ข
์นดํ…Œ๊ณ ๋ฆฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ - ์ง€์—ญ๋ณ„ / ์ฃผ์ œ๋ณ„ (๋ฐ˜์ฐฌ๊ณต์œ  / ๊ณต๋™๊ตฌ๋งค / ๊ณต๋™๋ฐฐ๋‹ฌ ๋“ฑ)
โ€ข
์ƒํ’ˆ ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก ์‹œ โ€˜์œ ํ†ต๊ธฐํ•œโ€™ ๋˜๋Š” โ€˜๊ตฌ๋งค์ผ์žโ€™ ์ถ”๊ฐ€ํ•˜๊ธฐ
โ€ข
๋‹คํฌ๋ชจ๋“œ ๊ธฐ๋Šฅ ๋„์ž…
โ€ข
์ฑ„ํŒ…๊ธฐ๋Šฅ
โ€ข
๋ฆฌ๋•์Šค ๋“ฑ ์ƒํƒœ๊ด€๋ฆฌ ํˆด ๋„์ž…ํ•ด๋ณด๊ธฐ

8. ํ”„๋กœ์ ํŠธ ์†Œ๊ฐ

์„ ์€ํ˜œ
-ํŒ€ํ”„๋กœ์ ํŠธ ํ•˜๊ธฐ ์ „ useState ์กฐ์ฐจ ๋งŒ๋“ค์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด API ๋ช…์„ธ๋ฅผ ํ•ด์„ํ•˜๋ฉฐ ์„œ๋ฒ„์™€ ํ†ต์‹ ์„ ํ• ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ๋„ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๋˜ ์ œ๊ฐ€ ์ดํ•ด๋ฅผ ํ•œ ํ›„ ์ฝ”๋“œ๋ฅผ ์ œ ๊ฒƒ์œผ๋กœ ๋งŒ๋“ค์–ด ํšŒ๊ณ ์กฐ ์นœ๊ตฌ๋“ค์—๊ฒŒ โ€˜๋กœ๊ทธ์ธโ€™ ํŠน๊ฐ•์„ ํ–ˆ๋˜ ๊ทธ ์ˆœ๊ฐ„์„ ์•„์ง๋„ ์žŠ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฐ„ ๋ฐฐ์›Œ๋ณธ ๊ฒƒ์„ ์‹ค์ œ๋กœ ํ”„๋กœ์ ํŠธ์— ์ ์šฉ์„ ํ•˜๋‹ˆ ์ฝ”๋”ฉ์— ๋Œ€ํ•œ ํฅ๋ฏธ๊ฐ€ ๋†’์•„์กŒ๊ณ , ๋ฌด์ง€์„ฑ ํด๋ก ์ฝ”๋”ฉ์„ ํ•˜๋˜ ์Šต๊ด€์—์„œ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค~!!ย 
-์ฒซ ํ˜‘์—… ํ”„๋กœ์ ํŠธ ์˜€์ง€๋งŒ, ํŒ€์›๋“ค ๋ชจ๋‘ ์ž์‹ ์ด ์ž˜ํ•˜๋Š” ํŒŒํŠธ๋ฅผ ์ž์ง„ํ•ด์„œ ๋งก์€ ๋ถ€๋ถ„์„ ์ตœ์„ ์„ ๋‹ค ํ•˜๊ณ ์ž ํ–ˆ๊ธฐ์— ํŒ€์› ๊ฐ„์˜ ๋ถˆํ™” ์—†์ด ์ž˜ ๋งˆ๋ฌด๋ฆฌ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋”๋ถˆ์–ด, ์•„์ด์Šค๋ธŒ๋ ˆ์ดํ‚น ๋…ธ์…˜ ํด๋”๋ฅผ ํ†ตํ•ด ๋ถ€๋„๋Ÿฌ์šด ์˜๊ฒฌ๋„ ์ˆจ๊น€์—†์ด ๊ณต์œ ๋ฅผ ํ–ˆ๊ธฐ์— ์‚ฌ์†Œํ•œ ์˜คํ•ด์กฐ์ฐจ ์—†์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ž˜ ๋งˆ๋ฌด๋ฆฌ ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!
ํ•œ์œ ์ง„ - ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ณ  ๋ณด๋‚ด๋Š” ์ž‘์—…์„ ์ฒ˜์Œ์œผ๋กœ ํ•ด๋ณด์•˜๋Š”๋ฐ ์ด ๊ณผ์ •์†์—์„œ ์‹ค์ œ๋กœ ์—๋Ÿฌ๋ฅผ ์ง๋ฉดํ•˜๊ณ  ์ฝ˜์†”๋กœ ์ฐ์–ด๋ณด๋ฉด์„œ ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์ด ์งœ๋ฆฟํ–ˆ์Šต๋‹ˆ๋‹ค ํ”„๋กœ์ ํŠธ ์ด์ „์—๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ดํ•ด๋‚˜, ๋‘๋ ค์›€์ด ์žˆ์—ˆ๋‹ค๋ฉด ์ง€๊ธˆ์€ ๋‘๋ ค์›€๋ณด๋‹ค๋Š” ํฅ๋ฏธ๊ฐ€ ๋” ์ปค์ง„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ! ์ฒซ ํ˜‘์—… ํ”„๋กœ์ ํŠธ๋ผ ๋ถ€์กฑํ•œ์ ์ด ๋งŽ์•˜์ง€๋งŒ ํŒ€์›๋“ค๊ณผ ๊ณ ๋ฏผ์„ ๋‚˜๋ˆ„๊ณ  ํ•จ๊ป˜ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์ด ์ฆ๊ฒ๊ณ  ๊ณ ๋งˆ์› ์Šต๋‹ˆ๋‹ค. ํŒ€์›๋“ค์ด ์•„๋‹ˆ์—ˆ๋‹ค๋ฉด ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฌด์‚ฌํžˆ ์™„์ฃผํ•˜์ง€ ๋ชปํ–ˆ์„ ๊ฒƒ ๊ฐ™์•„์š” ! - ํŒ€์›๋“ค๊ณผ ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ์— eslint์™€ prettier ์„ธํŒ…์„ ์ง„ํ–‰ํ•˜์˜€๋Š”๋ฐ ์ดˆ๋ฐ˜์—๋Š” ๋ฆฐํŠธ์—์„œ ์žก์•„์ฃผ๋Š” ์˜ค๋ฅ˜๋“ค์ด ๋งŽ์•„์„œ ์•ฝ๊ฐ„์˜ ํ”ผ๋กœ๊ฐ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค~ ๊ทธ๋ ‡์ง€๋งŒ ์–ด๋–ค ๋ถ€๋ถ„์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  ์ฝ”๋“œ์˜ ์งˆ์ด ์ข‹์•„์กŒ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
๋ฐฉํ˜„์˜ - ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ํ•  ๋‹น์‹œ์—๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๋‚ฏ์„ค์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ๋ฅผ ๊ณต๋ถ€ํ•œ ์ดํ›„๋กœ ๋งŒ๋“ค๊ฒŒ๋œ ์ฒซ ํ˜‘์—… ํ”„๋กœ์ ํŠธ์ด๊ธฐ๋„ ํ–ˆ๊ณ  ๊นƒ์— ๋Œ€ํ•œ ๊ฒฝํ—˜๋„ ๋ถ€์กฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ์ €๋Ÿฐ ์ƒ๊ฐ์ด๋‚˜ ๊ฑฑ์ •๋„ ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฑฑ์ •ํ–ˆ๋˜ ๊ฒƒ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์ง์ ‘ ๋ถ€๋”ชํ˜€๋ณด๋‹ˆ ์–ด๋А์ˆœ๊ฐ„ ๊ฐœ๋ฐœ์— ์žฌ๋ฏธ๋ฅผ ๋А๋ผ๊ณ  ์žˆ๋Š” ์ œ ๋ชจ์Šต์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ง์„ ์งœ๊ณ , ๋จธ๋ฆฌ๋ฅผ ๋งž๋Œ€๊ณ  ๊ฐ™์ด ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ๋„ ํ•˜๊ณ , ์„œ๋กœ์˜ ์ฝ”๋“œ๋ฅผ ๋ฆฌ๋ทฐํ•˜๋Š” ๊ทธ๋Ÿฐ ๊ณผ์ • ์†์—์„œ ๋•Œ๋กœ๋Š” ์ง€์น˜๋„ ํ•˜๊ณ  ๋•Œ๋กœ๋Š” ๋ฒ…์ฐจ์˜ค๋ฅด๋Š” ์ˆœ๊ฐ„๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ˆœ๊ฐ„ ์ˆœ๊ฐ„๋“ค์ด ๋ชจ์—ฌ์„œ ๋ฆฌ์•กํŠธ, ๊นƒ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ˜‘์—…์— ๋Œ€ํ•œ ์ž์‹ ๊ฐ์„ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๊ณ , ๊ฐœ๋ฐœ์— ์žฌ๋ฏธ๋„ ๋А๋ผ๋ฉฐ ์กฐ๊ธˆ์€ ์„ฑ์žฅํ•˜๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌด์‚ฌํžˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๊ฒŒ ๋˜์–ด ๋ฟŒ๋“ฏํ•˜๊ณ , ๊ฐ์ž์˜ ์ž๋ฆฌ์—์„œ ์ตœ์„ ์„ ๋‹คํ•ด์ค€ ํŒ€์›๋“ค์—๊ฒŒ ๊ฐ์‚ฌํ•˜๋‹ค๊ณ  ์ „ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค!
์–‘์ง€์„ฑ - ์ฝ”๋”ฉ์€ ๋ฌผ๋ก  ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ธํŒ…, ๊ธฐํš๋…ผ์˜ ๋“ฑ๋“ฑ..์–ด๋Аํ•˜๋‚˜ ์‰ฌ์šด ๊ฒƒ ์—†๋Š” ํ”„๋กœ์ ํŠธ์˜€์ง€๋งŒ, ๊ทธ ๋งŒํผ ๋งŽ์ด ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝํ—˜์ด์˜€์Šต๋‹ˆ๋‹ค. ๋ถˆ๊ณผ ํ•œ๋‹ฌ์ „์—๋Š” ์ฝ”๋“œํ•˜๋‚˜ ์น ๋•Œ๋งˆ๋‹ค ์ฉ”์ฉ” ๋งค๊ณ , ๋‚ด๊ฐ€ ๊ฐ€๋Šฅํ• ๊นŒ ์˜์‹ฌํ–ˆ์—ˆ๋Š”๋ฐ ์ง€๊ธˆ์€ ๊ทธ ์ˆœ๊ฐ„๋„ ๋ฏธํ™”๋œ ์ถ”์–ต์ฒ˜๋Ÿผ โ€˜๊ทธ๋žฌ์—ˆ์ง€..โ€™ ํ•  ์ •๋„๋กœ ์‹œ๊ฐ„์ด ๋นจ๋ฆฌ ์ง€๋‚˜๊ฐ”๊ณ  ์„ฑ์žฅ ํ–ˆ์Œ์„ ๋А๋‚๋‹ˆ๋‹ค. ๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์‹œ๋„ํ•ด๋ณด์ง€๋Š” ๋ชปํ–ˆ์ง€๋งŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์ฃผํ–ˆ๋‹ค๋Š” ๋งŒ์กฑ๊ฐ์— ์ž์‹ ๊ฐ๋„ ์–ป์–ด๊ฐˆ ์ˆ˜ ์žˆ์–ด ์ •๋ง ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ํŒ€์žฅ์œผ๋กœ์„œ ๋งŽ์ด ๋ชจ์ž๋ž€ ์ €์—๊ฒŒ ํŒ€์žฅ ๋Œ€์šฐ ํ•ด์ฃผ๊ณ  ์‘์›ํ•ด์ค€ 25์กฐ ํŒ€์›๋“ค ๋•๋ถ„์— ํŒ€์›๋“ค๊ณผ ํ˜„์ƒ์—์„œ๋„ conflict ์—†์ด ์˜คํžˆ๋ ค ์นœํ•ด์ง€๊ณ  ๋งˆ๋ฌด๋ฆฌ ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.