ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๐Ÿฆฅ 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
๋งํฌ
ยซ   2024/07   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
๊ธ€ ๋ณด๊ด€ํ•จ