[Project] Billim / ์ค๊ณ ๋ฌผํ ๋์ฌ ์๋น์ค ํ ํ๋ก์ ํธ ํ๊ธฐ
by rlaehddnd0422DNS ์ค์ ๊น์ง ๋ง์น ํ ์ฐ๋ ค ํ์ผ๋ ์๊ฐ๋ณด๋ค ํ๋ก์ ํธ๊ฐ ๊ธธ์ด์ ธ ๋จผ์ ์ผ์ฐ์ด ๋๋ ๋ฐฑ์๋ ํํธ์ ๋ํ ํ๊ธฐ๋ฅผ ๋จผ์ ๋จ๊ฒจ๋ณด๋ ค ํ๋ค.
๊ธฐํ ๋ฐฐ๊ฒฝ
Spring ๊ณต๋ถ๋ฅผ ์์ํ ์ง 10๊ฐ์ ์ ๋๊ฐ ์ง๋ฌ๋ค. ๋๋ ๋ด๊ฐ ์ดํดํ ๊ฒ๋ค์ ์ ๋ฆฌํ์ง ์๊ฑฐ๋ ์ ์ฉ ํด๋ณด์ง ์์ผ๋ฉด ๊ธ๋ฐฉ ์์ด๋ฒ๋ฆฌ๋ ํ์ ์ง๊ธ๊น์ง ๋ฐฐ์ด ๊ฒ๋ค์ ๋ชจ๋ ์ ์ฉ์์ผ๋ณด๊ฒ ๋ค๋ ์ทจ์ง๋ก ํ๋ก์ ํธ๋ฅผ ์งํํด๋ณด๊ณ ์ถ์๋ค. ๋ง์นจ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ตฌ์ค์ ์น๊ตฌ๋ ๋์ ๋ป์ด ๋น์ทํ์ฌ ํจ๊ป ํ๋ก์ ํธ์ ์ฐธ์ฌํ๊ฒ ๋์๋ค. ์ฃผ์ ์ ๋ํ ๊ณ ๋ฏผ์ ํ๋ ๋์ค, ์ค๊ณ ๋ฌผํ์ ์ฌ๊ณ ํ๋ '๋น๊ทผ๋ง์ผ'์์ ์์ด๋์ด๋ฅผ ์ป์ด ์ค๊ณ ๋ฌผํ์ ๋์ฌํด์ฃผ๋ ํ๋ซํผ์ ๋ง๋ค์ด ๋ณด๋ฉด ์ข๊ฒ ๋ค๋ผ๋ ์์ด๋์ด์์ ์์ํด ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ์ค๊ณ ๋ฌผํ ๋์ฌ ์๋น์ค ๊ฐ๋ฐ๋ก ์ฃผ์ ๋ฅผ ์ก๊ณ ์งํํ์๋ค.
๊ฐ๋ฐ ํ๊ฒฝ
- Language : Java 11, Javascript
- Framework
- BE : Spring Boot 2.7.13
- FE : React 18.2.0
- DataBase : MySQL
- ERD Diagram : ERDCloud
- IDE : IntelliJ, MySQL WorkBench
- API Docs : Swagger, Notion
- ํ์ ํด : GitHub, Notion
- ์ธํ๋ผ : AWS(EC2, S3)
๊ฐ๋ฐ ๊ธฐ๊ฐ : 2023/06/28 ~ 2023/08/16
๊ฐ๋ฐ ์ธ์
- Front-End (2)
- Back-End (2)
ERD Diagram
ํ๋ก์ ํธ ํ๊ธฐ
ํ์ ์ ํตํ ๊ธฐํ
- API ๊ฐ๋ฐ์ ๋์ park0jae ๋์ด ํ์ด ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์งํํ๋ค. ๋ด๊ฐ ์์ฑํ ์ฝ๋์, ํํธ๋๊ฐ ์์ฑํ ์ฝ๋์ ๋ํด ์๋ก ์ฆ๊ฐ์ ์ผ๋ก ํผ๋๋ฐฑํ๋ฉฐ ์ฝ๋๋ฅผ ๋ ์ข์ ๊ตฌ์กฐ๋ก ๋ฐ๊พผ๋ค๊ฑฐ๋, ์์ฃผ ์ฌ์ฉํ๋ ๋ฉ์๋ ๋ถ๋ฆฌํ๊ณ ํ๋์ ๋ฉ์๋๊ฐ ์ํํ๋ ์ญํ ์ด ๋ง์ ๋ ๋ฉ์๋๋ฅผ ๋ถ๋ฆฌํด์ฃผ๋ ๋ฑ ์ฝ๋๋ฅผ ์ฝ๊ธฐ ์ข๊ฒ ์ง๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์๊ฐํ ์ ์์๋ค. ๊ฐ์์ ๋งก์ ๋ฐ ์ฑ ์์ ๋ถ๋ฆฌํ๊ธฐ ์ํด Notion์ ์ฒ์ ์ฌ์ฉํด๋ดค๋๋ฐ, ์งํ ์ํฉ์ด๋ ๋ฆฌํํ ๋ง์ผํ ๋ถ๋ถ๋ค์ ํผ๋๋ฐฑ์ ๋ฌธ์ํํ๋ ํ๋ก์ ํธ๊ฐ ํจ์จ์ ์ผ๋ก ์งํ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ ์ธ์๋ ๋ฒ๊ทธ๋ฅผ ๊ณ ์น ๋ ๋ด๊ฐ ์๊ฐํด๋ด์ง ๋ชปํ๋ ๋ถ๋ถ๋ค์ ํํธ๋๊ฐ ๊ธฐ๋งํ ํด๊ฒฐ์ฑ ์ ์ฐพ์์์ ๋, ์ ์ด๋์ ํ์ ์ด ์ค์ํ๊ตฌ๋ ํ๊ณ ๋๊ผ๋ ๊ฒ ๊ฐ๋ค. ํ์ด ํ๋ก๊ทธ๋๋ฐ ๋ํ ์์ ํ์ ์ด๋ผ ๋ณผ ์ ์์ผ๋, ํ์ ์ ํตํ ์ปค๋ฎค๋์ผ์ด์ ์ ๊ฒฝํ์ ์ฒดํํด๋ดค๋ค๊ณ ํ ์ ์๊ฒ ๋ค. ์ด์ฉ๋ฉด ๊ณต๋ถ ์ด์์ ๊ฒฝํ์ ์ป์ ์ ์๋ ๊ธฐํ๊ฐ ๋์๋ค๊ณ ๋๊ปด, ์์ผ๋ก ์์ฃผ ๋ง์ด ํ์ ์ ํด๋ณด๊ณ ์ถ๋ค.
์๋ฆฌ์ ๋ํ ์ดํด์ ์ ์ฉ
- Spring ๊ธฐ๋ฐ์ ๋ณด์์ ๋ด๋นํ๋ ํ๋ ์์ํฌ์ธ Spring Security ์ฌ์ฉํ๋ฉด์ JWT ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌํ๋ ๋ก์ง์์ Security Filter๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ๋์ํ๋์ง์ ๋ํ ์๋ฆฌ๋ฅผ ๊น๊ฒ ๊ณต๋ถํ ์ ์์๋ค. ์ ์ฒด์ ์ธ ์ธ์ฆ๊ด๋ จ ์ํคํ ์ณ์ ๋ํ ์ดํด๋ฅผ ์ ์์ ์ผ๋ก ์ก๊ณ ์งํํ๋, ์ฝ๋ ์์ฑ๊ณผ ์ฐธ์กฐ๋ฅผ ํ ๋ ๋ง์ด ๋์์ด ๋์๋ ๊ฒ ๊ฐ๋ค.
public abstract class Guard {
public final boolean check(Long id){
return SecurityUtil.isAuthenticated() && hasAuthority(id);
}
private boolean hasAuthority(Long id){
return SecurityUtil.extractMemberRolesFromContext().contains(RoleType.ADMIN) || isResourceOwner(id);
}
abstract protected boolean isResourceOwner(Long id);
}
- abstract class์ ๊ฐ๋ ๋ง ์๊ณ ์ค์ ์ ์ผ๋ก ์ฌ์ฉํด ๋ณธ ์ ์ ์ฒ์์ด์๋ค. ์ถ์ํด๋์ค๋ฅผ ์ธ์ ์ฐ๋์ง ๋จธ๋ฆฌ๋ก๋ ์ดํดํ์ง๋ง ์ง๊ด์ ์ผ๋ก ์๋ฟ์ง๋ ์์์๋ค. ์ด๋ฒ์ ๋ฆฌ์์ค์ Owner์ด๊ฑฐ๋ ๋๋ ๊ถํ์ด ADMIN์ธ์ง ๊ฒ์ฌํ๋ ํด๋์ค๋ฅผ ๋ง๋ค ๋, ์ด ๋ ์ด๋ค ๋ฆฌ์์ค์ ๋ํ ๊ฒ์ฌ๋ฅผ ํ ๊ฒ ์ธ์ง์ ์์ฑ ํ๊ธฐ ์ , ์ถ์ ํด๋์ค์ ๊ณตํต ๋ถ๋ชจ๋ค์ ํํ(check(), hasAuthority()) ํ๊ณ , ์์์ ํตํด ์ฌ๋ฌ Guard ํด๋์ค๋ฅผ ํ์ฅํด๋๊ฐ์ผ๋ก์จ ์์ Guard ์ถ์ ํด๋์ค์ ํ์ ํด๋์ค (PostGuard, CommentGuard) ๊ฐ์ ์๋ฏธ์๋ ์ฐ๊ด๊ด๊ณ๋ฅผ ๊ตฌ์ถํ ์ ์์๋ค.
์ด๊ธฐ ์ค๊ณ์ ์ค์์ฑ
- ์๊ตฌ์ฌํญ ์์ฑ๋ถํฐ ERD ์ค๊ณ๊น์ง ๊ทธ๋ฆฌ๊ณ ์ต์ข ์ ์ผ๋ก ๋ฐฐํฌ๊น์ง ํด๋ณด์ง ์์ ๊ฒ๋ค์ ํด๋ณด๋ฉด์ ๋ฐฐ์ธ ์ ์์๋ค. ERD ์ค๊ณ๋ ์ฒ์ ๋จ๊ณ์์๋ ๋ง์ฐํ ์ํฐํฐ๋ค์ ๋์ดํด๋๊ณ ์ด๋ ๊ฒ ์ ๋ ๊ฒ ์ฎ์ผ๋ฉด ๋์ง ์์๊น๋ฉฐ ์ฝ๊ฒ ์๊ฐํ๋๋ฐ ์ธ๋ํค ์ ์ฝ์กฐ๊ฑด์ด๋ 1:N ๋งคํ์ผ๋ก ์ธํ N+1๋ฌธ์ ์ ์ง๋ฉดํ๊ฒ ๋์๋ค. ์ผ๋๋ค ๋งคํ์ ์ง์ํ๊ณ , ํ์น์กฐ์ธํ๋ ์๋ฃจ์ ๊ณผ ํจ๊ป ERD๋ ๊ณ์ ์์ ํด๊ฐ๋ฉด์ ํ๋ก์ ํธ๊ฐ ์งํ๋์๋ค. ์ด๊ธฐ ERD ์ค๊ณ๋ฅผ ์ ํด๋๋๊ฒ์ด ๋งค์ฐ๋งค์ฐ ์ค์ํ ๊ฒ ๊ฐ๋ค.
- ๋ฐฐํฌ์ ๊ฒฝ์ฐ์๋ ์์ ๋ฌธ์ธํ์ด์๋๋ฐ ์น๊ตฌ์ ๋์์ ๋ง์ด ๋ฐ์๋ค. ์ธํ๋ผ์ ์ง์์ด ์ ๋ฌดํด์ ์ฅ๋ฒฝ์ด ๊ฝค ๋๋ค๊ณ ์๊ฐํ๋๋ฐ ๋ถ๋ชํ๋ณด๋ ์๊ฐ๋ณด๋ค๋ ์ด๋ ต์ง ์์๋ค. ๋ด๊ฐ ํด๋ณด์ง ์์ ๊ฒ, ์๋ก์ด ๊ฒ๋ค์ ๋ฐ์๋๋ฆฌ๋ ๊ฒ์ ๋ํ ๋ง์ฐํ ๋๋ ค์์ด ์์๋๋ฐ, ์๊ฐํด๋ณด๋ ๊ทธ๋ฅ ๋น์์ ์ฃผ๋ณ์์ ์ข ๊ฐํ๋ ๋๋ ๋ฉ๋ฌ์ ๊ณต๋ถํ๊ธฐ ์ซ์๋ ๊ฒ ์๋๊น ์ถ๊ธฐ๋ ํ๋ค.
์์ผ๋ก์ ๋ฐฉํฅ์ฑ
- ๋ถ์กฑํ ๋ถ๋ถ๋ค์ด ๋ฌด์์ธ์ง ํ์ ํ๊ณ ์์ผ๋ก ์ด๋ป๊ฒ ๋์๊ฐ์ผ ํ ์ง์ ๋ํด ๋ฐฉํฅ์ ์ก์ ์ ์์๋ค.
- ์๋ ๋๋ ์์ด ์น๊ตฌ์๊ฒ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์์ฒญํ๋ค. ๋ด๊ฐ ๋ณด์ง ๋ชปํ๊ณ ์๋ ๋ถ๋ถ๋ค์ ๋ ์ ์ ์ฅ์์ ๋ฃ๊ณ ์ถ์๋ค. ์ค์ ๋ก ์น๊ตฌ์ ํผ๋๋ฐฑ์ ๋ค์ผ๋ฉฐ ๋ฐฐ์ธ ์ ์ด ๋ง์๊ณ , ์์ฑ์์ธ ๋ด ์ ์ฅ์์๋ ์ด๊ฒ ์ต์ ์ด๋ผ๊ณ ์๊ฐํ๋ ๋ถ๋ถ๋ค์ ์ต์ ์ด ์๋์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค. ๋ฉ์๋/URI ๋ค์ด๋ฐ, ๊ณ์ธต ๋ถ๋ฆฌ์ ํด๋ฆฐ ์ฝ๋ ์ฌ์ด์์ ์ค๋ ๋๋ ๋ง๋, ์ฑ๋ฅ ์ต์ ํ์ ๊ฐ๋ ์ฑ์์ ์ฌ์ด์์ ์ค๋ ๋๋ ๋ง๋ค์ ์์ง๋ ์ด๋ ค์ด ๊ฒ ๊ฐ๋ค. ๊ฐ๋ ์ฑ ๋์ ์ฝ๋ ์์ฑ ๋ฐฉ๋ฒ์ ๋ํด ๊ณ ๋ฏผํด๋ด์ผ ํ๋ ์์ ์ธ ๊ฒ ๊ฐ๋ค. ( ์ผํ๊ณ ์๋ ์น๊ตฌ์ ์ฅ์์๋ ๊ฝค ๊ท์ฐฎ์ ์ผ์ผ์ ์๋๋ฐ ํญ์ ํ์พํ ๊ทธ๋ฆฌ๊ณ ์ฌ์ง์ด ์ด ๊ธ์ ์์ฑํ๊ณ ์๋ ์ง๊ธ๋ ์ฝ๋๋ฅผ ๋ฆฌ๋ทฐํด์ฃผ๊ณ ๋๋น์๋ฌ๊ฐ ์น๊ตฌ์๊ฒ ๊ณ ๋ง์์ ๋๋๋ค )
- Java ( ํนํ ๊ฐ์ฒด์งํฅ์ ์ธ ์ฌ๊ณ ๋ ฅ ) ๋ ๊น๊ฒ ๊ณต๋ถํ๊ธฐ : ๊ฐ์ฒด, ํด๋์ค, ์์, ๋คํ์ฑ, ์บก์ํ ๊ฐ์ ๊ฐ์ฒด ์งํฅ์ ์ธ '๊ฐ๋ '๊ณผ ๊ฐ์ฒด์งํฅ์ ์ธ '์ฌ๊ณ ๋ ฅ'์ ์ ํ ๋ค๋ฅธ ์ด์ผ๊ธฐ์ธ ๊ฒ ๊ฐ๋ค. ๊ฐ๋ฐ์์ ๊ฐ์ฒด ์งํฅ '๊ฐ๋ '์ ๋จ์ OOP์์ ์ฌ์ฉ๋๋ ๋๊ตฌ์ผ ๋ฟ, ๊ทธ ์์ฒด์ ์ง์คํ๊ธฐ ๋ณด๋ค ์ด์ ๋ ๊ฐ์ฒด์งํฅ์ ์ธ ์ฌ๊ณ ๋ ฅ์ ๊ธธ๋ฌ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณ ๋ฏผํ๊ณ ์๊ฐํด๋ด์ผ ํ ๊ฒ ๊ฐ๋ค.
- Github ์ฌ์ฉ๋ฒ ์์ง : ๊นํ๋ธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์ต์์น ์์, branch๋ฅผ ๋ถ๋ฆฌํ๊ณ ์์ ํ๋ ๊ฒ์ ์ ์ํ๊ธฐ๊ฐ ์ด๋ ค์ ๋ค. branch ํ๋๋ง ํ์ ์์ ํ๊ณ main์ผ๋ก mergeํ๋ ๋ฐฉ์์ผ๋ก ์งํํ๋๋ฐ ์ด๋ก ์ธํด merge ๊ณผ์ ์์ ์ถฉ๋๋ ์์ฃผ ๋ฐ์ํ์ฌ ์ฝ๋๊ฐ ๊ผฌ์ด๋ ์ฌํ๊ฐ ์ข ์ข ๋ฐ์ํ๋ค.
์ด๋ค๋๋ ๊ฒ๋ค๋ ์์ง๋ง ํด๋ด์ง ๋ชปํ๊ฑฐ๋, ์งํํ๋ฉด์ ์์ฌ์ ๋ ๋ถ๋ถ๋ค๋ ๋ง๋ค.
- ๋ํ์ ์ผ๋ก STOMP, SockJS๋ฅผ ์ฌ์ฉํด์ ํด๋ผ์ด์ธํธ๊ฐ ์ค์๊ฐ ์ฑํ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณด๋ ค ํ์๋ค. ๋จ์ ์น์์ผ์ ์ฌ์ฉํด ์ฑํ ๋ฐฉ์ ๊ตฌ์ฑํ๋ ๊ฒ๊น์ง๋ ์ด๋ ค์์ด ์์์ง๋ง, STOMP๋ฅผ ์ ์ฉํด์ ์ฌ๋ฌ ์ฑํ ๋ฐฉ์ ๊ตฌ์ฑํ ๋ ์ด๋ ค์์ ๊ฒช์๋ค. ์ํ๋ฆฌํฐ๊น์ง ๊ณ ๋ คํด์ผ ํ์๊ธฐ๋ ํ๊ณ , ๋น์ ํ ์คํธ ์ฝ๋ ์์ฑ๊ณผ ๊ธฐ์กด ์ฝ๋ ๋ฆฌํํ ๋ง์ ์ค์ ์ ์ผ๋ก ํ๊ณ ์์ ๋๋ผ ํฌ๊ฒ ์ ๊ฒฝ์ ๋ชป์ฐ๊ณ ํ์ง๋ถ์ง ๋์ด๊ฐ์๋ ๊ฒ ๊ฐ๋ค. ๋ค์์ ๊ธฐํ๊ฐ ๋๋ค๋ฉด ํด๋ณด๋๋ก ํ์.
๊ผผ๊ผผํ ์ ๊ฒฝ์จ์ผ ํ ๊ฒ๋ค
- ํ๋ก ํธ์์ ์ปค๋ฎค๋์ผ์ด์
- CORS ๋์ : CORS ์ค์ ์ ๋ถ๋ช ์ ํด์ค ๊ฒ ๊ฐ์์๋, CORS๊ฐ ๋ฐ์ํ ๋๊ฐ ์์๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก Security ํํฐ์๋ CORS ์ค์ ์ ์ ์ฉ์์ผ์ฃผ์ด์ผ ํ๋๋ฐ, ๊ทธ๋ ์ง ์์ ๋ฐ์ํ ๋ฌธ์ ์๋ค.
- API Docs : Swagger๋ฅผ ์ด์ฉํ์ง๋ง ํ๋ก ํธ๋จ์์ ์ฝ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค์ด์ ธ ์์ด, ์ง์ Notion์ ์์ฑํ๋ค. ์ด ๊ณผ์ ์ด ๊ดด๋ก์ ๋ถ๋ถ๋ถ๋ถ ๊ผผ๊ผผํ ์์ฑํ์ง ๋ชปํ ๋ถ๋ถ๋ค์ด ์ข ์ข ์์ด ํ๋ก ํธ์๊ฒ ๋ฏธ์ํ ๋๊ฐ ์๋ค. ๊ท์ฐฎ๋๋ผ๋ ๋์น๋ ๋ถ๋ถ์์ด ์์ฑํ๋๋ก ์ ๊ฒฝ์จ์ผ๊ฒ ๋ค.
- S3์ ํ์ผ ์์ค๋ฅผ ์ด๋ป๊ฒ ๋๊ฒจ์ค ๊ฒ์ธ๊ฐ์ ๋ํ ๊ณ ๋ฏผ : ๋จํธ์ ์ผ๋ก S3 ๋ฒํท์ ์ฌ๋ผ๊ฐ ์ด๋ฏธ์ง์ URL์ ๋ฆฌํดํ๋ ๋ฐฉ์์ ์ฌ์ฉํ์ง๋ง, ํ์ผ์ path๊ฐ ์์ค์ฝ๋ ๋ด์ ํ๋์ฝ๋ฉ์ผ๋ก ์์ฑ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ณด์ ์ ์ข์ง ์์ ๋ณด์ธ๋ค.
- ์ฑ๋ฅ์ ๋ํ ๊ณ ๋ฏผ : ์ด๋ป๊ฒ ์ฟผ๋ฆฌ๋ฅผ ์ง์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ ํ์๋ฅผ ์ค์ผ ์ ์์ ์ง ๊ณ ๋ฏผํด๋ด์ผ ํ ๊ฒ ๊ฐ๋ค.
- ์ธ๋ฑ์ค๋ฅผ ์ค์ ํด ์กฐํ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๋์ด๋ฉฐ ๋น๊ตํด๋ด์ผ๊ฒ ๋ค.
- N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๋งํ ์ฝ๋๊ฐ ๊ฝค ์กด์ฌ
- ๋ฌธ์ ๊ฐ ์๊ฒจ์ ํด๊ฒฐ์ฑ ์ ์ฐพ์๋ค๋ฉด ๊ธฐ๋กํ๋ ์ต๊ด์ ๋จ๊ธฐ์.
ํ ์คํธ ์ฝ๋ ์์ฑ์ ์ค์์ฑ
- ๋ ํ ์คํธ ์ฝ๋ ์์ฑ์ ์์ง๋ ์ด๋ ต๋ค. ์์ฑ ์์ฒด์ ์๊ฐ๋ ์ค๋๊ฑธ๋ฆด ๋ฟ๋๋ฌ, ์๋ฒ์์๋ ์ ์๋ํ๋ ์ฝ๋๊ฐ ํ ์คํธ ์ฝ๋๋ก๋ ๋์๊ฐ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ํ ์คํธ ์ฝ๋๊ฐ ์๋ชป๋๋์ง, ๋๋ ๋ฉ์ธ ์ฝ๋์ ์จ์ ๋ฌธ์ ๋ ๋ฒ๊ทธ๊ฐ ์์ ํ๋ฅ ์ด ๋์๋ค. ๋ฒ์ธ๋ก ์๊ตฌ์ฌํญ ๋ณ๊ฒฝ์ผ๋ก ๋ฉ์ธ์ฝ๋๊ฐ ๋ฐ๋๋ฉด ํ ์ฝ๋ฅผ ๋ฆฌํํด์ผ ํ๋ ํฐ ๊ณจ์นซ๊ฑฐ๋ฆฌ์๋ค.
- ์ผ๋จ ์ ์ค์ํ์ง ๋ชจ๋ฅธ์ฑ๋ก ํ ์คํธ ์ฝ๋๋ ๋์๊ฐ๋๋ก ์์ฑ์ ํด๋์์๋ค. ํ๋์ ๋ฉ์๋๋ฅผ ๋ง๋ค๋ฉด ์๋์ ์ผ๋ก ์์ฑํด์ผํ๋ ํ ์คํธ์ฝ๋๋ฅผ ๋ฏธ๋ค๋ฏธ๋ค ๋ง์ง๋ง์ ์์ฑํ๋ คํ๋ ์ฃฝ์ ๋ง์ด์๋ค(๋๋ถ๋ถ ๋ด๊ฐ์๋ ํํธ๋๊ฐ ์์ฑํ๊ธดํ์ง๋ง์๋). ์ธ์ ์จ๋จน์์ง๋ ๋ชจ๋ฅด๋ ํ ์คํธ์ฝ๋๋ ์ค๋ ์ ์์ฑํ ๋ฉ์ธ์ฝ๋๊ฐ ์ด๋ป๊ฒ ๋์๊ฐ๋์ง ํ์ ํ ๋ ๋์ ๋ณด์๋ค. ํ ์คํธ ์ฝ๋๋ฅผ ์คํํ๋ฉฐ ์ ์ฒด์ ์ธ ๋ก์ง์ ๋ค์ ํ์ธํ๊ณ , ๊ตฌํํด๋์ ๋ถ๋ถ๋ค์ด ์ ์์ ์ผ๋ก ๋์ํ๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค. ์์ง ๋ด๊ฐ ํ ์คํธ ์ฝ๋์ ๋ชธ์ผ๋ก ์ง์ ๋๋ ๋ฐ๋ ์ฌ๊ธฐ๊น์ง์ธ๋ฐ, ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ์ ์ง๋ ํ ์คํธ ์ฝ๋๊ฐ ๋น์ ๋ณผ ๊ฒ์ด๋ผ ์๊ฐํ๋ค. ํ ์คํธ ์ฝ๋ ์(๊น๋, ์ฝ๊ธฐ์ข๊ฒ) ์ง๋ ๋ฒ์ ๋ฐฐ์๋์ด์ผ๊ฒ ๋ค.
๋ง์น๋ฉฐ
- ํดํํ์ง ํ ํ๊ธฐ๊ฐ ์ง๋ฌ๋ค. ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋๊ณ ์ถ์ด Spring์ ์์ํ์ง๋ 10๊ฐ์ ์ ๋๊ฐ ์ง๋ ์์ ์ด๋ค. ํ์ฌ๋ ์คํ๋ง์ ์ ๊น ๋ค๋กํ๊ณ ์กฐ๋ง๊ฐ ๋ค๊ฐ์ฌ ์ฐ์ํํ ํฌ์ฝ์ค ์ง์์ ์์ Java ๋ฌธ๋ฒ๊ณผ ๊ฐ๋ ๋ค์ ์ง์คํ๊ณ ์๋ค. ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ๋๋ผ์ง๋ง, ์ด์ฌํ + ์ ํ๋ ์ฌ๋๋ค์ด ์ฐธ ๋ง์ ๊ฒ ๊ฐ๋ค๊ณ ๋๋ผ๊ณ , ๋์ ๋ถ์กฑํจ๊ณผ ๋ฌด์ง๋ฅผ ๋๋ ๋๊ฐ ๋ง๋ค. ๊ฑฐ๊ธฐ์๋ค๊ฐ ๋๋ ๋ฌด์ธ๊ฐ๋ฅผ ๋ฐฐ์ธ ๋ ์๋ฌธ์ ์ด ์๊ธฐ๋ฉด ์์ ์๋ฌธ์ผ์ง๋ผ๋ ์ผ๋จ ํจ์คํ๊ณ ๋์ด๊ฐ์ง ๋ชปํ๋ ๋ปฃ๋ปฃํ ์ ์ฐ์ฑ ํ์ ๋ฐฐ์์ ์๋๊ฐ ๋๋ฆด ๋๊ฐ ๋ง๋ค. ํ์ง๋ง ์ด์ฉ๋ฉด ๋๋ฆฐ ๋๋ถ์ ์ง์น์ง ์๊ณ ์์ผ๋ก ๋์๊ฐ ์ ์๋ ๊ฒ ๊ฐ๊ธฐ๋ ํ๋ค. ์ด ๊พธ์คํจ์ผ๋ก ๊ณ์ ๋ฐฐ์ฐ๋ฉฐ ์ฑ์ฅํ์ผ๋ฉด ์ข๊ฒ ๋ค.
์์ค์ฝ๋ ๋งํฌ
์์ง์ ์ง์ ๋ถํ ์ฝ๋๊ฐ ์กฐ๊ธ์ฉ ๋จ์์์ด ์ถํ์ ์ต์ข ๋ฐฐํฌ๊น์ง ์๋ฃ๋๋ฉด ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ํ๋ฉฐ, ์งํ๊ณผ์ ํด์จ ๊ณผ์ ๋ค์ ์ธ๋ถ์ ์ผ๋ก ๊ธฐ๋กํด๋ณผ ์์ ์ด๋ค.
'๐ Etc > Rev' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422