TIL 23.11.29

ν™©μ€ν•˜Β·2023λ…„ 11μ›” 28일
0

TIL

λͺ©λ‘ 보기
124/146

πŸ“ŒToday I Learned

Spring

μƒˆ ν”„λ‘œμ νŠΈ λ§Œλ“€κΈ°

New > Spring Legacy Project > Spring MVC Project > "RESTTest" > "com.test.rest" > Finish


REST API, RESTful API

REST, Representational State Transfer

  • μ›Ή μƒμ˜ μžμ›(λ¬Έμ„œ, 이미지, μ˜μƒ λ“±..)을 μžμ›λͺ…μœΌλ‘œ ν‘œμ‹œν•΄μ„œ μƒνƒœλ₯Ό μ£Όκ³ λ°›λŠ” κ·œμΉ™
  • HTTP URIλ₯Ό ν†΅ν•΄μ„œ μžμ›μ„ λͺ…μ‹œν•˜κ³ , HTTP Methodλ₯Ό ν†΅ν•΄μ„œ μžμ›μ— λŒ€ν•œ CRUDλ₯Ό μ²˜λ¦¬ν•˜λŠ” 방식

URI(URL)ν‘œκΈ° 방식

[κ²Œμ‹œνŒ]

  1. 이전 방식 (λ™μ‚¬λ‘œ ν–‰μœ„ 밝히기)
    - λͺ©λ‘λ³΄κΈ° GET Β  http://localhost/board/list.do
    - μΆ”κ°€ν•˜κΈ° POST http://localhost/board/add.do
    - μˆ˜μ •ν•˜κΈ° POST http://localhost/board/edit.do
    - μ‚­μ œν•˜κΈ° POST http://localhost/board/del.do

  2. REST 방식 (μ£Όμ†ŒλŠ” κ°™κ³  λ©”μ†Œλ“œλ§Œ λ‹€λ₯΄λ‹€)

REST API 섀계 κ·œμΉ™

  1. URI에 μžμ›μ„ ν‘œμ‹œν•œλ‹€. > λ§ˆμ§€λ§‰ 단어가 μžμ›λͺ…이 λœλ‹€.

  2. URI에 동사λ₯Ό ν‘œμ‹œν•˜μ§€ μ•ŠλŠ”λ‹€.

  3. HTTP Methodλ₯Ό μ‚¬μš©ν•΄μ„œ 행동을 ν‘œν˜„ν•œλ‹€.(2번 λŒ€μ‹ )
    a. GET: μžμ› μš”μ²­
    b. POST: μžμ› 전달 + μ„œλ²„μΈ‘ 생성
    c. PUT: μžμ› 전달 + μˆ˜μ •(κΈ°μ‘΄ μ‚­μ œ > μƒˆλ‘œ 생성) + 전체 μˆ˜μ •(λͺ¨λ“  컬럼 μˆ˜μ •)
    d. PATCH: μžμ› 전달 + μˆ˜μ •(일뢀 μˆ˜μ •)
    e. DELETE: μžμ› μ‚­μ œ

  4. URI + HTTP Method = REST API

  5. κ΅¬λΆ„μžλŠ” '/'λ₯Ό μ‚¬μš©ν•œλ‹€.

  6. URL의 λ§ˆμ§€λ§‰μ€ '/'λ₯Ό 적지 μ•ŠλŠ”λ‹€.

  7. URIμ—λŠ” '-' μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.(가끔)

  8. URIμ—λŠ” '_' μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.(가독성)

  9. URI은 μ†Œλ¬Έμžλ‘œλ§Œ μž‘μ„±ν•œλ‹€.

  10. ν™•μž₯자λ₯Ό μž‘μ„±ν•˜μ§€ μ•ŠλŠ”λ‹€. > URIκ°€ μžμ›λͺ…μœΌλ‘œ λλ‚˜κΈ° λ•Œλ¬Έμ—


주제 > Address REST API Server ꡬ좕

ν”„λ‘œμ νŠΈ μ„€μ •

  • pom.xml -> jsonλŠ” 맨 μœ„λ§Œ 남기기
  • ν”„λ‘œμ νŠΈ μžλ°” 버전 λ³€κ²½
  • web.xml -> ν•œκΈ€ ν•„ν„° 등둝
  • mapper > rest.xml > mapper μž‘μ„±
  • log4jdbc.log4j2.properties -> ν•œ 쀄 등둝
  • log4j.xml μ•„λž˜μ— μΆ”κ°€

파일 생성

RESTTest > "script.sql"

μ„€μ • ν…ŒμŠ€νŠΈ

  • JDBC μ—°κ²° ν…ŒμŠ€νŠΈ
  • HikariCP ꡬ좕 ν…ŒμŠ€νŠΈ
  • MyBatis ꡬ좕 ν…ŒμŠ€νŠΈ

ojdbc6 lib에 μΆ”κ°€
build path에 μΆ”κ°€


  • src/test/java > "com.test.java.db"
    > "JDBCTest.java"
    > "HikariCPTest.java"
    > "MyBatisTest.java"

λ‹¨μœ„ν…ŒμŠ€νŠΈ μ‚¬μš©ν•˜μž.

포트폴리였 μ œμž‘ μ‹œ 넣을 것
JUnit 둜고
(λ‚΄κ°€ λ§Œλ“ ) κ²°κ³Όμ°½

  • "com.test.controller" > "AddressController.java"
    > RESTController.java

  • "com.test.domain" > "AddressDTO.java"

  • "com.test.persistence"
    > "AddressDAO.java"(I)
    > "AddressDAOImpl.java"(C)

  • views(X) > **** Rest API ServerλŠ” λ·°λ₯Ό λ§Žλ“€μ§€ μ•ŠλŠ”λ‹€!


λ Œλ”λ§ - νŽ˜μ΄μ§€ λ§Œλ“€κΈ°

SSR(Server Side Rendering)

  • μ„œλ²„κ°€ νŽ˜μ΄μ§€λ₯Ό λ§Œλ“€μ–΄ λŒλ €μ€€λ‹€.

λΈŒλΌμš°μ €κ°€ μ„œλ²„μ— 데이터 달라고 μš”μ²­
-> jdbc둜 db 접속
-> 데이터 κ°€μ Έμ˜€κΈ°
-> νŽ˜μ΄μ§€κΉŒμ§€ λ‹€ λ§Œλ“€μ–΄μ„œ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 전달
=> λͺ¨λ“  것을 μ„œλ²„κ°€ λ‹€ λ§Œλ“ λ‹€.

CSR(Cliend Side Rendering)

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ νŽ˜μ΄μ§€ λ§Œλ“ λ‹€.
    -> js둜 νŽ˜μ΄μ§€ λ§Œλ“€κΈ°
    μ€‘μš” λ°μ΄ν„°λŠ” μ„œλ²„μ—μ„œ λ°›μ•„μ˜¨λ‹€.

λΈŒλΌμš°μ €κ°€ μ„œλ²„μ— 데이터 달라고 μš”μ²­
-> jdbc둜 db 접속
-> 데이터 κ°€μ Έμ˜€κΈ°
-> μˆœμˆ˜ν•œ κ°’(ex. JSON)만 λΈŒλΌμš°μ €(ν΄λΌμ΄μ–ΈνŠΈ)μ—κ²Œ 돌렀주기 (ajax)
=> λ°μ΄ν„°λ§Œ μ„œλ²„λ‘œ μˆ˜κΈ‰λ°›μ•˜μ§€ μ‹€μ œ ν™”λ©΄ κ΅¬ν˜„μ€ ν΄λΌμ΄μ–ΈνŠΈκ°€ js둜 μƒμ„±ν•œλ‹€.

js만으둜 데이터λ₯Ό κ°€μ Έμ˜¬ 수 μ—†λ‹€. java(crud μ „λ¬Έ μ„œλ²„μΈ‘ ν”„λ‘œκ·Έλž¨)의 도움이 ν•„μš”ν•˜λ‹€.

κ·Έλ™μ•ˆ λ§Œλ“  μ„œλ²„

-> νŽ˜μ΄μ§€κΉŒμ§€ λ§Œλ“œλŠ” μ„œλ²„

μ§€κΈˆ ν•˜λŠ” μ„œλ²„

-> μˆœμˆ˜ν•œ κ°’λ§Œ κ°€μ Έμ˜€λŠ” μ„œλ²„

Open API
정해진 URL > μš”μ²­ > 데이터 λ°˜ν™˜(xml, json)


μ—…λ‘œλ“œμ€‘..

μ—…λ‘œλ“œμ€‘..

μ—…λ‘œλ“œμ€‘..


REST Client Tool

  1. curl
  2. Postman
  3. Insomnia
  4. VS Code

μ—…λ‘œλ“œμ€‘..

μ—…λ‘œλ“œμ€‘..


profile
μ°¨κ·Όμ°¨κ·Ό ν•˜λ‚˜μ”©

0개의 λŒ“κΈ€