๋ฐ˜์‘ํ˜•

navigator.userAgent


๋ธŒ๋ผ์šฐ์ € API์—์„œ ์ œ๊ณตํ•˜๋Š” userAgent ๋ฌธ์ž์—ด์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•. userAgent๋Š” ์œ ์ € ๋””๋ฐ”์ด์Šค์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„  navigator.userAgent ์†์„ฑ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

userAgent ๋ฌธ์ž์—ด์ด mobi, android iphone ๋“ฑ ํ‚ค์›Œ๋“œ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค๋ฉด ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ๋กœ ์ ‘์†ํ–ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ userAgent ๊ฐ’์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 100% ์‹ ๋ขฐํ•  ์ˆœ ์—†๋‹ค.

// ๋ฐฉ๋ฒ• 1
// ์ •๊ทœ์‹์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค. i ํ”Œ๋ž˜๊ทธ๋กœ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค
if (/Mobi|Android|iPhone/i.test(navigator.userAgent)) {
  // ํ˜„์žฌ ์žฅ์น˜๋Š” ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ
}

// ๋ฐฉ๋ฒ• 2
if (
  navigator.userAgent.match(/Mobi/i) ||
  navigator.userAgent.match(/Android/i) ||
  navigator.userAgent.match(/iPhone/i)
) {
  // ํ˜„์žฌ ์žฅ์น˜๋Š” ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ
}

 

Chromium ๊ณ„์—ด์˜ ๋ธŒ๋ผ์šฐ์ €๋Š” userAgent์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•˜๋Š” navigator.userAgentData ๋ผ๋Š” ์†์„ฑ์ด ์žˆ๋‹ค. ์ฐจ์ด์ ์€ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ ๋ฌธ์ž์—ด์„ ๊ฐ์ฒด๋กœ ํŒŒ์‹ฑํ•˜๊ณ , ํ•ด๋‹น ๊ฐ์ฒด ์•ˆ์˜ mobile ์†์„ฑ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ๋ชจ๋ฐ”์ผ ์žฅ์น˜ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ boolean ๊ฐ’์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

const isMobile = navigator.userAgentData.mobile;

 

๐Ÿ’ก ์• ํ”Œ์˜ Safari์™€ Firefox๋Š” userAgentData ์†์„ฑ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ caniuse ์ฐธ๊ณ 

 

window.screen, window.innerWidth


์Šคํฌ๋ฆฐ ๋„ˆ๋น„๋ฅผ ํ†ตํ•ด ๋ชจ๋ฐ”์ผ ๋””๋ฐ”์ด์Šค์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•. window.screen ๊ฐ์ฒด๋Š” ์œ ์ € ๋””๋ฐ”์ด์Šค์˜ ์Šคํฌ๋ฆฐ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค(๋ชจ๋‹ˆํ„ฐ ์‚ฌ์ด์ฆˆ). ์ด ๊ฐ์ฒด์˜ width ์†์„ฑ์ด ๋ฐ”๋กœ ์Šคํฌ๋ฆฐ ๋„ˆ๋น„. ์œ ์ €๊ฐ€ ๊ฐ€๋กœ๋ชจ๋“œ๋กœ ํ•ธ๋“œํฐ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์ธ์ง€ ์‹๋ณ„ํ•  ์ˆ˜ ์—†๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

if (window.screen.width < 500) {
  // ํ˜„์žฌ ์žฅ์น˜๋Š” ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ
}

 

๋˜ ๋‹ค๋ฅธ ์†์„ฑ์ธ window.innerWidth ๋Š” ๋ธŒ๋ผ์šฐ์ € ์ฐฝ ์•ˆ์ชฝ์˜ ๋ทฐํฌํŠธ(์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ์˜์—ญ) ๋„ˆ๋น„๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์Šคํฌ๋กค๋ฐ”๋„ ํฌํ•จํ•œ ๊ฐ’์ด๋‹ค. ์›นํŽ˜์ด์ง€์˜ ๊ฐ ๋„ˆ๋น„๋งˆ๋‹ค ๋‹ค๋ฅธ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

const getBrowserWidth = () => {
  if (window.innerWidth < 768) {
    return "xs";
  } else if (window.innerWidth < 991) {
    return "sm";
  } else if (window.innerWidth < 1199) {
    return "md";
  } else {
    return "lg";
  }
};

 

  • window.screen.width / height : ๋ชจ๋‹ˆํ„ฐ ์‚ฌ์ด์ฆˆ
  • window.outerHeight / outerWidth : ๋ธŒ๋ผ์šฐ์ € ์ „์ฒด ์‚ฌ์ด์ฆˆ
  • window.innerHeight / innerWidth : ์Šคํฌ๋กค๋ฐ” ํฌํ•จ ๋ทฐํฌํŠธ ์‚ฌ์ด์ฆˆ
  • document.documentElement.clientWidth / clientHeight : ์Šคํฌ๋กค๋ฐ” ์ œ์™ธ ๋ทฐํฌํŠธ ์‚ฌ์ด์ฆˆ

 

window.orientation


์Šคํฌ๋ฆฐ ๋ฐฉํ–ฅ์„ ๊ฐ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•. ํœด๋Œ€ํฐ์€ ์–ธ์ œ๋“ ์ง€ ์Šคํฌ๋ฆฐ ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฐ์Šคํฌํƒ‘ ๋ชจ๋‹ˆํ„ฐ๋Š” ๊ณ ์ •์‹œ์ผœ ๋†“๊ณ  ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ผ๋ฐ˜์ ์ด๋‹ค.

 

window.orientation ์†์„ฑ์€ ํ˜„์žฌ ์Šคํฌ๋ฆฐ์˜ ๋ฐฉํ–ฅ ๊ฐ’์„(๊ฐ๋„) ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์—์„œ๋งŒ ํ•ด๋‹น ์†์„ฑ ๊ฐ’์ด ์กด์žฌํ•œ๋‹ค. ๋ฐ์Šคํฌํƒ‘์—์„  undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

if (typeof window.orientation !== 'undefined') {
  // ํ˜„์žฌ ์žฅ์น˜๋Š” ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ
}

 

iOS ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €๋กœ codepen์— ์ ‘์†ํ•œ ๋’ค ์ฝ˜์†”์ฐฝ์— `window.orientation`์„ ์ž…๋ ฅํ•˜๋ฉด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค(0์€ ์„ธ๋กœ, 90์€ ๊ฐ€๋กœ)

 

๐Ÿ’ก iPhone์˜ Safari ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ์†์„ฑ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

touch ์ด๋ฒคํŠธ


ํœด๋Œ€ํฐ ๋ธŒ๋ผ์šฐ์ €์˜ DOM ์š”์†Œ๋Š” ontouchstart ์†์„ฑ์œผ๋กœ touch ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ๋ฆฌ์Šค๋„ˆ ํ•จ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์Šคํฌํƒ‘ DOM์—” ontouchstart ์†์„ฑ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ด์šฉํ•ด ๋ชจ๋ฐ”์ผ ์žฅ์น˜์ธ์ง€ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

// ๋ฐฉ๋ฒ• 1
function isMobile() {
  return 'ontouchstart' in document.documentElement;
}

// ๋ฐฉ๋ฒ• 2
function isMobile() {
  try {
    document.createEvent('TouchEvent');
    return true;
  } catch (e) {
    return false;
  }
}

 

์ฐธ๊ณ ๋กœ in ์—ฐ์‚ฐ์ž๋Š” ๋ช…์‹œํ•œ ์†์„ฑ์ด ๊ฐ์ฒด์— ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ boolean ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

const arr = [1, 2, 3, 4, 5];
0 in arr; // true (0๋ฒˆ index๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ)
5 in arr; // false (5๋ฒˆ index๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ)
'length' in arr; // true (๋ฐฐ์—ด์€ length ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ)
'concat' in arr; // true

const obj = { name: 'Smith', age: 30 };
'name' in obj; // true
'city' in obj; // false

 

window.matchMedia()


CSS๋ฅผ ํ™œ์šฉํ•ด ๋ชจ๋ฐ”์ผ ์žฅ์น˜์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•. CSS๋Š” ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด ์›น ํŽ˜์ด์ง€์˜ ๋ฐ˜์‘ํ˜• ์Šคํƒ€์ผ์„ ์ง€์ •ํ•œ๋‹ค. ๋งŒ์•ฝ ๋ชจ๋ฐ”์ผ์— ๋Œ€์‘ํ•œ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ์ด ์œ ํšจํ•˜๋‹ค๋ฉด, ํ˜„์žฌ ์žฅ์น˜๋Š” ๋ชจ๋ฐ”์ผ์ด๋ผ๊ณ  ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

 

window.matchMedia() ๋ฉ”์„œ๋“œ๋Š” CSS์˜ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋ฌธ์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„, ํ•ด๋‹น ๋ฌธ์ด ์œ ํšจํ•œ์ง€ ํŒ๋‹จํ•œ๋‹ค.

 

์•„๋ž˜ ์ฝ”๋“œ์—์„œ window.matchMedia() ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฐ›์€ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋ฌธ์€ 760px์„ ์ดˆ๊ณผํ•˜์ง€ ์•Š๋Š” ์Šคํฌ๋ฆฐ์—์„œ๋งŒ ์œ ํšจํ•˜๋‹ค. window.matchMedia() ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ์ฒด์˜ matches ์†์„ฑ์€ boolean ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. true ๋ผ๋ฉด ๋ฏธ๋””์–ด ์กฐํšŒ(media query)์— ์„ฑ๊ณตํ–ˆ๋‹ค๋Š” ๋œป์ด๊ณ , ๊ทธ๋Ÿผ ์œ ์ €์˜ ํ˜„์žฌ ์žฅ์น˜๋Š” ๋ชจ๋ฐ”์ผ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

let isMobile = window.matchMedia('only screen and (max-width: 760px)').matches;

 

 

์ฐธ๊ณ ๋กœ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์˜ only ์—ฐ์‚ฐ์ž๋Š” ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋Š” ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๋งŒ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ์„ ํ•ด์„ํ•˜๋ผ๋Š” ๋ช…๋ น์ด๋‹ค. ์ƒ๋žตํ–ˆ์„ ๋•Œ ๊ธฐ๋ณธ๊ฐ’์€ only๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. — ์ฐธ๊ณ 

 

ํฌ์ธํ„ฐ์˜ ์ •ํ™•๋„๋กœ ํŒ๋‹จํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค. pointer:coarse CSS ๊ตฌ๋ฌธ์€ ํ˜„์žฌ ์žฅ์น˜์˜ ํฌ์ธํ„ฐ๊ฐ€ ์ •ํ™•ํ•˜์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ํœด๋Œ€ํฐ์€ ๋งˆ์šฐ์Šค๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ณ  ํ„ฐ์น˜๋งŒ ์ง€์›ํ•˜๋ฏ€๋กœ ์ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•œ๋‹ค.

let isMobile = window.matchMedia('(pointer:coarse)').matches;

 

์ผ๋ถ€ ์žฅ์น˜๋Š” ๋งˆ์šฐ์Šค์™€ ํ„ฐ์น˜ ๊ฐ™์€ ์—ฌ๋Ÿฌ ํฌ์ธํ„ฐ๋ฅผ ๋™์‹œ์— ์ง€์›ํ•œ๋‹ค. pointer:coarse๋Š” ๋ฉ”์ธ ํฌ์ธํ„ฐ๋ฅผ ํŒ๋‹จํ•˜๋Š” ๋ฐ๋งŒ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋• ๋ชจ๋“  ํฌ์ธํ„ฐ๋ฅผ ํŒ๋ณ„ํ•˜๋Š” any-pointer ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  ํฌ์ธํ„ฐ ์ค‘ ํ•˜๋‚˜์˜ ํฌ์ธํ„ฐ๋ผ๋„ ์ •ํ™•ํ•˜์ง€ ์•Š์œผ๋ฉด ์ฟผ๋ฆฌ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•œ๋‹ค.

let isMobile = window.matchMedia('(any-pointer:coarse)').matches;

 

react-device-detect ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉ


์œ„ 5๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์™ธ์—, ์ด๋ฏธ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ž‘์„ฑํ•ด๋†“์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค. React๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๊ณผ ์„ธ๋ถ„ํ™”๋œ ์žฅ์น˜ ๊ฐ์ง€๋ฅผ ์ง€์›ํ•˜๋Š” react-device-detect ์ถ”์ฒœํ•œ๋‹ค.

import { isMobile } from 'react-device-detect';

if (isMobile) {
  // ํ˜„์žฌ ์žฅ์น˜๋Š” ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ
}

 

CSS ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ


CSS min-width max-width ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ์Šคํฌ๋ฆฐ ํญ์— ๋”ฐ๋ผ ์›ํ•˜๋Š” ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ธฐ๊ธฐ๋งˆ๋‹ค ํ™”๋ฉด ํฌ๊ธฐ๊ฐ€ ์ฒœ์ฐจ๋งŒ๋ณ„์ด๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ํญ์„ ๊ธฐ์ค€์œผ๋กœ ์‚ผ์„์ง€ ์• ๋งคํ•˜๋‹ค. ๋Œ€์‹  pointer hover ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ๋” ํ˜„๋Œ€์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ๋ฅผ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค. — ์ฐธ๊ณ  ๊ธ€ 1 | ์ฐธ๊ณ ๊ธ€ 2

coarse๋Š” ๊ฑฐ์นœ(๋ฐ˜์˜์–ด smooth), ๊ตต์€(๋ฐ˜์˜์–ด fine) ๋“ฑ์˜ ๋œป์„ ๊ฐ€์ง„ ๋‹จ์–ด

 

pointer ์ฟผ๋ฆฌ — ํฌ์ธํ„ฐ ์žฅ์น˜ ์œ ๋ฌด ํŒ๋‹จ

  • none : ํฌ์ธํ„ฐ ์žฅ์น˜๊ฐ€ ์—†์„ ๋•Œ
  • coarse : ํฌ์ธํ„ฐ ์žฅ์น˜๊ฐ€ ์žˆ์ง€๋งŒ ์ •ํ™•๋„๊ฐ€ ๋†’์ง€ ์•Š์„ ๋•Œ(ํ„ฐ์น˜์Šคํฌ๋ฆฐ, ํ‚ค๋„ฅํŠธ ๋“ฑ)
  • fine : ์ •๋ฐ€ ํฌ์ธํ„ฐ ์žฅ์น˜์ผ ๋•Œ(๋งˆ์šฐ์Šค, ํ„ฐ์น˜ํŒจ๋“œ ๋“ฑ)

 

hover ์ฟผ๋ฆฌ — hover ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํŒ๋‹จ

  • hover : ๊ธฐ๋ณธ ์žฅ์น˜๋กœ ์ •ํ™•ํ•œ hover๋ฅผ ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ(๋งˆ์šฐ์Šค, ํ„ฐ์น˜ํŒจ๋“œ ๋“ฑ)
  • none :
    1. ํฌ์ธํ„ฐ ์žฅ์น˜๊ฐ€ ์—†์„ ๋•Œ
    2. ํฌ์ธํ„ฐ ์žฅ์น˜๊ฐ€ hover๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์„ ๋•Œ
    3. ํ˜ธ๋ฒ„ ๊ฐ€๋Šฅํ•œ ์žฅ์น˜๊ฐ€ ์žˆ์œผ๋‚˜ ๋กฑํƒญ(Long Tab) ๋™์ž‘์œผ๋กœ hover ํ•ด์•ผํ•  ๋•Œ(ํ„ฐ์น˜์Šคํฌ๋ฆฐ ๋“ฑ)

 

pointer, hover ๋‘ ์ฟผ๋ฆฌ๋ฅผ ๊ฒฐํ•ฉํ•ด์„œ ๋””๋ฐ”์ด์Šค๋ฅผ ํŒ๋‹จํ•˜๋Š” ์˜ˆ์‹œ

/* smartphones, touchscreens */
@media (hover: none) and (pointer: coarse) { }

/* stylus-based screens */
@media (hover: none) and (pointer: fine) { }

/* Nintendo Wii controller, Microsoft Kinect */
@media (hover: hover) and (pointer: coarse) { }

/* mouse, touch pad */
@media (hover: hover) and (pointer: fine) { }

 


๊ธ€ ์ˆ˜์ •์‚ฌํ•ญ์€ ๋…ธ์…˜ ํŽ˜์ด์ง€์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”
๋ฐ˜์‘ํ˜•