๐Ÿญ Springboot ์ผ์ • ๊ด€๋ฆฌ ์•ฑ

์ด๋™๊ทผยท2025๋…„ 5์›” 14์ผ

Mini Project

๋ชฉ๋ก ๋ณด๊ธฐ
3/8
post-thumbnail

โœ… ์ฝ”๋“œ ํ™•์ธ -> github ๋งํฌ



๐Ÿ“… ์ผ์ • ๊ด€๋ฆฌ ์•ฑ



โœ… ์š”๊ตฌ์‚ฌํ•ญ

๐ŸŽ€ ๊ณตํ†ต ์กฐ๊ฑด

  • ์ผ์ • ์ž‘์„ฑ, ์ˆ˜์ •, ์กฐํšŒ ์‹œ -> ์‘๋‹ต ๋ฐ›๋Š” ์ผ์ • ์ •๋ณด์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ œ์™ธ
  • ์ผ์ • ์ˆ˜์ •, ์‚ญ์ œ ์‹œ -> ์„ ํƒํ•œ ์ผ์ •์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์š”์ฒญ ํ•˜๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ์ผ์น˜ํ•  ๊ฒฝ์šฐ ๊ฐ€๋Šฅ

    • ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์ ์ ˆํ•œ ์˜ค๋ฅ˜ ์ฝ”๋“œ, ๋ฐ ๋ฉ”์‹œ์ง€ ๋ฐ˜ํ™˜
  • CRUD ํ•„์ˆ˜ ๊ธฐ๋Šฅ์€ ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋ฐ JDBC๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐœ๋ฐœ
  • JPA ์‚ฌ์šฉ์ด ์•„๋‹Œ JDBC ์‚ฌ์šฉ
  • Entity์— ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ณ  DTO์— ๋‹ด์•„์„œ ๋ฐ˜ํ™˜
  • 3 Layer Architecture์— ๋”ฐ๋ผ ๊ฐ Layer ๋ชฉ์ ์— ์•Œ๋งž๊ฒŒ ๊ฐœ๋ฐœ

[LV0๏ธโƒฃ] API ๋ช…์„ธ ๋ฐ ERD ์ž‘์„ฑ


[LV1๏ธโƒฃ] ์ผ์ • ์ƒ์„ฑ ๋ฐ ์กฐํšŒ

  • ์ผ์ • ์ƒ์„ฑ(์ผ์ • ์ž‘์„ฑํ•˜๊ธฐ)

    • ์ผ์ • ์ƒ์„ฑ ์‹œ ํฌํ•จ๋˜์–ด์•ผํ•  ๋ฐ์ดํ„ฐ

      • ํ• ์ผ, ์ž‘์„ฑ์ž๋ช…, ๋น„๋ฐ€๋ฒˆํ˜ธ, ์ž‘์„ฑ/์ˆ˜์ •์ผ

      • ์ž‘์„ฑ/์ˆ˜์ •์ผ์€ ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ๋ชจ๋‘ ํฌํ•จํ•œ ์ƒํƒœ

      • ๊ฐ ์ผ์ •์˜ ๊ณ ์œ  ์‹๋ณ„์ž(ID)๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์„œ ๊ด€๋ฆฌ

      • ์ตœ์ดˆ ์ž…๋ ฅ์‹œ ์ˆ˜์ •์ผ์€ ์ž‘์„ฑ์ผ๊ณผ ๋™์ผ

  • ์ „์ฒด ์ผ์ • ์กฐํšŒ (๋“ฑ๋ก๋œ ์ผ์ • ๋ถˆ๋Ÿฌ์˜ค๊ธฐ)

    • ์กฐ๊ฑด

      • ์ˆ˜์ •์ผ (ํ˜•์‹ : YYYY-MM-DD)

      • ์ˆ˜์ •์ผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ

  • ์„ ํƒ ์ผ์ • ์กฐํšŒ(์„ ํƒํ•œ ์ผ์ • ์ •๋ณด ๋ถˆ๋Ÿฌ์˜ค๊ธฐ)

    • ์„ ํƒํ•œ ์ผ์ • ๋‹จ๊ฑด์˜ ์ •๋ณด ์กฐํšŒ

    • ์ผ์ •์˜ ๊ณ ์œ  ์‹๋ณ„์ž(ID)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐํšŒ


[LV2๏ธโƒฃ]

  • ์ผ์ • ์ˆ˜์ • ๋ฐ ์‚ญ์ œ

    • ์„ ํƒํ•œ ์ผ์ • ์ˆ˜์ •

      • ์„ ํƒํ•œ ์ผ์ • ๋‚ด์šฉ ์ค‘ ํ•  ์ผ, ์ž‘์„ฑ์ž๋ช…๋งŒ ์ˆ˜์ •๊ฐ€๋Šฅ

      • ์ž‘์„ฑ์ผ์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์œผ๋ฉด ์ˆ˜์ •์ผ์€ ์ˆ˜์ • ์™„๋ฃŒ ์‹œ ์ˆ˜์ •ํ•œ ์‹œ์ ์œผ๋กœ ๋ณ€๊ฒฝ

    • ์„ ํƒํ•œ ์ผ์ • ์‚ญ์ œ

      • ์„œ๋ฒ„์— ์ผ์ • ์‚ญ์ œ์„ ์š”์ฒญํ•  ๋•Œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ•จ๊ป˜ ์ „๋‹ฌ

โญ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

๐Ÿช„ ๊ณตํ†ต์š”์†Œ

  • ๋ฌธ์ œ

    • ์ดˆ๊ธฐ ์„ธํŒ…์— ์–ด๋ ค์›€์„ ๋А๋‚Œ

      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐํ•˜๋Š” ๋ถ€๋ถ„

      • JDBC ๋ฌธ๋ฒ• ํ™œ์šฉ

[LV0๏ธโƒฃ]

  • ๋ฌธ์ œ

    • API ๋ช…์„ธ์„œ ์ž‘์„ฑ : PostMan์„ ์ด์šฉ ํ•™์Šต์ด ์—†์–ด์„œ ์–ด๋ ค์›€์„ ๋А๋‚Œ
  • ํ•ด๊ฒฐ

    • ์ธํ„ฐ๋„ท ์„œ์นญ์„ ํ†ตํ•ด API ๋ช…์„ธ์„œ ์ž‘์„ฑ

[LV1๏ธโƒฃ] , [LV2๏ธโƒฃ]

  • ๋ฌธ์ œ

    • ์ผ์ • ์ƒ์„ฑ ์‹œ ์ƒ์„ฑ์ผ๊ณผ ์ˆ˜์ •์ผ ์ž๋™ ์ƒ์„ฑ๊ณผ ํƒ€์ž… ์„ค์ •์— ์–ด๋ ค์›€์ด ์žˆ์—ˆ์Œ

      • RequestDto, ResponseDto์—์„œ ์ƒ์„ฑ์ผ๊ณผ ์ˆ˜์ •์ผ ํƒ€์ž…์— ๋ฌธ์ œ
    • JDBC ์‚ฌ์šฉ์— ์–ด๋ ค์›€ ๋А๋‚Œ

    • ๋น„๋ฐ€๋ฒˆํ˜ธ ์กฐํšŒ ๋ถˆ๊ฐ€

    • 3Layer Architecture ์—ญํ• ์— ๋งž๊ฒŒ ๋ถ„๋ฆฌ

    • ์ „์ฒด ์กฐํšŒ (์ž‘์„ฑ์ž, ์ˆ˜์ •์ผ) ์—ฌ๋ถ€

  • ํ•ด๊ฒฐ

    • ์ž๋™์ƒ์„ฑ์„ ํ•˜๊ธฐ ์œ„ํ•ด LocalDateTime.now() ๋ฉ”์„œ๋“œ ํ™œ์šฉ

      • RequestDto๋Š” ๋ฐ”๋กœ entity๋กœ ๋ณ€ํ™˜์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— LocalDateTime ํƒ€์ž…์œผ๋กœ ์„ค์ •

      • ResponseDto๋Š” ์‘๋‹ตํ•  ๋•Œ ํ˜•ํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— DateTimeFormatter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ String ํƒ€์ž…์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์ถœ๋ ฅ

    • JDBC ๊ฐ•์˜์„ ๋“ฃ๊ณ  ๊ฐ•์˜ ์ž๋ฃŒ๋ฅผ ์‘์šฉํ•˜์—ฌ ์‚ฌ์šฉ

      • JDBC Template ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ๋ฒ•์— ๋”ฐ๋กœ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์‚ฌ์šฉ

      • jdbcTemplate.update() : JDBC์—์„œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ž‘์—…์„ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ

      • jdbcTemplate.queryForObject() : ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉ

      • jdbcTemplate.query() : ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฒฐ๊ณผ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉ (๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ์กฐํšŒ)

      • BeanPropertyRowMapper() : SQL ์ฟผ๋ฆฌ๋กœ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ DTO ๊ฐ์ฒด๋กœ "๋งคํ•‘"ํ•ด์ฃผ๋Š” ๋งคํผ

    • ์ฒ˜์Œ์—๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ null๋กœ ์ฒ˜๋ฆฌํ•˜์˜€๋‹ค๊ฐ€ ResponseDto๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ•„๋“œ๊ฐ’์— ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ์‘๋‹ตํ•  ๋•Œ ์‚ฌ์šฉ

    • Service,Repository ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ ํ›„ ๊ตฌํ˜„ ํด๋ž˜์Šค์™€ Controller, RequestDto,ResponseDto ๊ฐ์ž ์—ญํ• ์„ ๋‚˜๋ˆ„์–ด ์ฑ…์ž„์„ ๋ถ„ํ• 

    • @RequestParam ์‚ฌ์šฉ ํ›„ JDBC์—์„œ ์‚ฌ์šฉ

      • ์ˆ˜์ •์ผ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋งž์ถ”๋Š”๋ฐ ์–ด๋ ค์›€ ๋А๋‚Œ
profile
์•ˆ๋…•ํ•˜์„ธ์š”

0๊ฐœ์˜ ๋Œ“๊ธ€