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

๋ณธ๋ฌธ ์ œ๋ชฉ

localStorage๊ฐœ๋… ๋ฐ ํŠน์ง•๊ณผ JSON.stringify / JSON.parse() ๊ฐœ๋…

DB

by developia_yeso 2025. 5. 4. 18:37

๋ณธ๋ฌธ

 

๐Ÿ”  ๊ฐœ๋…์ •๋ฆฌ : localstorage ๋ž€? - ์›น์Šคํ† ๋ฆฌ์ง€(์ €์žฅ์†Œ)

    LocalStorage๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๊ณตํ•˜๋Š” ์›น ์Šคํ† ๋ฆฌ์ง€(Web Storage) API์˜ ํ•œ ์ข…๋ฅ˜๋กœ,

    ํด๋ผ์ด์–ธํŠธ(์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €)์— ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค. 

 

๐Ÿ‘‰ "ํด๋ผ์ด์–ธํŠธ(์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €)์— ์ €์žฅํ•œ๋‹ค"๋Š” ์˜๋ฏธ๋Š” ์ฆ‰, ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ์˜ค์ง ์‚ฌ์šฉ์ž์˜

์›น ๋ธŒ๋ผ์šฐ์ € ์•ˆ์—๋งŒ ์กด์žฌํ•˜๋ฉฐ, ์„œ๋ฒ„์™€๋Š” ์•„๋ฌด ๊ด€๋ จ์ด ์—†๋‹ค.

 

 

โœ… LocalStorage ํŠน์ง•

์ €์žฅ ์œ„์น˜ ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)
๋ฐ์ดํ„ฐ ์ˆ˜๋ช… ๋ธŒ๋ผ์šฐ์ €๋‚˜ ํƒญ์„ ๋‹ซ์•„๋„ ์‚ญ์ œ๋˜์ง€ ์•Š์Œ (๋ช…์‹œ์ ์œผ๋กœ ์ œ๊ฑฐํ•ด์•ผ ํ•จ)
์ €์žฅ ์šฉ๋Ÿ‰ ๋ณดํ†ต ์•ฝ 5MB (๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ๋‹ค๋ฆ„)
์ ‘๊ทผ ๋ฐฉ์‹ ํ‚ค-๊ฐ’(Key-Value) ์Œ
์ง€์› ํƒ€์ž… ๋ฌธ์ž์—ด(string)๋งŒ ์ €์žฅ ๊ฐ€๋Šฅ (JSON.stringify ํ•„์š”)
๋™๊ธฐ์  ๋ฐ์ดํ„ฐ๋Š” ๋™๊ธฐ์ ์œผ๋กœ ์ €์žฅ๋˜๊ณ  ์ฝํž˜

 

 

๐Ÿ“Œ ์ฃผ์š” ๋ฉ”์„œ๋“œ

// ์ €์žฅ
localStorage.setItem('key', 'value');

// ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
const value = localStorage.getItem('key');

// ์‚ญ์ œ
localStorage.removeItem('key');

// ์ „์ฒด ์‚ญ์ œ
localStorage.clear();

 

๐Ÿ“Œ ์‚ฌ์šฉ ์˜ˆ์‹œ

// ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ
const user = { name: 'Alice', age: 30 };
localStorage.setItem('user', JSON.stringify(user));

// ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ๋Š” ๋‹ค์‹œ ๊ฐ์ฒด๋กœ ํŒŒ์‹ฑ
const savedUser = JSON.parse(localStorage.getItem('user'));
console.log(savedUser.name); // 'Alice'

 

 

โœ… localStorage๋Š” ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ

- ์‚ฌ์šฉ์ž ์„ค์ • ์ €์žฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ 

   ex. ๋‹คํฌ๋ชจ๋“œ ์—ฌ๋ถ€, ์–ธ์–ด์„ค์ •, ๊ธ€๊ผด ํฌ๊ธฐ ๋“ฑ์˜ ์‚ฌ์šฉ์ž ์„ ํ˜ธ ์„ค์ •

 

- ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด์•ผํ•  ๋•Œ

  ex. ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ์ž ์ •๋ณด (์ด๋ฆ„, ์ด๋ฉ”์ผ)๋“ฑ์„ ์ €์žฅํ•ด ํŽ˜์ด์ง€ ์ด๋™ ์‹œ์—๋„ ์ƒํƒœ๋ฅผ ์œ ์ง€

 

- ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ ์ €์žฅํ•  ๋•Œ

  ex. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ •๋ณด, ๊ฒŒ์ž„ ์ง„ํ–‰ ์ƒํƒœ ๋“ฑ ํด๋ผ์ด์–ธํŠธ ์ธก ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ ์ €์žฅ

 

- ์ž„์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ

  ex. ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์—†์ด ๊ฐ„๋‹จํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ณต๊ตฌํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  

โœ… localStorage๋Š” ์„ธ์…˜ ๊ฐ„ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฆ‰:

  • ๊ฐ™์€ ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ํƒญ, ์—ฌ๋Ÿฌ ์ฐฝ์„ ์—ด์–ด๋„
  • ๊ฐ™์€ ๋„๋ฉ”์ธ(origin)์ด๋ผ๋ฉด
  • localStorage์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ๊ณตํ†ต์œผ๋กœ ์ ‘๊ทผ์ด ๋œ๋‹ค.

์˜ˆ์‹œ:

  1. ์ฒซ ๋ฒˆ์งธ ํƒญ์—์„œ localStorage.setItem('token', 'abc123') ์‹คํ–‰
  2. ๋‘ ๋ฒˆ์งธ ํƒญ์—์„œ localStorage.getItem('token') ์‹คํ–‰ → 'abc123' ๋ฐ˜ํ™˜

์ด์ฒ˜๋Ÿผ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ชจ๋“  ํƒญ/์ฐฝ์—์„œ ๊ณต์œ ๋˜๊ธฐ ๋•Œ๋ฌธ์— "์„ธ์…˜ ๊ฐ„ ๊ณต์œ ๋œ๋‹ค"๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

 

 

๊ทธ๋ ‡๋‹ค๋ฉด ์งˆ๋ฌธ!

response๋ฅผ ํ†ตํ•ด์„œ { token : '1234555' } ์ด๋Ÿฐ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋„˜์–ด์™”์„ ๋•Œ
localStorage.setItem('token', response.token); ์œผ๋กœ ๋ฐ›์œผ๋ฉด, token๊ฐ’์ด stringํ˜•ํƒœ๋กœ ๋ณ€ํ™˜์ด ๋ ๊นŒ?

 

=> ๊ทธ๋ ‡๋‹ค! 

์ •ํ™•ํžˆ, ๋งํ•˜๋ฉด  ์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด response.token์˜ ๊ฐ’(์˜ˆ: '1234555')์€ ์ž๋™์œผ๋กœ ๋ฌธ์ž์—ด(string) ํ˜•ํƒœ๋กœ ์ €์žฅ์ด ๋œ๋‹ค.

localStorage.setItem('token', response.token);

 

๐Ÿ” ์ด์œ ๋Š”?

localStorage๋Š” ๋ชจ๋“  ๊ฐ’์„ ๋ฌธ์ž์—ด(string)๋กœ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค, 
์ฆ‰, ์–ด๋–ค ํƒ€์ž…์˜ ๊ฐ’์„ ์ €์žฅํ•˜๋ ค๊ณ  ํ•ด๋„ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์ €์žฅ๋œ๋‹ค.

localStorage.setItem('number', 12345);
localStorage.getItem('number'); // "12345" ← ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜๋จ

 

์‹ฌ์ง€์–ด true, false, null, undefined, ์ˆซ์ž ๋“ฑ๋„ ๋‹ค ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋œ๋‹ค.

 

 

โœ… ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์„ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•?

๊ฐ์ฒด๋Š” ๋ฐ”๋กœ ์ €์žฅํ•˜๋ฉด **"[object Object]"**๋กœ ๋ณ€ํ™˜๋˜๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ JSON.stringify()๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

// ์ €์žฅ
const user = { name: 'Alice', age: 30 };
localStorage.setItem('user', JSON.stringify(user));

// ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ
const savedUser = JSON.parse(localStorage.getItem('user'));
console.log(savedUser.name); // "Alice"

 

 

 

 

 

 

์—ฌ๊ธฐ์„œ ์ž ๊น, 

โœ… JSON.stringify(user)๋ž€? ๐Ÿ‘‰ JavaScript ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

const user = { name: 'Alice', age: 30 };
const jsonString = JSON.stringify(user);
console.log(jsonString); // '{"name":"Alice","age":30}'

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด JavaScript ๊ฐ์ฒด๊ฐ€ "{"name":"Alice","age":30}"๋ผ๋Š” ๋ฌธ์ž์—ด์ด ๋œ๋‹ค. 

 

๐Ÿ”„ ์™œ ํ•„์š”ํ• ๊นŒ

  • localStorage๋Š” **๋ฌธ์ž์—ด(string)**๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
  • ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋ ค๋ฉด ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
  • ๋‚˜์ค‘์— ๋‹ค์‹œ ์‚ฌ์šฉํ•  ๋• JSON.parse()๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
// ์ €์žฅ
localStorage.setItem('user', JSON.stringify(user));

// ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
const savedUser = JSON.parse(localStorage.getItem('user'));
console.log(savedUser.name); // "Alice"

 

 

โœ… ๊ทธ๋ ‡๋‹ค๋ฉด JSON.parse()๋ž€? ๐Ÿ‘‰ JSON ํ˜•์‹์˜ ๋ฌธ์ž์—ด์„ JavaScript ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

const jsonString = '{"name":"Alice","age":30}';
const user = JSON.parse(jsonString);

console.log(user.name); // "Alice"
console.log(typeof user); // "object"

 

  • jsonString์€ ๊ทธ๋ƒฅ **๋ฌธ์ž์—ด(string)**์ด๋‹ค.
  • JSON.parse(jsonString)์„ ํ•˜๋ฉด → **๊ฐ์ฒด(object)**๋กœ ๋ฐ”๋€๋‹ค.

 

โœ… ์–ธ์ œ ์‚ฌ์šฉํ•˜๋‚˜์š”?

  • ์ฃผ๋กœ localStorage๋‚˜ ์„œ๋ฒ„ ์‘๋‹ต์—์„œ JSON ๋ฌธ์ž์—ด์„ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
// ์ €์žฅํ•  ๋•Œ
const user = { name: 'Alice', age: 30 };
localStorage.setItem('user', JSON.stringify(user));

// ๊บผ๋‚ผ ๋•Œ
const savedUser = JSON.parse(localStorage.getItem('user'));
console.log(savedUser.name); // "Alice"

 

 

โš ๏ธ ์ฃผ์˜ํ•  ์ 

  • ํŒŒ์‹ฑํ•˜๋ ค๋Š” ๋ฌธ์ž์—ด์ด ์ •ํ™•ํ•œ JSON ํ˜•์‹์ด์–ด์•ผ ํ•œ๋‹ค.
  • ์ž˜๋ชป๋œ ํ˜•์‹์ด๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
JSON.parse("hello"); 
// โŒ SyntaxError: Unexpected token h in JSON at position 0

JSON.parse("{name: 'Alice'}"); 
// โŒ SyntaxError: name must be double-quoted

โœ”๏ธ ํ•ญ์ƒ " ํฐ๋”ฐ์˜ดํ‘œ๋ฅผ ์จ์•ผ JSON์œผ๋กœ ์ธ์‹๋ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ“Œ ์š”์•ฝ

JSON.stringify() ๊ฐ์ฒด → ๋ฌธ์ž์—ด
JSON.parse() ๋ฌธ์ž์—ด → ๊ฐ์ฒด

 

 

 

โœ… ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ํ†ต์‹ ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌธ์ž์—ด ๊ธฐ๋ฐ˜์ด๋‹ค.

  • HTTP ํ”„๋กœํ† ์ฝœ์€ ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜์ด๊ธฐ ๋•Œ๋ฌธ์—,
  • ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ๋„, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ๋„
  • ๋Œ€๋ถ€๋ถ„ **๋ฌธ์ž์—ด(JSON ๋ฌธ์ž์—ด, HTML, XML ๋“ฑ)**๋กœ ์ „๋‹ฌ๋œ๋‹ค.

 

๐Ÿ”„ ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ ํ•˜๋Š” ์ผ์€?

์„œ๋ฒ„์— ๊ฐ์ฒด ์ „์†ก JSON.stringify()๋กœ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์ „์†ก
์„œ๋ฒ„์—์„œ ์‘๋‹ต ์ˆ˜์‹  JSON.parse()๋กœ ๋ฌธ์ž์—ด์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์‚ฌ์šฉ

 

'DB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[React] ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ์ „์†ก  (0) 2025.02.25
[Mysql] Sql ๋ฌธ๋ฒ•์ตํžˆ๊ธฐ (DDL, DML, DCL)  (1) 2024.04.14
[Mysql] Mysql ์‹œ์ž‘ํ•˜๊ธฐ  (0) 2024.04.09

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