- ๋ณต๋ถ์ผ๋ก ๋ง๋ค์ด์ "๋์๊ฐ๊ธด" ํฉ๋๋ค.
- "JPA๊ฐ ๋ญ์ฃ ?"์ ๋ง๋ฌธ์ด ๋งํ๋๋ค.
- ์ ๊ทธ๋ ๊ฒ ์งฐ๋์ง ์ค๋ช ํ์ง ๋ชปํฉ๋๋ค.
[Lv1] ๋ฉด์ ์์ ์ค๋ช ํ ์ ์๋ Spring Boot - ๊ฒฝํ์ผ๋ก ๋ต๋ณํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ
์๊ธฐ๊ฐ ์๋ ์ดํด, ์ด๋ก ์ด ์๋ ๊ฒฝํ์ผ๋ก ๋ฐฐ์ฐ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ ์ ๋ฌธ ๊ณผ์ ์ ๋๋ค. "JPA๊ฐ ๋ญ๊ฐ์?"๋ผ๋ ๋ฉด์ ์ง๋ฌธ์ ๊ตฌ๊ธ๋งํ ์ ์๋ฅผ ์ธ์ ๋ตํ๋ ๋์ , "JdbcTemplate ์ง์ฅ์ ๊ฒช์ด๋ดค๋๋ฐ์..."๋ก ์์ํ๋ ๊ฒฝํ ๋ต๋ณ์ ํ ์ ์๊ฒ ๋ง๋๋ ๊ฐ์์ ๋๋ค. ์์ ์๋ฐ ServerSocket 30์ค โ Spring Boot 7์ค๋ก ์ค์ด๋๋ ๊ณผ์ ์ ์ง์ ์ฒดํํ๋ฉฐ "์ ํ๋ ์์ํฌ๋ฅผ ์ฐ๋์ง" ์จ๋ชธ์ผ๋ก ์ดํดํฉ๋๋ค. 6๊ต์ ํ, ์ฌ๋ฌ๋ถ ์์๋ Spring Boot + JPA๋ก ๊ตฌํํ Todo List REST API๋ผ๋ ์ค์ ์๋ํ๋ ํฌํธํด๋ฆฌ์ค๊ฐ ๋ค๋ ค์์ ๊ฒ์ ๋๋ค.
์๊ฐ์ 348๋ช
๋์ด๋ ์ด๊ธ
์๊ฐ๊ธฐํ ๋ฌด์ ํ








๋กฏ๋ฐ์ผํ ์ด์ปค๋จธ์ค์ฌ์ ๋ณธ๋ถ
์์นด์ธํฐ๋ท
์์ง์๋ค๋ ์ด ๊ฐ์๋ฅผ ๋ฃ๊ณ ์์ด์!






๋กฏ๋ฐ์ผํ ์ด์ปค๋จธ์ค์ฌ์ ๋ณธ๋ถ
์์นด์ธํฐ๋ท
์์ง์๋ค๋ ์ด ๊ฐ์๋ฅผ ๋ฃ๊ณ ์์ด์!
๋จผ์ ๊ฒฝํํ ์๊ฐ์๋ค์ ํ๊ธฐ
5.0
5.0
์ฐฝ๊ทผ
๊ฐ์์ค๋ฝ๊ฒ ํ์ฌ์์ ์คํ๋ง์ ์ฐ๊ฒ ๋๋ฉด์ ๋ฐ๊ฐ์ ๋ก(?) ์๊ฐํ๊ฒ ๋ ๊ฐ์์๋๋ฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก ๋งํ๋ฉด ์ ๋ค์์ผ๋ฉด ํฐ์ผ ๋ ๋ปํ์ต๋๋ค. ๋ฐฑ์๋๋ฅผ ์์ ์ฒ์ ํ๋ ์์ค์ ์๋๊ณ , ๊ธฐ์กด์ Nest๋ฅผ ์ฌ์ฉํด๋ณธ ๊ฒฝํ์ด ์์ด์ ์คํ๋ง์ด ๋๋ฌด ๋ฌด๊ฒ๊ฑฐ๋ ๋ต๋ตํ๊ฒ ๋๊ปด์ง๋ฉด ์ด์ฉ๋ ๊ฑฑ์ ํ๋๋ฐ, ๊ทธ๋ฐ ๊ฑฑ์ ์ ์ฒซ ๊ฐ์๋ถํฐ ์ฐ์ฐ์กฐ๊ฐ ๋๋๊ตฐ์. ์คํ๋ง์ ์ฒ ํ๋ถํฐ ๊ตฌ์กฐ, ์ ์ด๋ ๊ฒ ์ค๊ณ๋๋์ง๊น์ง ํ๋ฆ์ด ๋๋ฌด ๋งค๋๋ฌ์์ โ์ ๊ทธ๋์ ์คํ๋ง์ด ์ด๋์ ์ฐ์ด๋๊ตฌ๋โ ํ๊ณ ๋ฌด๋ฆ์ ๋ช ๋ฒ์ด๋ ์ณค๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋จ์ํ ๋ฌธ๋ฒ๋ง ๋์ดํ๋ ๊ฒ ์๋๋ผ, ์ค๋ฌด์์ ํ์ํ ๊ฐ๊ฐ๊ณผ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ์ ๋๋ก ์ก์์ฃผ๋ ๊ฐ์๋ผ์ Nest๋ฅผ ์จ๋ดค๋ ์ ์ฅ์์๋ ๋น๊ตํ๋ฉด์ ์ดํดํ๊ธฐ ์ ๋ง ์ข์์ต๋๋ค. ์คํ๋ง ์ฒ์์ด์ ๋ถ์ ๋ฌผ๋ก ์ด๊ณ , ์ ์ฒ๋ผ ๋ค๋ฅธ ํ๋ ์์ํฌ ๊ฒฝํ์ ์๋๋ฐ ์คํ๋ง์ ์ ๋๋ก ๋ฐฐ์๋ณธ ์ ์๋ ๋ถ๋คํํ ๋ ์ด ๊ฐ์ ํ๋๋ก ์คํ๋ง์ ๋ํ ๋ง์ฐํ ๋๋ ค์์ด ํ ์ฌ๋ผ์ง ๊ฑฐ๋ผ๊ณ ์์ ์๊ฒ ๋งํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ๊ธฐ ๋ค์ง๊ธฐ์ฉ์ผ๋ก ์ด๋งํ ๊ฐ์ ์ฐพ๊ธฐ ์ฝ์ง ์์ต๋๋ค.
5.0
๊น๋ฏผ๊ตฌ
์คํ๋ง๋ถํธ ์ฒ์ํ์๋ ๋ถ, ์ด์ ์๋ฐ ๋ฐฐ์ด๋ถ, ๋ฐฐ์ด์ง ์ค๋๋ ๋ถ๋ค ๋ค์ผ์๋ฉด ์ข์๊ฑฐ ๊ฐ์์. ๊ทธ๋ฆฌ๊ณ ๋ฉ์ฝ๋ฉ์ฝ๋ ๊ฐ์๋ฅผ ์ํ์ ์ ๊ท์ ์์ ๋ค์ด์ต๋๋ค
5.0
๋ค์จ
์์๋ค์ ํตํด ํด๋น ๊ฐ๋ ์ ์ฌ๋ฏธ์๊ฒ ํ์ตํ์์ต๋๋ค. ์๋ชป์๊ณ ์๋ ๋ถ๋ถ๊ณผ ๋ชจ๋ฅด๋ ๋ถ๋ถ์ ์ฌ๋ฏธ์๊ฒ ํ์ตํ์ต๋๋ค.
์๊ฐ ํ ์ด๋ฐ๊ฑธ ์ป์ ์ ์์ด์
๋ฐฑ์๋ ๋ฉด์ ์์ "๊ฒฝํ"์ผ๋ก ๋ต๋ณํ๋ ๋ฅ๋ ฅ
Spring Boot + JPA ์ค์ ๊ฐ๋ฐ ๋ฅ๋ ฅ
"์(Why)"๋ฅผ ์ฒด๋ํ๋ ํ์ต ๊ฒฝํ
์ค๋ฌด ์ฝ๋๋ฅผ ์ฝ์ ์ ์๋ ๋
์ ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์ฑ์ฉ ๊ณต๊ณ 95%๊ฐ ์๊ตฌํ๋ ๊ธฐ์ ์คํ
๋ฐ๋ผ ์น๋ฉด ๋์๊ฐ์.
๊ทผ๋ฐ ๋ฉด์ ๊ด์ โ์โ๋ฅผ ๋ฌป์ต๋๋ค.
๋ณต์ฌ-๋ถ์ฌ๋ฃ๊ธฐ๋ก ๋ง๋ ํ๋ก์ ํธ๋ ๋ฉด์ ์์ ๋ฌด๋์ง๋๋ค. ์์ ์๋ฐ์ ๊ณ ํต์ ๋จผ์ ๊ฒช๊ณ Spring Boot์ ์๋ํจ์ ๊นจ๋ซ๋ โ๊ณ ํต โ ๊ตฌ์โ ํ์ต๋ฒ์ผ๋ก, ์๋ฆฌ๋ฅผ ์ค๋ช ํ ์ ์๋ ๊ฐ๋ฐ์๊ฐ ๋ฉ๋๋ค.
๋๋ถ๋ถ์ ๊ฐ์๋ โ์ด๋ป๊ฒโ๋ง ๊ฐ๋ฅด์นฉ๋๋ค.
"JPA๋ save() ์ฐ๋ฉด ๋ฉ๋๋ค", "ํธ๋์ญ์ ์ @Transactional ๋ถ์ด๋ฉด ๋ฉ๋๋ค." ๋ฐ๋ผํ๋ฉด ๋์๊ฐ์. ๊ทผ๋ฐ ๋ฉด์ ๊ด์ "์ ์ฐ๋์?"๋ฅผ ๋ฌป์ต๋๋ค.
"save() ํธ์ถํ์ธ์"์์ ๋ฉ์ถฅ๋๋ค.
์ JPA๋ฅผ, ์ 3๊ณ์ธต์ ์ฐ๋์ง ๋ต์ ๋ชป ํฉ๋๋ค.
JPA ์์ด ํด๋ณธ ์ ์ด ์์ผ๋ ๊ณ ๋ง์์ ๋ชจ๋ฆ ๋๋ค.
๋ฐ๋ผ ์น๋ฉด ๋์๊ฐ์. ๊ทผ๋ฐ ๋ฉด์ ์์ ๋ฌด๋์ง๋๋ค.
์ ํ๋ธ ๋ณด๊ณ ๋ฐ๋ผ ์น๋ฉด ํฌํธํด๋ฆฌ์ค๋ ๋ง๋ค์ด์ง๋๋ค. ํํ ํ๋ฝ ํ๋ฆ์ ๋ณด์ค๊น์.
์ง์ ๊ฒช์ด์ผ, ์๋ํจ์ด ๋ณด์ ๋๋ค.
ํธํ ๊ฒ๋ถํฐ ๋ฐฐ์ฐ๋ฉด ์ ๋ฉ๋๋ค. ๋ถํธํ ๊ฑธ ๋จผ์ ๊ฒช์ด์ผ ํด์. ์์ ์๋ฐ 30์ค์ ๊ณ ํต์ ๊ฒช๊ณ ๋์ Spring Boot 7์ค์ ๋ณด๋ฉด โ "์, ์ด๋์ ์ฐ๋๊ตฌ๋"๊ฐ ๋ฉ๋๋ค.
HTTP ์๋ต์ ๋ฌธ์์ด๋ก ์ง์ ํ์ดํํ์ด์.
๊ทธ ๊ณ ํต ๋ค Spring Boot 7์ค์ ์๋ํจ์ ์ฒด๊ฐํฉ๋๋ค.
SQL + RowMapper 50์ค์ ์ง์ ์งฐ์ด์.
JPA save() ํ ์ค์ด ์ ํ๋ช ์ธ์ง ๋ผ์ ๋ฆฌ๊ฒ ์๋๋ค.
"๋ด๊ฐ ์ ๋ง๋ ๊ฐ์ฒด๊ฐ ์ ๋์๊ฐ์ง?"
ํ๋ก์ยทDIยท์คํ๋ง ๋น์ผ๋ก ๋ง๋ฒ์ ์ ์ฒด๋ฅผ ์๋๋ค.
Controller ํ๋๊ฐ ๋ชจ๋ ์ผ์ ๋ ๋งก์์.
3๊ณ์ธต ๋ถ๋ฆฌ๋ก ๊น๋ํ ๊ตฌ์กฐ์ ์ด์ ๋ฅผ ์ค๋ช ํฉ๋๋ค.
๋ฐฑ์๋ ๊ฐ๋ , ํ ๋ฒ ๋ค์ผ๋ฉด ๊น๋จน์ ์ ์๊ฒ.
3๊ณ์ธตยทํธ๋์ญ์ ยทํ๋ก์ยทDIยทRepositoryยท์์ธ๊ฒ์ฆ โ ์ฝ๋๊ฐ ์๋๋ผ ๋ ์คํ ๋ ๋น์ ๋ก โ๋ฌด์์ยท์โ๊น์ง ํ๋์ ํผ์ณ์ ๋ณด์ฌ๋๋ฆฝ๋๋ค.
"ControllerยทServiceยทRepository ์ ๋๋ ์?"
์ ์ยท๋งค๋์ ยท์ฐฝ๊ณ ์ง๊ธฐ์ฒ๋ผ ์ญํ ์ ๋๋๋ค๊ณ ๋ตํฉ๋๋ค.
"ํธ๋์ญ์ ์ด ์ ํ์ํ๊ฐ์?"
๋ฒ๊ฑฐ ์ธํธ์ฒ๋ผ ๋ค ๋๊ฑฐ๋ ๋ค ์ ๋๊ฑฐ๋๋ก ์ค๋ช ํฉ๋๋ค.
"@Transactional์ด ์ด๋ป๊ฒ ์๋ํ์ฃ ?"
๋งค๋์ (ํ๋ก์)๊ฐ ๋์ ์ฒ๋ฆฌํ๋ค๊ณ ์ค๋ช ํฉ๋๋ค.
"@Autowired๋ ์ด๋ป๊ฒ ์ฃผ์ ๋์ฃ ?"
๋ถํ ์ฐฝ๊ณ ์์ ๊บผ๋ด ๋ฐฐ๋ฌํ๋ฏ ์ค๋ค๊ณ ๋ตํฉ๋๋ค.
"๊ตฌํ์ฒด๋ ์๋๋ฐ ์ด๋ป๊ฒ ๋์ฃ ?"
SimpleJpaRepository(์๋ฆฌ์ฌ)๊ฐ ๋์ ๋ง๋ ๋ค๊ณ ์๋๋ค.
"์์ธยท๊ฒ์ฆ์ ์ด๋์ ์ฒ๋ฆฌํ์ฃ ?"
๋ฌธ์ง๊ธฐ(๊ฒ์ฆ)ยท์ง๋ฐฐ์ธ(์ ์ญ ์์ธ)๋ก ์ค๋ช ํฉ๋๋ค.
๊ฐ์ ํ๋ก์ ํธ์ธ๋ฐ, ๋ฉด์ ๋ต์ด ๊ฐ๋ฆฝ๋๋ค.
- SQL 50์ค ์ง์ฅ์ ์ง์ ๊ฒช์ด๋ดค์ต๋๋ค.
- "์ ๊ฐ JdbcTemplate์ผ๋ก ํด๋ดค๋๋ฐ์โฆ"๋ก ์์ํฉ๋๋ค.
- JPAยทํธ๋์ญ์ ยทDI๋ฅผ โ์โ๊น์ง ์ค๋ช ํฉ๋๋ค.
์ด ๊ฐ์๋ ์์์ , Lv.1์ ๋๋ค.
ํ ๊ฐ์๋ก ๋๋์ง ์์ต๋๋ค. ๋จ๊ณ๋ณ ๋ก๋๋งต์ผ๋ก ์ ๋ฌธ๋ถํฐ ์ค์ ๊น์ง ํจ๊ป ๊ฐ๋๋ค.
์คํ๋ง ์์ ์ , ๊ธฐ์ด๋ฅผ ๋ค์ง๋๋ค.
์คํ๋ง์ผ๋ก API๋ฅผ ๋ง๋ค๊ณ , ๋ฉด์ ์ ๋๋นํฉ๋๋ค.
์์์ฑ ์ปจํ ์คํธ๋ถํฐ ์ค๋ฌด ํจํด๊น์ง.
์ค๋ฌด ๋ฌด๊ธฐ๋ฅผ ๊ฐ์ท๋ค๋ฉด, ์ด์ ์ด๋ ฅ์๋ก ์ฐจ๋ณํํด ์๋ฅ๋ฅผ ํต๊ณผํฉ๋๋ค.
์ด๋ฐ ์ , ์์ง ์์ผ์ธ์?
"JPA๊ฐ ๋ญ์์?"๋ผ๋ ์ง๋ฌธ์ ๋ง๋ฌธ์ด ๋งํ ์ ?
๋ณต๋ถ์ผ๋ก ๋ง๋ ํ๋ก์ ํธ๋ฅผ ์ค๋ช ๋ชป ํด ๋นํฉํ ์ ?
6๊ต์ 42๊ฐ ยท ์น ๊ธฐ์ด๋ถํฐ ์ค์ ํ๋ก์ ํธ๊น์ง.
์น์ ๊ธฐ์ด โ ์ฒซ ์น ์๋ฒ(๊ณ ํตโ๊ตฌ์) โ DBยทJPA โ ํ๋ก์ยทDI โ 3๊ณ์ธตยทํธ๋์ญ์ โ ์ค์ ํ๋ก์ ํธ. ์น์ ์ ๋๋ฌ ์์ธ ๋ชฉ์ฐจ๋ฅผ ํ์ธํ์ธ์.
์น์ 1. ๐ 1๊ต์ ยท ์น์ ๊ธฐ์ด, ์๋ฒ์ ๋ํํ๋ ๋ฒ์นยทHTTPยทJSON
- 1๐ฏ OT: 6๊ต์ ํ ๋๋ ๋ฌด์์ ํ ์ ์๋?
- 2๐ ์ธํฐ๋ท๊ณผ ์น์ ์ฐจ์ด: ์นดํก๊ณผ ์ ํ๋ธ
- 3๐ฝ๏ธ ํด๋ผ์ด์ธํธ์ ์๋ฒ: ์๋๊ณผ ์๋น
- 4๐จ HTTP: ์ ์ธ๊ณ๊ฐ ์ฐ๋ ๊ณตํต ์ธ์ด
- 5๐ฆ JSON: ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ํ์ค ๊ทธ๋ฆ
์น์ 2. ๐ 2๊ต์ ยท ์ฒซ ์น ์๋ฒ, ์์ ์๋ฐ์ ๊ณ ํต โ ๊ตฌ์๊ณ ํตโ๊ตฌ์
- 6๐ ์์ ์๋ฐ์ ๋์ฐํ ๊ณ ํต ์ฒดํ(30์ค)
- 7๐ฑ Spring Boot ํ๋ก์ ํธ ์์ฑ: ๋ผ๋ฉด์ฒ๋ผ 3์ด
- 8๐ฏ Hello World API: 7์ค๋ก ์๋ฒ ์์ฑ
- 9๐ค JSON ์๋ต: ์๋ฐ ๊ฐ์ฒด๊ฐ JSON์ผ๋ก ๋ณ์
- 10๐ฏ ๊ฒฝ๋ก ๋ณ์๋ก ๋์ ์์ฒญ ๋ฐ๊ธฐ
์น์ 3. ๐พ 3๊ต์ ยท DB, JdbcTemplate ์ง์ฅ โ JPA ํ ์คDBยทJPA
- 11๐พ ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ: HashMap์ ์น๋ช ์ ํ๊ณ
- 12๐๏ธ DB ๊ฐ๋ : ์๊ตฌ ๋ณด๊ด ๋์ฅ๊ณ ์ค์น
- 13๐ญ JdbcTemplate: SQL ๋ฌธ์์ด ์ง์ฅ ์ฒดํ
- 14โจ JPA: SQL ์์ด save() ํ ์ค๋ก ๋
- 15๐ฎ Repository: ์ฝ๋ ์ ์ง๋ ์๋ํ๋ ์ ์ดํ
์น์ 4. ๐ญ 4๊ต์ ยท ๋ง๋ฒ์ ์ ์ฒด, ํ๋ก์ยทDIยท์คํ๋ง ๋นํ๋ก์ยทDI
- 16๐ญ ํ๋ก์(Proxy)๋ ๋ฌด์์ธ๊ฐ
- 17๐ญ ์๋ ํ๋ก์: ๋งค๋์ ๋ฅผ ์ฐ์ด๋ด๋ ๊ณต์ฅ
- 18๐ฆ ApplicationContext์ ์คํ๋ง ๋น
- 19๐ ์์กด์ฑ ์ฃผ์ (DI): ๋ฐฐ๋ฌ์ ๋ฏผ์กฑ
- 20๐จโ๐ณ ํค์ค์คํฌ ๋ค ์๋ฆฌ์ฌ: SimpleJpaRepository
์น์ 5. ๐๏ธ 5๊ต์ ยท 3๊ณ์ธต ์ํคํ ์ฒ์ ํธ๋์ญ์ 3๊ณ์ธตยทํธ๋์ญ์
- 21๐๏ธ 3๊ณ์ธต: ์ ์-๋งค๋์ -๋์ฅ๊ณ ์ญํ ๋ถ๋ฆฌ
- 22๐ก ๊ท์ฐฎ์๋ฐ ์ ๋๋ ์? ๊ณ์ธต ๋ถ๋ฆฌ์ ์ด์
- 23๐ก๏ธ ํธ๋์ญ์ : ๋ค ์ฃผ๊ฑฐ๋ ์์ ๋ง๊ฑฐ๋
- 24โ @Transactional: ์คํฐ์ปค ํ ์ฅ์ ๊ธฐ์
- 25๐ต๏ธ @Transactional์ ์๋ ์๋ฆฌ
์น์ 6. ๐ 6๊ต์ ยท ์ค์ , ์์ธยท๊ฒ์ฆยทํ๋ก์ ํธ ์์ฑ์ค์ CRUD
- 26๐จ ์์ธ์ฒ๋ฆฌ: 500์ 404ยท400์ผ๋ก
- 27๐ก๏ธ ์ ์ญ ์์ธ: ๋ ์คํ ๋ ์ง๋ฐฐ์ธ
- 28๐ฎ ๊ฒ์ฆ: ์ ๊ตฌ๋ฅผ ์งํค๋ ๋ฌธ์ง๊ธฐ + @Valid
- 29๐ ํ์ด์ง: findAll() ๊ธ์ง, 100๋ง ๊ฑด๋ ์์
- 30๐ ์ค์ ํ๋ก์ ํธ: User-Todo CRUD ์์ฑ
๋ฐ๋ผ ์น๊ธด ํ๋๋ฐ, ์ค๋ช ์ ๋ชป ํ๊ฒ ๋ค๋ฉด.
์ ๋ง๋ ๋ถ
์๋ฐ ifยทfor๋ ์๋๋ฐ, "์๋ฒ" ๋ง๋๋ ๊ฒ ๋ง์ฐํ ๋ถ
์ ํ๋ธ ๋ฐ๋ผํ๊ธฐ๋ ํ๋๋ฐ ๋ฉด์ ์ค๋ช ์ ๋ชป ํ๋ ๋ถ
๋ณต๋ถ์ผ๋ก ๋ง๋ ํ๋ก์ ํธ์ ์๋ฆฌ๋ฅผ ๋ชจ๋ฅด๋ ๋ถ
๋ฉด์ ์ค๋น์ ์ค์ต์ ๋์์ ํ๊ณ ์ถ์ ๋ถ
๊ธฐ๋์น๋ฅผ ๋ง์ถฐ์ผ ํ๋ ๋ถ
- ์ด๋ฏธ ์ค๋ฌด์์ Spring์ ๋ฅ์ํ๊ฒ ์ฐ๋ ํ์ ์
- ์๋ฐ ๋ฌธ๋ฒ(ifยทfor) ์์ฒด๋ฅผ ์ฒ์ ๋ณด๋ ๋ถ
- JPA ๋ด๋ถยท์ฑ๋ฅ ํ๋๋ง ๊น๊ฒ ์ํ๋ ๋ถ (๊ทธ๊ฑด Lv.2)
์ ๋ฌธ โ ์๋ฐ ๊ธฐ์ด๋ง ์์ผ๋ฉด ์์ํ ์ ์์ต๋๋ค.
Java if ๋ฌธยทfor ๋ฌธ ์ ๋๋ ์จ๋ณธ ๊ฒฝํ (Spring Boot๋ ๋ชฐ๋ผ๋ OK).
MySQL CRUD๋ฅผ ํ ๋ฒ์ด๋ผ๋ ๋ค๋ค๋ณธ ๊ฒฝํ.
IntelliJ Community(๋ฌด๋ฃ)๋ฉด ์ถฉ๋ถ โ ์๋์ฐยท๋งฅ ๋ฌด๊ด, OS๋ณ ์ค์น ์ ๊ณต.
๊ฐ์๊ฐ ๋๋๋ฉด ์ด ๋ค ๊ฐ์ง๊ฐ ๋ฉ๋๋ค.
Spring Boot๋ก API ์๋ฒ๋ฅผ ์ง์ ๋ง๋ค๊ณ , ๊ทธ ๋์ ์๋ฆฌ๋ฅผ ์ค๋ช ํ ์ ์์ต๋๋ค.
JdbcTemplate์ ๊ณ ํต์ ๊ฒช๊ณ JPA์ save() ํ ์ค์ด ์ ํ๋ช ์ธ์ง ์ค๋ช ํฉ๋๋ค.
ํ๋ก์ยทDIยท์คํ๋ง ๋น์ผ๋ก "์ ์ฝ๋๊ฐ ๋๋์ง"๋ฅผ ์ดํดํฉ๋๋ค.
3๊ณ์ธตยทํธ๋์ญ์ ยท์์ธยท๊ฒ์ฆ์ผ๋ก ์ค์ CRUD๋ฅผ ์์ฑํฉ๋๋ค.
์ฟ ํกยท์ผ๋์ ์ต์ข ๋ฉด์ ์ ๋ณธ ํ์ ๊ฐ๋ฐ์๊ฐ ์ง์ .
์ฟ ํกยท์ผ๋์ ์ต์ข ๋ฉด์ ๊น์ง ๊ฐ ๋ณธ 6๋ ์ฐจ ๊ฐ๋ฐ์, 24๊ฐ ํ์ฌ ์ด์ง ์คํ ๋ฆฌ๋ฅผ ๊ฐ์ง ๊ฐ์ฌ๊ฐ ์ง์ ๊ฐ๋ฅด์นฉ๋๋ค.
๋น๋ฐ๋ฆฌํผ๋ธ๋ฆฌ์นด(ํ ์ค) ์๋ฒ ๊ฐ๋ฐ์ ์ถ์ โ ์ค๋ฌด์์ ๊ฒ์ฆ๋ ๊ด์ ์ผ๋ก "์"๋ฅผ ์ค๋ช ํฉ๋๋ค.
"์ด๋ป๊ฒ"๋ง ์๋ ค์ฃผ๊ณ ๋๋๋ ๊ฐ์๊ฐ ์๋๋ผ, ๊ฐ๋ โ ์ง์ ์ฒดํ โ ๋ฉด์ ๋ต๋ณ๊น์ง ์ฐ๊ฒฐํฉ๋๋ค.
๊ฐ๋ฐ์ ์ทจ์ ๋ฝ๊ฐ๊ธฐ ์ปค๋ฎค๋ํฐ(์นดํกยท๋์ค์ฝ๋)๋ฅผ ์ด์ํ๋ฉฐ ํ์์ ๋๊น์ง ๋์ต๋๋ค.
์๊ฐํ ๋จ๊ธฐ๋ฉด, Spring Boot ๋ฉด์ ์ง๋ฌธ 18์ ์ ๋๋ฆฝ๋๋ค.
๋ฉด์ ์์ ๋ฐ๋ก ์จ๋จน๋ ํต์ฌ ์ง๋ฌธ๊ณผ ๋ชจ๋ฒ ๋ต๋ณ โ ์ง์ ์ฐ์ตํ ์ ์๋ ๋ ธ์ ๋ฌธ์ ์ง์ ๋๋ค.
๊ถ๊ธํ ๋ถ๋ถ๋ง ํผ์ณ์ ํ์ธํ์ธ์.
Spring Boot๋ฅผ ํ๋๋ ๋ชฐ๋ผ๋ ๋๋์?
๋ค. ์๋ฐ if ๋ฌธ, for ๋ฌธ ์ ๋๋ง ์๋ฉด ๋ฉ๋๋ค. Spring Boot๋ ๋ชฐ๋ผ๋ ๋ฉ๋๋ค. "์ด๊ฑธ ์ ๋ฐฐ์ฐ๋๊ฐ"๋ถํฐ ์์ํด ๋ชจ๋ ๊ฐ๋ ์ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํฉ๋๋ค.
๋ฐ๋ผํ๊ธฐ ๊ฐ์๋ ๋ญ๊ฐ ๋ค๋ฅธ๊ฐ์?
์ด ๊ฐ์๋ ์ผ๋ถ๋ฌ ๊ณ ํต์ ๊ฒช๊ฒ ํฉ๋๋ค. ์์ ์๋ฐ๋ก ์น ์๋ฒ๋ฅผ 30์ค ์ง์ ์ง๋ณด๊ณ , JdbcTemplate์ผ๋ก SQL 50์ค ์ง์ฅ์ ๊ฒช์ ํ์์ผ Spring Boot 7์ค๊ณผ JPA save() ํ ์ค์ ์๋ํจ์ ์ฒด๊ฐํฉ๋๋ค. ์ด ๊ฒฝํ์ด "์ง์ ๊ฒช์ด๋ดค๋๋ฐ์"๋ก ์์ํ๋ ๋ฉด์ ๋ต๋ณ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์ค์ต ํ๊ฒฝ์ ์ด๋ป๊ฒ ๋๋์?
IntelliJ๋ฅผ ์ฌ์ฉํฉ๋๋ค. Community(๋ฌด๋ฃ) ๋ฒ์ ์ด๋ฉด ์ถฉ๋ถํ๊ณ ์๋์ฐยท๋งฅ ๋ชจ๋ ๊ฐ๋ฅํฉ๋๋ค. ๊ฐ ์ด์์ฒด์ ๋ณ ์ค์น ๋ฐฉ๋ฒ์ ๋ชจ๋ ์ ๊ณตํ๋ฉฐ, ํ์ต ์๋ฃ(๋ ธ์ ยทPDF)์ ํ๋ก์ ํธ ์ฝ๋๋ฅผ ๊ณต์ ํฉ๋๋ค.
์ด ๊ฐ์๋ง ๋ค์ผ๋ฉด ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋๋์?
์ด ๊ฐ์๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ๋ก๋๋งต์ Lv.1(์ ๋ฌธ)์ ๋๋ค. Lv.0 DB ๊ธฐ์ด โ Lv.1 Spring Boot ์ ๋ฌธ(์ด ๊ฐ์) โ Lv.2 JPA ์์ ์ ๋ณต โ Lv.3 ๋ฐฐํฌ โ Lv.5~6 ์ํคํ ์ฒยท์ค์ ์ผ๋ก ์ด์ด์ง๋๋ค.
๋ฐ๋ผ ์น์ง ๋ง๊ณ , ์ง์ ๊ฒช๊ณ ์ค๋ช ํ์ธ์.
โ์ด๋ป๊ฒโ๋ง ๋ฐฐ์ฐ๋ฉด ๋ฉด์ "์?"์์ ๋งํ๋๋ค. ์์ ์๋ฐ 30์ค์ ๊ณ ํต์ ๊ฒช์ด์ผ Spring Boot 7์ค์ ์๋ํจ์ด ๋ณด์ ๋๋ค. ์ด ๊ฒฝํ์ด "์ ๊ฐ ์ง์ ๊ฒช์ด๋ดค๋๋ฐ์"๋ก ์์ํ๋ ๋ต๋ณ์ ๋ง๋ญ๋๋ค.
์ด๋ฐ ๋ถ๋ค๊ป
์ถ์ฒ๋๋ ค์
ํ์ต ๋์์
๋๊ตฌ์ผ๊น์?
์๋ฐ ๊ธฐ์ด(if, for, class)๋ ์๋๋ฐ, ์ด๊ฑธ๋ก '์๋ฒ'๋ฅผ ๋ง๋ ๋ค๋ ๊ฒ ๋ง์ฐํ ๋ถ
์ ํ๋ธ ๋ฐ๋ผํ๊ธฐ๋ก ์ฝ๋๋ ๋๋ ธ๋๋ฐ, ๋ฉด์ ์์ ์ค๋ช ๋ชป ํ๋ ๋ถ
์ฑ์ฉ ๊ณต๊ณ ์ "Spring Boot, JPA ๊ฒฝํ์ ์ฐ๋"๊ฐ ๋๋ ค์ด ์ ์ ์ค๋น์
Spring Boot ์ฑ ์ ์ฝ์๋๋ฐ ์ค์ ์ ์ฉ์ด ์ ๋๋ ๋ถ
๊ฐ๋ฐ ๋ถํธ์บ ํ ์๋ฃํ๋๋ฐ "์"๋ฅผ ๋ชจ๋ฅด๊ณ "์ด๋ป๊ฒ"๋ง ์๋ ๋ถ
์ ์ ์ง์,
ํ์ํ ๊น์?
์๋ฐ ๊ธฐ์ด ๋ฌธ๋ฒ ์์ค (์๋ฐ ์ ๋ฌธ ๊ฐ์ ํ๋ ์ ๋ ๋ค์ผ์ จ์ผ๋ฉด ์ถฉ๋ถํฉ๋๋ค)
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ง์ (์๊ฐํ ์ด๋ฒคํธ ์ฐธ์ฌ์ ๋ฌด๋ฃ ๊ต์ก ์๋ฃ ์ ๊ณตํฉ๋๋ค!)
์๋
ํ์ธ์
๋ฉ์ฝ๋ฉ์ฝ์
๋๋ค.
์ธํ๋ฐ์ธ์ฆ
์ปค๋ฆฌ์ด์ธ์ฆ
19,363
๋ช
์๊ฐ์
1,959
๊ฐ
์๊ฐํ
362
๊ฐ
๋ต๋ณ
4.9
์
๊ฐ์ ํ์
28
๊ฐ
๊ฐ์
๋ฉ์ฝ๋ฉ์ฝ ๊ฐ์ 15% ํ ์ธ์ฟ ํฐ ๋ฐ๊ธฐ
๐ ํ ์ค, ํฌํญ๊ณต๋ ์ถ์ | ํ์
๋ฐฑ์๋ ๊ฐ๋ฐ์(+9๋
)
๐ฅ2๋ง ์ ํ๋ฒ | ๊ฐ๋ฐ ์ฝํ
์ธ ์ ์
๐ ์ธํ๋ฐ ๊ฐ์ฌ | ๋์ ์๊ฐ์ 18,000+
๐ฅ ๊ฐ๋ฐ์ ์ทจ์
์ปค๋ฎค๋ํฐ ์ด์ ์ค (8,000+)
๐งฉ ์คํ์์ค (Gradle, Spring AI ๋ฑ) ๋ค์ Contributor
๐38๊ฐ ์๋ฅ ํฉ๊ฒฉ ๋ฐ ํฌ๋ชฝ ์ด๋ ฅ์ ์ฒจ์ญ 100+ํ ์ด์ ๊ฒฝํ (ํ์ 5.0์ )
ํ์
์์ ์ ๋ฌ๋๋ ์์ํ ์ ๋ณด๋ค์ ์ฝ๊ณ , ์ฐ์ญ์ ์ผ๋ก ์ดํด๋๊ฒ ์ ๋ฌํฉ๋๋ค.
์ปค๋ฆฌํ๋ผ
์ ์ฒด
42๊ฐ โ (9์๊ฐ 58๋ถ)
์๊ฐํ
์ ์ฒด
61๊ฐ
5.0
61๊ฐ์ ์๊ฐํ
๋ค์จ์๊ฐํ 1
โ
ํ๊ท ํ์ 5.0
5
100% ์๊ฐ ํ ์์ฑ์์๋ค์ ํตํด ํด๋น ๊ฐ๋ ์ ์ฌ๋ฏธ์๊ฒ ํ์ตํ์์ต๋๋ค. ์๋ชป์๊ณ ์๋ ๋ถ๋ถ๊ณผ ๋ชจ๋ฅด๋ ๋ถ๋ถ์ ์ฌ๋ฏธ์๊ฒ ํ์ตํ์ต๋๋ค.
- ๋ฉ์ฝ๋ฉ์ฝ์ง์๊ณต์ ์
์์๋ฅผ ํตํด ๊ฐ๋ ์ ์ฌ๋ฏธ์๊ฒ ์ตํ์ จ๋ค๋ ์ ๋ง ๊ธฐ์ฉ๋๋ค. ์๋ชป ์๊ณ ์๋ ๋ถ๋ถ๊น์ง ๋ฐ๋ก์ก๋ ์๊ฐ์ด ๋์ จ๋ค๋ ๊ฐ์๋ฅผ ๋ง๋ ๋ณด๋์ด ๋๊ปด์ง๋๋ค, ์๊ฐํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๊น์ธ๋ฒ์๊ฐํ 6
โ
ํ๊ท ํ์ 4.8
5
100% ์๊ฐ ํ ์์ฑํ๋ก์, DI์ ๋ํด ์์ธํ ๋ฐฐ์ธ ์ ์์ด์ ์ข์์ต๋๋ค.
- ๋ฉ์ฝ๋ฉ์ฝ์ง์๊ณต์ ์
ํ๋ก์์ DI๋ ๋ฉด์ ์์๋ ์์ฃผ ๋ฑ์ฅํ๋ ํต์ฌ ๊ฐ๋ ์ธ๋ฐ, ๋๊น์ง ์์ฃผํ๋ฉฐ ๊น์ด ์๊ฒ ์ตํ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๊น๋ฏผ๊ตฌ์๊ฐํ 2
โ
ํ๊ท ํ์ 5.0
5
39% ์๊ฐ ํ ์์ฑ์คํ๋ง๋ถํธ ์ฒ์ํ์๋ ๋ถ, ์ด์ ์๋ฐ ๋ฐฐ์ด๋ถ, ๋ฐฐ์ด์ง ์ค๋๋ ๋ถ๋ค ๋ค์ผ์๋ฉด ์ข์๊ฑฐ ๊ฐ์์. ๊ทธ๋ฆฌ๊ณ ๋ฉ์ฝ๋ฉ์ฝ๋ ๊ฐ์๋ฅผ ์ํ์ ์ ๊ท์ ์์ ๋ค์ด์ต๋๋ค
- ๋ฉ์ฝ๋ฉ์ฝ์ง์๊ณต์ ์
๊ท์ ์์ ๋ค์ด์จ๋ค๊ณ ํด์ฃผ์๋ ์ ๋ง ๊ธฐ๋ถ ์ข์ ๋ง์์ด์์. ์ฒ์ ์์ํ์๋ ๋ถ๋ค๋ ์์ฐ์ค๋ฝ๊ฒ ๋ฐ๋ผ์ฌ ์ ์๋๋ก ๊ณ์ ์ ๊ฒฝ ์ฐ๊ฒ ์ต๋๋ค, ๊ฐ์ฌํฉ๋๋ค!
์ฐฝ๊ทผ์๊ฐํ 2
โ
ํ๊ท ํ์ 5.0
5
33% ์๊ฐ ํ ์์ฑ๊ฐ์์ค๋ฝ๊ฒ ํ์ฌ์์ ์คํ๋ง์ ์ฐ๊ฒ ๋๋ฉด์ ๋ฐ๊ฐ์ ๋ก(?) ์๊ฐํ๊ฒ ๋ ๊ฐ์์๋๋ฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก ๋งํ๋ฉด ์ ๋ค์์ผ๋ฉด ํฐ์ผ ๋ ๋ปํ์ต๋๋ค. ๋ฐฑ์๋๋ฅผ ์์ ์ฒ์ ํ๋ ์์ค์ ์๋๊ณ , ๊ธฐ์กด์ Nest๋ฅผ ์ฌ์ฉํด๋ณธ ๊ฒฝํ์ด ์์ด์ ์คํ๋ง์ด ๋๋ฌด ๋ฌด๊ฒ๊ฑฐ๋ ๋ต๋ตํ๊ฒ ๋๊ปด์ง๋ฉด ์ด์ฉ๋ ๊ฑฑ์ ํ๋๋ฐ, ๊ทธ๋ฐ ๊ฑฑ์ ์ ์ฒซ ๊ฐ์๋ถํฐ ์ฐ์ฐ์กฐ๊ฐ ๋๋๊ตฐ์. ์คํ๋ง์ ์ฒ ํ๋ถํฐ ๊ตฌ์กฐ, ์ ์ด๋ ๊ฒ ์ค๊ณ๋๋์ง๊น์ง ํ๋ฆ์ด ๋๋ฌด ๋งค๋๋ฌ์์ โ์ ๊ทธ๋์ ์คํ๋ง์ด ์ด๋์ ์ฐ์ด๋๊ตฌ๋โ ํ๊ณ ๋ฌด๋ฆ์ ๋ช ๋ฒ์ด๋ ์ณค๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋จ์ํ ๋ฌธ๋ฒ๋ง ๋์ดํ๋ ๊ฒ ์๋๋ผ, ์ค๋ฌด์์ ํ์ํ ๊ฐ๊ฐ๊ณผ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ์ ๋๋ก ์ก์์ฃผ๋ ๊ฐ์๋ผ์ Nest๋ฅผ ์จ๋ดค๋ ์ ์ฅ์์๋ ๋น๊ตํ๋ฉด์ ์ดํดํ๊ธฐ ์ ๋ง ์ข์์ต๋๋ค. ์คํ๋ง ์ฒ์์ด์ ๋ถ์ ๋ฌผ๋ก ์ด๊ณ , ์ ์ฒ๋ผ ๋ค๋ฅธ ํ๋ ์์ํฌ ๊ฒฝํ์ ์๋๋ฐ ์คํ๋ง์ ์ ๋๋ก ๋ฐฐ์๋ณธ ์ ์๋ ๋ถ๋คํํ ๋ ์ด ๊ฐ์ ํ๋๋ก ์คํ๋ง์ ๋ํ ๋ง์ฐํ ๋๋ ค์์ด ํ ์ฌ๋ผ์ง ๊ฑฐ๋ผ๊ณ ์์ ์๊ฒ ๋งํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ๊ธฐ ๋ค์ง๊ธฐ์ฉ์ผ๋ก ์ด๋งํ ๊ฐ์ ์ฐพ๊ธฐ ์ฝ์ง ์์ต๋๋ค.
- ๋ฉ์ฝ๋ฉ์ฝ์ง์๊ณต์ ์
Nest ๊ฒฝํ์ ๊ฐ์ง๊ณ ์ค์ จ๋๋ฐ๋ ์คํ๋ง์ ์ค๊ณ ์ฒ ํ์ด ์์ฐ์ค๋ฝ๊ฒ ์ฐ๊ฒฐ๋๋ค๊ณ ํ์๋ ์ ๋ง ๊ธฐ์ฉ๋๋ค. ํ๋ ์์ํฌ๋ฅผ ๋๋๋ค๋ฉฐ ๋น๊ตํ๋ฉด์ ์ดํดํ์ จ๋ค๋ ๋ง์์ด ๊ฐ์๋ฅผ ๋ง๋ค๋ฉด์ ๊ฐ์ฅ ๋ฐ๋๋ ๋ฐ์์ด๋ผ ๊ฐ์ฌํ ๋ง์์ด ํฝ๋๋ค.
- ์ฟํํ
์๊ฐํ 106
โ
ํ๊ท ํ์ 5.0
5
31% ์๊ฐ ํ ์์ฑ- ๋ฉ์ฝ๋ฉ์ฝ์ง์๊ณต์ ์
์์คํ ํ๊ฐ๋ฅผ ๋จ๊ฒจ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ์์ผ๋ก์ ํ์ต๊ณผ ์์ ์๋ ์ด๋ฒ ๊ฐ์๊ฐ ๋์์ด ๋๊ธธ ๋ฐ๋๋๋ค.
๋ฉ์ฝ๋ฉ์ฝ๋์ ๋ค๋ฅธ ๊ฐ์
์ง์๊ณต์ ์๋์ ๋ค๋ฅธ ๊ฐ์๋ฅผ ๋ง๋๋ณด์ธ์!
๋น์ทํ ๊ฐ์
๊ฐ์ ๋ถ์ผ์ ๋ค๋ฅธ ๊ฐ์๋ฅผ ๋ง๋๋ณด์ธ์!







![์๋ฐ์ ์คํ๋ง ๋ถํธ๋ก ์์ ์ต์ด ์๋ฒ ๋ง๋ค๊ธฐ, ๋๊ตฌ๋ ์ฝ๊ฒ ๊ฐ๋ฐ๋ถํฐ ๋ฐฐํฌ๊น์ง! [์๋ฒ ๊ฐ๋ฐ ์ฌ์ธ์ ํจํค์ง]๊ฐ์ ์ธ๋ค์ผ](https://cdn.inflearn.com/public/courses/330186/cover/3bb38317-e5c5-4975-b1df-9baa6f19b73d/330186-eng.png?w=420)





