wontae

1st Project at Wecode! - Line Friends Store Clone

๐Ÿ™Œ ๊ณตํ†ต์‚ฌํ•ญ

  • Git์„ ์‚ฌ์šฉํ•œ ํŒ€ ํ˜‘์—… ๊ณผ์ •
  • Trello๋ฅผ ํ™œ์šฉํ•œ ์Šคํฌ๋Ÿผ ๋ฐฉ์‹ ์•„๋ž˜ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰

๐Ÿ™Œ Front-end

  • React.js๋ฅผ ์ด์šฉํ•œ ๋ผ์ธํ”„๋ Œ์ฆˆ์Šคํ† ์–ด ํด๋ก 
  • CRA(create-react-app)๋ฅผ ์‚ฌ์šฉํ•œ ์ดˆ๊ธฐ ์„ธํŒ…
  • MockData๋ฅผ ์ด์šฉํ•˜์—ฌ UI ๊ตฌํ˜„ ํ›„ componentDidMount()์™€ fetch()๋ฅผ ์ด์šฉํ•ด ๋ฐฑ์—”๋“œ์™€์˜ ํ†ต์‹ 
  • localStorage์™€ token์„ ์ด์šฉํ•œ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • query string, path๋กœ ๋™์  ๋ผ์šฐํŒ…๊ณผ Pagination ๊ตฌํ˜„
  • Code refactoring

๐Ÿ™Œ Back-end

  • Python์„ ์ด์šฉํ•œ ๋ผ์ธํ”„๋ Œ์ฆˆ์Šคํ† ์–ด ํฌ๋กค๋ง
  • Django๋ฅผ ์‚ฌ์šฉํ•œ ์ดˆ๊ธฐ ์„ธํŒ…
  • Aquery๋ฅผ ์ด์šฉํ•œ ๋ผ์ธํ”„๋ Œ์ฆˆ์Šคํ† ์–ด ๋ชจ๋ธ๋ง
  • Bcrypt๋ฅผ ์ด์šฉํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™”๋กœ ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • Decorater๋กœ ํ† ํฐ์„ ์‚ฌ์šฉํ•ด์„œ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ํฌ๋กค๋งํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ Mysql ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋คํ•‘
  • ์ƒํ’ˆ ๋ฆฌ์ŠคํŠธ ๋ฐ ์ƒํ’ˆ ์ƒ์„ธ ํŽ˜์ด์ง€ ๊ตฌํ˜„
  • ํšŒ์› ๋ฆฌ๋ทฐ CRUD ๊ตฌํ˜„
  • Code refactoring

๐ŸŽ‰ ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„

  • 2020.09.14 ~ 2020.09.25

๐Ÿ›ธ ์‚ฌ์šฉ ๊ธฐ์ˆ 

Front-endReact
JavaScript
SASS
Git
Back-endPython
Django
MySQL
Linux
Git

๐Ÿš€ ๋‚ด๊ฐ€ ๋งก์€ ํŒŒํŠธ

์ƒํ’ˆ ์ƒ์„ธ์ •๋ณด ํŽ˜์ด์ง€ - ์ •์›ํƒœ, ์ด๋„๊ธธ, ๊น€์„ฑ์ง„

detail page
  • Price ๋ฐ์ดํ„ฐ๋กœ ์ ๋ฆฝ๊ธˆ, ์˜ต์…˜ ์„ ํƒ ์‹œ ์ดํ•ฉ ๊ณ„์‚ฐ
  • ๋ฐ์ดํ„ฐ ์ฐจํŠธ ๊ตฌํ˜„
  • ์Šคํฌ๋กค์— ๋”ฐ๋ฅธ sticky nav๊ตฌํ˜„
  • ์Šคํฌ๋กค์— ๋”ฐ๋ฅธ sticky nav ์ƒ‰์ƒ ๋ณ€ํ™” ๋ฐ ํด๋ฆญ ์‹œ ํŠน์ • ์Šคํฌ๋กค ์ด๋™ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ์˜ต์…˜ ์„ ํƒ ๊ธฐ๋Šฅ ๋ฐ ์ˆ˜๋Ÿ‰ ์ถ”๊ฐ€์— ๋”ฐ๋ฅธ ๊ฐ€๊ฒฉ ๊ณ„์‚ฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • sticky nav์™€ ๊ฐ€๊ฒฉ ๋ฐ ์˜ต์…˜ ์ž๋™ ์—ฐ๋™
  • ๋งˆ์šฐ์Šค hover์‹œ ์ œํ’ˆ ์ƒ์„ธ ์ด๋ฏธ์ง€ ๋ณ€ํ™”
  • ๋ฐ์ดํ„ฐ ํ†ต์‹ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ์ƒํ’ˆ์ •๋ณด ํ…Œ์ด๋ธ”
  • ํฌํ† ๋ฆฌ๋ทฐ ๊ฐ„๋žต๋ณด๊ธฐ 4๊ฐœ์”ฉ ๋ณด์—ฌ์ฃผ๊ธฐ
  • ๋ฆฌ๋ทฐ ๋ชจ๋‹ฌ์ฐฝ
  • ๋ณ„์ ํ‰๊ฐ€ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๊ธฐ๋Šฅ

โœ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ์ฝ”๋“œ

class InformationTab extends Component {

  ...

  render() {
    retrun (
      ...
        <ul className="chart">
          {SHIP_DATA.map((data, index) => {
            const { id, option, count } = data;
            let ratio = parseInt((count / getTotalCount()) * 100);
            return (
              <li key={id}>
                <span className="option">{option}</span>
                <div className="line">
                  <div
                    className={
                      getMaxInCount() === index
                        ? 'activeLine max'
                        : 'activeLine'
                    }
                    style={{ width: `${ratio}%` }}
                  />
                  <div className="backgroundLine"></div>
                </div>
                <span
                  className={
                    getMaxInCount() === index ? 'count max' : 'count'
                  }
                >{`${count}๊ฑด (${count ? ratio : 0}%)`}</span>
              </li>
            );
          })}
        </ul>
      ...
    )
  }
}

function getTotalCount() {
  let counts = [];

  for (let data of SHIP_DATA) {
    counts.push(data.count);
  }

  return counts.reduce((accumulator, count) => accumulator + count, 0);
}

function getMaxInCount() {
  let max = 0;
  const counts = [];

  for (let data of SHIP_DATA) {
    counts.push(data.count);
  }

  max = Math.max(...counts);
  return counts.indexOf(max);
}
chart
  • Reduce๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•œ ํ•ฉ๊ณ„ ๊ณ„์‚ฐ
  • ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” (chart)

๐Ÿ† ๋ณด๊ณ  ๋ฐฐ์šฐ๊ณ  ๋Š๋‚€ ์ 

1. ํŒ€์›Œํฌ

์œ„์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ ๋“ค์–ด์™€์„œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ์•ˆ์—์„œ์˜ ์†Œํ†ต ๋Šฅ๋ ฅ์ด๋ผ ๋ฐฐ์› ๋‹ค. ์‚ฌ์‹ค ๊ทธ ์ด์•ผ๊ธฐ๋ฅผ ์ฒ˜์Œ ๋“ค์—ˆ์„ ๋•Œ๋Š” ์˜๋ก€ ํšŒ์‚ฌ ์ƒํ™œ์— ํ•„์š”ํ•œ ํ•˜๋‚˜์˜ ๋•๋ชฉ์„ ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ ์ด๋ฒˆ ํŒ€ ํ”„๋กœ์ ํŠธ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์™œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ค‘์š”ํ•œ ๊ฒƒ์ธ์ง€, ํŒ€์›Œํฌ๋ž€ ๋ฌด์—‡์ด๊ณ  ๊ทธ ํŒ€์›Œํฌ๊ฐ€ ๊ฒฐ๊ณผ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ผ์น˜๊ฒŒ ๋˜๋Š”์ง€ ๊ฐ€์Šด ๊นŠ์ด ๋Š๋‚„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

2. ์‹๊ตฌ๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ

์‹๊ตฌ๊ฐ€ ๋ญ์—ฌ? ์‹๊ตฌ๋ž€ ๋ง์ด์—ฌ
๊ฐ™์ด ๋ฐฅ๋จน๋Š” ์ž…๊ตฌ๋…์ด์—ฌ~
์ž…๊ตฌ๋… ํ•˜๋‚˜ ๋‘˜ ์…‹ ๋„ท ๋‹ค์„ฏ ์—ฌ์„ฏ ๋‚˜๊นŒ์ง€ ์ผ๊ณฑ
ํ˜ผ์ž์‚ด๊ฒ ๋‹ค๊ณ  ๋‚˜๊ฐ€์„œ ๋ฐฅ๋จน๋Š”๊ฑด ๋ญ์—ฌ?
๊ทธ๊ฑด ์‹๊ตฌ๊ฐ€์•„๋‹ˆ๊ณ  ํ˜ธ๋กœ์‰‘์ด์—ฌ~ ๊ทธ๋ƒ ์•ˆ๊ทธ๋ƒ?
[์˜ํ™” ๋น„์—ดํ•œ ๊ฑฐ๋ฆฌ ไธญ]

ํŒ€์ด ์ •ํ•ด์ง€๊ณ  ์ž๋ฆฌ๋ฅผ ๋ฐฐ์ •๋ฐ›๊ณ  ๋‚˜์„œ๋ถ€ํ„ฐ ์ด๋ฏธ ๋‚ด๊ฒŒ๋Š” ํฐ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒผ๋‹ค. ์‚ฌ์‹ค ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์ด์ „์—๋Š” ์œ„์ฝ”๋“œ์—์„œ ๋ฒ„๋ฆ‡์ฒ˜๋Ÿผ ๋ฐฅ์„ ๊ฑฐ๋ฅด๊ธฐ ์ผ์‘ค์˜€๋˜ ๋‚˜์˜€๋Š”๋ฐ ๊ทธ๋Ÿฐ ๋‚ด๊ฒŒ ๋งค ๋ผ๋‹ˆ๋ฅผ ํ•จ๊ป˜ํ•˜๋Š” ์‹๊ตฌ๊ฐ€ ์ƒ๊ฒผ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์—ญ์‹œ ํ•œ๊ตญ์ธ์€ ๋ฐฅ์œผ๋กœ ํ†ตํ•œ๋‹ค๊ณ  ํ–ˆ๋˜๊ฐ€, ๋‚ด๊ฐ€ ๋ฐฅ์„ ๋จน๋Š”๋‹ค๋Š” ์ด์œ  ํ•˜๋‚˜๋งŒ์œผ๋กœ๋„ ์Ÿ์•„์ง€๋Š” ํŒ€์›๋“ค์˜ ๋ฐ•์ˆ˜๊ฐˆ์ฑ„(?) ์†์—์„œ ์ด๋ฏธ ๋‚˜๋Š” ํ•œ ์‹๊ตฌ์˜ ์ผ์›์ด ๋˜์–ด ์žˆ์—ˆ๋‹ค.

3. ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋‚œ๊ด€

๊ทธ๋ ‡๊ฒŒ ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹œ์ž‘๋˜๊ณ  ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ณ€์ˆ˜๋“ค์„ ๋งŒ๋‚˜ ์ฒซ๋‚ ์˜ ๋Œ€๋ถ€๋ถ„์„ ๊ธฐํš ํšŒ์˜์— ํ• ์• ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋‚˜์˜ ์ž„๋ฌด๊ฐ€ ๋ถ„๋ช…ํ•ด์ง„ ์ฒซ๋‚ ์˜ ๋์ž๋ฝ์— ๋‚ด๊ฐ€ ๋งก์€ ์ƒ์„ธํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ํ•˜๋‚˜ํ•˜๋‚˜ ๋“ค์—ฌ๋‹ค๋ณด๋‹ˆ ์™œ ์ด๋ ‡๊ฒŒ ํ…์ŠคํŠธ๋Š” ๋งŽ๊ณ  ์Šคํƒ€์ผ๋“ค์€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๊ฒƒ์ธ์ง€ ์˜์–ด์— ๋Šฅ์ˆ™ํ•˜์ง€ ์•Š์€ ๋‚˜๋Š” ๊ทธ ๋งŽ์€ ํด๋ž˜์Šค ์ด๋ฆ„์€ ์–ด๋–ป๊ฒŒ ์ง€์–ด์•ผ ํ• ๊นŒ

์ขŒ์ ˆํ•˜๋ฉฐ๊ณ ๋ฏผํ•˜๋ฉฐ ์ฒซ๋‚ ์„ ๋งˆ๋ฌด๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์˜ค์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™๋˜ ์ž ๋„ ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ•œ ์‚ฌ์ด ์ฐพ์•„์™€ ๋‚˜๋ฅผ ์ž ๋“ค๊ฒŒ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ํ•ด๊ฒฐ์ฑ…์€ ๋‹ค์Œ ๋‚  ์ „ํ˜€ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‚ด๊ฒŒ ์ฐพ์•„์™”๋‹ค. ๋‹ค์Œ ๋‚  ์ƒˆ๋ฒฝ 6์‹œ, ๋ˆˆ์„ ๋– ๋ณด๋‹ˆ ์Šฌ๋ž™ ๋ฉ”์‹œ์ง€ ํ•œ ํ†ต์ด ์™€์žˆ์—ˆ๋Š”๋ฐ

์‹œํ›ˆ๋‹˜์˜ ์Šฌ๋ž™ ๋ฉ”์‹œ์ง€

์ •์„ฑ์Šค๋ ˆ ํ•˜๋‚˜ํ•˜๋‚˜ ํด๋ž˜์Šค ์ด๋ฆ„์„ ๊ณ ๋ฏผํ•ด ์ฃผ๊ณ  ํŽธ์ง‘ํ•ด ์ฃผ์‹  ์‹œํ›ˆ ๋‹˜์˜ ๋ฉ”์‹œ์ง€์˜€๋‹ค. ์ •๋ง ์ด ์‚ฌ์ง„ ํŒŒ์ผ๊ณผ ์‘์› ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋Š” ์ˆœ๊ฐ„์˜ ๊ฐ์ •์€ ํ‰์ƒ ์žŠ์„ ์ˆ˜ ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค. ์•„๋‹ˆ, ์žŠ๊ณ  ์‹ถ์ง€ ์•Š๋‹ค.

์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ฐ์ •์ด ํ•œ๊บผ๋ฒˆ์— ํ„ฐ์ ธ ๋‚˜์™”๋Š”๋ฐ ์šฐ์„  ๋„ˆ๋ฌด๋„ˆ๋ฌด ๊ฐ์‚ฌํ•œ ๋งˆ์Œ์ด ์•ž์„ฐ๊ณ  ๋‚ด๊ฐ€ ๋„ˆ๋ฌด ํ‹ฐ๋ฅผ ๋‚ด์–ด ๋‹ค๋ฅธ ํŒ€์›๋“ค์„ ๋ถˆํŽธํ•˜๊ฒŒ ํ–ˆ๋˜ ๊ฒƒ์€ ์•„๋‹ˆ์—ˆ์„๊นŒ ํ•˜๋Š” ํ›„ํšŒ ์„ž์ธ ๋ฐ˜์„ฑ, ๋‚˜๋„ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋„์›€์ด ๋˜๊ฒ ๋‹ค๋Š” ๋‹ค์ง, ์–ด๋–ค ๊ณต๋™์ฒด์˜ ์ผ์›์ด ๋œ๋‹ค๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ฐ์‚ฌํ•จ ๋“ฑ ๋ชจ๋“  ๊ฒƒ์ด ํ•œ๊บผ๋ฒˆ์— ๋ชฐ๋ ค์™”์—ˆ๋‹ค.

4. ์งœ๋ฆฟํ•จ

๋‹ค๋ฅธ ์ƒ๊ฐ ์—†์ด ๋ฐ”๋กœ ์œ„์ฝ”๋“œ๋กœ ์™€์„œ ์ž‘์—…์„ ์‹œ์ž‘ํ–ˆ๋‹ค. ์ •๋ง ์—ด์‹ฌํžˆ ํ•˜๊ณ  ์‹ถ์—ˆ๊ณ  ๊ทธ ๋งˆ์Œ์ด ์ „ํ•ด์ง„ ๊ฒƒ์ธ์ง€ ๋ชจ๋“  ๊ฒƒ์ด ๋ง‰ํž˜์—†์ด ์ง„ํ–‰๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ์‹œ๊ฐ„์ด ์ƒ๊ธฐ๋ฉด ๋‚ด๊ฐ€ ๋„์›€์„ ๋ฐ›์•˜๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋‚˜ ๋˜ํ•œ ๋‹ค๋ฅธ ์ด์˜ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋‹ค๋‹ˆ๊ธฐ๋„ ํ–ˆ์—ˆ๋Š”๋ฐ ์šด์ด ์ข‹๊ฒŒ๋„ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ์ˆœ๊ฐ„๋“ค์„ ๊ฒฝํ—˜ํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์™€ ํ•จ๊ป˜ ๊ณ ๋ฏผํ•˜๋˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋์„ ๋•Œ์˜ ์งœ๋ฆฟํ•จ์€ ๊ทธ ๋ฌด์—‡๊ณผ๋„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” ์†Œ์ค‘ํ•œ ๊ธฐ์–ต์ด ๋˜๊ณ  ๋‚˜์˜ ์›๋™๋ ฅ์ด ๋˜์–ด์ฃผ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

5. ์ปค๋ฎค๋‹ˆํ‹ฐ

๋‹ค์‹œ ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„๊ฐ€ ์œ„์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ ๋“ค์–ด์™€์„œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ๋ผ ๋ฐฐ์› ์—ˆ๋‹ค๊ณ  ํ–ˆ๋‹ค. ์ด์ œ๋Š” ์™œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ค‘์š”ํ•œ ๊ฒƒ์ธ์ง€, ํŒ€์›Œํฌ๋ž€ ๋ฌด์—‡์ด๊ณ  ๊ทธ ํŒ€์›Œํฌ๊ฐ€ ๊ฒฐ๊ณผ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ผ์น˜๊ฒŒ ๋˜๋Š”์ง€ ๋ˆ„๊ตฌ๋ณด๋‹ค ๊ฐ€์Šด ๊นŠ์ด ๋Š๋‚„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

์ด ๊ธ€์˜ ๋์œผ๋กœ ๊ทธ๊ฒƒ๋“ค์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€ ์šฐ๋ฆฌ ํŒ€์›๋‹˜๋“ค, ๋™๊ธฐ๋‹˜๋“ค, ๋ฉ˜ํ† ๋‹˜๋“ค์—๊ฒŒ ์ •๋ง ๊ฐ์‚ฌํ•˜๋‹ค๋Š” ๋ง์„ ์ „ํ•˜๊ณ  ์‹ถ๋‹ค.๐Ÿ™‡โ€โ™€๏ธ

+ ํŒ€์›๋“ค์—๊ฒŒ

์ œ๊ฐ€ ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„ ๋™์•ˆ ๊ท€์ฐฎ๊ฒŒ๋„ ๋งŽ์ด ํ•˜๊ณ  ๋ฐฅํˆฌ์ •(ใ…‹ใ…‹ใ…‹)๊นŒ์ง€ ๋ถ€๋ ธ๋Š”๋ฐ ์–ธ์ œ๋‚˜ ๋”ฐ๋œปํ•˜๊ฒŒ ์›ƒ์œผ๋ฉด์„œ ๋ฐฐ๋ คํ•ด ์ฃผ์‹œ๊ณ  ์‘์›ํ•ด ์ฃผ์…”์„œ ์ •๋ง ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋•๋ถ„์— ์ €๋Š” ๋งŽ์€ ๊ฒƒ๋“ค์„ ๋ณด๊ณ  ๋ฐฐ์šฐ๊ณ  ๋Š๋‚„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘ ๋ชจ๋‘ ๊ณ ์ƒํ•˜์…จ์Šต๋‹ˆ๋‹ค!

line friends store team