๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€

(46)
[๊ฒฐ์ œ ์Šน์ธ ํ”„๋กœ์„ธ์Šค ์„ค๊ณ„] ๊ฒฐ์ œ ์Šน์ธ ์š”์ฒญ๊ณผ DB ํŠธ๋žœ์žญ์…˜์˜ ์ˆœ์„œ๊ฐ„์˜ ์žฅ๋‹จ์ ์„ ๋น„๊ต ๋ถ„์„ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ์ค‘, ์ˆ™์†Œ ์˜ˆ์•ฝ์„ ํ•  ๋•Œ์˜ ๊ฒฐ์ œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌํ˜„์ค‘์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์•ฝ์„ ํ™•์ •ํ•  ๋•Œ, ๊ฒฐ์ œ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋กœ ๋‚˜๋‰˜์–ด ์ง‘๋‹ˆ๋‹ค.  ์ด ๋•Œ, ์ œ๊ฐ€ ๊ณ ๋ คํ•œ ๊ฒƒ์€ ์ด 5๊ฐ€์ง€์ด๋ฉฐ ์ด์— ๋Œ€ํ•ด ์„ค๋ช…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ์ œ ํ”„๋กœ์„ธ์Šค์˜ ํŠธ๋žœ์žญ์…˜ ์„ค์ • ๋ฒ”์œ„'๊ฒฐ์ œ ์Šน์ธ์„ ์œ„ํ•œ PG์‚ฌ API ํ˜ธ์ถœ'๊ณผ ํŠธ๋žœ์žญ์…˜์˜ ์ˆœ์„œ'๊ฒฐ์ œ ์Šน์ธ์„ ์œ„ํ•œ PG์‚ฌ API ํ˜ธ์ถœ'์„ ๋™๊ธฐ/๋น„๋™๊ธฐ ์ค‘ ์„ ํƒ ๋™์‹œ์„ฑ ์ œ์–ด ๋ฐฉ๋ฒ•์ž”์•ก ๋ถ€์กฑ์œผ๋กœ ์ธํ•œ ๊ฒฐ์ œ ์Šน์ธ ์‹คํŒจ๋‚˜ ํŠธ๋žœ์žญ์…˜ ๋กค๋ฐฑ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ์ง€ 1. ๊ฒฐ์ œ ํ”„๋กœ์„ธ์Šค์˜ ํŠธ๋žœ์žญ์…˜ ์„ค์ • ๋ฒ”์œ„'๊ฒฐ์ œ ์Šน์ธ์„ ์œ„ํ•œ PG์‚ฌ API ํ˜ธ์ถœ' ์€ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด PG์‚ฌ์—๊ฒŒ POST ์š”์ฒญ์„ ํ†ตํ•ด ๊ฒฐ์ œ๋ฅผ ์Šน์ธ ๋ฐ›๋Š” ๊ณผ์ •์œผ๋กœ ํŠธ๋žœ์žญ์…˜์— ํฌํ•จ๋˜์–ด ํŠธ๋žœ์žญ์…˜์ด ๊ธธ์–ด์ง€๊ฒŒ ๋œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™..
๋กœ์ปฌ์—์„œ Docker๋ฅผ ํ™œ์šฉํ•œ Prometheus & Grafana ์—ฐ๋™ ๋ฐฉ๋ฒ• OSํ™˜๊ฒฝ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ๊ตฌ์ถ•์„ ์†Œ๊ฐœํ•˜๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค.Docker-compose, Actuator, ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค, ๊ทธ๋ผํŒŒ๋‚˜์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์„ค๋ช…๊ณผ ๋ชจ๋‹ˆํ„ฐ๋ง ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ์„ค๋ช…์€ ํ•˜์ง€ ์•Š๊ณ  ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•๋งŒ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค & ๊ทธ๋ผํŒŒ๋‚˜ ๋„์ž… ์†Œ๊ฐœ Jmeter ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ์— ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด๋ ค๊ณ  ๊ณ„ํš์ค‘์ž…๋‹ˆ๋‹ค.์–ด๋–ค ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ํ†ฐ์บฃ์˜ ์“ฐ๋ ˆ๋“œ ํ’€์˜ ๋ฌธ์ œ์ธ์ง€, DB ์ปค๋„ฅ์…˜ ํ’€์ด ๋ฌธ์ œ์ธ์ง€, ๋‚ด ๋…ธํŠธ๋ถ CPU ๋ฌธ์ œ์ธ์ง€, ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ์ธ์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ์‹ถ์—ˆ๊ณ  ํ•ด๋‹น ๋ฌธ์ œ์— ๋งž๊ฒŒ ํ•ด๊ฒฐ์„ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง๋ถ€ํŠธ์—์„œ ์ง€์›ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ชจ๋“ˆ์ธ Actuator ๋Š” ๋ฉ”ํŠธ๋ฆญ(์ง€ํ‘œ)๋“ค์ด ์ €์žฅ์ด ๋˜์ง€ ์•Š๋Š” ์ ๊ณผ ๋ชจ๋‹ˆํ„ฐ๋ง ์„œ๋ฒ„๋ฅผ ์‹ค์ œ ์šด์˜ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๋ฉ”ํ…Œ..
MySQL 8.0์˜ B-Tree ์ธ๋ฑ์Šค ์•Œ์•„๋ณด๊ธฐ ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ๋ฉด ์กฐํšŒ๊ฐ€ ์™œ ๋น ๋ฅธ์ง€์— ๋Œ€ํ•œ ์˜๋ฌธ์„ ํ•ด์†Œํ•˜๊ณ ์ž Real MySQL์„ ํ•™์Šต์„ ๋ฐ”ํƒ•์œผ๋กœ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ์•Œ๊ธฐ ์ „, ์–ด๋–ป๊ฒŒ ๋””์Šคํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”์ง€๋ฅผ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.8.1 ๋””์Šคํฌ ์ฝ๊ธฐ ๋ฐฉ์‹# ๊ธฐ๊ณ„์‹ ์žฅ์น˜์ธ HDD(ํ•˜๋“œ ๋””์Šคํฌ)๊ธฐ์กด ๋ฐ์ดํ„ฐ๋Š” ๊ธฐ๊ณ„์‹ ์žฅ์น˜์ธ ์›ํŒ ๋ชจ์–‘์˜ HDD(ํ•˜๋“œ ๋””์Šคํฌ)์— ์ €์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค.HDD๋Š” ์›ํŒ์„ ๋Œ๋ ค๊ฐ€๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋žœ๋คI/O ์ž‘์—…์€ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. # ์ „์ž์‹ ์žฅ์น˜์˜ ๋“ฑ์žฅHDD์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ณ ์ž SSD, CPU, ๋ฉ”๋ชจ๋ฆฌ ๊ฐ™์ด ์ „๊ธฐ์  ํŠน์„ฑ์„ ๋ˆ ์ „์ž์‹ ์žฅ์น˜๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.SSD๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ ์œ„ํ•ด HDD๋ฅผ ํšŒ์ „์‹œํ‚ฌ ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ์ž‘์—…์ด ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , DBMS๊ฐ€ ์ด SSD๋ฅผ ์ฑ„ํƒํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฒŒ..
[๋กœ๊ทธ์ธ ๋ฐ ์ธ๊ฐ€] Interceptor์—์„œ ArgumentResolver๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜๊ธฐ [์„œ๋ก ]์—์–ด๋น„์•ค๋น„ ํด๋ก  ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ, ๋กœ๊ทธ์ธ ํšŒ์›๋งŒ '์ˆ™์†Œ ๋“ฑ๋ก' ๊ณผ '์ˆ™์†Œ ์˜ˆ์•ฝ' ์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ์œ„ํ•ด(์ธ๊ฐ€๋ฅผ ์ฃผ๊ธฐ ์œ„ํ•ด) ๋กœ๊ทธ์ธํ•œ ํšŒ์›์„ ๋Œ€์ƒ์œผ๋กœ ์„ธ์…˜์„ ์‚ฌ์šฉํ•ด์„œ stateful ํ•˜๊ฒŒ ๊ตฌํ˜„ ํ–ˆ์Šต๋‹ˆ๋‹ค.@PostMapping("/login") public ApiResponse login(@RequestBody @Valid MemberLoginRequest request, HttpSession httpSession) { memberService.login(request.toServiceRequest()); // ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•˜๋ฉด httpSession.setAttribute(LOGIN_MEMBER, true..
TCP & UDP์˜ ์ฐจ์ด์™€ 3,4 way handshake ์•Œ์•„๋ณด๊ธฐ โญ๏ธUDP๊ฐœ๋…์‹ ๋ขฐ์„ฑ๋ณด๋‹ค ์†๋„์™€ ํšจ์œจ์„ฑ์„ ์ค‘์š”์‹œํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ „์†ก ๊ณ„์ธต ํ”„๋กœํ† ์ฝœ ํŠน์ง•1. TCP์™€ ๋‹ฌ๋ฆฌ UDP๋Š” ์—ฐ๊ฒฐ ์ง€ํ–ฅํ˜•์ด ์•„๋‹™๋‹ˆ๋‹ค.๊ทธ๋ž˜์„œ, 3 way handshake ์™€ 4 way handshake ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋น ๋ฆ…๋‹ˆ๋‹ค. 2. 1:N , N:N ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ด์„œ DNS ํ”„๋กœํ† ์ฝœ๊ณผ ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋น„์Šค์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. 3. ๋ฐ์ดํ„ฐ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.๋‹จ์ง€ ์ฒดํฌ์„ฌ์„ ํ†ตํ•ด ์ˆ˜์‹ ๋œ ํŒจํ‚ท์˜ ์˜ค๋ฅ˜ ์—ฌ๋ถ€ ์ •๋„๋งŒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ์ฒดํฌ์„ฌ ?UDP ๋ฐ์ดํ„ฐ๊ทธ๋žจ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.์ฒดํฌ์„ฌ์€ ์†ก์‹ ํ•  ๋ฐ์ดํ„ฐ๊ทธ๋žจ์„ 16๋น„ํŠธ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๊ณ , ๋ชจ๋‘ ๋”ํ•œ ๋‹ค์Œ 1์˜ ๋ณด์ˆ˜๋ฅผ ์ทจํ•ด์„œ ๋งŒ๋“ค์–ด ์ง‘๋‹ˆ๋‹ค.๋งŒ๋“ค์–ด์ง„ ๊ฐ’์„ UDPํ—ค๋”์˜ ์ฒดํฌ์„ฌ ํ•„๋“œ์— ๋„ฃ์–ด ์ „์†ก ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์‹ ์ž๋Š” ์ˆ˜์‹ ํ•œ ๋ฐ์ดํ„ฐ๊ทธ๋žจ์— ๋Œ€ํ•ด ๋™์ผํ•œ ..
ARQ์™€ TCP ์˜ ์ฐจ์ด์ , ๊ทธ๋ฆฌ๊ณ  TCP Reno ARQ์™€ TCP๋Š” ํŒจํ‚ท์˜ ์˜ค๋ฅ˜๋ฅผ ์ œ์–ดํ•œ๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.๊ทธ๋ ‡๊ธฐ์—, ๋ฌด์—‡์ด ๋‹ค๋ฅธ์ง€ ์•Œ์•„๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.  โญ Automatic Repeat Request (ARQ)๋ฐ์ดํ„ฐ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์˜ค๋ฅ˜ ์ œ์–ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ Automatic Repeat Request(์ดํ•˜ ARQ)๋ผ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.ARQ ์ข…๋ฅ˜์—๋Š” Stop-and-Wait ARQ , Go-Back-N ARQ , Selective Repeat ARQ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Stop-and-Wait ARQ์ „์†กํ›„ ๋Œ€๊ธฐ ํ”„๋กœํ† ์ฝœ๋กœ ๋ถ€๋ฅด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.์ด ๋ฐฉ์‹์€ ํŒจํ‚ท์„ ์ „์†กํ•˜๊ณ  ๊ทธ ํŒจํ‚ท์— ๋Œ€ํ•œ ์ˆ˜์‹  ํ™•์ธ ์‘๋‹ต(ACK)์„ ๋ฐ›๊ณ ๋‚˜์„œ, ๋‹ค์Œ ํŒจํ‚ท์„ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์žฅ์ ์€ ์ˆœ์ฐจ์ ์œผ๋กœ ํŒจํ‚ท์„ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ˜„์ด ์‰ฝ๊ณ , ํŒจํ‚ท์— ์†์ƒ์ด ์ ์€ ํ™˜๊ฒฝ์— ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.๋‹จ..
[ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…] ํ…Œ์ŠคํŠธ๋กœ ์•Œ์•„๋ณด๋Š” ์ปจํŠธ๋กค๋Ÿฌ์—์„œ HttpSession ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์  Junit5 ๋ฐ Mock ์— ๋Œ€ํ•ด ์„ค๋ช…๋“œ๋ฆฌ์ง€ ์•Š๋Š” ์  ์–‘ํ•ด ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ณด๋‹ค๋Š” ์ปจํŠธ๋กค๋Ÿฌ์—์„œ HttpSession ์„ ์‚ฌ์šฉํ•  ๋•Œ์˜ ์ฃผ์˜์ ์„ ์•Œ์•„๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๊ฐ€์…จ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ HttpSession ์„ ์ฃผ์ž…๋ฐ›์•„์„œ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ HttpSession ๊ณผ HttpServletRequest.getSession() ์˜ ์ฐจ์ด๋ฅผ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.  โญ HttpSession ๋ฅผ ๋ฉ”์„œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ฆ‰์‹œ ์ฃผ์ž… ๋ฐ›๊ธฐ์ฝ”๋“œ ์„ค๋ช…- ํšŒ์›์ด ์ธ์ฆ ์ฝ”๋“œ๋ฅผ ์ž˜๋ชป ์ž…๋ ฅํ•ด์„œ ์ด๋ฉ”์ผ ๊ฒ€์ฆ์— ์‹คํŒจํ•˜๋ฉด if ๋ฌธ์ด ๊ฑฐ์ง“์ด ๋ฉ๋‹ˆ๋‹ค.- Session ์— ๊ฐ’์„ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ , ๋ฉ”์„œ๋“œ๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.@GetMapping("/email/authenticat..
์ฟ ํ‚ค ์„ธ์…˜ ํ† ํฐ์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๊ณ , ์ฟ ํ‚ค ์‚ฌ์šฉ ์‹œ์˜ XSS CSRF ์˜ˆ๋ฐฉ ์•Œ์•„๋ณด๊ธฐ ์ฟ ํ‚ค์ฟ ํ‚ค๋Š” stateless ๋ฐฉ์‹์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. โ–ถ ํŠน์ง•- ์ฟ ํ‚ค๋Š” ๋ณด์•ˆ์ด ์ทจ์•ฝํ•˜๋‹ค์ฟ ํ‚ค๋Š” F12 ์˜ Network ํƒญ์œผ๋กœ๋„ ์‰ฝ๊ฒŒ ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•˜๊ณ , ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋งŒํผ ๋ณด์•ˆ์— ์ทจ์•ฝํ•ฉ๋‹ˆ๋‹ค.๊ทธ๋ ‡๊ธฐ์— ์ฟ ํ‚ค ๋‹จ๋…์œผ๋กœ ์“ฐ์ง€ ์•Š๊ณ  ์ฟ ํ‚ค์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„ํ•ด ์„ธ์…˜/JWT์™€ ํ•จ๊ป˜ ์“ฐ์ž…๋‹ˆ๋‹ค. - ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ด๋ฅผ stateless ๋ฐฉ์‹์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค. -๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋œ ์ฟ ํ‚ค๋Š” ๋ชจ๋“  ์š”์ฒญ์— ํฌํ•จ๋˜์–ด ์„œ๋ฒ„์— ์ „์†ก๋ฉ๋‹ˆ๋‹ค.์ด๋Š” ์ฟ ํ‚ค๊ฐ€ ํ•„์š”์—†๋Š” ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋„ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ์ถ”๊ฐ€๋กœ ์œ ๋ฐœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.๊ทธ๋ ‡๊ธฐ์— ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋งŒ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.๋˜ํ•œ, ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ํŠน์ง•์„ ์•…์šฉํ•œ CSRF ๊ณต๊ฒฉ์— ๋…ธ์ถœ๋˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.์„ธ์…˜์„ธ์…˜์€ stateful ..