π[Spring] HTTP Body
1οΈβ£ HTTP Body.
- HTTP Body λ HTTP μμ² λλ μλ΅μμ μ€μ λ°μ΄ν°λ₯Ό ν¬ν¨νλ λΆλΆμ λ§ν©λλ€.
- μ£Όλ‘ ν΄λΌμ΄μΈνΈμ μλ² κ°μ λ°μ΄ν° κ΅νμ μν λͺ©μ μΌλ‘ μ¬μ©λλ©°, μμ² λ³Έλ¬Έ(Request Body) κ³Ό μλ΅ λ³Έλ¬Έ(Response Body) μΌλ‘ λλ©λλ€.
1. HTTP Bodyμ ꡬ쑰.
HTTP λ©μμ§μ ꡬμ±μμ.
-
1. μμ²/μλ΅ λΌμΈ
- HTTP λ©μλ(GET, POST λ±)λ μν μ½λ(200, 404 λ±)κ° ν¬ν¨λ 첫 λ²μ§Έ μ€μ λλ€.
-
2. ν€λ(Header)
- λ©νλ°μ΄ν°(μμ²/μλ΅μ μμ±, λ°μ΄ν° νμ, μΈμ½λ© λ°©μ λ±)λ₯Ό ν¬ν¨νλ©°, κ° νλκ° key-value νμ μΌλ‘ λμ΄λ©λλ€.
-
3. λ³Έλ¬Έ(Body)
- μ€μ λ°μ΄ν°κ° λ€μ΄κ°λ λΆλΆμ λλ€.
HTTP Bodyλ μ΄λ¬ν λ©μμ§μ λ§μ§λ§ λΆλΆμ μμΉνλ©°, ν΄λΌμ΄μΈνΈκ° μλ²λ‘ 보λ΄λ λ°μ΄λν μλ²κ° ν΄λΌμ΄μΈνΈλ‘ 보λ΄λ λ°μ΄ν°κ° μ¬κΈ°μ ν¬ν¨λ©λλ€.
2. HTTP Bodyμ μ¬μ© λͺ©μ .
-
μμ²(Request) Body
- ν΄λΌμ΄μΈνΈκ° μλ²λ‘ 보λ΄λ λ°μ΄ν°.
- μ£Όλ‘ POST, PUT, PATCH λ±μ μμ²μμ μ¬μ©λ©λλ€.
- μλ₯Ό λ€μ΄, μ¬μ©μ λ‘κ·ΈμΈ μ 보, νμΌ μ λ‘λ, μλ‘μ΄ λ¦¬μμ€ μμ± λ±μ λ°μ΄ν°λ₯Ό μλ²λ‘ λ³΄λΌ λ μ¬μ©λ©λλ€.
-
μλ΅(Response) Body
- μλ²κ° ν΄λΌμ΄μΈνΈμκ² μλ΅ν λ, νμν λ°μ΄ν°λ₯Ό λ³Έλ¬Έμ ν¬ν¨νμ¬ λ³΄λ λλ€.
- μλ₯Ό λ€μ΄, API νΈμΆμ λν κ²°κ³Όλ‘ JSON νμμ λ°μ΄ν°λ₯Ό λ°ννκ±°λ, HTML νμ΄μ§λ₯Ό λ°νν μ μμ΅λλ€.
3. HTTP Bodyκ° μλ κ²½μ°.
μΌλΆ μμ²μ Bodyλ₯Ό ν¬ν¨νμ§ μκΈ°λ ν©λλ€.
-
GET μμ²
- μ£Όλ‘ λ°μ΄ν°λ₯Ό μλ²λ‘λΆν° μμ²νλ λ° μ¬μ©λλ©° Bodyκ° ν¬ν¨λμ§ μμ΅λλ€.
-
DELETE μμ²
- 리μμ€λ₯Ό μμ ν λ μ¬μ©λλ©°, μΌλ°μ μΌλ‘ Bodyκ° μμ΅λλ€.
κ·Έλ¬λ POST, PUT, PATCH μμ² μ λ³΄ν΅ Bodyμ λ°μ΄ν°λ₯Ό ν¬ν¨νμ¬ μ μ‘ν©λλ€.
4. HTTP Bodyμ νμ.
- HTTP Bodyλ λ€μν λ°μ΄ν° νμμ κ°μ§ μ μμΌλ©°, λ°μ΄ν° νμμ Content-Type ν€λμ μν΄ μ μλ©λλ€.
μμ£Ό μ¬μ©λλ νμ.
-
1.
application/json
- JSON νμμ λ°μ΄ν°λ₯Ό μ λ¬ν λ μ¬μ©ν©λλ€.
- μμ
{ "name": "Kobe" "email": "kobe@example.com" }
-
2.
application/x-www-form-urlencoded
- HTML νΌ λ°μ΄ν°λ₯Ό URL μΈμ½λ©νμ¬ μ λ¬ν λ μ¬μ©λ©λλ€.
- νΌ νλκ°
key=value
νμμΌλ‘ μΈμ½λ©λμ΄ μ μ‘λ©λλ€. - μμ
name=Kobe&email=kobe%40example.com
-
3.
multipart/form-data
- νμΌ μ λ‘λμ κ°μ λ°μ΄λ리 λ°μ΄ν°κ° ν¬ν¨λ νΌ λ°μ΄ν°λ₯Ό μ μ‘ν λ μ¬μ©ν©λλ€.
- κ° ννΈκ° μ¬λ¬ λΆλΆμΌλ‘ λλμ΄ μ μ‘λ©λλ€.
- μμ
```json
βboundary
Content-Disposition: form-data; name=βnameβ
Kobe
βboundary
Content-Disposition: form-data; name=βfileβ; filename=βprofile.jpgβ
Content-Type: image/jpeg[λ°μ΄λ리 λ°μ΄ν°]
βboundaryβ
``` -
4.
text/plain
- λ¨μν ν μ€νΈ λ°μ΄ν°λ₯Ό μ μ‘ν λ μ¬μ©λ©λλ€.
- μμ
Hello, this is a plain text message.
-
5. κΈ°ν λ°μ΄λ리 λ°μ΄ν°.
- PDF, μ΄λ―Έμ§, λΉλμ€ λ± λ€μν λ―Έλμ΄ νμΌμ΄ Bodyμ ν¬ν¨λ μ μμ΅λλ€.
-
Content-Type
ν€λμ λ§κ² λ°μ΄ν°κ° μΈμ½λ©λ©λλ€.
5. HTTP Bodyμ μμ.
μμ²(Request) Body μμ (POST μμ²)
POST /login HTTP/1.1
Host: www.example.com
Content-Type: application/json
Content-Length: 51
{
"username": "Kobe",
"password": "12345"
}
- ν€λμ
Content-Type: application/json
μ΄ λͺ μλμ΄ μμΌλ©°, μ΄λ Bodyκ° JSON νμμμ λνλ λλ€. - Bodyμλ λ‘κ·ΈμΈ μ 보λ₯Ό ν¬ν¨ν JSON λ°μ΄ν°κ° λ΄κ²¨ μμ΅λλ€.
μλ΅(Response) Body μμ.
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 85
{
"status": "success",
"data": {
"id": 1,
"name": "Kobe",
"email": "kobe@example.com"
}
}
- ν€λμ
Content-Type: application/json
μ΄ μ€μ λμ΄ μμΌλ©°, μλ²κ° ν΄λΌμ΄μΈνΈμκ² JSON λ°μ΄ν°λ₯Ό λ°νν©λλ€. - Bodyμλ μλ²κ° μλ΅μΌλ‘ λ³΄λΈ λ°μ΄ν°κ° JSON νμμΌλ‘ ν¬ν¨λμ΄ μμ΅λλ€.
6. μμ½.
- HTTP Bodyλ ν΄λΌμ΄μΈνΈμ μλ² κ°μ λ°μ΄ν°λ₯Ό μ μ‘νλ λΆλΆμ λλ€.
- μ£Όλ‘ POST, PUT, PATCH μμ²μμ λ°μ΄ν°λ₯Ό μ μ‘ν λ μ¬μ©λλ©°, μλ²μ μλ΅μλ λ°μ΄ν°κ° ν¬ν¨λ μ μμ΅λλ€.
- λ°μ΄ν° νμμ Content-Type ν€λλ₯Ό ν΅ν΄ μ μλλ©°, JSON, HTML, XML, λ°μ΄λ리 λ°μ΄ν° λ± λ€μν νμμ΄ κ°λ₯ν©λλ€.
2οΈβ£ λ©νλ°μ΄ν°(Metadata)
- λ©νλ°μ΄ν°(Metadata) λ λ°μ΄ν°λ₯Ό μ€λͺ νλ λ°μ΄ν°, μ¦ λ°μ΄ν°μ λν μΆκ° μ 보λ₯Ό μ 곡νλ λ°μ΄ν°μ λλ€.
- λ©νλ°μ΄ν°λ νΉμ λ°μ΄ν°κ° 무μμ λνλ΄λμ§, μ΄λ»κ² μ¬μ©λμ΄μΌ νλμ§, κ·Έλ¦¬κ³ λ°μ΄ν°μ μμ±μ λν λ€μν μ 보λ₯Ό λ΄κ³ μμ΅λλ€.
- μ΄λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό λ μ½κ² μ΄ν΄νκ³ κ΄λ¦¬ν μ μκ² ν©λλ€.
1. λ©νλ°μ΄ν°μ μν .
- λ©νλ°μ΄ν°λ λ°μ΄ν° μ체μ λν μ€λͺ μ μ 곡ν¨μΌλ‘μ¨, λ°μ΄ν°μ ꡬ쑰, μλ―Έ,λͺ©μ λ±μ λͺ νν μλ €μ€λλ€.
- λ©νλ°μ΄ν°λ μ¬λ¬ λ§₯λ½μμ μ¬μ©ν μ μμ΅λλ€.
λ©ν λ°μ΄ν°μ μ£Όμν μν .
-
1. λ°μ΄ν° μ€λͺ
.
- λ°μ΄ν°μ μλ―Έ, νμ, ꡬ쑰λ₯Ό μ€λͺ ν΄ μ€λλ€.
-
2. λ°μ΄ν° κ²μ.
- λ°μ΄ν°λ₯Ό μ½κ² κ²μνκ³ μ°Ύμ μ μλλ‘ λμμ€λλ€.
- μλ₯Ό λ€μ΄, λμκ΄μ μΉ΄νλ‘κ·Έμμ μ± μ μ°ΎκΈ° μν΄ μ λͺ©, μ μ, μΆν μ°λ λ±μ κ²μν μ μλ κ²μ λ©νλ°μ΄ν° λλΆμ λλ€.
-
3. λ°μ΄ν° κ΄λ¦¬.
- λ°μ΄ν°λ₯Ό λΆλ₯νκ³ μ‘°μ§ννλ λ° λμμ μ€λλ€.
-
4. λ°μ΄ν° ν΅μ .
- λ©νλ°μ΄ν°λ₯Ό ν΅ν΄ λ°μ΄ν°μ μ κ·Ό κΆνμ΄λ μ¬μ© λ²μλ₯Ό κ΄λ¦¬ν μ μμ΅λλ€.
2. λ©νλ°μ΄ν°μ μ ν.
- λ©νλ°μ΄ν°λ λ€μν μ νμΌλ‘ λΆλ₯λ μ μμΌλ©°, κ·Έ λͺ©μ μ λ°λΌ λ€λ₯΄κ² μ¬μ©λ©λλ€.
μΌλ°μΌλ‘ λ§μ΄ μ¬μ©λλ λ©νλ°μ΄ν°μ μΈ κ°μ§ μ ν.
-
1. ꡬ쑰μ λ©νλ°μ΄ν°(Structural Metadata)
- λ°μ΄ν°μ ꡬ쑰λ νμμ μ€λͺ νλ μ 보μ λλ€.
- μλ₯Ό λ€μ΄, λ°μ΄ν°λ² μ΄μ€μμ κ° ν μ΄λΈμ νλμ λ°μ΄ν° μ νμ μ€λͺ νλ μ λ³΄κ° μ¬κΈ°μ ν΄λΉλ©λλ€.
-
2. κΈ°μ μ λ©νλ°μ΄ν°(Technical Metadata)
- λ°μ΄ν°λ₯Ό μμ±νκ³ κ΄λ¦¬νλ λ° νμν κΈ°μ μ μΈ μ 보λ₯Ό ν¬ν¨ν©λλ€.
- νμΌμ μμ± λ μ§, μμ λ μ§, μΈμ½λ© λ°©μ λ±μ΄ μ¬κΈ°μ ν΄λΉλ©λλ€.
- μμ€ν μμ λ°μ΄ν°λ₯Ό μ²λ¦¬νκ±°λ μ΄λμν€λ λ° νμν μ λ³΄κ° ν¬ν¨λ©λλ€.
- μμ: νμΌ μμ± μΌμ, μμ μΌμ, νμΌ μμ μ, μΈμ½λ© λ°©μ, ν΄μλ.
- λ°μ΄ν°λ₯Ό μμ±νκ³ κ΄λ¦¬νλ λ° νμν κΈ°μ μ μΈ μ 보λ₯Ό ν¬ν¨ν©λλ€.
-
3. μ€λͺ
μ λ©νλ°μ΄ν°(Descriptive Metadata)
- λ°μ΄ν°λ₯Ό μ€λͺ
νλ μ 보λ‘, λ°μ΄ν°μ λ΄μ©, μ£Όμ ν€μλ λ±μ μ€λͺ
νλ λ° μ¬μ©λ©λλ€.
- λμκ΄μ μΉ΄νλ‘κ·Έλ λ―Έλμ΄ νμΌμ μ λͺ©, μ μ, μΆν μ 보 λ±μ΄ μ΄μ ν΄λΉλ©λλ€.
- μμ: λμμ μ λͺ©, μ μ, μΆνμΌ, ν€μλ, μμ½ μ 보.
- λ°μ΄ν°λ₯Ό μ€λͺ
νλ μ 보λ‘, λ°μ΄ν°μ λ΄μ©, μ£Όμ ν€μλ λ±μ μ€λͺ
νλ λ° μ¬μ©λ©λλ€.
3. λ©νλ°μ΄ν°μ μμ.
-
1. μΉ νμ΄μ§μ λ©νλ°μ΄ν°.
- HTML λ¬Έμμμλ
<meta>
νκ·Έλ₯Ό μ¬μ©νμ¬ μΉ νμ΄μ§μ λν λ©νλ°μ΄ν°λ₯Ό μ μν©λλ€. - μ΄λ μ£Όλ‘ κ²μ μμ§μ΄ μΉ νμ΄μ§λ₯Ό λ μ μ΄ν΄νκ³ , μΈλ±μ±ν μ μλλ‘ λμμ€λλ€.
```html
- HTML λ¬Έμμμλ
- `charset` : λ¬Έμμ λ¬Έμ μΈμ½λ© λ°©μ.
- `description` : μΉ νμ΄μ§μ λ΄μ©μ λν μ€λͺ
.
- `keyword` : μΉ νμ΄μ§μ κ΄λ ¨λ ν€μλ.
- `author` : λ¬Έμ μμ±μ.
- **2. μ΄λ―Έμ§ νμΌμ λ©νλ°μ΄ν°.**
- μ΄λ―Έμ§ νμΌμλ λ©νλ°μ΄ν°κ° ν¬ν¨λ©λλ€.
- μ΄λ―Έμ§ νμΌμ λ©νλ°μ΄ν°λ μΉ΄λ©λΌ μ€μ , 촬μ μμΉ, ν΄μλ λ± λ€μν μ 보λ₯Ό μ 곡ν μ μμ΅λλ€.
- μ΄λ₯Ό **EXIF(Exchangeable Image File Format)** λ©νλ°μ΄ν°λΌκ³ λΆλ¦
λλ€.
```bash
μμ : μ¬μ§ λ©νλ°μ΄ν°
- μΉ΄λ©λΌ μ μ‘°μ¬: Nikon
- μΉ΄λ©λΌ λͺ¨λΈ: D3500
- 촬μ μΌμ: 2024-09-24
- ν΄μλ: 6000 * 4000
- GPS μ’ν: 촬μ μμΉ μ 보
-
3. λμ λ©νλ°μ΄ν°.
- λμμ λ©νλ°μ΄ν°λ λμκ΄ μΉ΄νλ‘κ·Έλ μ μμ± νμΌμμ μ°Ύμλ³Ό μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, μ± μ μ λͺ©, μ μ, μΆνμ¬, ISBN λ±μ΄ λ©νλ°μ΄ν°μ λλ€.
- μ λͺ©: "1984"
- μ μ: μ‘°μ§ μ€μ°
- μΆνμ¬: ννΌμ½λ¦°μ€
- μΆν μ°λ: 1949
- ISBN: 978-0451524935
-
4. λμμ λ©νλ°μ΄ν°.
- λμμ νμΌμλ λ€μν λ©νλ°μ΄ν°κ° ν¬ν¨λ μ μμ΅λλ€.
- λμμμ μ λͺ©, κΈΈμ΄, ν΄μλ, λΉνΈλ μ΄νΈ, μ μ λ μ§ λ±μ΄ μ¬κΈ°μ ν΄λΉλ©λλ€.
- μ λͺ©: "Vaction Highlights"
- κΈΈμ΄: 2μκ° 15λΆ
- ν΄μλ: 1920 * 1080
- λΉλμ€ μ½λ±: H.264
- νμΌ ν¬κΈ°: 1.2GB
4. λ©νλ°μ΄ν°μ μ€μμ±.
-
1. λ°μ΄ν° κ΄λ¦¬.
- λ©νλ°μ΄ν°λ λ°μ΄ν°λ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκ³ μ μ§νλ λ° νμμ μ λλ€.
- μλ₯Ό λ€μ΄, κ²μ μλ₯μ ν₯μμν€κ³ , λ°μ΄ν°λ₯Ό λΆλ₯νκ³ μ 리νλ λ° λμμ μ€λλ€.
-
2. λ°μ΄ν° κ²μ λ° μ κ·Όμ±.
- λ©νλ°μ΄ν°λ λλμ λ°μ΄ν°λ₯Ό μ½κ² νμνκ³ μνλ λ°μ΄ν°λ₯Ό λΉ λ₯΄κ² μ°Ύμ μ μλλ‘ λμ΅λλ€.
- κ²μ μμ§μ μΉνμ΄μ§μ λ©νλ°μ΄ν°λ₯Ό λΆμνμ¬ κ²μ κ²°κ³Όλ₯Ό λμ± μ ννκ² μ 곡ν©λλ€.
-
3. λ°μ΄ν° 보쑴.
- νμΌμ μμ± μΌμ, μμ μΌμ, λ²μ μ 보 λ±μ λ©νλ°μ΄ν°λ λ°μ΄ν°μ μ΄λ ₯μ μΆμ νλ λ° μ μ©νλ©°, λ°μ΄ν°λ₯Ό μ₯κΈ°μ μΌλ‘ 보쑴νκ³ κ΄λ¦¬νλ λ° λμμ μ€λλ€.
5. μμ½.
- λ©νλ°μ΄ν°λ λ°μ΄ν°λ₯Ό μ€λͺ νλ λ°μ΄ν°λ‘, νμΌμ΄λ μ 보λ₯Ό λ³΄λ€ μ½κ² μ΄ν΄νκ³ κ΄λ¦¬ν μ μλλ‘ λμμ€λλ€.
- λ©νλ°μ΄ν°λ μ¬λ¬ μ νμΌλ‘ λλλ©°, μΉνμ΄μ§, μ΄λ―Έμ§, λμμ, λμ λ± λ€μν ννμ λ°μ΄ν°μ μ μ©λμ΄ λ°μ΄ν°μ κ²μ, κ΄λ¦¬, 보쑴μ μ€μν μν μ ν©λλ€.
3οΈβ£ λ°μ΄λ리 λ°μ΄ν°(Binary Data)
- λ°μ΄λ리 λ°μ΄ν°(Binary Data) λ 0κ³Ό 1λ‘ κ΅¬μ±λ μ΄μ§μ ννλ‘ μ μ₯λ λ°μ΄ν°λ₯Ό λ§ν©λλ€.
- μ»΄ν¨ν° μμ€ν μ λͺ¨λ λ°μ΄ν°λ₯Ό κΈ°λ³Έμ μΌλ‘ μ΄μ§μ, μ¦ λ°μ΄λ리 ννλ‘ μ²λ¦¬νκΈ° λλ¬Έμ λ°μ΄λ리 λ°μ΄ν°λ μ»΄ν¨ν°κ° μ΄ν΄ν μ μλ κ°μ₯ κΈ°λ³Έμ μΈ λ°μ΄ν° νμμ λλ€.
- ν μ€νΈ λ°μ΄ν°λ μ¬λμ΄ μ½κ² μ½μ μ μλ ννμΈ λ°λ©΄, λ°μ΄λ리 λ°μ΄ν°λ μ¬λμ΄ λ°λ‘ μ½μ μ μλ νμμΌλ‘ μ μ₯λ©λλ€.
1. λ°μ΄λ리 λ°μ΄ν°μ νΉμ§.
-
1. μ΄μ§μλ‘ νν.
- λ°μ΄λ리 λ°μ΄ν°λ 0κ³Ό 1λ‘ κ΅¬μ±λ μ΄μ§μλ‘ ννλ©λλ€.
- μ»΄ν¨ν°λ λͺ¨λ λ°μ΄ν°λ₯Ό μ κΈ° μ νΈ(μΌμ§ = 1, κΊΌμ§ = 0)λ‘ μ²λ¦¬νκΈ° λλ¬Έμ, λ°μ΄λ리 λ°μ΄ν°λ μ»΄ν¨ν°μ κΈ°λ³Έ λ°μ΄ν° νν λ°©μμ λλ€.
-
2. μ¬λμ΄ μ½μ μ μλ νμ.
- λ°μ΄λ리 λ°μ΄ν°λ μ¬λμ΄ μ§μ μ½κ±°λ ν΄μνκΈ° μ΄λ ΅μ΅λλ€.
- μλ₯Ό λ€μ΄, μ΄λ―Έμ§ νμΌμ΄λ μ€ν νμΌκ³Ό κ°μ λ°μ΄ν°λ μΌλ°μ μΌλ‘ λ°μ΄λλ¦¬λ‘ μ μ₯λλ©°, μ΄λ₯Ό μ§μ μ΄λ©΄ μμλ³Ό μ μλ κΈ°νΈλ€μ΄ λμ΅λλ€.
-
3. νμΌ νμ.
- λλΆλΆμ νμΌ νμμ΄ λ°μ΄λ리 νμμΌλ‘ μ μ₯λ©λλ€.
- μλ₯Ό λ€μ΄, μ΄λ―Έμ§(JPEG, PNG), λΉλμ€(MP4), μ€λμ€(MP3), μ€ν νμΌ(EXE) λ±μ λͺ¨λ λ°μ΄λ리 νμμΌλ‘ μ μ₯λλ©°, μ΄λ₯Ό μ¬λμ΄ μ½μ μ μλ νμμΌλ‘ λ³ννλ €λ©΄ νΉμ νλ‘κ·Έλ¨μ΄λ μννΈμ¨μ΄κ° νμν©λλ€.
2. λ°μ΄λ리 λ°μ΄ν°μ μ.
-
1. μ΄λ―Έμ§ νμΌ(JPEG, PNG λ±)
- μ΄λ―Έμ§ νμΌμ ν½μ κ°λ€μ΄ 0κ³Ό 1λ‘ κ΅¬μ±λ λ°μ΄λ리 λ°μ΄ν°λ‘ μ μ₯λ©λλ€.
- μ΄λ₯Ό μ΄κ³ νμνλ €λ©΄ μ΄λ―Έμ§ λ·°μ΄μ κ°μ μννΈμ¨μ΄κ° νμν©λλ€.
-
2. μ€λμ€ νμΌ(MP3, WAV λ±)
- μ€λμ€ νμΌμ μν₯ μ νΈλ₯Ό λμ§νΈνν λ°μ΄λ리 λ°μ΄ν°λ‘ μ μ₯λ©λλ€.
- μμ νλ μ΄μ΄ νλ‘κ·Έλ¨μ ν΅ν΄ μ΄λ₯Ό μ¬μν μ μμ΅λλ€.
-
3. λμμ νμΌ(MP4, AVI λ±)
- λμμ νμΌμ μμκ³Ό μν₯μ κ²°ν©ν λ°μ΄λ리 λ°μ΄ν°λ‘ μ μ₯λ©λλ€.
- μ΄λ₯Ό 보기 μν΄μλ λΉλμ€ νλ μ΄μ΄κ° νμν©λλ€.
-
4. μ€ν νμΌ(EXE, DLL λ±)
- μ΄μ 체μ μμ μ€νν μ μλ νλ‘κ·Έλ¨μ λ°μ΄λλ¦¬λ‘ μ μ₯λ©λλ€.
- μ¬μ©μκ° νλ‘κ·Έλ¨μ μ€ννλ©΄ μ»΄ν¨ν°λ μ΄ λ°μ΄λ리 λ°μ΄ν°λ₯Ό ν΄μνμ¬ μμ μ μνν©λλ€.
-
5. μμΆ νμΌ(ZIP, RAR λ±)
- μμΆ νμΌμ μ¬λ¬ νμΌμ λ°μ΄λ리 ννλ‘ μμΆνμ¬ νλμ νμΌλ‘ λ¬Άμ κ²μ λλ€.
- μμΆ ν΄μ μννΈμ¨μ΄λ₯Ό ν΅ν΄ μλ νμΌλ‘ 볡μν μ μμ΅λλ€.
3. λ°μ΄λ리 λ°μ΄ν° VS ν μ€νΈ λ°μ΄ν°.
-
ν
μ€νΈ λ°μ΄ν°
- ν μ€νΈ λ°μ΄ν°λ μ¬λμ΄ μ½μ μ μλ ννλ‘ μ μ₯λ λ°μ΄ν°μ λλ€.
- μ£Όλ‘ μνλ²³, μ«μ, κΈ°νΈ λ±μΌλ‘ ꡬμ±λ λ¬Έμλ₯Ό ν¬ν¨νλ©°, μλ₯Ό λ€μ΄ HTML, JSON, XML νμΌ λ±μ΄ μμ΅λλ€.
- ν μ€νΈ λ°μ΄ν°λ μΌλ° ν μ€νΈ νΈμ§κΈ°λ‘ μ½κ² μ΄κ³ μ½μ μ μμ΅λλ€.
-
λ°μ΄λ리 λ°μ΄ν°
- λ°μ΄λ리 λ°μ΄ν°λ μ¬λμ΄ μ½κ² μ½μ μ μλ μ΄μ§μ(0κ³Ό 1)μ μ‘°ν©μΌλ‘ μ μ₯λ λ°μ΄ν°μ λλ€.
- μ΄λ―Έμ§, λμμ, μ€ν νμΌκ³Ό κ°μ λ°μ΄ν°λ μ΄μ§μλ‘ μΈμ½λ©λ λ°μ΄λ리 λ°μ΄ν° νμμΌλ‘ μ μ₯λ©λλ€.
4. λ°μ΄λ리 λ°μ΄ν°μ νμ©.
-
1. λ€νΈμν¬ μ μ‘
- λμ©λ νμΌ(μ: μ΄λ―Έμ§, λμμ, μννΈμ¨μ΄ λ±)μ λ€νΈμν¬λ₯Ό ν΅ν΄ μ μ‘ν λ λ°μ΄λ리 νμμΌλ‘ μ μ‘λ©λλ€.
- λ°μ΄λ리 λ°μ΄ν°λ μμΆ λ° μΈμ½λ©μ ν΅ν΄ ν¨μ¨μ μΌλ‘ μ μ‘λ©λλ€.
-
2. νμΌ μ μ₯
- μ»΄ν¨ν°μ μ μ₯ μ₯μΉ(HDD, SSD λ±)μμ λͺ¨λ λ°μ΄ν°λ λ°μ΄λ리 νμμΌλ‘ μ μ₯λ©λλ€.
- ν μ€νΈ, μ΄λ―Έμ§, μ€λμ€, λΉλμ€, μ€ν νμΌ λ± λͺ¨λ νμΌμ κ²°κ΅ λ°μ΄λ리 λ°μ΄ν°λ‘ λ³νλμ΄ μ μ₯λ©λλ€.
-
3. λ©ν°λ―Έλμ΄ μ²λ¦¬
- μ΄λ―Έμ§, μ€λμ€, λΉλμ€ λ±μ λ©ν°λ―Έλμ΄ νμΌμ λͺ¨λ λ°μ΄λ리 λ°μ΄ν°λ‘ μ μ₯λλ©°, μ΄λ¬ν λ°μ΄ν°λ₯Ό μ²λ¦¬νκΈ° μν΄μλ μ μ ν μννΈμ¨μ΄μ μ½λ±μ΄ νμν©λλ€.
5. λ°μ΄λ리 λ°μ΄ν°λ₯Ό μ²λ¦¬νλ λ°©λ².
- λ°μ΄λ리 λ°μ΄ν°λ₯Ό μ²λ¦¬νλ €λ©΄ νμΌμ μ΄μ΄ μ΄μ§μ λ°μ΄ν°λ₯Ό μ½κ³ ν΄μν μ μλ μννΈμ¨μ΄λ νλ‘κ·Έλλ° μΈμ΄κ° νμν©λλ€.
- μλ₯Ό λ€μ΄, Java, Python, C++ λ± λ€μν νλ‘κ·Έλλ° μΈμ΄λ λ°μ΄λ리 λ°μ΄ν°λ₯Ό μ½κ³ μ°λ κΈ°λ₯μ μ 곡ν©λλ€.
μμ: Javaμμ λ°μ΄λ리 νμΌ μ½κΈ°.
import java.io.FileInputStream;
import java.io.IOException;
public class BinaryFileReader {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("image.jpg")) {
int byteData;
while ((byteData = fis.read()) != -1) {
// 1λ°μ΄νΈμ© μ½μ΄λ€μ
System.out.println(byteData);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
- μ μμμμλ
FileInputStream
μ μ¬μ©νμ¬ λ°μ΄λ리 νμΌμ 1λ°μ΄νΈμ© μ½λ λ°©λ²μ 보μ¬μ€λλ€.
6. μμ½.
- λ°μ΄λ리 λ°μ΄ν°λ μ»΄ν¨ν°κ° μ²λ¦¬νλ κΈ°λ³Έ λ°μ΄ν° νμμΌλ‘, 0κ³Ό 1μ μ΄μ§μλ‘ κ΅¬μ±λ©λλ€.
- μ£Όλ‘ μ΄λ―Έμ§, μ€λμ€, λΉλμ€, μ€ν νμΌ, μμΆ νμΌ λ±μμ μ¬μ©λλ©°, μ¬λμ΄ μ§μ μ½κΈ° μ΄λ ΅μ΅λλ€.
- ν μ€νΈ λ°μ΄ν°μλ λ¬λ¦¬, λ°μ΄λ리 λ°μ΄ν°λ μ»΄ν¨ν°κ° ν΄μν μ μλ νμμΌλ‘ μ μ₯λλ©°, νμΌμ μ΄κ³ μ²λ¦¬νλ €λ©΄ νΉμ μννΈμ¨μ΄κ° νμν©λλ€.
4οΈβ£ JSON(JavaScript Object Notation)
- JSON(JavaScript Object Notation) μ λ°μ΄ν°λ₯Ό μ μ₯νκ³ κ΅ννκΈ° μν κ²½λ λ°μ΄ν° νμμ λλ€.
- μ¬λμ΄ μ½κ³ μ°κΈ° μ¬μ°λ©°, κΈ°κ³κ° λΆμνκ³ μμ±νκΈ°λ μ½λλ‘ μ€κ³λμμ΅λλ€.
- JSONμ ν μ€νΈ νμμ΄λ―λ‘ λͺ¨λ νλ‘κ·Έλλ° μΈμ΄μμ μ½κ² νμ±νκ³ μμ±ν μ μμ΅λλ€.
1. JSONμ νΉμ§.
-
1. κ²½λ λ°μ΄ν° νμ.
- JSONμ κ΅¬μ‘°κ° κ°λ¨νκ³ μ©λμ΄ μμ΄, νΉν μΉ μ ν리μΌμ΄μ μμ μλ²μ ν΄λΌμ΄μΈνΈ κ°μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ λ° λ리 μ¬μ©λ©λλ€.
-
2. μΈμ΄ λ
립μ .
- JSONμ νΉμ νλ‘κ·Έλλ° μΈμ΄μ μμ‘΄νμ§ μμΌλ©°, λλΆλΆμ μΈμ΄μμ JSON λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μλ λΌμ΄λΈλ¬λ¦¬λ λ©μλλ₯Ό μ 곡ν©λλ€.
- μλ°μ€ν¬λ¦½νΈ λ¬Έλ²μ κΈ°λ°μΌλ‘ νμ§λ§, Python, Java, C#, PHP λ±μμλ μ½κ² μ¬μ© κ°λ₯ν©λλ€.
-
3. ν
μ€νΈ κΈ°λ°.
- JSONμ ν μ€νΈλ‘ μ΄λ£¨μ΄μ Έ μμ΄ μ¬λμ΄ μ½κ³ μ΄ν΄νκΈ° μ½μ΅λλ€.
- μ΄λ λλ²κΉ μ΄λ λ°μ΄ν°μ μ μ‘ λ° μ μ₯μ λ§€μ° μ 리ν©λλ€.
2. JSONμ ꡬ쑰.
JSON λ°μ΄ν°μ κΈ°λ³Έμ μΈ λ κ°μ§ ꡬ쑰.
-
1. κ°μ²΄(Object)
-
μ€κ΄νΈ
{}
λ‘ κ°μΈμ§ ν€-κ° μμ μ§ν©.- ν€λ λ¬Έμμ΄μ΄κ³ , κ°μ λ¬Έμμ΄, μ«μ λΆλ¦¬μΈ, λ°°μ΄, κ°μ²΄ λλ
null
μ΄ λ μ μμ΅λλ€.
- ν€λ λ¬Έμμ΄μ΄κ³ , κ°μ λ¬Έμμ΄, μ«μ λΆλ¦¬μΈ, λ°°μ΄, κ°μ²΄ λλ
-
μ€κ΄νΈ
-
2. λ°°μ΄(Array)
-
λκ΄νΈ
[]
λ‘ κ°μΈμ§ κ°λ€μ λͺ©λ‘.- λ°°μ΄ μμ κ°μ μμ°¨μ μΌλ‘ μ μ₯λλ©°, κ° κ°μ λ¬Έμμ΄, μ«μ, λΆλ¦¬μΈ, κ°μ²΄, λ°°μ΄ λλ
null
μΌ μ μμ΅λλ€.
- λ°°μ΄ μμ κ°μ μμ°¨μ μΌλ‘ μ μ₯λλ©°, κ° κ°μ λ¬Έμμ΄, μ«μ, λΆλ¦¬μΈ, κ°μ²΄, λ°°μ΄ λλ
-
λκ΄νΈ
μμ: JSON κ°μ²΄μ λ°°μ΄.
{
"name": "Kobe",
"age": 30,
"isStudent": false,
"skills": ["Java", "JavaScript", "Swift"],
"address": {
"city": "Seoul",
"zipcode": "12345"
}
}
-
κ°μ²΄
- μ΄ μμ μμ μ 체 λ°μ΄ν°λ JSON κ°μ²΄λ‘, μ€κ΄νΈ
{}
μμ μ¬λ¬ ν€-κ° μμ΄ ν¬ν¨λμ΄ μμ΅λλ€.
- μ΄ μμ μμ μ 체 λ°μ΄ν°λ JSON κ°μ²΄λ‘, μ€κ΄νΈ
-
λ°°μ΄
-
skills
λ λ°°μ΄λ‘, μ¬μ©μκ° κ°μ§ νλ‘κ·Έλλ° μΈμ΄λ€μ 리μ€νΈλ‘ λνλ λλ€.
-
-
μ€μ²©λ κ°μ²΄
-
address
λ λ λ€λ₯Έ JSON κ°μ²΄λ‘, μ€μ²©λ ꡬ쑰λ₯Ό κ°μ§λλ€.
-
3. JSONμ λ°μ΄ν° νμ .
JSONμμ μ¬μ©ν μ μλ κΈ°λ³Έ λ°μ΄ν° νμ μ λ€μκ³Ό κ°μ΅λλ€.
-
1. λ¬Έμμ΄(String)
- ν° λ°μ΅ν
"
λ‘ κ°μΈμΈ ν μ€νΈ.- μ:
"Kobe"
- μ:
- ν° λ°μ΅ν
-
2. μ«μ(Number)
- μ μ λλ μ€μ.
- μ:
30
,3.14
- μ:
- μ μ λλ μ€μ.
-
3. λΆλ¦¬μΈ(Boolean)
-
true
λλfalse
- μ:
true
,false
- μ:
-
-
4. κ°μ²΄(Object)
- μ€κ΄νΈ
{}
λ‘ κ°μΈμΈ ν€-κ° μμ μ§ν©.- μ:
{"name": "Kobe", "age": 30}
- μ:
- μ€κ΄νΈ
-
5. λ°°μ΄(Array)
- λκ΄νΈ
[]
λ‘ κ°μΈμΈ κ°λ€μ 리μ€νΈ.- μ:
["Java", "JavaScript", "Swift"]
- μ:
- λκ΄νΈ
-
6. null
- κ°μ΄ μμμ λνλ
λλ€.
- μ:
null
- μ:
- κ°μ΄ μμμ λνλ
λλ€.
4. JSONμ μ¬μ© μ.
1. μλ²μ ν΄λΌμ΄μΈνΈ κ° λ°μ΄ν° μ μ‘
μΉ μ ν리μΌμ΄μ
μμλ μλ²μ ν΄λΌμ΄μΈνΈ κ°μ JSON νμμΌλ‘ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ κ²½μ°κ° λ§μ΅λλ€.
μλ₯Ό λ€μ΄, μ¬μ©μκ° λ‘κ·ΈμΈν λ μλ²λ‘ μ μ‘νλ λ°μ΄ν°λ λ€μκ³Ό κ°μ΄ JSON νμμΌ μ μμ΅λλ€.
μμ²(Request)
{
"username": "kobe",
"password": "12345"
}
μλ΅(Response)
{
"status": "success",
"userId": 101,
"name": "kobe"
}
2. API μλ΅ νμ
λ§μ RESTful APIλ JSONμ μλ΅ νμμΌλ‘ μ¬μ©ν©λλ€.
μλ₯Ό λ€μ΄, λ μ¨ μ 보λ₯Ό μ 곡νλ APIλ λ€μκ³Ό κ°μ JSON λ°μ΄ν°λ₯Ό λ°νν μ μμ΅λλ€.
{
"location": "Seoul",
"temperature": 23,
"weather": "Sunny"
}
3. μ€μ νμΌ
JSONμ μ€μ νμΌ νμμΌλ‘λ λ§μ΄ μ¬μ©λ©λλ€.
μλ₯Ό λ€μ΄, JavaScript νλ‘μ νΈμ package.json
νμΌμ νλ‘μ νΈμ μ€μ μ 보λ₯Ό JSON νμμΌλ‘ μ μ₯ν©λλ€.
{
"name": "my-project",
"version": "1.0.0",
"description": "A sample project",
"dependencies": {
"express": "^4.17.1"
}
}
5. JSON νμ±κ³Ό μμ±.
κ° νλ‘κ·Έλλ° μΈμ΄λ JSON λ°μ΄ν°λ£° νμ±νκ³ μμ±νλ λ°©λ²μ μ§μν©λλ€.
μλ₯Ό λ€μ΄, JavaScriptμ Python κ·Έλ¦¬κ³ Javaμμ JSONμ μ²λ¦¬νλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
JavaScriptμμ JSON μ²λ¦¬
// JSON λ¬Έμμ΄μ κ°μ²΄λ‘ λ³ν (νμ±)
let jsonString = '{"name": "John", "age": 30}';
let obj = JSON.parse(jsonString);
console.log(obj.name); // "John"
// κ°μ²΄λ₯Ό JSON λ¬Έμμ΄λ‘ λ³ν
let newJsonString = JSON.stringify(obj);
console.log(newJsonString); // '{"name":"John","age":30}'
Pythonμμ JSON μ²λ¦¬
import json
# JSON λ¬Έμμ΄μ κ°μ²΄λ‘ λ³ν (νμ±)
json_string = '{"name": "John", "age": 30}'
data = json.loads(json_string)
print(data["name"]) # "John"
# κ°μ²΄λ₯Ό JSON λ¬Έμμ΄λ‘ λ³ν
new_json_string = json.dumps(data)
print(new_json_string) # '{"name": "John", "age": 30}'
Javaμμ JSON μ²λ¦¬
- Javaμμ JSONμ μ²λ¦¬νλ λ°©λ²μ μ¬λ¬ κ°μ§ λΌμ΄λΈλ¬λ¦¬λ₯Ό ν΅ν΄ κ°λ₯ν©λλ€.
- κ°μ₯ λ§μ΄ μ¬μ©λλ λΌμ΄λΈλ¬λ¦¬λ‘λ Jackson, Gson κ·Έλ¦¬κ³ JSON.simple λ± μ΄ μμ΅λλ€.
Jacksonμ μ¬μ©ν JSON μ²λ¦¬
- Jackson λΌμ΄λΈλ¬λ¦¬λ JSON λ°μ΄ν°λ₯Ό μ§λ ¬ν λ° μμ§λ ¬ννλ λ° κ°λ ₯ν κΈ°λ₯μ μ 곡ν©λλ€.
- μ΄λ₯Ό ν΅ν΄ Java κ°μ²΄λ₯Ό JSON νμμΌλ‘ λ³ννκ±°λ, JSON λ¬Έμμ΄μ Java κ°μ²΄λ‘ λ³νν μ μμ΅λλ€.
1. Maven λλ Gradleμ Jackson λΌμ΄λΈλ¬λ¦¬ μΆκ°.
// MAVEN
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version> <!-- μ¬μ©νκ³ μ νλ λ²μ -->
</dependency>
// GRADLE
implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.3'
2. Jacksonμ μ¬μ©νμ¬ JSON λ¬Έμμ΄μ Java κ°μ²΄λ‘ λ³ν (νμ±)
import com.fasterxml.jackson.databind.ObjectMapper;
class User {
private String name;
private int age;
// κΈ°λ³Έ μμ±μ, getter, setterκ° νμν¨.
public User() {}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class JsonExample {
public static void main(String[] args) {
String jsonString = "{\"name\":\"Kobe\", \"age\":30}";
ObjectMapper objectMapper = new ObjectMapper();
try {
// JSON λ¬Έμμ΄μ Java κ°μ²΄λ‘ λ³ν.
User user = objectMapper.readValue(jsonString, User.class);
System.out.println(user.getName()); // Kobe
System.out.println(user.getAge()); // 30
} catch (Exception e) {
e.printStackTrace();
}
}
}
3. Jacksonμ μ¬μ©νμ¬ Java κ°μ²΄λ₯Ό JSON λ¬Έμμ΄λ‘ λ³ν.
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonExample {
public static void main(String[] args) {
User user = new User();
user.setName("Kobe");
user.setAge(30);
ObjectMapper objectMapper = new ObjectMapper();
try {
// Java κ°μ²΄λ₯Ό JSON λ¬Έμμ΄λ‘ λ³ν
String jsonString = objectMapper.writeValueAsString(user);
System.out.println(jsonString); // {"name": "Kobe", "age": 30}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Gsonμ μ¬μ©ν JSON μ²λ¦¬.
Gsonμ Googleμμ κ°λ°ν JSON λΌμ΄λΈλ¬λ¦¬λ‘, κ°λ¨νκ² Java κ°μ²΄λ₯Ό JSONμΌλ‘ μ§λ ¬ννκ±°λ JSON λ¬Έμμ΄μ Java κ°μ²΄λ‘ μμ§λ ¬νν μ μμ΅λλ€.
1. Maven λλ Gradleμ Gson λΌμ΄λΈλ¬λ¦¬ μΆκ°.
// MAVEN
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.8</version> <!-- μ¬μ©νκ³ μ νλ λ²μ -->
</dependency>
// GRADLE
implementation 'com.google.code.gson:gson:2.8.8'
2. Gsonμ μ¬μ©νμ¬ JSON λ¬Έμμ΄μ Java κ°μ²΄λ‘ λ³ν(νμ±)
import com.google.gson.Gson;
public class JsonExample {
public static void main(String[] args) {
String jsonString = "{\"name\":\"Kobe\", \"age\":30}";
Gson gson = new Gson();
// JSON λ¬Έμμ΄μ Java κ°μ²΄λ‘ λ³ν
User user = gson.fromJson(jsonString, User.class);
System.out.println(user.getName()); // Kobe
System.out.println(user.getAge()); // 30
}
}
3. Gsonμ μ¬μ©νμ¬ Java κ°μ²΄λ₯Ό JSON λ¬Έμμ΄λ‘ λ³ν
import com.google.gson.Gson;
public class JsonExample {
public static void main(String[] args) {
User user = new User();
user.setName("Kobe");
user.setAge(30);
Gson gson = new Gson();
// Java κ°μ²΄λ₯Ό JSON λ¬Έμμ΄λ‘ λ³ν.
String jsonString = gson.toJson(user);
System.out.println(jsonString)l // {"name": "Kobe", "age": 30}
}
}
6. JSONκ³Ό XML λΉκ΅
- JSONκ³Ό XMLμ λͺ¨λ λ°μ΄ν°λ₯Ό ꡬ쑰ννλ λ° μ¬μ©λλ ν¬λ§·μ λλ€.
- κ·Έλ¬λ JSONμ XMLμ λΉν΄ λ κ°κ²°νκ³ , μ½κΈ° μ½κ³ μ²λ¦¬ μλκ° λΉ λ₯΄λ€λ μ₯μ μ΄ μμ΄ νλ μΉ μ ν리μΌμ΄μ μμ λ λ§μ΄ μ¬μ©λ©λλ€.
λΉκ΅ νλͺ© | JSON | XML |
---|---|---|
ꡬ쑰 | ν€-κ° μμΌλ‘ μ΄λ£¨μ΄μ§ κ°κ²°ν ꡬ쑰 | νκ·Έλ‘ λλ¬μΈμΈ νΈλ¦¬ ꡬ쑰 |
κ°λ μ± | μ¬λμ΄ μ½κ³ μ°κΈ° μ¬μ | μλμ μΌλ‘ λ 볡μ‘ν¨ |
λ°μ΄ν° ν¬κΈ° | λ μμ ν¬κΈ° | λ ν° ν¬κΈ° |
μ μ°μ± | κ°μ²΄ λ° λ°°μ΄ ννμ΄ μ§κ΄μ | λ°°μ΄ ννμ΄ μλμ μΌλ‘ 볡μ‘ν¨ |
μ§μ | λλΆλΆμ μΈμ΄ λ° νλ μμν¬μμ μ§μ | μ€λλ μμ€ν κ³Όμ νΈνμ±μ΄ μ’μ |
7. μμ½.
- Javaμμλ JSON λ°μ΄ν°λ₯Ό μ²λ¦¬νκΈ° μν΄ μ£Όλ‘ Jacksonκ³Ό Gson λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν©λλ€.
- μ΄ λΌμ΄λΈλ¬λ¦¬λ€μ Java κ°μ²΄μ JSON κ°μ λ³νμ κ°λ¨νκ³ ν¨μ¨μ μΌλ‘ ν μ μκ² ν΄μ€λλ€.
-
ObjectMapper
(Jackson) λλGson
κ°μ²΄λ₯Ό μ¬μ©νμ¬ JSON λ°μ΄ν°λ₯Ό Java κ°μ²΄λ‘ λ³ννκ±°λ, λ°λλ‘ JSONμΌλ‘ λ³νν μ μμ΅λλ€. - JSONμ λ°μ΄ν°λ₯Ό μ μ₯νκ³ κ΅ννλ λ° μ¬μ©λλ κ²½λ ν μ€νΈ νμμ λλ€.
- ꡬ쑰λ κ°μ²΄μ λ°°μ΄λ‘ ꡬμ±λλ©°, λ€μν λ°μ΄ν° νμ (λ¬Έμμ΄, μ«μ, κ°μ²΄, λ°°μ΄ λ±)μ μ§μν©λλ€.
- μΉ μ ν리μΌμ΄μ μμ μλ²μ ν΄λΌμ΄μΈνΈ κ°μ λ°μ΄ν° μ μ‘μ λ리 μ¬μ©λ©λλ€.
- λλΆλΆμ νλ‘κ·Έλλ° μΈμ΄μμ μ½κ² νμ±νκ³ μμ±ν μ μλ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ 곡ν©λλ€.
- κ°κ²°ν ꡬ쑰 λλΆμ XMLλ³΄λ€ λ§μ΄ μ¬μ©λλ©°, νΉν RESTful APIμμ μ£Όλ‘ μ¬μ©λ©λλ€.
5οΈβ£ @PostMapping
μ λν
μ΄μ
.
-
@PostMapping
μ λν μ΄μ μ Spring Frameworkμμ HTTP POST μμ²μ μ²λ¦¬νκΈ° μν΄ μ¬μ©νλ μ λν μ΄μ μ λλ€. - μ£Όλ‘ ν΄λΌμ΄μΈνΈκ° μλ²λ‘ λ°μ΄ν°λ₯Ό μ μ‘ν λ μ¬μ©λ©λλ€.
- μλ₯Ό λ€μ΄, νΌ λ°μ΄ν°λ JSON λ°μ΄ν°λ₯Ό μλ²λ‘ μ μΆνμ¬ μλ‘μ΄ λ¦¬μμ€λ₯Ό μμ±νλ κ²½μ°μ λ§μ΄ μ¬μ©λ©λλ€.
1. @PostMapping
μ μν .
-
HTTP POST μμ² μ²λ¦¬
-
@PostMapping
μ POST μμ²μ νΉμ URLμ 맀ννμ¬ μ²λ¦¬ν©λλ€. - μ£Όλ‘ λ°μ΄ν° μμ±(create) μμ μμ μ¬μ©λλ©°, μλ²λ‘λΆν° λ°μ΄ν°λ₯Ό μ μ‘ν λ μ¬μ©λ©λλ€.
-
-
RESTful APIμμ λ°μ΄ν° μμ±
- RESTful APIμμ 리μμ€λ₯Ό μμ±νλ μμ μ μ²λ¦¬ν λ POST μμ²μ΄ μ¬μ©λ©λλ€.
- μλ₯Ό λ€μ΄, μ¬μ©μλ₯Ό μμ±νκ±°λ λ°μ΄ν°λ² μ΄μ€μ μλ‘μ΄ νλͺ©μ μΆκ°νλ λ±μ μμ μ΄ μμ μ μμ΅λλ€.
κΈ°λ³Έ μ¬μ©λ².
@RestController
public class UserController {
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// μ¬μ©μ μμ± λ‘μ§ μ²λ¦¬
return userService.saveUser(user); // μμ±λ μ¬μ©μ κ°μ²΄ λ°ν
}
}
2. μ£Όμ νΉμ§.
-
1. μμ² λ°μ΄ν° μ μ‘
-
@PostMapping
μ μ£Όλ‘ μμ² λ³Έλ¬Έ(Body)μ λ°μ΄ν°λ₯Ό ν¬ν¨νμ¬ μ μ‘ν©λλ€. - μ΄λ GET μμ²κ³Ό λ¬λ¦¬ URLμ λ°μ΄ν°λ₯Ό λ΄μ§ μκ³ , HTTP μμ²μ Bodyμ λ°μ΄ν°λ₯Ό λ΄μ μλ²λ‘ μ μ‘ν©λλ€.
-
-
2.
@RequestBody
μ ν¨κ» μ¬μ©- μλ²λ‘ μ λ¬λλ JSON λλ XML λ°μ΄ν°λ₯Ό Java κ°μ²΄λ‘ λ³ννλ €λ©΄
@RequestBody
μ λν μ΄μ κ³Ό ν¨κ» μ¬μ©ν©λλ€. -
@RequestBody
λ μμ² λ³Έλ¬Έμ ν¬ν¨λ λ°μ΄ν°λ₯Ό Java κ°μ²΄λ‘ 맀ννλ μν μ ν©λλ€.
- μλ²λ‘ μ λ¬λλ JSON λλ XML λ°μ΄ν°λ₯Ό Java κ°μ²΄λ‘ λ³ννλ €λ©΄
-
3. νΌ λ°μ΄ν° μ²λ¦¬
- HTML νΌμ ν΅ν΄ λ°μ΄ν°λ₯Ό μ μ‘ν λλ
@PostMapping
μ μ¬μ©νμ¬ νΌ λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μμ΅λλ€. - μ΄λλ
@ModelAttribute
λλ@RequestParam
μ μ¬μ©νμ¬ νΌ νλλ₯Ό λ°μΈλ©ν©λλ€.
- HTML νΌμ ν΅ν΄ λ°μ΄ν°λ₯Ό μ μ‘ν λλ
3. μμ 1: JSON λ°μ΄ν°λ₯Ό POST μμ²μΌλ‘ μ²λ¦¬.
@RestController
public class UserController {
// POST μμ²μ μ²λ¦¬νλ©°, μμ² λ³Έλ¬Έμ Java κ°μ²΄λ‘ λ³ν
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// user κ°μ²΄λ ν΄λΌμ΄μΈνΈκ° λ³΄λΈ JSON λ°μ΄ν°λ‘λΆν° 맀νλ¨
System.out.println("User created: " + user.getName());
return userService.saveUser(user); // μλ‘μ΄ μ¬μ©μ κ°μ²΄ λ°ν
}
}
-
@PostMapping("/users)"
:/users
URLλ‘ λ€μ΄μ€λ POST μμ²μ μ²λ¦¬ν©λλ€. -
@RequestBody
: μμ² λ³Έλ¬Έμ ν¬ν¨λ JSON λ°μ΄ν°λ₯ΌUser
κ°μ²΄λ‘ λ³νν©λλ€. - ν΄λΌμ΄μΈνΈλ μλμ κ°μ JSON λ°μ΄ν°λ₯Ό μλ²λ‘ λ³΄λΌ μ μμ΅λλ€.
{
"name": "Kobe",
"age": 30
}
4. μμ 2: HTML νΌ λ°μ΄ν° μ²λ¦¬.
@Controller
public class UserController {
// HTML νΌμμ μ μΆλ λ°μ΄ν°λ₯Ό μ²λ¦¬
@PostMapping("/register")
public String registerUser(@RequestParam String name, @RequestParam int age) {
// νΌ λ°μ΄ν° μ²λ¦¬ λ‘μ§
System.out.println("User name: " + name + ", age: " + age);
return "user_registered"; // μ±κ³΅ νμ΄μ§λ‘ μ΄λ
}
}
-
@RequestParam
: νΌ νλμμ μ μΆλ λ°μ΄ν°λ₯Ό λ©μλ νλΌλ―Έν°λ‘ λ°μΈλ©ν©λλ€.
ν΄λΌμ΄μΈνΈλ HTML νΌμ ν΅ν΄ λ°μ΄ν°λ₯Ό μ μ‘ν μ μμ΅λλ€.
<form action="/register" method="post">
<input type="text" name="name" placeholder="Enter your name">
<input type="number" name="age" placeholder="Enter your age">
<button type="submit">Register</button>
</form>
5. @PostMapping
κ³Ό @RequestMapping
λΉκ΅.
@PostMapping
μ @RequestMapping(method = RequestMethod.POST)
λ₯Ό κ°λ¨νκ² λ체ν μ μλ λ°©λ²μ
λλ€.
@RequestMapping(value = "/users", method = RequestMethod.POST)
public User createUser(@RequestBody User user) {
return userService.saveUser(user);
}
μ μ½λλ₯Ό @PostMapping
μΌλ‘ 리ν©ν λ§.
@PostMapping("/users")
public User createUser(@RequestBody User user) {
return userService.saveUser(user);
}
6. μμ½.
-
@PostMapping
μ HTTP POST μμ²μ μ²λ¦¬νκΈ° μν μ λν μ΄μ μ λλ€. - μ£Όλ‘ μλ‘μ΄ λ¦¬μμ€λ₯Ό μμ±νκ±°λ μλ²λ‘ λ°μ΄ν°λ₯Ό μ μ‘ν λ μ¬μ©λ©λλ€.
- JSON λ°μ΄ν°λ₯Ό μ²λ¦¬ν λλ
@RequestBody
μ ν¨κ» μ¬μ©λλ©°, νΌ λ°μ΄ν°λ@RequestParam
λλ@ModelAttribute
μ ν¨κ» μ²λ¦¬ν μ μμ΅λλ€. -
@PostMapping
μ@RequestMapping
μ κ°κ²°ν λμμΌλ‘ μ¬μ©λ©λλ€.
6οΈβ£ @RequestBody
μ λν
μ΄μ
.
-
@RequestBody
μ λν μ΄μ μ Spring Frameworkμμ HTTP μμ²μ λ³Έλ¬Έ(λ°λ, Body) μ λ΄κΈ΄ λ°μ΄ν°λ₯Ό Java κ°μ²΄λ‘ λ³νν΄μ£Όλ μν μ ν©λλ€. - μ£Όλ‘ POST, PUTκ³Ό κ°μ μμ²μμ ν΄λΌμ΄μΈνΈκ° JSON, XML λλ λ€λ₯Έ νμμ λ°μ΄ν°λ₯Ό μ μ‘ν λ μ΄λ₯Ό μλ²μμ μ²λ¦¬ν μ μλλ‘ λμμ€λλ€.
1. @RequestBody
μ μ£Όμ μν .
-
1. μμ² λ³Έλ¬Έ(Request Body)μ Java κ°μ²΄λ‘ λ³ν
-
@RequestBody
λ ν΄λΌμ΄μΈνΈκ° μμ² λ³Έλ¬Έμ λ΄μ λ³΄λΈ λ°μ΄ν°λ₯Ό Java κ°μ²΄λ‘ λ³νν©λλ€. - μ΄λ, Springμ μ£Όλ‘ Jackson λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ JSON λ°μ΄ν°λ₯Ό Java κ°μ²΄λ‘ λ³νν©λλ€.
-
-
2. μ£Όλ‘ POST, PUT μμ²μμ μ¬μ©
-
@RequestBody
λ POSTλ PUT μμ²μμ λ°μ΄ν°λ₯Ό μλ²λ‘ μ μ‘ν λ λ§μ΄ μ¬μ©λ©λλ€. - μλ₯Ό λ€μ΄, ν΄λΌμ΄μΈνΈκ° μλ‘μ΄ λ¦¬μμ€λ₯Ό μμ±νκ±°λ λ°μ΄ν°λ₯Ό μ λ°μ΄νΈν λ JSON λ°μ΄ν°λ₯Ό λ³Έλ¬Έμ λ΄μ μ μ‘ν μ μμ΅λλ€.
-
-
3. μλ μμ§λ ¬ν
- ν΄λΌμ΄μΈνΈκ° JSON νμμΌλ‘ λ°μ΄ν°λ₯Ό 보λ΄λ©΄, Springμ μ΄λ₯Ό μλμΌλ‘ Java κ°μ²΄λ‘ λ³ν(μμ§λ ¬ν) ν΄μ€λλ€.
2. RequestBody
μ μ¬μ©λ².
μμ 1: JSON λ°μ΄ν°λ₯Ό Java κ°μ²΄λ‘ λ³ν.
ν΄λΌμ΄μΈνΈκ° μλ²λ‘ JSON λ°μ΄ν°λ₯Ό μ μ‘νκ³ , μλ²κ° μ΄λ₯Ό Java κ°μ²΄λ‘ λ³ννμ¬ μ²λ¦¬νλ μμμ λλ€.
@RestController
public class UserController {
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// μμ² λ³Έλ¬Έμμ μ μ‘λ JSON λ°μ΄ν°λ₯Ό User κ°μ²΄λ‘ λ³ν
System.out.println("User name: " + user.getName());
System.out.println("User age: " + user.getAge());
// User κ°μ²΄λ₯Ό μ μ₯νκ±°λ μ²λ¦¬ν ν λ°ν
return userService.saveUser(user);
}
}
-
@PostMApping("/users")
:/users
κ²½λ‘λ‘ λ€μ΄μ€λ POST μμ²μ μ²λ¦¬ν©λλ€. -
@RequestBody User user
: μμ² λ³Έλ¬Έμ μλ JSON λ°μ΄ν°λ₯ΌUser
κ°μ²΄λ‘ λ³νν©λλ€.
ν΄λΌμ΄μΈνΈκ° μ μ‘νλ JSON λ°μ΄ν° μμ
{
"name": "Kobe",
"age": 30
}
μ JSON λ°μ΄ν°λ₯Ό μλ²λ‘ 보λ΄λ©΄, @RequestBody
κ° μ΄λ₯Ό User
κ°μ²΄λ‘ λ³νν©λλ€.
User
ν΄λμ€
public class User {
private String name;
private int age;
// κΈ°λ³Έ μμ±μ, getter, setter
public User() {}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
3. μμ 2: μμ² λ³Έλ¬Έμ ν¬ν¨λ JSON λ°μ΄ν° μ¬μ©.
@RestController
public class ProductController {
@PutMapping("/products/{id}")
public Product updateProduct(@PathVariable Long id, @RequestBody Product product) {
// μμ² λ³Έλ¬Έμμ Product κ°μ²΄λ‘ λ³νλ λ°μ΄ν°λ₯Ό μ¬μ©ν΄ μ
λ°μ΄νΈ μ²λ¦¬
product.setId(id);
return productService.updateProduct(product);
}
}
-
@RequestBody
: JSON λ°μ΄ν°λ₯Ό Java κ°μ²΄μΈProduct
λ‘ λ³νν©λλ€. -
@PathVariable
: URL κ²½λ‘μ ν¬ν¨λ κ°μ λ©μλ νλΌλ―Έν°λ‘ μ¬μ©ν©λλ€. μ μ½λμμλ μ ν IDλ₯Ό κ²½λ‘μμ μΆμΆν©λλ€.
4. μμ² λ³Έλ¬Έκ³Όμ κ΄κ³.
HTTP μμ²μμ μμ² λ³Έλ¬Έμ μ€μ λ‘ μ μ‘λλ λ°μ΄ν°κ° ν¬ν¨λ λΆλΆμ λλ€.
ν΄λΌμ΄μΈνΈκ° μλ²λ‘ λ°μ΄ν°λ₯Ό 보λ΄λ λ°©μ.
- 1. μμ² URLμ 쿼리 νλΌλ―Έν°λ‘ λ°μ΄ν°λ₯Ό ν¬ν¨(GET μμ² λ±μμ μ¬μ©)
- 2. μμ² λ³Έλ¬Έμ λ°μ΄ν°λ₯Ό ν¬ν¨(POST, PUT μμ²μμ μ¬μ©)
@RequestBody
λ λ λ²μ§Έ κ²½μ°μΈ μμ² λ³Έλ¬Έμ λ°μ΄ν°λ₯Ό λ΄μ 보λ΄λ μμ²μμ μ¬μ©λ©λλ€.
5. λ°μ΄ν° νμ.
@RequestBody
λ JSON, XML λ± λ€μν νμμ λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μμ΅λλ€.
κΈ°λ³Έμ μΌλ‘ Springμ Jacksonμ μ¬μ©νμ¬ JSON λ°μ΄ν°λ₯Ό μ²λ¦¬νμ§λ§, XML λ±μ λ€λ₯Έ νμλ μ§μλ©λλ€.
-
JSON
- λλΆλΆμ κ²½μ° JSON νμμ λ°μ΄ν°κ° μμ² λ³Έλ¬Έμ λ΄κ²¨ μ μ‘λλ©°, Springμ μ΄λ₯Ό μλμΌλ‘ Java κ°μ²΄λ‘ λ³νν©λλ€.
-
XML
- νμμ λ°λΌ XML λ°μ΄ν°λ₯Ό μ¬μ©ν μλ μμΌλ©°, Springμμ XMLμ μ²λ¦¬νκΈ° μν λΌμ΄λΈλ¬λ¦¬λ₯Ό μΆκ°νλ©΄ XMLλ μ²λ¦¬ κ°λ₯ν©λλ€.
6. μΆκ° μμ±.
-
required
μμ±-
@RequestBody
λ κΈ°λ³Έμ μΌλ‘ μμ² λ³Έλ¬Έμ λ°μ΄ν°κ° λ°λμ ν¬ν¨λμ΄μΌ ν©λλ€. - νμ§λ§,
required = false
λ‘ μ€μ νλ©΄ μμ² λ³Έλ¬Έμ΄ μμ΄λ μμΈλ₯Ό λ°μμν€μ§ μμ΅λλ€.
-
@PostMapping("/users")
public User createUser(@RequestBody(required = false) User user) {
if (user == null) {
// λ³Έλ¬Έμ΄ μμ κ²½μ° μ²λ¦¬ λ‘μ§
return new User("Anonymous", 0);
}
return userService.saveUser(user);
}
7. μμ½.
-
@RequestBody
λ ν΄λΌμ΄μΈνΈκ° λ³΄λΈ HTTP μμ²μ λ³Έλ¬Έμ Java κ°μ²΄λ‘ λ³ννλ λ° μ¬μ©λ©λλ€. - μ£Όλ‘ POST, PUT μμ²μμ JSON, XML λ±μ λ°μ΄ν°λ₯Ό μλ²λ‘ μ μ‘ν λ μ¬μ©λ©λλ€.
- Springμ κΈ°λ³Έμ μΌλ‘ Jackson λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ JSON λ°μ΄ν°λ₯Ό Java κ°μ²΄λ‘ λ³νν©λλ€.
- μμ² λ³Έλ¬Έμ ν¬ν¨λ λ°μ΄ν°λ₯Ό μ½κ² μ²λ¦¬ν μ μλλ‘ λμμ£Όλ©°, RESTful API κ°λ°μ μμ£Ό μ¬μ©λ©λλ€.