<Wontae />
Navigate back to the homepage

2st Project at Wecode! - Arket In Germany๐Ÿ‡ฉ๐Ÿ‡ช (์ˆ˜์ • ์ค‘)

Wontae Jeong,ย 
October 16th, 2020 ยท 3 min read
0 x 0

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

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

๐Ÿ™Œ Front-end

  • React.js๋ฅผ ์ด์šฉํ•œ ํด๋ก 
  • CRA(create-react-app)๋ฅผ ์‚ฌ์šฉํ•œ ์ดˆ๊ธฐ ์„ธํŒ…
  • styled-components ํ™œ์šฉ
  • Redux๋ฅผ ์ด์šฉํ•œ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ
  • Hooks๋ฅผ ์ด์šฉํ•œ ์ปดํฌ๋„ŒํŠธ ์ƒํƒœ ๊ด€๋ฆฌ
  • localStorage์™€ token์„ ์ด์šฉํ•œ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • react-router, query string, path๋กœ ๋™์  ๋ผ์šฐํŒ… ๊ตฌํ˜„
  • Code refactoring

๐Ÿ™Œ Back-end

  • Django๋ฅผ ์‚ฌ์šฉํ•œ ์ดˆ๊ธฐ ์„ธํŒ…
  • Aquery๋ฅผ ์ด์šฉํ•œ ๋ชจ๋ธ๋ง
  • Bcrypt๋ฅผ ์ด์šฉํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™”๋กœ ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • PyJWT
  • Mysql
  • Code refactoring

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

  • 2020.10.05 ~ 2020.10.16

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

Front-end


React
JavaScript
styled-components
Redux, react-redux
Git

Back-end


AqueryTool
Python
Django
MySQL
PyJWT / Bcrypt
Git

๐Ÿš€ ๊ตฌํ˜„ ๊ธฐ๋Šฅ

ย ย ๋ฉ”์ธ ํŽ˜์ด์ง€ - PM ์žฅ์ฃผํฌ

main page

  • slick ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•œ ์Šฌ๋ผ์ด๋“œ ๊ตฌํ˜„
  • js๋ฅผ ์ด์šฉํ•œ ์Šฌ๋ผ์ด๋“œ ๊ตฌํ˜„
  • map ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ์•„์ดํ…œ ์ •๋ ฌ
  • ์นดํ…Œ๊ณ ๋ฆฌ ํด๋ฆญ์‹œ ์•„์ดํ…œ ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€๋กœ ์ด๋™

ย ย ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€, ๋ฉ”๋‰ด - ์œค์‹œํ›ˆ, ๊น€์„ฑ์ง„

nav

sign-up page

sign-in page

  • ์•„์ด๋””, ์ด๋ฆ„
  • at least one character
  • ๋น„๋ฐ€๋ฒˆํ˜ธ
  • 8-20์ž๋ฆฌ ๋Œ€๋ฌธ์ž, ์ˆซ์ž ํฌํ•จ
  • ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌํ™•์ธ
  • ๋น„๋ฏผ๋ฒˆํ˜ธ์™€ ๋™์ผ
  • ์ƒ๋…„์›”์ผ
  • ์—ฐ๋„ - 4์ž๋ฆฌ ์ˆซ์ž
  • ์›” - 1-12์›” ์„ ํƒ
  • ์ผ - 1-31์ผ๊นŒ์ง€ ์ˆซ์ž
  • ์„ฑ๋ณ„
  • ๋‚จ์„ฑ/์—ฌ์„ฑ/์„ ํƒ์•ˆํ•จ ์ค‘ ํƒ 1
  • ๋ณธ์ธํ™•์ธ ์ด๋ฉ”์ผ (์„ ํƒ)
  • ์„ ํƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋นˆ์นธ ์ž…๋ ฅ ๊ฐ€๋Šฅ
  • ํœด๋Œ€์ „ํ™”
  • โ€˜-โ€™ ์—†์ด 11์ž๋ฆฌ ์ž…๋ ฅ
  • token์„ ํ™œ์šฉํ•œ ๋กœ๊ทธ์ธ

ย ย ์ƒํ’ˆ ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€ - ์ตœ์˜ˆ์›, ์ด๋„๊ธธ

list page

  • mapํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ์•„์ดํ…œ ์ •๋ ฌ
  • ํ•„ํ„ฐ์— ๋”ฐ๋ฅธ ์•„์ดํ…œ ์ •๋ ฌ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (์„œ๋ฒ„ ์—ฐ๊ฒฐ ์ „์—๋Š” mock data๋ฅผ sortํ•จ์ˆ˜๋กœ ๋ถ„๋ฅ˜ํ–ˆ๊ณ , ์„œ๋ฒ„ ์—ฐ๊ฒฐ ํ›„์—๋Š” queryString ์ด์šฉํ•œ fetch ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์˜€๋‹ค.)
  • ๋ฆฌ์ŠคํŠธ๋ทฐ,์ด๋ฏธ์ง€๋ทฐ,ํฐ์ด๋ฏธ์ง€๋ทฐ,๊ฐค๋Ÿฌ๋ฆฌ๋ทฐ 4๊ฐ€์ง€์˜ ๋ทฐ์Šคํƒ€์ผ ์ „ํ™˜
  • ์ƒํ’ˆ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ๊ฐœ์ˆ˜ ์„ ํƒ์— ๋”ฐ๋ฅธ ํŽ˜์ด์ง€๋„ค์ด์…˜
  • ์ฐœํ•˜๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ์ƒํ’ˆ ํด๋ฆญ ์‹œ ํ•ด๋‹น ์ƒํ’ˆ ํŽ˜์ด์ง€๋กœ ์ด๋™
  • ํ† ๊ธ€ ๋ฒ„ํŠผ ๊ตฌํ˜„

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

detail page

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

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

1class InformationTab extends Component {
2
3 ...
4
5 render() {
6 retrun (
7 ...
8 <ul className="chart">
9 {SHIP_DATA.map((data, index) => {
10 const { id, option, count } = data;
11 let ratio = parseInt((count / getTotalCount()) * 100);
12 return (
13 <li key={id}>
14 <span className="option">{option}</span>
15 <div className="line">
16 <div
17 className={
18 getMaxInCount() === index
19 ? 'activeLine max'
20 : 'activeLine'
21 }
22 style={{ width: `${ratio}%` }}
23 />
24 <div className="backgroundLine"></div>
25 </div>
26 <span
27 className={
28 getMaxInCount() === index ? 'count max' : 'count'
29 }
30 >{`${count}๊ฑด (${count ? ratio : 0}%)`}</span>
31 </li>
32 );
33 })}
34 </ul>
35 ...
36 )
37 }
38}
39
40function getTotalCount() {
41 let counts = [];
42
43 for (let data of SHIP_DATA) {
44 counts.push(data.count);
45 }
46
47 return counts.reduce((accumulator, count) => accumulator + count, 0);
48}
49
50function getMaxInCount() {
51 let max = 0;
52 const counts = [];
53
54 for (let data of SHIP_DATA) {
55 counts.push(data.count);
56 }
57
58 max = Math.max(...counts);
59 return counts.indexOf(max);
60}
chart

  • Reduce๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•œ ํ•ฉ๊ณ„ ๊ณ„์‚ฐ
  • ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” (chart)

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

ํŒ€์›Œํฌ


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

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


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

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

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


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

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

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

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

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

์งœ๋ฆฟํ•จ


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

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


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

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

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


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

line friends store team

More articles from Wontae Jeong

1st Project at Wecode! - Line Friends Store Clone

Front-end (์œค์‹œํ›ˆ, ์žฅ์ฃผํฌ, ์ •์›ํƒœ, ์ตœ์˜ˆ์›), Back-end (๊น€์„ฑ์ง„, ์ด๋„๊ธธ), PM ์žฅ์ฃผํฌ

September 28th, 2020 ยท 3 min read

wecode ํ•œ ๋‹ฌ ํ›„๊ธฐ

wecode์—์„œ์˜ ํ•œ ๋‹ฌ

September 12th, 2020 ยท 1 min read
ยฉ 2020 Wontae Jeong
Link to $https://github.com/wontaeziaLink to $https://instagram.com/wontaeziaLink to $https://www.youtube.com/channel/UC6xNhtj5VHgxvAnp0x8tmOw?view_as=subscriber