Hamutaro - Hamtaro 4

Web 10

[Web] Nginx

Nginx์ฃผ๋กœ ์›น ์„œ๋ฒ„ (Web Server) ๋˜๋Š” ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ (Reverse Proxy) ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด Nginx ์—ญํ•  1. ์›น ์„œ๋ฒ„ ์—ญํ• ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— www.example.com ์ž…๋ ฅํ•˜๋ฉด,Nginx๋Š” HTML, CSS, JS ๊ฐ™์€ ์ •์  ํŒŒ์ผ์„ ์ฝ์–ด์„œ ์‘๋‹ตํ•ด์ฃผ๋Š” ์—ญํ• Apache ๋ณด๋‹ค ๋” ๋น ๋ฅด๊ณ  ๊ฐ€๋ฒผ์›€2. ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์—ญํ• ์‚ฌ์šฉ์ž -> Nginx -> ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ (Spring, Node.js ๋“ฑ)์‚ฌ์šฉ์ž๋Š” Nginx์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ Nginx๊ฐ€ ๊ทธ ์š”์ฒญ์„ ๋‚ด๋ถ€์˜ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์— ์ „๋‹ฌํ•ด์คŒ๋ฐฑ์—”๋“œ๊ฐ€ ์‘๋‹ตํ•˜๋ฉด ๋‹ค์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋Œ๋ ค์คŒ์ฆ‰, ์ค‘๊ฐ„์—์„œ ํŠธ๋ž˜ํ”ฝ์„ ์ค‘๊ณ„ํ•ด์ฃผ๋Š” ์—ญํ•  3. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์—ญํ• ์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ๋‚˜๋ˆ ์ฃผ๋Š” ์—ญํ• ์‚ฌ์šฉ์ž ์š”์ฒญ ↓Nginx (๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ) โ”œโ”€> ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ 1 โ”œโ”€> ๋ฐฑ์—”๋“œ..

Web 2025.01.19

[Web] HTTP ์ƒํƒœ ์ฝ”๋“œ

HTTP ์ƒํƒœ ์ฝ”๋“œํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ์š”์ฒญ์— ๋Œ€ํ•ด ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์ˆซ์ž ์ฝ”๋“œ์š”์ฒญ์˜ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋ƒ„1xx : ์ •๋ณด (Informational)์š”์ฒญ์ด ์ˆ˜์‹ ๋˜์—ˆ๊ณ  ์„œ๋ฒ„๊ฐ€ ์ž‘์—…์„ ๊ณ„์† ์ง„ํ–‰ ์ค‘์ž„์„ ์˜๋ฏธ์‹ค๋ฌด์—์„œ ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ2xx : ์„ฑ๊ณต (Successful)์š”์ฒญ์ด ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋จ200 OK : ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ201 Created : ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋จ204 No Content : ์š”์ฒญ์€ ์„ฑ๊ณตํ–ˆ์ง€๋งŒ ๋ฐ˜ํ™˜ํ•  ๋‚ด์šฉ์ด ์—†์Œ3xx : ๋ฆฌ๋‹ค์ด๋ ‰์…˜ (Redirection)์š”์ฒญ์„ ์™„๋ฃŒํ•˜๋ ค๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ถ”๊ฐ€ ์ž‘์—…์„ ํ•ด์•ผํ•จ301 Moved Permanently : ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ์ด๋™302 Found : ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ๋‹ค๋ฅธ ์œ„์น˜์— ์žˆ์Œ304 Not Modified..

Web 2024.12.01

[Web] HTTP ๋ฉ”์„œ๋“œ

์ฃผ์š” HTTP ๋ฉ”์„œ๋“œGET๋ฆฌ์†Œ์Šค ์กฐํšŒ์š”์ฒญํ•œ URL์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜ด์„œ๋ฒ„์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ๊ฐ™์€ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ๋ฒˆํ•ด๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ผํ•จex ) ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ, ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒPOST์„œ๋ฒ„์— ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑ์š”์ฒญ ๋ณธ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„ ์„œ๋ฒ„๋กœ ์ „์†ก, ์„œ๋ฒ„๋Š” ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ๊ฐ™์€ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ณด๋‚ด๋ฉด ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Œex ) ํšŒ์›๊ฐ€์ž…, ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑPUT๋ฆฌ์†Œ์Šค๋ฅผ ์ „์ฒด ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜, ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒ์„ฑ์š”์ฒญ ๋ณธ๋ฌธ์— ๋ฆฌ์†Œ์Šค ์ „์ฒด ๋ฐ์ดํ„ฐ ๋‹ด์•„ ์ „์†ก, ์„œ๋ฒ„๋Š” ๊ธฐ์กด ๋ฆฌ์†Œ์Šค ๋Œ€์ฒด๊ฐ™์€ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ๋ฒˆํ•ด๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ผํ•จex ) ์‚ฌ์šฉ์ž ์ •๋ณด ์ „์ฒด ์—…๋ฐ์ดํŠธPATCH๋ฆฌ์†Œ์Šค์˜ ๋ถ€๋ถ„ ์ˆ˜์ •์š”์ฒญ ๋ณธ๋ฌธ์— ์ˆ˜์ •ํ•  ํ•„๋“œ๋งŒ ๋‹ด์•„ ์ „์†ก, ์„œ๋ฒ„๋Š” ํ•ด๋‹น ํ•„๋“œ๋งŒ ๋ณ€๊ฒฝex ) ์‚ฌ์šฉ์ž ์ด๋ฆ„ ๋ณ€๊ฒฝDELETE์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œ๊ฐ™์€ ์š”์ฒญ..

Web 2024.12.01

[Web] RESTful API ์„ค๊ณ„ ์›์น™

RESTful API ๊ฐœ๋…Representational State Transfer์˜ ์•ฝ์ž์ž์›์˜ ํ‘œํ˜„์— ์˜ํ•œ ์ƒํƒœ ์ „๋‹ฌ ์˜๋ฏธHTTP ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜, ์›น์˜ ๊ธฐ์ˆ ๊ณผ ๊ทœ์•ฝ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•จRESTful API ๋Š” ํ”Œ๋žซํผ ๋…๋ฆฝ์  RESTful API ์„ค๊ณ„ ์›์น™์ž์›(Resource)์˜ ์‹๋ณ„๋ชจ๋“  ์ž์›์€ ๊ณ ์œ ํ•œ URI๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ž์›์„ ์‹๋ณ„ํ•จURI ๋Š” ์ธํ„ฐ๋„ท์ƒ์—์„œ ์ž์›์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๊ณ  ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” ํ‘œ์ค€ ๋ฐฉ๋ฒ•์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„๋Š” HTTP ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ‘œํ˜„HTTP ๋ฉ”์„œ๋“œ : GET, POST, PUT, DELETE์ž์›์— ๋Œ€ํ•œ CRUD ์—ฐ์‚ฐ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ ๊ฐ€๋Šฅ๋ฉ”์‹œ์ง€๋Š” ์ž๊ธฐ ์„œ์ˆ ์ ๋ฉ”์„ธ์ง€ ํฌ๋งท๊ณผ HTTP ๋ฉ”์„œ๋“œ ๋“ฑ์„ ํ†ตํ•ด ์š”์ฒญ์˜ ์˜๋„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Œ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋Š” ํ•˜์ดํผ๋ฏธ๋””์–ด๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ๋จํด๋ผ์ด์–ธํŠธ..

Web 2024.10.10

[Openlayers] GeoJSON ํŒŒ์ผ ์ฝ์–ด์„œ ์ง€๋„์œ„์— Layer ์˜ฌ๋ฆฌ๊ธฐ

OpenLayers๋ž€? ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋Œ€ํ™”ํ˜• ์ง€๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ๋„์™€์คŒ๋‹ค์–‘ํ•œ ์ง€๋ฆฌ๊ณต๊ฐ„ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ง€๋ฆฌ ์ •๋ณด๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ์ œ๊ณต https://openlayers.org/en/latest/apidoc/ OpenLayers v10.1.0 API - IndexView The view manages the visual parameters of the map view, like resolution or rotation. View with center, projection, resolution and rotationopenlayers.org ๊ณต์‹ Document์— ์›ฌ๋งŒํ•œ๊ฒŒ ๋‹ค ์žˆ๊ณ , ์˜ˆ์ œ ์ฝ”๋“œ๊นŒ์ง€ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ผผ๊ผผํ•˜๊ฒŒ ํ™•์ธํ•ด๋ณด์ž.  OpenLaye..

Web/OpenLayers 2024.08.12

[Web] ์„ธ์…˜(Session)๊ณผ ์ฟ ํ‚ค(Cookie)

https://www.cookieyes.com/blog/session-cookies/ What are session cookies? Do they need consent? - CookieYesSession cookies are cookies that last only for a single user session. Learn more about why they are used, if they need consent and whether they are GDPR compliant.www.cookieyes.com  ์„ธ์…˜ Session ์„œ๋ฒ„ ์ธก์—์„œ ๊ด€๋ฆฌ ๋˜๋Š” ์‚ฌ์šฉ์ž ์ƒํƒœ ์ •๋ณด์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„์— ์ ‘์†ํ•˜๋ฉด ํ•ด๋‹น ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์œ ํ•œ ์„ธ์…˜ ID๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด ์„ธ์…˜ ID๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š”..

Web 2024.07.30

[Web] ์–‘๋ฐฉํ–ฅ ํ†ต์‹  : Polling, Websocket

https://www.pubnub.com/blog/evaluating-long-polling-vs-websockets/ Evaluating Long Polling vs WebSocketsExplore Long Polling vs WebSockets in real-time web development.www.pubnub.com Polling๊ณผ WebSocket 1. client - server ํ†ต์‹ - ํด๋ง๊ณผ ์›น์†Œ์ผ“์€ client - server ๊ฐ„์˜ ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ  2. ์‹ค์‹œ๊ฐ„์„ฑ- ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•จ 3. HTTP ๊ธฐ๋ฐ˜- Polling์€ HTTP์˜ ์š”์ฒญ/์‘๋‹ต ๋ฐ˜๋ณต- WebSocket์€ ์ดˆ๊ธฐ ํ•ธ๋“œ์…ฐ์ดํฌ(Handshake) ๊ณผ์ •์—์„œ HTTP ์‚ฌ์šฉ * ์ดˆ๊ธฐ ํ•ธ๋“œ์…ฐ์ดํฌ(Han..

Web 2024.07.23

[GIS] SHPํŒŒ์ผ์˜ ๊ตฌ์กฐ

SHP ํŒŒ์ผ์ด๋ž€? SHP ํŒŒ์ผ์€ ์ง€๋ฆฌ์ •๋ณด์‹œ์Šคํ…œ(GIS)์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ผ ํ˜•์‹์ง€๋ฆฌ์ ์ธ ๋„ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ์ ,์„ ,๋ฉด ๋“ฑ์˜ ๋„ํ˜•์„ ๋‚˜ํƒ€๋‚ด๋Š” Geometry ๋ฐ์ดํ„ฐ์™€ ์ด์™€ ๊ด€๋ จํ•œ ์†์„ฑ ๋ฐ์ดํ„ฐ ํฌํ•จ SHP ํŒŒ์ผ์˜ ๊ตฌ์กฐ SHP ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•˜๋Š” ํ•„์ˆ˜์ ์ธ ํŒŒ์ผ   (1) .shp : ์‹ค์ œ Geometry ์ขŒํ‘œ ๋ฐ์ดํ„ฐ ์ €์žฅ   (2) .shx : Geometry ๋ฐ์ดํ„ฐ์˜ index ์ •๋ณด๊ฐ€ ์ €์žฅ, ๋„ํ˜•์˜ ์œ„์น˜๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•จ  (3) .dbf : Geometry ๋ฐ์ดํ„ฐ์— ์—ฐ๊ฒฐ๋œ ์†์„ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ ๊ทธ ๋ฐ–์˜ ํŒŒ์ผ๋“ค   (1) .prj : ๊ณต๊ฐ„ ๋ฐ์ดํ„ฐ ์ขŒํ‘œ๊ณ„ ์ •๋ณด ์ €์žฅ  (2) .cpg : ๋ฌธ์ž ์ธ์ฝ”๋”ฉ๋ฐฉ์‹์„ ์ €์žฅ  (3) .qix : ๊ณต๊ฐ„ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ์ƒ‰์ธํ™”ํ•˜์—ฌ ์ €์žฅ

Web/OpenLayers 2023.03.29

[OpenLayers] ์ง€๋„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ OpenLayers์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

OpenLayers ์ฃผ์š”๊ฐ์ฒด 1. MapOpenLayers์˜ ํ•ต์‹ฌ ๊ฐ์ฒด๋กœ ์ง€๋„๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด, ์†Œ์Šค ๋“ฑ์„ ๊ฒฐํ•ฉํ•˜์—ฌ ํ™”๋ฉด์— ์ง€๋„ ํ‘œ์‹œํ•จ ์ฃผ์š” ์†์„ฑ ๋ฐ ๋ฉ”์†Œ๋“œ- target : ์ง€๋„๊ฐ€ ๋žœ๋”๋ง ๋  HTML ์š”์†Œ์˜ ID- layers : ๋งต์— ์ถ”๊ฐ€๋˜๋Š” ๋ ˆ์ด์–ด์˜ ๋ฐฐ์—ด- view : ์ง€๋„์˜ ์ดˆ๊ธฐ ์ค‘์‹ฌ์ ๊ณผ ํ™•๋Œ€ ์ˆ˜์ค€์„ ์ •์˜ํ•˜๋Š” View ๊ฐ์ฒด- addLayer() : ์ง€๋„์˜ ๋ ˆ์ด์–ด์— ์ƒˆ ๋ ˆ์ด์–ด๋ฅผ ์ถ”๊ฐ€- getView() : ํ˜„์žฌ ๋งต์˜ View ๊ฐ์ฒด ๋ฐ˜ํ™˜ 2. View์ง€๋„์˜ ์‹œ๊ฐ์  ํ‘œํ˜„ ์ œ์–ด์ง€๋„์˜ ์ค‘์‹ฌ์ , ํ™•๋Œ€/์ถ•์†Œ ๋ ˆ๋ฒจ, ํšŒ์ „ ๋“ฑ์„ ์„ค์ • ์ฃผ์š” ์†์„ฑ ๋ฐ ๋ฉ”์†Œ๋“œ- center : ์ง€๋„์˜ ์ค‘์‹ฌ์  ์ขŒํ‘œ- zoom : ์ดˆ๊ธฐ ํ™•๋Œ€/์ถ•์†Œ ๋ ˆ๋ฒจ- rotation : ์ง€๋„์˜ ํšŒ์ „ ๊ฐ๋„- setCenter(coordinate)..

Web/OpenLayers 2023.03.23

[Web] RESTful API๋ž€?

REST - Representational State Transfer- API ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์กฐ๊ฑด์„ ๋ถ€๊ณผํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜์ด๋‹ค.- ๋ณต์žกํ•œ ๋„คํŠธ์›Œํฌ์—์„œ ํ†ต์‹ ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค.- REST ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ์˜ ๊ณ ์„ฑ๋Šฅ ํ†ต์‹ ์„ ์•ˆ์ •์ ์œผ๋กœ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค. RESTful APIโœ”๏ธ๊ฐœ๋…- ๋‘ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์ด ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ์ •๋ณด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.- ์•ˆ์ „ํ•˜๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํšจ์œจ์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ํ†ต์‹  ํ‘œ์ค€์„ ๋”ฐ๋ฅธ๋‹ค. โœ”๏ธ์ž‘๋™๋ฐฉ์‹- ์ธํ„ฐ๋„ท ๋ธŒ๋ผ์šฐ์ง•๊ณผ ๋™์ผํ•จ 1. client๊ฐ€ server์— ์š”์ฒญ์„ ์ „์†กํ•œ๋‹ค. API ๋ฌธ์„œ์— ๋”ฐ๋ผ server๊ฐ€ ์ดํ•ดํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญ ํ˜•์‹์„ ์ง€์ •2. server๊ฐ€ client๋ฅผ ์ธ์ฆํ•˜๊ณ  ํ•ด๋‹น ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด cl..

Web 2022.10.14