์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ ์„œ๋น„์Šคํ‚ค ์–ด๋–ป๊ฒŒ ์“ฐ๋Š”๊ฑด๋ฐ... ( •แท„โŒ“•แท… )

๋ณธ๋ฌธ

1. ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ์—์„œ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šคํ‚ค๋Š” ์ผ๋‹จ ์ธ์ฝ”๋”ฉ๋œ ํ‚ค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์ด %์™€ ๊ฐ™์ด ๋ณ€ํ™˜๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

// ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์ธ์ฝ”๋”ฉ๋œ ํ‚ค(์„œ๋น„์Šคํ‚ค ์ผ๋ถ€ ์‚ญ์ œ)

https://apis.data.go.kr/1160100/service/GetMarketIndexInfoService/getStockMarketIndex?serviceKey=qfXqzDLVVPW1Ks0oWU%2Bm8Z9JphEfjCDxm7GMBUkVC4GoPQshE%2B8Uk%2BQ%3D%3D&

์ด๋ ‡๊ฒŒ ํฌ์ŠคํŠธ๋งจ์ด๋‚˜ ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ์—์„œ ํ…Œ์ŠคํŠธํ•ด๋ณด๋ฉด ์ œ๋Œ€๋กœ ๋‚˜์˜ค์ง€๋งŒ, ์ฝ”๋“œ์ƒ์œผ๋กœ๋Š” ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค. 

๋‹ค๋ฅธ API๋„ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋‚˜ ์ด๊ฑด ์ œ๋Œ€๋กœ ๋‚˜์™€์„œ ๋” ์™œ ์•ˆ๋˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.

 

 

 

 

-> ๊ทธ๋Ÿผ ์ธ์ฝ”๋”ฉ์˜ ๋œป์ด ์ •ํ™•ํ•˜๊ฒŒ ๋ฌด์—‡์ด๋ƒ? ๋””์ฝ”๋”ฉ์€?

Codable ํ”„๋กœํ† ์ฝœ์€ Encodable๊ณผ Decodable๋กœ ๊ตฌ์„ฑ๋˜์—ˆ์œผ๋ฉฐ,class, struct, enum ์— ์ฑ„ํƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

 

 

 

 

 

2. ์ธ์ฝ”๋”ฉ์ด ๋˜์–ด ์žˆ๋Š” ํ‚ค๋ผ %์™€ ๊ฐ™์€ ํŠน์ˆ˜ ๋ฌธ์ž๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค. 

 

3. url์„ ๋งŒ๋“ค ๋•Œ, ๋‹ค์‹œ ํ•œ๋ฒˆ ์ธ์ฝ”๋”ฉ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์—(?) ์ธ์ฝ”๋”ฉ์ด ๋‘๋ฒˆ ๋ผ์„œ ํ‚ค๊ฐ’์ด ๋ฐ”๋€๋‹ค? 

 

4. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ์—์„œ๋Š” ์™œ ์‚ฌ๋žŒ ํž˜๋“ค๊ฒŒ ์ด๋ ‡๊ฒŒ ์„œ๋น„์Šคํ‚ค๋ฅผ ์ธ์ฝ”๋”ฉํ•ด์„œ ์ฃผ๋Š” ๊ฒƒ์ธ๊ฐ€? ์ด์œ ๋ฅผ ๋งํ•ด๋ผ,,,

 

5. ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ ๋‚ด์—์„œ ๋””์ฝ”๋”ฉ๋œ ํ‚ค๋„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ๊ทผ๋ฐ ์•ˆ๋œ๋‹ค. 

 

 

 


1. ์‹ค์ œ ์„œ๋น„์Šคํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋‹ˆ ํ—ท๊ฐˆ๋ ค์„œ ์ž„์˜๋กœ ๋‚ด๊ฐ€ ํŠน์ˆ˜๋ฌธ์ž์™€ ๊ณต๋ฐฑ์ด ํฌํ•จ๋œ ํ‚ค๊ฐ’์„ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค.

addingPercentEncoding์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฝ”๋”ฉ ํ–ˆ์„ ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์ด ๋‚˜์˜จ๋‹ค. 

 

 

 

2. endpoint๊ฐ€ ๋„คํŠธ์›Œํฌ๋งค๋‹ˆ์ €๋กœ ๋“ค์–ด์˜ค๊ณ , urlComponents.queryItems๋ฅผ ์ฐ์–ด๋ณด์•˜๋‹ค. 

์ธ์ฝ”๋”ฉ๋œ ๊ฐ’์ด ์ œ๋Œ€๋กœ ๋“ค์–ด์˜จ ๊ฒƒ์„ ํ™•์ธ.

 

๊ทธ๋ฆฌ๊ณ  url ๋ถ€๋ถ„์„ ์ฐ์–ด๋ณด์•˜์„ ๋•Œ ์ถ”๊ฐ€์ ์œผ๋กœ ์ธ์ฝ”๋”ฉ์ด ๋˜ ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

์ฆ‰, ์ธ์ฝ”๋”ฉ์ด 2๋ฒˆ ๋œ ๊ฒƒ. 

 

 

3. ๊ทธ๋ ‡๋‹ค๋ฉด ์„œ๋น„์Šคํ‚ค์™€ ๋น„์Šทํ•˜๊ฒŒ ์ƒํ™ฉ์„ ๋‹ค์‹œ ๋งŒ๋“ค์–ด๋ณธ๋‹ค. 

๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ์—์„œ ์ œ๊ณตํ•ด์ค€ ์ธ์ฝ”๋”ฉ๋œ ํ‚ค๋ฅผ ๊ฐ€์ •ํ•ด๋ณธ๋‹ค. 

์ง€๊ธˆ ์ธ์ฝ”๋”ฉ์ด 2๋ฒˆ ๋œ ๊ฒƒ์ด ๋ฌธ์ œ์˜€์œผ๋ฏ€๋กœ ์ธ์ฝ”๋”ฉ ๋œ ์„œ๋น„์Šคํ‚ค๋ฅผ ๋””์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค. 

๋””์ฝ”๋”ฉ์ด ์ œ๋Œ€๋กœ ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

4. ๋„คํŠธ์›Œํฌ๋งค๋‹ˆ์ €์—์„œ url์„ ํ™•์ธํ•ด๋ณด๋ฉด ์ธ์ฝ”๋”ฉ๋œ ํ‚ค๊ฐ€ url์— ๋“ค์–ด๊ฐ„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

 

์ธ์ฝ”๋”ฉ์ด ๋‘๋ฒˆ ๋˜๋Š” ์ƒํ™ฉ์—์„œ ์ฒ˜์Œ ๋””์ฝ”๋”ฉ์„ ํ•ด์ฃผ๋ฉด url์ด ๋งŒ๋“ค์–ด์ง€๋Š” ๊ณผ์ •์—์„œ ์ธ์ฝ”๋”ฉ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋˜์–ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ ๊ฐ™๋‹ค. 

๊ทผ๋ฐ, ์„œ๋น„์Šคํ‚ค๋Š” ์™œ ์•ˆ๋ ๊นŒ.


๋‹ค์‹œ ๋Œ์•„์™€์„œ ์„œ๋น„์Šคํ‚ค๋กœ ๋‹ค์‹œ ์‹œ๋„ํ•ด๋ณธ๋‹ค. 

 

1. ์ธ์ฝ”๋”ฉ์ด ๋œ ํ‚ค๋ฅผ ๋””์ฝ”๋”ฉ ํ•œ๋‹ค.

 

 

2. urlComponents.queryItems์„ ํ™•์ธํ•ด๋ณธ๋‹ค.

๋””์ฝ”๋”ฉ ๋œ ์„œ๋น„์Šคํ‚ค๊ฐ€ ๋“ค์–ด์˜จ๋‹ค 

 

 

3. url์„ ํ™•์ธํ•ด๋ณด๋‹ˆ ๋ญ๊ฐ€ ๋ฐ”๋€Œ๊ธด ํ–ˆ๋‹ค. ์ธ์ฝ”๋”ฉ์ด ๋œ ๊ฑธ๊นŒ...

๊ทผ๋ฐ ์–˜๋Š” ์™œ +์™€ %์™€ ๊ฐ™์€ ํŠน์ˆ˜๋ฌธ์ž๋“ค์ด ๋˜ ๋“ค์–ด๊ฐ€ ์žˆ๋Š”๊ฑธ๊นŒ...

 

 


percentEncodedQuery์™€ addingPercentEncoding(withAllowedCharacters:)์˜ ์ฐจ์ด์ ์ด ๋ญ˜๊นŒ

๋‘˜ ๋‹ค ์ธ์ฝ”๋”ฉ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋ฉด์—์„œ ์œ ์‚ฌํ•˜์ง€๋งŒ ์ฐจ์ด์ ์ด ์žˆ๋‹ค. 

 

1. percentEncodedQuery

- ; ๋ฌธ์ž๋Š” ํ•ฉ๋ฒ•์ ์ธ ๊ฒฝ๋กœ ๋ฌธ์ž์ด์ง€๋งŒ, URL ํ˜ธํ™˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. CharacterSet.urlQueryAllowed์™€ ํ•จ๊ป˜ String.addingPercentEncoding(withAllowedCharacters:) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ; ๋ฌธ์ž๋ฅผ ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

- getter

getter๋Š” percentEncodedQuery์˜ ๊ฐ’์„ ์ฝ์–ด์˜ฌ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ.

์ฆ‰, percentEncodedQuery ํ”„๋กœํผํ‹ฐ์— ์ €์žฅ๋œ ๊ฐ’์„ ์š”์ฒญํ•˜๋ฉด, ์ด ๊ฐ’์ด ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉ๋œ ์ƒํƒœ๋กœ ๋ฐ˜ํ™˜๋จ.

์˜ˆ๋ฅผ ๋“ค์–ด, URL์˜ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์„ ์ฝ์„ ๋•Œ, ์ด ๋ฌธ์ž์—ด์ด ์ด๋ฏธ ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉ๋œ ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๋ฉด ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜.

 

์‚ฌ์šฉ๋˜๋Š” ์ƒํ™ฉ: ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜์—ฌ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ ค๊ณ  ํ•  ๋•Œ

// getter
// ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉ๋œ ํ˜•ํƒœ๋กœ ์ €์žฅ
let query = urlComponents.percentEncodedQuery
print(query) // ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉ๋œ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜

// ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉ์ด ๋˜์ง€ ์•Š์€ ํ˜•ํƒœ๋กœ ์ €์žฅ: ์ธ์ฝ”๋”ฉ๋˜์ง€ ์•Š์€ ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜
urlComponents.percentEncodedQuery = "name=John Doe"
let query = urlComponents.percentEncodedQuery
print(query) // "name=John Doe" (ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉ์ด ์ ์šฉ๋˜์ง€ ์•Š์Œ)

 

 

- setter

setter๋Š” percentEncodedQuery ํ”„๋กœํผํ‹ฐ์— ๊ฐ’์„ ์„ค์ •ํ•  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ.

์ด ๊ฒฝ์šฐ, setter๋Š” ์„ค์ •ํ•˜๋ ค๋Š” ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์ด ์ด๋ฏธ ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ๊ฐ’์„ ์ €์žฅ.

์ž˜๋ชป๋œ ์ธ์ฝ”๋”ฉ์ด ๋œ ๋ฌธ์ž์—ด์„ ์„ค์ •ํ•˜๋ ค๊ณ  ํ•˜๋ฉด, fatalError๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

 

์‚ฌ์šฉ๋˜๋Š” ์ƒํ™ฉ: ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝ(์ƒˆ๋กœ์šด ๊ฐ’ ํ• ๋‹น)ํ•  ๋•Œ

// setter
urlComponents.percentEncodedQuery = "name%20=John%20Doe" // ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉ๋œ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์„ ์„ค์ •

 

 

**ํผ์„ผํŠธ์ธ์ฝ”๋”ฉ์€ URL์—์„œ ํŠน์ • ๋ฌธ์ž๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์ด๋‹ค 

URL์— ํฌํ•จ๋  ์ˆ˜ ์—†๋Š” ํŠน์ˆ˜๋ฌธ์ž(๊ณต๋ฐฑ, #, &)๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ %์™€ ASCII์ฝ”๋“œ 16์ง„์ˆ˜๋กœ ์ธ์ฝ”๋”ฉํ•œ๋‹ค. 

 

 

2. addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)

- ๋ฌธ์ž์—ด์—์„œ ํŠน์ • ๋ฌธ์ž๋ฅผ ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉํ•  ๋•Œ ์‚ฌ์šฉ

๋ฐ˜ํ™˜ ๊ฐ’

ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ๋ณ€ํ™˜์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ nil์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

์„ค๋ช…

์ „์ฒด URL ๋ฌธ์ž์—ด์€ ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. URL์˜ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๋งˆ๋‹ค ํ—ˆ์šฉ๋˜๋Š” ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, URL์˜ ์ฟผ๋ฆฌ ๊ตฌ์„ฑ ์š”์†Œ๋Š” @ ๋ฌธ์ž๋ฅผ ํ—ˆ์šฉํ•˜์ง€๋งŒ, ์ด ๋ฌธ์ž๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ตฌ์„ฑ ์š”์†Œ์—์„œ๋Š” ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

UTF-8 ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉ ๋ฌธ์ž๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. allowedCharacters์— ํฌํ•จ๋œ 7๋น„ํŠธ ASCII ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๋ฌธ์ž๋Š” ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

 

 

์ค‘์š”ํ•œ ์ 

์ด๋ฏธ ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด์—์„œ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉ ์‹œํ€€์Šค์˜ ํผ์„ผํŠธ ๋ฌธ์ž๊ฐ€ ๋‘ ๋ฒˆ ์ธ์ฝ”๋”ฉ๋ฉ๋‹ˆ๋‹ค.


์—ฌ๊ธฐ๊นŒ์ง€ ๋ณด๊ณ  ๋‹ค์‹œ ๋งŒ๋“ค์–ด์ง„ url์„ ๋ด๋ณด์ž,,,

%์ด์™ธ์˜ +์™€ ๊ฐ™์€ ํŠน์ˆ˜๋ฌธ์ž๋“ค์ด ๋ณด์ธ๋‹ค. 

 

 

์ฒซ๋ฒˆ์งธ ์‹œ๋„ ๋ฐฉ๋ฒ•

getter์™€ setter ๊ฐœ๋…์„ ์ ์šฉํ•ด๋ณธ๋‹ค. -> ์•ˆ๋จ

 

 

๋‘๋ฒˆ์งธ ์‹œ๋„ ๋ฐฉ๋ฒ• 

๊ถ๊ธˆํ•ด์„œ ์‹œ๋„ ํ•ด๋ดค์Œ..ใ…‡ใ…‡

ํ‚ค๊ฐ’์„ ์ง์ ‘ ๋ฌธ์ž์—ด๋กœ ์ง์ ‘ ์ž…๋ ฅํ•ด๋ณธ๋‹ค๋ฉด...?? ๊ทธ๋ž˜๋„ ์•ˆ๋จ...

 

 

 

์„ธ๋ฒˆ์งธ ์‹œ๋„ ๋ฐฉ๋ฒ•

๋ฌธ์ž์—ด์„ ์ธ์ฝ”๋”ฉ ํ•ด๋ณด์ž ... -> ์•ˆ๋จ..ใ…Žใ…Ž

 

 

์ธ์ฝ”๋”ฉ์ด ๋œ ํ‚ค๋ฅผ urlComponents์—์„œ url์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •์—์„œ ํ•œ๋ฒˆ ๋” ์ธ์ฝ”๋”ฉ์ด ๋˜๋Š” ๋ฌธ์ œ

1. ์ฒ˜์Œ๋ถ€ํ„ฐ ๋””์ฝ”๋”ฉ ๋œ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด์„œ url์„ ๋งŒ๋“ ๋‹ค 

2. ์ธ์ฝ”๋”ฉ์ด ๋œ ํ‚ค๋ฅผ ๋””์ฝ”๋”ฉํ•œ ํ›„ url์„ ๋งŒ๋“ ๋‹ค

 

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ