Spring Boot ๊ธฐ๋ฐ์ ์ฝ๋ ๊ฐ์ ๊ณผ์
์ํํ ๊ณผ์ ๋ฐ ํด๊ฒฐ ๊ณผ์
Lv.0 - ํ๊ฒฝ ์ค์ ๋ฐ ์ธํ๋ผ ๊ตฌ์ถ ์ค์ ํ์ผ(application.yml) ์๋ฌ ํด๊ฒฐ: resources ํด๋ ๋๋ฝ์ผ๋ก ์ธํ ๊ตฌ๋ ์คํจ๋ฅผ ํด๋ ์์ฑ ๋ฐ Resources Root ๋งํน์ผ๋ก ํด๊ฒฐ.
DB ์ฐ๋: Docker ํ๊ฒฝ(MySQL 3307 ํฌํธ)์ ๋ง์ถ ๋ฐ์ดํฐ ์์ค ์ค์ ๋ฐ ์คํค๋ง ์์ฑ.
Lv.1 - ArgumentResolver ๋ฑ๋ก ๋ฌธ์ : @Auth ์ด๋ ธํ ์ด์ ๋ก์ง์ด ์์ด๋ ์ปจํธ๋กค๋ฌ์์ ์ ์ ์๋ํ์ง ์์.
์์ธ: WebMvcConfigurer ๋ฑ๋ก ์์ด๋ Spring์ด Resolver์ ์กด์ฌ๋ฅผ ์ ์ ์์.
ํด๊ฒฐ: WebConfig ํด๋์ค๋ฅผ ์์ฑํ์ฌ addArgumentResolvers ๋ฉ์๋์ ์ง์ ๋ฑ๋ก.
Lv.2 - ์ฝ๋ ํ์ง ๊ฐ์ (Refactoring) Early Return ์ ์ฉ: ์ค๋ณต ์ฒดํฌ ๋ก์ง์ ์ต์๋จ์ผ๋ก ์ฎ๊ฒจ ๋ถํ์ํ passwordEncoder.encode() ์คํ ๋ฐฉ์ง.
Guard Clause ์ ์ฉ: throw ๋ฌธ ์ดํ์ ๋ถํ์ํ else ๋ธ๋ก์ ์ ๊ฑฐํ์ฌ ์ฝ๋ ๊ฐ๋ ์ฑ ํฅ์.
Validation ์ฑ ์ ์ด๋: ์๋น์ค ๋ ์ด์ด์ ๊ฒ์ฆ ๋ก์ง์ DTO(@Valid, @Pattern)๋ก ์ด๋์์ผ ์ ์ง๋ณด์์ฑ ๊ฐํ.
Lv.3 - N+1 ๋ฌธ์ ํด๊ฒฐ ์ฑ๋ฅ ์ต์ ํ: Todo ์กฐํ ์ ๋ฐ์ํ๋ N+1 ๋ฌธ์ ๋ฅผ @EntityGraph๋ฅผ ์ฌ์ฉํ์ฌ 1๋ฒ์ ์ฟผ๋ฆฌ๋ก ์ต์ ํ.
ํ์ต ํฌ์ธํธ: ๊ธฐ๋ณธ๊ฐ์ LAZY๋ก ์ ์งํ๋, ํ์ํ ์ํฉ์์๋ง ํ๋ฒ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ๊ฐ์ฅ ํจ์จ์ ์์ ์ดํด.
Lv.4 - ํ ์คํธ ์ฝ๋ ๊ฐ์ ํ ์คํธ ์ ํฉ์ฑ ํ๋ณด: ์ค์ ์๋น์ค์ ํ ์คํธ ์ฝ๋ ๊ฐ์ ์์ธ ํ์ ๋ฐ ๋ฉ์์ง ๋ถ์ผ์น ํด๊ฒฐ.
์์ ์ฑ ๊ฐํ: saveManager() ๋ก์ง ๋ด ์ ์ null ์ฒดํฌ ๊ฐ๋ ์ ์ ์ถ๊ฐํ์ฌ NullPointerException ๋ฐฉ์ง.
๊ธฐ์ ์คํ Language: Java 17
Framework: Spring Boot 3.3.3
Persistence: Spring Data JPA
Build Tool: Gradle
Database: MySQL
Authentication: JWT
Infrastructure: Docker