๐Ÿš€chaper 3 ) ์ผ์ •๊ด€๋ฆฌ ์•ฑ ๊ณผ์ œ [Level 2] / TIL day 24

ํ•˜๋ฆฌ๋น„ยท2025๋…„ 3์›” 26์ผ
2

๐Ÿ“ TIL

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

๐Ÿ“ ๊ณผ์ œ ๊ฐœ์š”


โœ”๏ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

  • Java: 17
  • JDK: 17.0.1
  • IDE: IntelliJ
  • Spring Frame Work : 3.4.4
  • API ํ…Œ์ŠคํŠธ ๋„๊ตฌ : postman

โœ”๏ธ ๊ณตํ†ต ์กฐ๊ฑด

  • ์ผ์ • ์ž‘์„ฑ, ์ˆ˜์ •, ์กฐํšŒ ์‹œ - ๋น„๋ฐ€๋ฒˆํ˜ธ ์•ˆ ๋ณด์ด๊ฒŒ
  • ์ผ์ • ์ˆ˜์ •, ์‚ญ์ œ - ์š”์ฒญ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๊ฐ™์„ ๋•Œ
  • 3 Layer Architecture ํ™œ์šฉ
  • CRUD ํ•„์ˆ˜ ๊ธฐ๋Šฅ์€ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ + JDBC ํ™œ์šฉ


๐ŸŽจ ๊ตฌํ˜„ํ•œ ๋‚ด์šฉ


๐ŸŒŸ Git Hub ๋งํฌ & ReadMe / API ๋ช…์„ธ์„œ

ํ•„์ˆ˜๊ธฐ๋Šฅ๋‹จ๊ณ„๋ณ„์š”๊ตฌ์‚ฌํ•ญ
โœ…Level 0API ๋ช…์„ธ์„œ ์ž‘์„ฑํ•˜๊ธฐ, ERD ์ž‘์„ฑํ•˜๊ธฐ, SQL ์ž‘์„ฑํ•˜๊ธฐ
โœ…Level 1์ผ์ • ์ƒ์„ฑ (๊ณ ์œ  ์‹๋ณ„์ž ์ž๋™ ์ƒ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌ)
์ „์ฒด ์ผ์ • ์กฐํšŒ (์ˆ˜์ •์ผ, ์ž‘์„ฑ์ž๋ช… ๋ฐ”ํƒ•์œผ๋กœ ์ผ์ • ์กฐํšŒ)
์„ ํƒ ์ผ์ • ์กฐํšŒ (๊ณ ์œ  ์‹๋ณ„์ž๋กœ ์กฐํšŒ )
โœ…Level 2์„ ํƒ ์ผ์ • ์ˆ˜์ • (๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ)
์„ ํƒ ์ผ์ • ์‚ญ์ œ (๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ)


๐Ÿ“‹ ๊ณ ๋ฏผํ–ˆ๋˜ ๋ถ€๋ถ„


1๏ธโƒฃ ์ ์ ˆํ•œ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋ฅผ ์ ์šฉํ–ˆ๋Š”๊ฐ€?

  • Controller
    ์ตœ๋Œ€ํ•œ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ๋งŒ ํ•˜๋„๋ก ๋ถ„๋ฆฌํ–ˆ๋‹ค

  • Service
    ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๊ณ , ๊ฒ€์ฆ์ด๋‚˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์—ฌ๊ธฐ์„œ ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๋‹ค.
    (์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์ „์ฒด ์ผ์ • ์กฐํšŒ-์กฐ๊ฑด๋ถ€ ํ•„ํ„ฐ๋ง ํ•  ๋•Œ null ๊ฒ€์ฆ์„ ์ด๊ณณ ์ €๊ณณ์—์„œ ํ•œ ๊ฒƒ ๊ฐ™๋‹ค๐Ÿฅฒ)

  • Repository
    DB๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๊บผ๋‚ด์˜ค๊ณ  ๊ธฐ์กด DB์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ๋“ฑ๋“ฑ..
    JDBC๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ sql์„ ํ™œ์šฉํ•ด ์กฐ๊ฑด์„ ํ•„ํ„ฐ๋งํ–ˆ๋‹ค


2๏ธโƒฃ RESTfulํ•œ API๋ฅผ ์„ค๊ณ„ํ–ˆ๋Š”๊ฐ€?

  • โœ”๏ธ RESTful API ์ฒดํฌ๋ฆฌ์ŠคํŠธ

    ํ•ญ๋ชฉ์ค€์ˆ˜ ์—ฌ๋ถ€
    ๋ฆฌ์†Œ์Šค ๋ช…์‚ฌ ์‚ฌ์šฉโœ…
    ๋ณต์ˆ˜ํ˜• ์‚ฌ์šฉโœ…
    ๋™์‚ฌ ํ—ˆ์šฉ ์กฐ๊ฑด๋™์‚ฌ ์‚ฌ์šฉ ์—†์Œ
    ์ž์› ๊ณ„์ธต ๊ด€๊ณ„ ํ‘œํ˜„โœ… ๊ณตํ†ต ๊ณ„์ธต/schedules์‚ฌ์šฉ, ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ/{id} ์‚ฌ์šฉ
    ๋์— ์Šฌ๋ž˜์‹œ ๊ธˆ์ง€โœ…
    (์–ธ๋”๋ฐ” ์‚ฌ์šฉ ๊ธˆ์ง€)ํ•˜์ดํ”ˆ ์‚ฌ์šฉํ•˜์ดํ”ˆ ์‚ฌ์šฉ ์—†์Œ
    ์†Œ๋ฌธ์ž ์‚ฌ์šฉโœ…
    ํŒŒ์ผ ํ™•์žฅ์ž ํฌํ•จ ๊ธˆ์ง€โœ…
    CRUD ํ•จ์ˆ˜๋ช… ๋ฏธ์‚ฌ์šฉโœ… POST, DELETE ๋“ฑ HTTP ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
    ํ•„ํ„ฐ/์ •๋ ฌ/ํŽ˜์ด์ง•โœ… ์ผ์ • ์ „์ฒด ์กฐํšŒ(ํ•„ํ„ฐ)์‹œ query param ์‚ฌ์šฉ /schedules?user=Surin&date=2025-03-25

3๏ธโƒฃ ์ˆ˜์ •, ์‚ญ์ œ API์˜ request๋ฅผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋Š”๊ฐ€?

  • id : Path๋กœ ์ „๋‹ฌ
  • ๋น„๋ฐ€๋ฒˆํ˜ธ : Body ๋‚ด์˜ dto๋กœ ์ „๋‹ฌ
    ์ˆ˜์ •๊ณผ ์‚ญ์ œ API ๋ชจ๋‘ ID๋Š” @PathVariable๋กœ ์ „๋‹ฌํ•˜๊ณ 
    ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” query๋‚˜ param์— ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ  @RequestBody๋กœ ์ „๋‹ฌํ•˜์—ฌ repository์—์„œ ๊ฒ€์ฆํ–ˆ๋‹ค


๐Ÿ› ๏ธ TroubleShooting


โถ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ

๐Ÿ“Œ ๋ฌธ์ œ

  • ์•„์ง ๋ชจ๋“ ๊ฒŒ ๋ฏธ์ˆ™ํ–ˆ๊ธฐ์— ๊ฐ•์˜ ๋‚ด '๋ฉ”๋ชจ์žฅ ํ”„๋กœ์ ํŠธ'๋ฅผ ์ฐธ๊ณ ํ•ด์„œ
    ๋ชจ๋“  ๋กœ์ง์„ ์ปจํŠธ๋กค๋Ÿฌ์— ๋‹ค ๋„ฃ์–ด ๋งŒ๋“ค๊ณ  โž ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  โž DB์— ์—ฐ๊ฒฐํ•˜๋ฉฐ ๋” ํ™•์‹คํ•˜๊ฒŒ ์—ญํ• ์„ ๋‚˜๋ˆ„๋Š” ๊ณผ์ •์œผ๋กœ ์ž‘์„ฑํ–ˆ๋‹ค.

๐Ÿ’ก ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

  • Controller๋Š” ์š”์ฒญ/์‘๋‹ต ๋‹ด๋‹น
  • Service๋Š” ๊ฒ€์ฆ ๋ฐ ๋กœ์ง ๋‹ด๋‹น
  • Repository๋Š” DB์™€ ์ง์ ‘ ํ†ต์‹ 
  • ๊ฐ•์˜๋Œ€๋กœ ํ•˜๋‹ค๋ณด๋‹ˆ Service, Repository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ,
    ์ƒ์„ฑ์ž๋‚˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋ฐ”๋€”๋•Œ๋งˆ๋‹ค ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ํ•œ๋ฒˆ์— ์ˆ˜์ •ํ•˜๊ณ  ์ž„ํ”Œ๋ฆฌ๋จผํŠธํ•˜๋‹ˆ๊นŒ ํŽธํ–ˆ๋‹ค

โท ์ˆ˜์ • / ์‚ญ์ œ์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฒ˜๋ฆฌ

๐Ÿ“Œ ๋ฌธ์ œ

  • ๊ณตํ†ต ์กฐ๊ฑด ์ถฉ์กฑ์„ ์œ„ํ•ด ์ˆ˜์ •์ด๋‚˜ ์‚ญ์ œ์‹œ์—๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์•„ ๊ฒ€์ฆํ•ด์•ผ ํ–ˆ๊ณ ,
    ๋ฐ˜ํ™˜๋  ๋•Œ๋Š” ์‘๋‹ต๋˜์–ด์„  ์•ˆ๋๋‹ค... ์ด๊ฑด ํ•ด๋ณธ ์ ์ด ์—†์—ˆ๋‹ค..! ์‹ค์Šต์˜ˆ์ œ์— ์—†๋‹ค..๐Ÿ˜‚

๐Ÿ’ก ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

  • id๋Š” @PathVariable / ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” @RequestBody๋ฅผ ํ†ตํ•ด dto๋กœ ๋ฐ›์•„ ์ „๋‹ฌํ–ˆ๋‹ค

  • ๋‘˜๋‹ค ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•ด์„œ ScheduleRequestDto๋ฅผ ํ™œ์šฉํ•˜๊ณ 
    ๊ฐ•์˜์—์„œ ๋‚˜์˜จ๋Œ€๋กœ Service์—์„œ intํƒ€์ž…์„ ์‚ฌ์šฉํ•ด์„œ ์˜ˆ์™ธ ์ƒํ™ฉ์„ ๊ฐ€์ •ํ–ˆ๋‹ค

  • Repository์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•˜๊ธฐ ์ „์— Service์—์„œ ์˜ˆ์™ธ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ƒํƒœ์ฝ”๋“œ์™€ ๋ฉ”์„ธ์ง€๋ฅผ ๋‚˜ํƒ€๋ƒˆ๋‹ค


โธ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆํ•˜๊ธฐ

๐Ÿ“Œ ๋ฌธ์ œ

  • ์ˆ˜์ • / ์‚ญ์ œ์‹œ ๋ฐ›์•„์˜จ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๊ธฐ์กด ํ…Œ์ด๋ธ”์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผํ–ˆ๋‹ค.
  • java์—์„œ sql๋ฌธ ํ™œ์šฉ์ด ์ต์ˆ™์น˜ ์•Š์•„ ์ƒ๊ฐ๋ณด๋‹ค ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ ธ๋‹ค

๐Ÿ’ก ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

  • ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” sql์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.
  • ์ž…๋ ฅ๊ฐ’๋“ค์€ ์ฟผ๋ฆฌ ๋‚ด์— ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  placeholder ? ๋กœ ๋Œ€์ฒดํ•˜๊ณ  ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ”์ธ๋”ฉํ–ˆ๋‹ค
  • placeholder

โน ์ˆ˜์ •์ผ ๋ฏธ๋ฐ˜์˜ ๋ฌธ์ œ

๐Ÿ“Œ ๋ฌธ์ œ

  • ์ˆ˜์ •ํ›„์— ์ˆ˜์ •์ผ์ด null์ด๊ฑฐ๋‚˜, ์ˆ˜์ • ์™„๋ฃŒํ›„์— ์ž‘์„ฑ์ผ์ด null์ด๊ฑฐ๋‚˜..
    ๊ณ„์† null ํŒŒํ‹ฐ์˜€๋Š”๋ฐ ์‹ฌ์ง€์–ด ํ…Œ์ด๋ธ” ์ƒ์„ฑ์‹œ์— ๋‚ ์งœ๋Š” ์ „๋ถ€ NOT NULL๋กœ ๋“ฑ๋กํ•ด๋‘ฌ์„œ exception ํŒŒํ‹ฐ์˜€๋‹ค

๐Ÿ’ก ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

  • ์ผ๋‹จ DB์— DEFAULT๊ฐ’์„ ์ถ”๊ฐ€ํ•ด์คฌ๋‹ค TIMESTMAP = CURRENT_TIMESTAMP ์‚ฌ์šฉ

    
    ALTER TABLE schedule 
    MODIFY created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
    
    ALTER TABLE schedule 
    MODIFY updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
  • ์ผ์ • ์ƒ์„ฑ์‹œ : ์ž‘์„ฑ์ผ ์ˆ˜์ •์ผ์„ ๋‘˜๋‹ค ํ˜„์žฌ์‹œ๊ฐ„์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•ด์ฃผ๊ณ  ๋ฐ์ดํ„ฐ์— ์ €์žฅํ–ˆ๋‹ค

  • ์ผ์ • ์ˆ˜์ •์‹œ : ์ˆ˜์ •์ผ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ํ˜„์žฌ์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ–ˆ๋‹ค


โบ ์กฐ๊ฑด๋ถ€ ์กฐํšŒ ์„ค๊ณ„

๐Ÿ“Œ ๋ฌธ์ œ

  • ์กฐ๊ฑด์„ ์ž‘์„ฑ์ž๋ช…์ด๋‚˜ ์ˆ˜์ •์ผ๋กœ ํ•„ํ„ฐ๋ง์„ ํ•ด์•ผํ•˜๋Š”๋ฐ ์ด ์กฐ๊ฑด์ด ๋‘˜๋‹ค ์žˆ์„ ์ˆ˜๋„, ํ•˜๋‚˜๋งŒ ์žˆ์„ ์ˆ˜๋„, ๋‘˜๋‹ค ์—†์„ ์ˆ˜๋„ ์žˆ์—ˆ๋‹ค.
  • ์กฐ๊ฑด์— ๋”ฐ๋ผ sql๋ฌธ์„ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๋‹ค.

๐Ÿ’ก ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

  • ์ผ๋‹จ Controller์—์„œ๋Š” ๋‘˜๋‹ค null์ด ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด๋†“๊ณ  required = false
  • Repository์—์„œ user๋งŒ ์žˆ์„๋•Œ, date๋งŒ ์žˆ์„๋•Œ ๊ฐ๊ฐ ๋‹ค๋ฅด๊ฒŒ sql๋ฌธ์„ ์ด์–ด๋ถ™์˜€๋‹ค
@Override
    public List<ScheduleResponseDto> findAllSchedules(String user, String date) {

        StringBuilder sql = new StringBuilder("select * from schedule where 1=1 ");
        List<Object> fillteringSql = new ArrayList<>();

        if (user != null){
            sql.append("AND user = ?");
            fillteringSql.add(user);
        }

        if (date != null) {
            sql.append("AND DATE(updated_at) = ?");
            fillteringSql.add(Date.valueOf(date));
        }

        sql.append("Order by updated_at desc");

        return jdbcTemplate.query(sql.toString(),scheduleRowMapper(), fillteringSql.toArray());
    }


๐ŸŒŸ ๋‚˜์˜ ํšŒ๊ณ 


  • Spring ๊ธฐ์ดˆ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋…์€ โ€˜๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋ผ๋Š” ๊ฑธ ์ด๋ฒˆ ๊ณผ์ œ๋ฅผ ํ†ตํ•ด ํ™•์‹คํžˆ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.
    ์ฒ˜์Œ์—๋Š” ์–ด๋–ป๊ฒŒ ์‹œ์ž‘ํ•ด์•ผ ํ• ์ง€ ๋ชฐ๋ผ์„œ, Spring์ด ์ฒ˜์Œ์ธ ๋‚˜๋Š” 4์ฃผ์ฐจ๋ถ€ํ„ฐ 6์ฃผ์ฐจ ๊ฐ•์˜ ์ค‘ ์‹ค์Šต ์œ„์ฃผ๋กœ ๋ฐ˜๋ณตํ•˜๋ฉฐ ๋”ฐ๋ผ ๋งŒ๋“ค์—ˆ๋‹ค.
    ์ฒ˜์Œ์—” ์ฝ”๋“œ๋ฅผ ํ†ต์œผ๋กœ ์งœ๊ณ , ๊ทธ๊ฑธ ๋ถ„๋ฆฌํ•˜๊ณ , ๋˜ ๋ถ„๋ฆฌํ•˜๊ณ โ€ฆ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด์„œ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ๋‹ค ๋ณด๋‹ˆ
    ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ Controller, Service, Repository์˜ ์—ญํ•  ๋ถ„๋ฆฌ๊ฐ€ ์™œ ์ค‘์š”ํ•œ์ง€๋ฅผ ์ฒด๊ฐํ–ˆ๋‹ค.
    ํ•œ ๋ฒˆ ์ž˜ ๋ถ„๋ฆฌํ•ด๋‘๋‹ˆ๊นŒ ์ดํ›„ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋•Œ๋„ ํ›จ์”ฌ ํŽธํ–ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋ฉด์„œ JDBC ๋ฐฉ์‹์˜ ์žฅ๋‹จ์ ๋„ ๋А๊ผˆ๋‹ค.
    DB ์—ฐ๊ฒฐ ์ž์ฒด๊ฐ€ ์ฒ˜์Œ์ด๋ผ application.properties ์„ค์ •๋ถ€ํ„ฐ ๋งŽ์ด ํ—ค๋งธ๊ณ ,
    ์‚ฌ์ „์บ ํ”„ ๋•Œ์™€ ๋‹ฌ๋ฆฌ ์ด๋ฒˆ์—๋Š” java์—์„œ SQL ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋А๋ผ ๊ตฌ๊ธ€๋งํ•˜๋ฉด์„œ ํ•˜๋‚˜์”ฉ ํ•ด๋‚˜๊ฐ”๋‹ค.
    ํŠนํžˆ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋ถ€๋ถ„์ด๋‚˜ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๋ฅผ ๊ณ„์† ๋ฐ”๊พธ๋Š” ๊ณผ์ •์ด ์‰ฝ์ง€ ์•Š์•˜๋‹ค.
    ์ง์ ‘ ์ฟผ๋ฆฌ๋ฅผ ์จ์•ผ ํ•œ๋‹ค๋Š” ์ ์€ ์ข‹์•˜์ง€๋งŒ, ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋€” ๋• ๋ฒˆ๊ฑฐ๋กœ์šด ์ ๋„ ์žˆ์—ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ด๋ฒˆ ๊ณผ์ œ๋ฅผ ํ•˜๋ฉฐ API ๋ช…์„ธ์„œ์™€ ERD์˜ ์ค‘์š”์„ฑ๋„ ํฌ๊ฒŒ ๋А๊ผˆ๋‹ค.
    ํŠœํ„ฐ๋‹˜์ด โ€œAPI ์„ค๊ณ„์™€ ERD ์ž‘์—…์— ์ „์ฒด ๊ฐœ๋ฐœ ์‹œ๊ฐ„์˜ 80%๋ฅผ ์“ธ ์ˆ˜๋„ ์žˆ๋‹คโ€๊ณ  ํ•˜์…จ๋Š”๋ฐ,๊ทธ ๋ง์ด ์ •๋ง ๋งž์•˜๋‹ค !
    ์ค‘๊ฐ„์ค‘๊ฐ„ ๋ง‰ํž ๋•Œ๋งˆ๋‹ค ๋‚ด๊ฐ€ ์ž„์˜๋กœ ์ •๋ฆฌํ•ด๋‘” API ๋ช…์„ธ์„œ๋ฅผ ๊ณ„์† ์ฐธ๊ณ ํ•˜๋ฉด์„œ
    ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์žˆ์—ˆ๊ณ , ๋•๋ถ„์— ์‹œ๊ฐ„์„ ์•„๋‚„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
    ํŠนํžˆ ERD๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ทธ๋ ค๋‘๊ณ  ์‚ฌ์šฉํ•˜๋‹ˆ Repository ๋‹จ์—์„œ ์„ค๊ณ„์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์–ด ํ›จ์”ฌ ์ˆ˜์›”ํ–ˆ๋‹ค.
    ๋ฌผ๋ก  ์ด๋ฒˆ์—” ํ…Œ์ด๋ธ”์ด ํ•˜๋‚˜๋ผ ๋‹จ์ˆœํ–ˆ์ง€๋งŒ, ์•ž์œผ๋กœ๋Š” ํ…Œ์ด๋ธ”์ด ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋Š˜์–ด๋‚  ๊ฑฐ๊ณ ,,
    ์ด๋ฒˆ์ฒ˜๋Ÿผ ๋Œ€์ถฉ ์ž‘์„ฑํ•ด๋‘๋ฉด ์ค‘๊ฐ„์— ๊ณ„์† ์ˆ˜์ •ํ•˜๊ฒŒ ๋  ๊ฒƒ ๊ฐ™๋‹ค ๐Ÿ˜‚
    ์•ž์œผ๋กœ๋Š” ์š”๊ตฌ์‚ฌํ•ญ์„ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜๊ณ , ์ดˆ๋ฐ˜์— ERD๋ฅผ ๋” ๊ผผ๊ผผํžˆ ์„ค๊ณ„ํ•ด๋‘๋ฉด ์ •๋ง ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

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