ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ฆฅ Rest API, GraphQL ํน์ง๊ณผ ์ฐจ์ด์
- REST API ๋ ์ฌ๋ฌ๊ฐ์ ์๋ํฌ์ธํธ๋ฅผ ๊ฐ์ง์ง๋ง GraphQL์ ํ๋์ ์๋ํฌ์ธํธ๋ฅผ ๊ฐ๋๋ค.
- REST API ๋ GET, POST, PUT, DELTER ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ง๋ง GraphQL์ POST๋ฅผ ์ฌ์ฉํ๋ค.
- REST API ๋ฅผ ์ฌ์ฉํ๋ฉด ํ ํ์ด์ง์์ ์ฌ๋ฌ ์๋ํฌ์ธํธ์๊ฒ ์์ฒญํด์ผํ์ง๋ง GraphQL์ ๋จ์ผ ์์ฒญ์ผ๋ก ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
(HTTP ์๋ต ์ฌ์ด์ฆ๋ฅผ ์ค์ผ ์ ์์)
๐ฆฅ GraphQL ๋ฅผ ์ฌ์ฉํด๋ณด๋ฉด์ ์ฅ์ ์ ์ด๋ค๊ฑด์ง ์๊ฐํด๋ณธ๊ฑธ ๋งํด๋ณด๊ธฐ(?)
- ํ๋ก ํธ์๋๊ฐ ํ์ํ ์ ๋ณด๋ง์ ์์ฒญํ๊ธฐ๋๋ฌธ์ ํ๋ก ํธ์๋๊ฐ ์ฌ์ฉํ์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ์ง ์์๋ ๋จ
๐ฆฅ GraphQL ๊ตฌ์ฑ
๐ฟ ์ฟผ๋ฆฌ
- ์กฐํ์ ์ฌ์ฉ
๐ฟ ๋ฎคํ ์ด์
- ๋ฐ์ดํฐ ์์ฑ, ์์ , ์ญ์ ์ ์ฌ์ฉ
๐ฟ ์คํค๋ง
- GraphQL ์์ ์ฌ์ฉํ ๊ฐ์ฒด ํ์ ์ ์ ์ํ ๊ฒ
type Student {
id: ID!,
name: String!,
age: Int!,
email: String!,
class: Class!
}
type Class {
id: ID!,
className: String!
}
๐ฟ ๋ฆฌ์กธ๋ฒ
- ์ฟผ๋ฆฌ๋ฅผ ์ ์ํ๋ ๊ฒ
type Query {
getStudentInfo(id: ID): Student!
getStudentList: [Student]!
}
type Mutation {
createStudent(studentInput: StudentInput): Student!
}
input StudentInput {
name: String!,
age: Int!,
email: String!,
class: Class!
}
๐ฆฅ REST API ์ ์ฅ๋จ์
๐ฟ REST API
- GET, POST, PUT, DELETE HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ CRUD ์ ์ฉํ ์ ์๊ฒ ํ๋ ๊ฒ
๐ฟ ์ฅ์
- HTTP ๋ฅผ ๊ทธ๋๋ก ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ REST API ์ฌ์ฉ์ ์ํ์ฌ ๋ณ๋๋ก ๊ตฌ์ถํ ํ์๊ฐ ์์
- HTTP ๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉํ ์ ์์
- API ๊ฐ ์๋ํ๋ ๋ฐ๋ฅผ ํ์คํ๊ฒ ์ดํดํ ์ ์์
๐ฟ ๋จ์
- ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋๊ฐ GET, POST, PUT, DELETE ๋ฐ์ ์์
- ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์๋ PUT, DELETE ๋ฅผ ์ฌ์ฉํ ์ ์์
- ํ์ค์ด ์กด์ฌํ์ง ์์ ์ ์๊ฐ ํ์ํ๋ค (API ๋ฌธ์)
- (๋ค๋ฅธ API ๋ฅผ ์ฐธ๊ณ ํ์ฌ REST API ๋ฅผ ์ค๊ณํ ์ ์์ https://www.flickr.com/services/api/)
๐ฆฅ ๋ฑ์ฐ ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ๊ฐ์ฅ ์ด๋ ค์ ๋ ์
- ๋ฑ์ฐ๋ก์ ์๋์ ๊ฒฝ๋๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ด๋ ค์ ์ต๋๋ค. ์ฒซ๋ฒ์งธ๋ก JsonObject ์์ JsonObject๊ฐ ์๋ ๊ตฌ์กฐ์๊ณ Key๊ฐ์ด ์์ด ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์ด๋ ค์์ ๋๊ผ์ต๋๋ค. ์ณ์ ๋ฐฉ๋ฒ์ธ์ง๋ ํ์ ํ์ง ๋ชปํ์ง๋ง JsonObject๋ฅผ ๋ฐฐ์ด๋ก ๋ณํํ์ฌ ๋ฐฐ์ด ์์๋ฅผ ํ๋์ฉ ๊ฐ์ ธ์ ํ๋์ String ์ผ๋ก ๋ง๋ ํ DB์ ์ ์ฅํ์์ต๋๋ค.
๐ฆฅ ์ง๊ตฌํ๋ค ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ๊ฐ์ฅ ์ด๋ ค์ ๋ ์
- Spring Security๋ก ๋ก๊ทธ์ธ์ ๊ตฌํํ๊ณ ํ์ ํํด๋ฅผ ๊ตฌํํ ๋ ๋๋ฒ๊น ์ ํด๋ ์๋ฌ๋ฅผ ์ฐพ์ง ๋ชปํ์ ๋๊ฐ ๊ฐ์ฅ ์ด๋ ค์ ์ต๋๋ค. isEnabled ํ๋๋ฅผ ์ถ๊ฐํ์ง ์๊ณ ํญ์ true ๊ฐ์ด ๋๋๋ก ๊ตฌํํ์ฌ์ ํ์ ํํด๋ฅผ ํด๋ ๋ก๊ทธ์ธ์ด ๋๋ ํ์์ด ๋ฐ์ํ์์ต๋๋ค. isEnabled ํ๋๋ฅผ ์ถ๊ฐํ์ฌ true, false ๊ฐ ๋ชจ๋๋ฅผ ๊ฐ์ง ์ ์๋๋ก ์ ์ธํ์์ต๋๋ค.
๐ฆฅ ์ง๊ตฌํ๋ค ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ๊ฐ์ฅ ์์ฌ์ ๋ ์
- Querydsl ์ ์ฌ์ฉํ๋ฉด์ N+1 ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ๊ฒ์ด ์์ฌ์ ์ต๋๋ค. fetchjoin์ ์ฌ์ฉํ๋ฉด N+1 ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๊ณ ์๊ณ ์์์ง๋ง ํ์ด์ง๊ณผ ๊ฐ์ด ์ฌ์ฉํ์ง ๋ชปํ๋ ๊ฑธ๋ก ์๊ณ ์์ด์ ์ด ๋ฌธ์ ์ ๋ํด ํด๊ฒฐ์ ํ์ง ๋ชปํ์ฌ ์ฟผ๋ฆฌ๊ฐ ์ฌ๋ฌ๋ฒ ์คํ๋๋ ๊ฒ์ด ๊ฐ์ฅ ์์ฌ์ ์ต๋๋ค. (๊ฐ์ด ์ฌ์ฉํ์ ๋ offset, limit์ด ์๋จนํ๋ ๊ทธ๋ฌ์)
๐ฆฅ ํด๋น ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ๊น์
- default_batch_fetch_size ๋ฅผ ์ค์
*default_batch_fetch_size : JPA ๊ฐ ์ง์ฐ๋ก๋ฉ ํ ๊ฐ์ฒด๋ฅผ ๋ง๋ฌ์ ๋ default_batch_fetch_size ๋งํผ ๋ชจ์ผ ๋ ๊น์ง ์์๋๋ค ์ค์ ํ ๊ฐ๋งํผ ๊ฐ์๊ฐ ์ฐจ๋ฉด ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ด๋ ๊ฒ
๐ฆฅ ํ์ ์ ํ๋ฉด์ ๊ฐ์ฅ ์ด๋ ค์ ๋ ์
- ์๊ฒฌ ์กฐ์จ์ ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ด๋ ค์ ์ต๋๋ค.
'๋ฉด์ ์ง๋ฌธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Day 05] ์ธ์ฑ๋ฉด์ (๊ณ์์์ ) (0) | 2022.12.18 |
---|---|
[Day04] ๋ฆฌ๋ ์ค (0) | 2022.12.17 |
[Day04] ํด๋ผ์ฐ๋ (0) | 2022.12.16 |
[Day03] Web (0) | 2022.12.15 |
[Day02] Java (0) | 2022.12.14 |
- Total
- Today
- Yesterday
- CodeDeploy
- level0
- ์ธ๋ฑ์ค
- Travis CI
- db
- Oracle
- EC2
- TCP
- AWS
- Java
- ๋๋ค์
- ํ์ผ์ ๋ก๋์ค์
- ๊ธฐ์ ๋ฉด์
- nginx
- ddl-auto
- ํ๋ก๊ทธ๋๋จธ์ค
- ์ด์์ฒด์
- ํธ๋์ญ์
- SpringSecurity
- OS
- ci/cd
- spring
- ๋ค์ด๋ฒํด๋ผ์ฐ๋
- SpringGraphQL
- ํธ๋์ญ์ ๊ฒฉ๋ฆฌ์ฑ
- JPA
- Til
- graphql
- ORA-27125
- N+1
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |