0711 ~ 0717
# 0711 ~ 0717
# 0711 - @AttributeOverrides ๋งคํ ์ ๋ณด ์ฌ์ ์
@MappedSuperclass๋ฅผ ํตํด ์์ ๋ฐ์ ๊ฒฝ์ฐ๋ @Embedded๋ฅผ ํตํด ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํ๋์ ์ ์ธํ ๊ฒฝ์ฐ ํด๋น ์ํฐํฐ์์๋ ๋ค๋ฅธ ์ปฌ๋ผ๋ช
์ ์ฌ์ฉํ๊ณ ์ถ์ ๋๊ฐ ์๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์๋ ์ด๋
ธํ
์ด์
์ด๋ค.
@AttributeOverride ํน์ @AttributeOverrides๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
@MappedSuperclass
public class Vehicle {
@Id
@GeneratedValue
private Integer id;
private String identifier;
private Integer numberOfWheels;
// standard getters and setters
}
@Entity
@AttributeOverride(name = "identifier", column = @Column(name = "VIN"))
public class Car extends Vehicle {
private String model;
private String name;
// standard getters and setters
}
๋ถ๋ชจ ํด๋์ค(Vehicle)์ identifier ์์ฑ์ VIN์ผ๋ก ์ฌ์ ์ํ์ฌ ์ฌ์ฉํจ
@Entity
@AttributeOverrides({
@AttributeOverride(name = "id", column = @Column(name = "CAR_ID"))
@AttributeOverride(name = "identifier", column = @Column(name = "VIN"))
})
public class Car extends Vehicle {
private String model;
private String name;
// standard getters and setters
}
์ฌ๋ฌ ํ๋๋ฅผ ์ฌ์ ์ํ ์ ์๋ค.
# ์๋ฒ ๋๋ ํ์ ์ ์๋ฒ ๋๋ ํ์ ์์ฑ ์ฌ์ ์ํ๊ธฐ
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
@Setter
@Getter
public class Member{
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String name;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "city", column = @Column(name = "HOME_CITY")),
@AttributeOverride(name = "street", column = @Column(name = "HOME_STREET")),
@AttributeOverride(name = "zipcode.zip", column = @Column(name = "HOME_ZIP")),
@AttributeOverride(name = "zipcode.plusFour", column = @Column(name = "HOME_PLUS_FOUR")),
})
private Address homeAddress;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "city", column = @Column(name = "COMPANY_CITY")),
@AttributeOverride(name = "street", column = @Column(name = "COMPANY_STREET")),
@AttributeOverride(name = "zipcode.zip", column = @Column(name = "COMPANY_ZIP")),
@AttributeOverride(name = "zipcode.plusFour", column = @Column(name = "COMPANY_PLUS_FOUR")),
})
private Address companyAddress;
}
@Embeddable
public class Address {
private String city;
private String street;
@Embedded
private Zipcode zipcode;
}
@Embeddable
public class Zipcode {
private String zip;
private String plusFour;
}
name์ .์ ํตํด ์ค์
# 0712 - ๋ฐฑ์๋ API ํจํด - ๋ ์ด์ด๋ ์ํคํ ์ฒ ํจํด(layered architecture)
๊ฐ๋ฐ ๋จ๊ณ์์ ์ข์ ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ์๊ฐํ๋ ๊ฒ์ ์ฝ์ง ์๋ค. ์ฝ๋ ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ฌํ ๋๋
- ํ์ฅ์ฑ(extensibility)
- ์ฌ์ฌ์ฉ์ฑ(reusability)
- ์ ์ง ๋ณด์ ๊ฐ๋ฅ์ฑ(maintainability)
- ๊ฐ๋
์ฑ(readability)
์ ๊ฐ์ ์์๋ค์ ์ผ๋ํด์ผ ํ๋ค.
๋คํ์ด๋ ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ์ด๋ป๊ฒ ๊ตฌ์ํ๊ณ ๊ด๋ฆฌํด์ผ ํ๋์ง๋ ์ด๋ฏธ ๋ง์ด ๋ค๋ฃจ์ด์ก์ผ๋ฉฐ, ๊ทธ์ ๊ดํ ์ ์ฑ์ด๋ ํจํด์ ๋ง์ด ๋์ ์๋ค. ๊ทธ ์ค์์ ๋ฐฑ์๋ API ์ฝ๋์ ๊ฐ์ฅ ๋๋ฆฌ ์ ์ฉ๋๋ ํจํด ์ค ํ๋๋ ๋ ์ด์ด๋ ์ํคํ ์ฒ ํจํด์ด๋ค.
Multi-tier ์ํคํ ์ฒ ํจํด์ด๋ผ๊ณ ๋ ํ๋ ๋ ์ด์ด๋ ์ํคํ ์ฒ๋ ์ฝ๋๋ฅผ ๋ ผ๋ฆฌ์ ์ธ ๋ถ๋ถ ํน์ ์ญํ ์ ๋ฐ๋ผ ๋ ๋ฆฝ๋ ๋ชจ๋๋ก ๋๋์ด์ ๊ตฌ์ฑํ๋ ํจํด์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ๋ชจ๋์ด ์๋ก์ ์์กด๋์ ๋ฐ๋ผ ์ธต์ธตํ ์๋ฏ์ด ์ฐ๊ฒฐ๋์ด์ ์ ์ฒด์ ์์คํ ์ ๊ตฌํํ๋ ๊ตฌ์กฐ์ด๋ค. ๊ทธ๋์ ๋ง์น ๋ ์ด์ด(layer)๋ฅผ ์์ ๋์ ๊ฒ ๊ฐ์ ํํ์ ๊ตฌ์กฐ๊ฐ ๋๋ค.
๊ฐ ์์คํ ๋ง๋ค ๊ฒฝ์ฐ๊ฐ ๋ค๋ฅผ ์ ์์ผ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ณดํต ๋ค์๊ณผ ๊ฐ์ 3๊ฐ์ ๋ ์ด์ด๊ฐ ์กด์ฌํ๋ค.
- presentation layer
- business layer
- persistence
# Presentation layer (User Interface)
Presentation layer๋ ํด๋น ์์คํ ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ํน์ ํด๋ผ์ด์ธํธ ์์คํ ๊ณผ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋๋ ๋ถ๋ถ์ด๋ค. ์น์ฌ์ดํธ์์๋ UI ๋ถ๋ถ์ ํด๋นํ๊ณ ๋ฐฑ์๋ API์์๋ ์ํธํฌ์ธํธ ๋ถ๋ถ์ ํด๋นํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก presentation layer์์ API์ ์๋ํฌ์ธํธ๋ค์ ์ ์ํ๊ณ ์ ์ก๋ HTTP ์์ฒญ(request)๋ฅผ ์ฝ์ด ๋ค์ด๋ ๋ก์ง์ ๊ตฌํํ๋ค. ํ์ง๋ง ๊ทธ ์ด์์ ์ญํ ์ ๋ด๋นํ์ง ์ํ๋ค. ์ค์ ์์คํ ์ด ๊ตฌํํ๋ ๋น์ฆ๋์ค ๋ก์ง์ ๋ค์ ๋ ์ด์ด๋ก ๋๊ธฐ๊ฒ ๋๋ค.
- EndPoint
- Authentication
- JSON Translation
# Business lyaer (Business Logic)
Business layer๋ผ๋ ์ด๋ฆ ๊ทธ๋๋ก ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๋ ๋ถ๋ถ์ด๋ค. ์ค์ ์์คํ ์ด ๊ตฌํํด์ผํ๋ ๋ก์ง์ ์ด ๋ ์ด์ด์์ ๊ตฌํํ๊ฒ ๋๋ค. ๋ฐฑ์๋ API์์๋ Presentation layer์์ ์ ์ก๋ ์์ฒญ์ ์ฝ์ด๋ค์ฌ ์์ฒญ์ ๋ง๊ฒ ๋์ํ๋ ๋ก์ง์ ๊ตฌํํ๋ฉด ๋๋ค.
- Business Logic
- Validation
- Authoristion
# Persistence layer (Data Access)
Persistence layer๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ด๋ จ๋ ๋ก์ง์ ๊ตฌํํ๋ ๋ถ๋ถ์ด๋ค. Business layer์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฑ, ์์ , ์ฝ๊ธฐ ๋ฑ์ ์ฒ๋ฆฌํ์ฌ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ์์ , ์ฝ๊ธฐ ์์ ์ ํ๋ ์ญํ์ ํ๋ค.
- Storage Logic
# ๋ ์ด์ด๋ ์ํคํ ์ฒ์ ํต์ฌ ์์
๋ ์ด์ด๋ ์ํคํ
์ฒ์ ํต์ฌ ์์๋ ๋จ๋ฐฉํฅ ์์กด์ฑ์ด๋ค. ๊ฐ๊ฐ์ ๋ ์ด์ด๋ ์ค์ง ์๊ธฐ๋ณด๋ค ํ์์ ์๋ ๋ ์ด์ด์๋ง ์์กดํ๋ค.
๋ ๋ค๋ฅธ ํต์ฌ ์์๋ "sepration of concerns"์ด๋ค. ์ฆ ๊ฐ ๋ ์ด์ด์ ์ญํ ์ด ๋ช
ํํ๋ค๋ ์๋ฏธ์ด๋ค.
์์ ๊ฐ์ ์์๋ค ๋๋ฌธ์ ๋ ์ด์ด๋ ์ํคํ
์ฒ์ ๊ตฌ์กฐ๋ก ์ฝ๋๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๊ฐ ๋ ์ด์ด๊ฐ ๋
๋ฆฝ์ ์ด๊ณ ์ญํ ์ด ๋ถ๋ช
ํ๋ฏ๋ก ์ฝ๋์ ํ์ฅ์ฑ์ด ๋์์ง๋ค. ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ํ์
ํ๊ธฐ ์ฌ์ธ ๋ฟ๋ง ์๋๋ผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ์ฑ๋ ๋์์ง๋ค.
๋ํ ์ญํ ์ด ๋ช
ํํ๊ฒ ๋๋์ด ์์ผ๋ฏ๋ก ๊ฐ ๋ ์ด์ด๋ฅผ ํ
์คํธ ํ๋ ํ
์คํธ ์ฝ๋์ ์์ฑ๋ ํจ์ฌ ์์ํด์ง๋ค.
# 0714 - IntelliJ์ .http ์ฌ์ฉ
# .http ์ฅ์
- Code highlighting
- ์ฝ๋ ์๋ ์์ฑ
- ์ง๊ด์ ์ธ HttpRequest ๊ตฌ์กฐ
- Request Body์ ์ธ JSON ๋ฑ ์ ๊ทน์ ์ง์(Language injections)
- ๋ฆฌํฉํ ๋ง
- ํ์ผ ๊ด๋ฆฌ๊ฐ๋ฅ
# .http ์ฌ์ฉ๋ฒ
# GET ์์ฒญ
- HTTP Request ํ์ผ์์ฑ
GET https://www.devbeginner.com
ํ์ผ์ ์ฒซ์ค์๋ HTTP Method์ URL
๋์งธ์ค์๋ RequestHeader ์์ฑ
# POST ์์ฒญ
POST https://localhost:8080/group
Content-Type: application/json
{
"groupName": "๊ทธ๋ฃน๋ช
",
"members": [
"ํ์1",
"ํ์2",
"ํ์3"
],
"date": {
"year": 2018,
"month": 1,
"day": 24
}
}
# json์ ํ์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅ
POST http://localhost:8080/group
Content-Type: application/json
< ./post.json
- ๊บฝ์ (<)๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ผ ์์น๋ฅผ ์ง์ ํ๋ฉด ํด๋น ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ก
- Request Header์ ๋ฐ์ดํฐํํ๋ฅผ ๋ณ๊ฒฝํ์ฌ multipart/form-data์ ๊ฐ์ด ํ์ผ ์ ๋ก๋, ์ด๋ฏธ์ง ์ ๋ก๋ ํ ์คํธ ๊ฐ๋ฅ
# Request Header ์์
GET http://localhost:8080/real/hello
Authorization: Bearer {token}
# Cookie ์์
GET https://localhost:8080/cookie
Cookie: user=ahnjs
- key=value ํ์์ผ๋ก ์์ฑ
# Log
Intellij์ .http ์์ฒญ์ ๋ชจ๋ ๋ก๊ทธ๋ก ๋จ๊ฒจ์ง๋ค.
๋ก๊ทธ ํ์ผ ์์น ํ๋ก์ ํธํด๋/.idea/httpRequests/