1๏ธโฃ ๊ฐ์
๐ ์์คํ ํ๊ฒฝ
Java: JDK 17.0.1
Framework: Spring Boot 3.4.4
Build Tool: Gradle
IDE: IntelliJ IDEA
๐ GitHub ๋งํฌ & Read ME
https://github.com/222eunji/scheduleDevelop
2๏ธโฃ ๊ณผ์ ์ค๋ช
๐ ์๊ตฌ์ฌํญ
๋ชฉํ1: JPA๋ฅผ ํ์ฉํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ด๋ฆฌ
๋ชฉํ2: Cookie/Session์ ํ์ฉํ ์ธ์ฆ/์ธ๊ฐ
๋ชฉํ3: ๊ธฐ๋ณธ์ ์ธ ๋ณด์ ๊ฐ๋ ๊ณผ ์ธ์ฆ ๋ฉ์ปค๋์ฆ์ ๋ช ํํ ์ดํดํ๊ธฐ
โ
๊ณตํต ์กฐ๊ฑด
0. ๋ชจ๋ ํ
์ด๋ธ์ ๊ณ ์ ์๋ณ์๋ฅผ ๊ฐ์ง
1. 3 Layer Architecture์ ๋ฐ๋ผ ๊ฐ Layer์ ๋ชฉ์ ์ ๋ง๊ฒ ๊ฐ๋ฐ
2. CRUD ํ์ ๊ธฐ๋ฅ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ฐ JPA๋ฅผ ์ฌ์ฉํด์ ๊ฐ๋ฐ
3. ์ธ์ฆ/์ธ๊ฐ ์ ์ฐจ๋ Cookie/Session์ ํ์ฉํ์ฌ ๊ฐ๋ฐ
4. JPA ์ฐ๊ด๊ด๊ณ๋ ๋จ๋ฐฉํฅ
โ
Lv0. API ๋ช
์ธ ๋ฐ ERD ์์ฑ
1. API๋ช
์ธ์ ํ๋ก์ ํธ root(์ต์์)๊ฒฝ๋ก์ README.md์ ์์ฑ
2. ERD ์์ฑ ํ ํ๋ก์ ํธ root(์ต์์)๊ฒฝ๋ก์ README.md์ ์ฒจ๋ถ
3. ์ค์นํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(MYSQL)์ ERD๋ฅผ ๋ฐ๋ผ ํ
์ด๋ธ ์์ฑ
โ
Lv1. ์ผ์ CRUD [ํ์]
1. ์ผ์ ์ ์์ฑ, ์กฐํ, ์์ , ์ญ์ ํ๋ค.
2. ์ผ์ ์ ์๋ ํ๋๋ฅผ ๊ฐ์ง๋ค.
ใ- ์์ฑ ์ ์ ๋ช
, ํ ์ผ ์ ๋ชฉ, ํ ์ผ ๋ด์ฉ, ์์ฑ์ผ, ์์ ์ผ ํ๋
ใ- ์์ฑ์ผ, ์์ ์ผ ํ๋๋ JPA Auditing์ ํ์ฉ
โ
Lv2. ์ ์ CRUD [ํ์]
1. ์ ์ ๋ฅผ ์์ฑ, ์กฐํ, ์์ , ์ญ์ ํ๋ค.
2. ์ผ์ ์ ์๋ ํ๋๋ฅผ ๊ฐ์ง๋ค.
ใ- ์ ์ ๋ช
, ์ด๋ฉ์ผ, ์์ฑ์ผ, ์์ ์ผ ํ๋
ใ- ์์ฑ์ผ, ์์ ์ผ ํ๋๋ JPA Auditing์ ํ์ฉ
3. ์ฐ์ธ๊ด๊ณ๋ฅผ ๊ตฌํํ๋ค.
ใ- ์ผ์ ์ ์ด์ ์์ฑ ์ ์ ๋ช
ํ๋ ๋์ ์ ์ ๊ณ ์ ์๋ณ์ ํ๋๋ฅผ ๊ฐ์ง
โ Lv3. ํ์๊ฐ์ [ํ์]
1. ์ ์ ์ ๋น๋ฐ๋ฒํธ ํ๋๋ฅผ ์ถ๊ฐํ๋ค.
ใ- ๋น๋ฐ๋ฒํธ ์ํธํ๋ ๋์ ๊ธฐ๋ฅ์์ ์ํ
โ Lv4. ๋ก๊ทธ์ธ(์ธ์ฆ) [ํ์]
0. ์ธํฐํ์ด์ค
ใ- HttpServletRequest / HttpServletResponse : ๊ฐ HTTP ์์ฒญ์์ ์ฃผ๊ณ ๋ฐ๋ ๊ฐ๋ค์ ๋ด๊ณ ์๋ค.
1. ์ค๋ช
ใ- Cookie/Session์ ํ์ฉํด ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํ
ใ- ํํฐ๋ฅผ ํ์ฉํด ์ธ์ฆ ์ฒ๋ฆฌ
ใ- @Configuration์ ํ์ฉํด ํํฐ ๋ฑ๋ก
2. ์กฐ๊ฑด
ใ- ์ด๋ฉ์ผ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ํ์ฉํด ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํ
ใ- ํ์๊ฐ์ , ๋ก๊ทธ์ธ ์์ฒญ์ ์ธ์ฆ ์ฒ๋ฆฌ์์ ์ ์ธ
3. ์์ธ์ฒ๋ฆฌ
ใ- ๋ก๊ทธ์ธ ์ ์ด๋ฉ์ผ๊ณผ ๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ์ง ์์ ๊ฒฝ์ฐ HTTP Status code 401์ ๋ฐํ (๐ค๊ตฌํํ์ง ๋ชปํ๋ค.๐ฌ)
โ
์ฌ์ ํ ๋์ ๊ธฐ๋ฅ ์ ์๋ํ์ง ๋ชปํ๋ค.ใ
ใ
๐ ์ฝ๋ ์์ฑ ํ๋ฆ
๊ณผ์ ๊ฐ์ด๋์์๋ ์ผ์ , ์ ์ CRUD๋ฅผ ๊ตฌํ ํ ๋น๋ฐ๋ฒํธ ํ๋๋ฅผ ์ถ๊ฐํ๋ผ๊ณ ํ๋๋ฐ.. ๋ฆฌํฉํ ๋ง ๊ณผ์ ์ด ์ค๋๊ฑธ๋ฆด ๊ฒ ๊ฐ์ ๋๋ ค์์ ์์๋ฅผ ๊ฑฐ๊พธ๋ก ์งํํด๋ฒ๋ ธ๋ค. (0 → 3 → 2 → 1 → 4 ์์)
// Lv.0,3 ์์
1. ๊ณผ์ ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํด์ API ๋ช
์ธ์์ ERD ์์ฑ
- ๋งํฌ ์ฐธ๊ณ : [์ผ์ ๊ด๋ฆฌ์ฑ Develop-1] ERD ๋ฐ API ๋ช
์ธ์ ์์ฑ (https://aggeeeee.tistory.com/255)
2. ์ ์ ์ ๋น๋ฐ๋ฒํธ ํ๋๋ ํฌํจํด์ ERD ์์ฑ
//Lv2,1 ์์
3. JPA Auditing์ ํ์ฉํ์ฌ BseeEntity ์์ฑ (์์ฑ์ผ, ์์ ์ผ)
4. Schedule๊ณผ User entity ๋ฐ๋ก ์์ฑ ํ ์ฐ์ธ๊ด๊ณ ๊ตฌํ
5. Schedule Entity์ @ManyToOne์ ์ด์ฉํ๊ณ , UserId๋ก Join
6. User CRUD ๊ตฌํ (Controller → DTO → Service → Repository ์์๋ก ์์ฑํด๋๊ฐ)
7. Schedule CRUD ๊ตฌํ (์์ ๋์ผ)
8. dtoํจํค์ง์ ํด๋์ค๊ฐ ๋๋ฌด ๋ง์ ๊ฒ ๊ฐ์์ ๋๋ฉ์ธ ๋ณ๋ก ๋ถ๋ฆฌ
//Lv4 ์์
9. 2์ฃผ์ฐจ Servlet Filter ์ค์ต์ ์ฐธ๊ณ ํ์ฌ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํ ์์
10. @Configuration์ผ๋ก Filter Bean ์๋ ๋ฑ๋ก
11. LoginFilter ํด๋์ค ์์ฑ (์ค์ต ๋ฐ๋ผ ์ ใ ใ )
12. User Controller์ ๋ก๊ทธ์ธ ๋ด์ฉ ์ถ๊ฐํจ
13. WHITE_LIST๋ฅผ ํ์๊ฐ์ , ๋ก๊ทธ์ธ ์์ฒญ๋ง ๊ฐ๋ฅํ๋๋ก ์์
14. ์ฌ๊ธฐ๊น์ง.... ์์ธ์ฒ๋ฆฌ๋ ๋ชปํ๋ค. ๐ญ
3๏ธโฃ ๋ฌธ์ ํด๊ฒฐ ๊ณผ์
๐ ํธ๋ฌ๋ธ ์ํ (๋ณ๋ ์์ฑ, ๐ฅํด๋ฆญ ์ ๊ฒ์๊ธ ์ฐ๊ฒฐ)
๐ฅ ๋ฌธ์ 1. ์์ฑ์์ final ํ๋ ์ด๊ธฐํ๋ฅผ ํ์ง ์์
๐ฅ ๋ฌธ์ 2. findByEmail()์ฌ์ฉ ์ ์ ์ธํ์ง ์์ ์๊ธด ์ค๋ฅ
๐ฅ ๋ฌธ์ 3. ์ธ์
์์ ์ฌ์ฉํ ํค๋ฅผ ์ผ์น์ํค์ง ์์ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ๊ฐ ๋์ง ์์
4๏ธโฃ ํ๊ณ
: ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด ์ป์ ๊ฒฝํ & ๋๋ ์ ์ ๋ฆฌ
๐ ๋ฐฐ์ด ์
๐ช JPA ๋๋ถ์ DB์ฐ๊ฒฐ์ ํ ์ ์๊ฒ ๋จ
- JDBC์์๋ DB์ฐ๊ฒฐ์ ์๋ ๋ชป๋์๋๋ฐ, JPA๋ ๊ฐ๋จํด์ DB์ฐ๊ฒฐ๋ถํฐ CRUD๊ตฌํ๊น์ง ์ง์ ํ ์ ์์๋ค.
- JPA๋ฅผ ์ข ๋ ์ฌ์ธํ๊ฒ(?) ํ์ฉํ๊ธฐ ์ํด์ JDBC๋ ์์์ผํ๋ค๊ณ ํ๋, JPA์ ์ต์ํด์ง๋ฉด JDBC์ฌ์ฉ๋ฒ๋ ๊ผญ ์ตํ์ผ๊ฒ ๋ค.!
๐ช API ๋ช ์ธ์ ํ์ฉ
- ์ด์ ๊ณผ์ ์๋ ERD๋ง ๋ณด๊ณ ๋์ด๊ฐ๋๋ฐ, ์ด๋ฒ์ DTO ์์ฑ์ ๋ช ์ธ์๋ฅผ ๊ณ์ ์ฐธ๊ณ ํ๋ค.
- ์ค๊ฐ์ค๊ฐ ๋ด์ฉ ์์ ๋ ๋ฐ์ํ๋๋ก ์ ๊ฒฝ์ผ๋ค. ๋ค๋ง ์ํ์ฝ๋์ ์๋ฌ ๋ฐ์ ์ ์ฝ๋๋ฅผ ์ ๋๋ก ์์ฑ/ํ์ฉํ์ง ๋ชปํ๋ค.
๐ช DTO ํจํค์ง ๋ถ๋ฆฌ ๋ฐฉ์์ ๋ํด ๊ณ ๋ฏผ
- ํ์๋ถ์ ์ฝ๋์์ Request/Response๋ก ํจํค์ง๋ฅผ ๋ถ๋ฆฌํ ๊ฒ์ ๋ณด๊ณ ์ฐธ๊ณ ํ์ฌ DTO๋ฅผ ๋๋ฉ์ธ๋ณ๋ก ๋ถ๋ฆฌํ๋ค.
- DTO๋ง ๋๋ฉ์ธ๋ณ๋ก ํจํค์ง๋ฅผ ๋ถ๋ฆฌํ๋๋ฐ, ๊ณผ์ ํด์ค ์ธ์ ์ ๋ณด๋ 3๋ ์ด์ด๋ฅผ ๋ชจ๋ ๋๋ฉ์ธ๋ณ๋ก ๋ถ๋ฆฌํ์ จ๋ค.
- ๋ด๊ฐ ์์ฑํ ์ฝ๋์ ์์ค์์๋ ํ์ฌ์ํ๋ก๋ง ๋ถ๋ฆฌํด๋ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํ๋๋ฐ, ์ค๋ฌด์์ ์ฝ๋๊ฐ ๊ธธ์ด์ง๋ฉด ํจํค์ง ๋ถ๋ฆฌ๋ ์ค์ํ ๋ถ๋ถ์ด ๋ ๊ฒ ๊ฐ๋ค.
๐ช ์ฝ๋๋ฅผ ํผ์ ์์ฑํ ๋น์จ์ด ์กฐ๊ธ ๋์ด๋จ
- ์ด์ ์ผ์ ๊ด๋ฆฌ์ฑ ๊ณผ์ ๋ ๊ฐ์์ ์ค์ต๋ถ๋ถ์ ๋ฐ๋ผ ์ฐ๋๋ผ 99%๋ฅผ ๋ฒ ๋ผ๋ฏ ์์ฑํ๋๋ฐ, ์ด๋ฒ ๊ณผ์ ์์๋ 10%์ ๋๋ ํผ์ ์ฐ๊ฒ๋ ๊ฒ ๊ฐ๋ค. ์์ง ๋ง์ด ๋ถ์กฑํ์ง๋ง 10๋ฐฐ๋ ๋น์จ๋ก ๋ฐ์ง๋ฉด 10๋ฐฐ(!!?) ์ฑ์ฅํ๋ค.
๐ ์์ฌ์ด ์
โ๏ธ ๋ ๋ฒจ ์์๋๋ก ์งํํ์ง ๋ชปํจ
- ๊ณผ์ ์์ ์ง์ ํด์ค ๊ตฌํ ์์๊ฐ ์๋๋ฐ, ๋ฆฌํฉํ ๋ง ํ๋ ๊ณผ์ ์ด ์ค๋ ๊ฑธ๋ฆด ๊ฒ ๊ฐ์ 3 → 2 → 1 ์์๋ก ์งํํ๋ค.
- ํธํ๊ฒ ์์ฑํ๋ ค๋ฉด ์ด ํ๋ฆ์ด ๋ง๋ ๊ฒ ๊ฐ์ง๋ง, ํ์ตํ๋ ๋จ๊ณ์์๋ ๋ฆฌํฉํ ๋ง ํ๋ ๊ณผ์ ์ ๊ฒช๋ ๊ฒ ์ฑ์ฅ์ ๋์์ด ๋ ๊ฒ ๊ฐ์๋ฐ ์์๋๋ก ์งํํ์ง ๋ชปํ์ฌ ์์ฌ์ ๋ค.
- ์๊ฐ๋ณด๋ค ๊ธ๋ฐฉ ํด๊ฒฐ๋ ์ ์์ผ๋ ๋ค์ ๊ณผ์ ๋ ๋ฆฌํฉํ ๋ง ๊ณผ์ ๋ ๊ฒช์ด๋ณด์.
โ๏ธ ์ํ๋ ๊ธฐ๋ฅ์ ์ ๋๋ก ๊ตฌํํ์ง ๋ชปํจ
- ๋น๋ฐ๋ฒํธ ํ์ธ ํ ์ญ์ ๋ฅผ ํ๊ณ ์ถ์๋ฐ DELETE๋ @RequestBody๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๊ณ ํ๋ค.
- ๋ณดํต์ DELETE + query param ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ค๊ณ ํ๋๋ฐ.. ํ์ฌ ์์ค์ผ๋ก๋ ์ด๋ป๊ฒ ์ ๊ทผํด์ผํ ์ง ๋ชจ๋ฅด๊ฒ ๋ค.
- ์์ธ์ฒ๋ฆฌ๋ ์ ๋๋ก ๋ชปํ๊ณ Validation๋ ํ๋๋ ์ฌ์ฉํ์ง ๋ชปํ๋ค.
- ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฐฐ์ฐ๊ณ ์ถํ์ ๋ฆฌํฉํ ๋ง ํด๋ณด์.
โ๏ธ ํด๋์ค ๋ช ์ด ๋๋ฌด ๊ธธ์ด์ง
- ์ง๊ด์ ์ธ ํด๋์ค๋ช ์ ์ง๊ณ ์ถ์ด์ ์ ๋ณด๋ฅผ ๋ค ๋ด์ผ๋ ค๊ณ ํ๋ค๋ณด๋ ํด๋์ค๋ช ์ด๋ DTO๋ช ์ด ๋๋ฌด ๊ธธ์ด์ก๋ค.
- ์ ๋นํ ๋ค์ด๋ฐ์ ๋ฐธ๋ฐ์ค๋ฅผ ์ฐพ๋ ๊ฒ ์์ผ๋ก ๊ณผ์ ๋ค.(๋ค์ด๋ฐ์ ๋ํ ๊ณ ๋ฏผ์ ์ฒซ๊ณผ์ ๋ถํฐ ๊พธ์คํ ์ง์๋๊ณ ์๋ค..)
โ๏ธ ์คํธ๋ฆผ ์ฌ์ฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์(Java ์ง์ ๋ถ์กฑ)
- ์ ์ฒด ์กฐํ๋ฅผ ํ๋ ๊ณผ์ ์์ stream()์ ์ฌ์ฉํ๋๋ฐ ์ฌ์ฉ ๋ฒ์ ๋ชฐ๋ผ์ ๊ฐ์์ ์ค์ต ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด์ ๋ฐ๋ผ์ผ๋ค.
- ๊ทธ ์ธ์๋ Java ๋ฌธ๋ฒ์ ๋ํด ๋ ๊ณต๋ถํ ํ์๊ฐ ๋๊ปด์ก๋ค.
- ํด๊ฒฐ๋ฒ์ ๋ฐ๋ก ์๊ฐ๋ด์ ํ์ตํ๊ธฐ ๋ฟ์ด๋ค... ํด์ผํ๋ค!
โ๏ธ ์ปค๋ฐ์ ๊น๋นกํจ
- ์ค๊ฐ์ค๊ฐ ์ปค๋ฐ์ ์์ฃผ ๊น๋นกํ๋ค.
- ๊ธฐ๋ฅ ๋จ์๋ก ์ปค๋ฐํ๋ ์ต๊ด์ ๊ผญ ๋ค์ด์.
'๋ด์ผ๋ฐฐ์์บ ํ > ๋ณธ์บ ํ ๊ณผ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฐ๋ฌ ์ดํ๋ฆฌ์ผ์ด์ ์์์์ฑ ํ๋ก์ ํธ ํ๊ณ (3) | 2025.04.29 |
---|---|
[Spring ์ฌํ] ์ฝ๋ ๋ฆฌํฉํ ๋ง ๊ณผ์ ํ๊ณ (4) | 2025.04.18 |
[์ผ์ ๊ด๋ฆฌ์ฑ Develop-2] ์ผ์ ๊ด๋ฆฌ์ฑ Develop ํธ๋ฌ๋ธ ์ํ (0) | 2025.04.03 |
[์ผ์ ๊ด๋ฆฌ์ฑ Develop-1] ERD ๋ฐ API ๋ช ์ธ์ ์์ฑ (0) | 2025.04.02 |
[์ผ์ ๊ด๋ฆฌ์ฑ ๋ง๋ค๊ธฐ-3] ์ผ์ ๊ด๋ฆฌ์ฑ ๊ณผ์ ํ๊ณ (1) | 2025.03.26 |