๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Today I Learned(TIL)/์ŠคํŒŒ๋ฅดํƒ€ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

์ฃผํŠน๊ธฐ ์ž…๋ฌธ/์ˆ™๋ จ_Day 7

by carrot0911 2024. 12. 5.

์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง 

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ(Java) 1๋ฌธ์ œ ํ’€์ด & ๋ธ”๋กœ๊ทธ ์ •๋ฆฌ
  • ๊ฐœ์ธ ๊ณผ์ œ Lv0 - API ๋ช…์„ธ์„œ ์ž‘์„ฑ
  • ๊ฐœ์ธ ๊ณผ์ œ Lv0 - ERD ์˜์ƒ ์‹œ์ฒญ & ์ž‘์„ฑ
  • ์ˆ˜์ค€๋ณ„ ํ•™์Šต๋ฐ˜_๋ฒ ์ด์ง๋ฐ˜ ๋ฏธ๋‹ˆ ์„ธ์…˜ ๋“ฃ๊ธฐ
  • TIL ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ

 

์˜ค๋Š˜ ์–ป์€ ๋‚ด์šฉ ์ •๋ฆฌ โœ๏ธ 

์˜ค๋Š˜ ์ง„ํ–‰ํ•œ ๊ฐœ์ธ ๊ณผ์ œ ์ƒํ™ฉ์„ ์ •๋ฆฌํ•ด์•ผ๊ฒ ๋‹ค!

์ผ์ • ๊ด€๋ฆฌ ์•ฑ API ๋ช…์„ธ์„œ

์ผ์ • ์ƒ์„ฑ

Description : ์ƒˆ๋กœ์šด ์ผ์ •์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ์š”์ฒญ ์‹œ ์ผ์ •์˜ ์ œ๋ชฉ, ๋‚ด์šฉ, ์ž‘์„ฑ์ž๋ช…, ๋น„๋ฐ€๋ฒˆํ˜ธ, ์ž‘์„ฑ์ผ, ์ˆ˜์ •์ผ์„ ํฌํ•จํ•˜๋ฉฐ, ์„œ๋ฒ„์—์„œ ๊ฐ ์ผ์ •์— ๊ณ ์œ  ID๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

HTTP Method : POST

Endpoint : /todos

Request Body

{
    "title" : "์ œ๋ชฉ",
    "content" : "๋‚ด์šฉ",
    "writer" : "์ž‘์„ฑ์ž๋ช…",
    "password" : "๋น„๋ฐ€๋ฒˆํ˜ธ",
    "created_date" : "YYYY-MM-DD HH:mm:ss",
    "updated_date" : "YYYY-MM-DD HH:mm:ss"
}
  • title (string) : ์ผ์ • ์ œ๋ชฉ.
  • content (string) : ์ผ์ • ๋‚ด์šฉ.
  • writer (string) : ์ž‘์„ฑ์ž ์ด๋ฆ„.
  • password (string) : ์ผ์ • ์ˆ˜์ •/์‚ญ์ œ ์‹œ ์‚ฌ์šฉํ•  ๋น„๋ฐ€๋ฒˆํ˜ธ.
  • created_date (string) : ์ž‘์„ฑ์ผ.
  • updated_date (string) : ์ˆ˜์ •์ผ.

Response

{
		"id" : 1,
    "title" : "์ œ๋ชฉ",
    "content" : "๋‚ด์šฉ",
    "writer" : "์ž‘์„ฑ์ž๋ช…",
    "created_date" : "YYYY-MM-DD HH:mm:ss",
    "updated_date" : "YYYY-MM-DD HH:mm:ss"
}
  • id (integer) : ์ž๋™ ์ƒ์„ฑ๋œ ๊ณ ์œ  ์‹๋ณ„์ž.
  • title (string) : ์ผ์ • ์ œ๋ชฉ.
  • content (string) : ์ผ์ • ๋‚ด์šฉ.
  • writer (string) : ์ž‘์„ฑ์ž ์ด๋ฆ„.
  • created_date (string) : ์ž‘์„ฑ์ผ.
  • updated_date (string) : ์ˆ˜์ •์ผ.

Status Codes

  • 201 Created : ์ผ์ •์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋จ.
  • 400 Bad Request : ์š”์ฒญ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์Œ.

์ „์ฒด ์ผ์ • ์กฐํšŒ

Description : ๋“ฑ๋ก๋œ ๋ชจ๋“  ์ผ์ •์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. ์ถฉ์กฑํ•˜๋Š” ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ผ์ • ๋ชฉ๋ก์„ ๋‹ค๋ฅด๊ฒŒ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

HTTP Method : GET

Endpoint : /todos

Request Param

GET /todos/updated_date=YYYY-MM-DD&writer=์ž‘์„ฑ์ž๋ช…
GET /todos/updated_date=YYYY-MM-DD
GET /todos/writer=์ž‘์„ฑ์ž๋ช…
GET /todos

Response

[
    {
        "id" : 1,
        "title" : "์ œ๋ชฉ",
        "content" : "๋‚ด์šฉ",
        "writer" : "์ž‘์„ฑ์ž๋ช…",
        "created_date" : "YYYY-MM-DD HH:mm:ss",
        "updated_date" : "YYYY-MM-DD HH:mm:ss"
    },
    {
        "id" : 2,
        "title" : "์ œ๋ชฉ",
        "content" : "๋‚ด์šฉ",
        "writer" : "์ž‘์„ฑ์ž๋ช…",
        "created_date" : "YYYY-MM-DD HH:mm:ss",
        "updated_date" : "YYYY-MM-DD HH:mm:ss"
    }
]
  • id (integer) : ์ž๋™ ์ƒ์„ฑ๋œ ๊ณ ์œ  ์‹๋ณ„์ž.
  • title (string) : ์กฐํšŒํ•œ ์ผ์ • ์ œ๋ชฉ.
  • content (string) : ์กฐํšŒํ•œ ์ผ์ • ๋‚ด์šฉ.
  • writer (string) : ์กฐํšŒํ•œ ์ž‘์„ฑ์ž ์ด๋ฆ„.
  • created_date (string) : ์ž‘์„ฑ์ผ.
  • updated_date (string) : ์ˆ˜์ •์ผ.

Status Codes

  • 200 OK : ์„ฑ๊ณต์ ์œผ๋กœ ์ „์ฒด ์ผ์ •์„ ๋ฐ˜ํ™˜.

์„ ํƒ ์ผ์ • ์กฐํšŒ

Description : ์„ ํƒํ•œ ์ผ์ • ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.

HTTP Method : GET

Endpoint : /todos/{id}

  • id : ์กฐํšŒํ•  ์ผ์ •์˜ ๊ณ ์œ  ์‹๋ณ„์ž.

Request : Get ์š”์ฒญ์ด๋ฏ€๋กœ Request Body๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Response

{
    "id" : 1,
    "title" : "์ œ๋ชฉ",
    "content" : "๋‚ด์šฉ",
    "writer" : "์ž‘์„ฑ์ž๋ช…",
    "created_date" : "YYYY-MM-DD HH:mm:ss",
    "updated_date" : "YYYY-MM-DD HH:mm:ss"
}
  • id (integer) : ์ž๋™ ์ƒ์„ฑ๋œ ๊ณ ์œ  ์‹๋ณ„์ž.
  • title (string) : ์กฐํšŒํ•œ ์ผ์ • ์ œ๋ชฉ.
  • content (string) : ์กฐํšŒํ•œ ์ผ์ • ๋‚ด์šฉ.
  • writer (string) : ์กฐํšŒํ•œ ์ž‘์„ฑ์ž ์ด๋ฆ„.
  • created_date (string) : ์ž‘์„ฑ์ผ.
  • updated_date (string) : ์ˆ˜์ •์ผ.

Status Codes

  • 200 OK : ์„ฑ๊ณต์ ์œผ๋กœ ์„ ํƒํ•œ ์ผ์ •์„ ๋ฐ˜ํ™˜.
  • 404 Not Found : ์š”์ฒญํ•œ id์— ํ•ด๋‹นํ•˜๋Š” ์ผ์ •์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ.

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

Description : ์„ ํƒํ•œ ์ผ์ •์˜ ํ• ์ผ, ์ž‘์„ฑ์ž๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ์ˆ˜์ • ๊ฐ€๋Šฅ : title(์ œ๋ชฉ), content(๋‚ด์šฉ), writer(์ž‘์„ฑ์ž๋ช…), updated_date (์ˆ˜์ •์ผ)

HTTP Method : PUT

Endpoint : /todos/{id}

  • id : ์กฐํšŒํ•  ์ผ์ •์˜ ๊ณ ์œ  ์‹๋ณ„์ž.

Request Body

{
    "title": "์ˆ˜์ •ํ•  ์ œ๋ชฉ",
    "content": "์ˆ˜์ •ํ•  ๋‚ด์šฉ",
    "writer": "์ˆ˜์ •ํ•  ์ž‘์„ฑ์ž๋ช…",
    "password": "๋น„๋ฐ€๋ฒˆํ˜ธ",
    "updated_date": "์ˆ˜์ •ํ•  ์‹œ์ ์˜ YYYY-MM-DD HH:mm:ss"
}
  • title (string) : ์ˆ˜์ •ํ•  ์ผ์ • ์ œ๋ชฉ.
  • content (string) : ์ˆ˜์ •ํ•  ์ผ์ • ๋‚ด์šฉ.
  • writer (string) : ์ˆ˜์ •ํ•  ์ž‘์„ฑ์ž ์ด๋ฆ„.
  • password (string) : ํ™•์ธ์„ ์œ„ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ.
  • updated_date (string) : ์ˆ˜์ •์ผ.

Response

{
    "id": 1,
    "title": "์ˆ˜์ •๋œ ์ œ๋ชฉ",
    "content": "์ˆ˜์ •๋œ ๋‚ด์šฉ",
    "writer": "์ˆ˜์ •๋œ ์ž‘์„ฑ์ž๋ช…",
    "created_date" : "YYYY-MM-DD HH:mm:ss",
    "updated_date" : "์ˆ˜์ •๋œ ์‹œ์ ์˜ YYYY-MM-DD HH:mm:ss"
}
  • id (integer) : ๊ณ ์œ  ์‹๋ณ„์ž.
  • title (string) : ์ˆ˜์ •๋œ ์ผ์ • ์ œ๋ชฉ.
  • content (string) : ์ˆ˜์ •๋œ ์ผ์ • ๋‚ด์šฉ.
  • writer (string) : ์ˆ˜์ •๋œ ์ž‘์„ฑ์ž ์ด๋ฆ„.
  • updated_date (string) : ์ˆ˜์ •์ผ.

Status Codes

  • 200 OK : ์ผ์ •์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜์ •๋จ.
  • 400 Bad Request : ์ž˜๋ชป๋œ ์š”์ฒญ ๋ฐ์ดํ„ฐ.
  • 404 Not Found : ์š”์ฒญํ•œ id์— ํ•ด๋‹นํ•˜๋Š” ์ผ์ •์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ.

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

Description : ์„ ํƒํ•œ ์ผ์ •์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

  • password(๋น„๋ฐ€๋ฒˆํ˜ธ)๋ฅผ ํ•จ๊ป˜ ์ „๋‹ฌํ•˜์—ฌ ์‚ญ์ œ ๊ถŒํ•œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

HTTP Method : DELETE

Endpoint : /todos/{id}

  • id : ์‚ญ์ œํ•  ์ผ์ •์˜ ๊ณ ์œ  ์‹๋ณ„์ž.

Request Body

{
    "password": "๋น„๋ฐ€๋ฒˆํ˜ธ"
}
  • password (string) : ํ™•์ธ์„ ์œ„ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ.

Response : DELETE ์š”์ฒญ์ด๋ฏ€๋กœ ์„ ํƒ๋œ ์ผ์ •์ด ์‚ญ์ œ๋˜๋ฉด ๋œ๋‹ค.

Status Codes

  • 200 OK : ์ผ์ •์ด ์„ฑ๊ณต์ ์œผ๋กœ ์‚ญ์ œ๋จ.
  • 400 Bad Request : ์ž˜๋ชป๋œ ์š”์ฒญ ๋ฐ์ดํ„ฐ.
  • 404 Not Found : ์š”์ฒญํ•œ id์— ํ•ด๋‹นํ•˜๋Š” ์ผ์ •์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ.

 

์ผ์ • ๊ด€๋ฆฌ ์•ฑ ERD

ERD (Entity Relationship Diagram)

  • Entity (์กด์žฌํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ) : ์‚ฌ๋žŒ, ๋ฌผ์ฒด, ๊ฐœ๋…(๊ณ„์ •)
  • Attribute (ํŠน์„ฑ, ์†์„ฑ) : ์‚ฌ๋žŒ - ํ‚ค ๋ชธ๋ฌด๊ฒŒ ์„ฑ๋ณ„
  • Relationship (๊ด€๊ณ„) : Entity - Entity ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ด€๊ณ„

<   ํ•„์ˆ˜ ๊ณผ์ œ ERD  >

TODO

  • PK - id
  • title
  • content
  • writer
  • password
  • created_date
  • updated_date

<   ๋„์ „ ๊ณผ์ œ ERD  >

USER

  • PK - id
  • name
  • email
  • created_date
  • updated_date

TODO

  • PK - id
  • FK - user_id
  • title
  • content
  • password
  • created_date
  • updated_date

 

์˜ค๋Š˜ ํ•˜๋ฃจ ์ •๋ฆฌ  โœ๏ธ

์˜ค๋Š˜ ์—ด์‹ฌํžˆ ๊ฐœ์ธ ๊ณผ์ œ Lv0์„ ํ•ด๊ฒฐํ•œ๋‹ค๊ณ  ํ•˜๋ฃจ๋ฅผ ๋‹ค ์‚ฌ์šฉํ–ˆ๋‹ค.
๋ฌผ๋ก  ํŠœํ„ฐ๋‹˜๊ป˜ ๋ฌผ์–ด๋ณด๋ฉด์„œ Lv0์˜ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„๋„ ์ฑ„์šฐ๊ณ  ์ž˜ ๋งˆ๋ฌด๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

์ด์ œ๋Š” ๋Œ€๋ง์˜ Lv1, 2๊ฐ€ ๋‚จ์•„์žˆ๋‹ค..
๋‚ด์ผ๋ถ€ํ„ฐ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ฒœ์ฒœํžˆ ํ•˜๋‚˜์”ฉ ์š”๊ตฌ์‚ฌํ•ญ๋Œ€๋กœ ๋งŒ๋“ค์–ด๊ฐˆ ์ƒ๊ฐ์ด๋‹ค. ์ง„์งœ ์ฒœ์ฒœํžˆ ํ•˜๋‚˜์”ฉ ๋‚˜์•„๊ฐ€๋‹ค๊ฐ€ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ๋ฐ”๋กœ ํŠœํ„ฐ๋‹˜๊ป˜ ๋‹ฌ๋ ค๊ฐ€๋ฉด์„œ ํ•ด๊ฒฐํ•˜๊ณ  ๋˜ ํ•ด๊ฒฐํ•˜๊ณ ... ๊ทธ๋Ÿฌ๋‹ค ๋ณด๋ฉด ๊ณผ์ œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์™„์„ฑ๋˜์–ด ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค!

๊ทธ๋ฆฌ๊ณ .. ์ˆ˜์ค€๋ณ„ ํ•™์Šต๋ฐ˜์„ ์Šคํƒ ๋‹ค๋“œ๋ฐ˜์—์„œ ๋ฒ ์ด์ง๋ฐ˜์œผ๋กœ ์˜ฎ๊ฒผ๋‹ค..!!!
์˜ค๋Š˜ ์ง„ํ–‰ํ•œ ๋ณด์ถฉ ์„ธ์…˜์„ ๋“ค์—ˆ๋Š”๋ฐ ์Šคํƒ ๋‹ค๋“œ๋ฐ˜์—์„œ๋Š” ์ž˜ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ.. ๋ณด์ถฉ ์„ธ์…˜์„ ๋“ฃ๊ณ  ์™œ ๊ทธ๋Ÿฐ์ง€ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค..
์•„์ง ๋‚œ.... ๊ฐœ๋…์ด ๋งŽ์ด ๋ถ€์กฑํ•œ ์ƒํƒœ์˜€๋˜ ๊ฒƒ์ด๋‹ค.. ๊ทธ๊ฒƒ๋„ ์—„์ฒญ๋‚˜๊ฒŒ....

์•ž์œผ๋กœ ๋ฒ ์ด์ง๋ฐ˜์—์„œ ์—ด์‹ฌํžˆ ๋“ค์œผ๋ฉด์„œ ์Šคํ”„๋ง์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ •๋ณตํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.

๋‚ด์ผ ๊ณผ์ œ ํ•˜๋Š๋ผ ์ •์‹ ์—†๊ฒ ์ง€๋งŒ ๊ทธ๋ž˜๋„ ํŒŒ์ดํŒ…!!!!

 

๋‚ด์ผ ๊ณ„ํš โฐ 

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ(Java) 1๋ฌธ์ œ ํ’€์ด & ๋ธ”๋กœ๊ทธ ์ •๋ฆฌ
  • ๊ฐœ์ธ ๊ณผ์ œ Lv1 ๋„์ „ํ•˜๊ธฐ
  • TIL ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ
  • + ์‹œ๊ฐ„์ด ๋œ๋‹ค๋ฉด ๊ฐœ์ธ ๊ณผ์ œ Lv2๋„ ๋„์ „ํ•˜๊ธฐ