๐ŸŽซ CGW: ์˜ํ™”์˜ˆ๋งค ์‚ฌ์ดํŠธ

0713vinยท2022๋…„ 12์›” 10์ผ
0

Team Project

๋ชฉ๋ก ๋ณด๊ธฐ
1/1
post-thumbnail

๐ŸŽซ CGW

๐Ÿ“† 2022.11.28~ 12.9


๐Ÿ† CGW Goal

  • ์˜ˆ๋งค ๊ทธ ์ •๋„, CGW
  • ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ๋” ๊ฐ„ํŽธํ•œ ์˜ˆ์•ฝ ํŽ˜์ด์ง€
    • ๊ฐ€๋…์„ฑ์„ ๋†’์ธ UI
    • ์ง€๋„ API ๊ฐ€๊นŒ์šด ์˜ํ™”๊ด€ ์•ˆ๋‚ด
    • ์†Œ์…œ๋กœ๊ทธ์ธ, ์†Œ์…œ ๊ฒฐ์ œ๋ฅผ ํ™œ์šฉํ•œ ๊ตฌ๋งค ํ—ˆ๋“ค ๋‚ฎ์ถ”๊ธฐ

๐Ÿ“ผ DEMO

๐Ÿ™Žโ€โ™€๏ธ Team CGW

FE ๊ณฝ์ข…๋ฒ”, ๋ฐ•์ง€์˜, ์ด๋‹ค๋นˆ, ์ดํ˜œ์›

BE ๊น€ํ•œ์†”, ์ž„์ฐฝํ˜„, ์กฐ์ƒ์›

๐Ÿ“Œ CGW Features

  • ๐Ÿ”ต ์ข…๋ฒ” FE - ์ขŒ์„ ์„ ํƒ
  • ๐Ÿ”ต ์ง€์˜ FE - ์†Œ์…œ ๋กœ๊ทธ์ธ& ์ง€๋„ API Map ๊ธฐ๋Šฅ
  • ๐Ÿ”ต ๋‹ค๋นˆ FE - ์˜ํ™” ์˜ˆ๋งค, ์˜ํ™” ๊ฒ€์ƒ‰ ๐Ÿ™‹โ€โ™€๏ธ
  • ๐Ÿ”ต ํ˜œ์› FE - ๊ฒฐ์ œ, ์˜ˆ๋งค๋‚ด์—ญ
  • ๐ŸŸข ํ•œ์†” BE - ์˜ˆ๋งคํŽ˜์ด์ง€ API, AWS
  • ๐ŸŸข ์ฐฝํ˜„ BE - ์นด์นด์˜ค๊ฒฐ์ œ API, ์ฃผ๋ฌธ API
  • ๐ŸŸข ์ƒ์› BE - ์นด์นด์˜ค๋กœ๊ทธ์ธ API, ์˜ˆ๋งคํŽ˜์ด์ง€ API

๐Ÿ›  CGW Tools

  • Notion, Trello, Git, Slack

๐Ÿ›  CGW Engineering Stack

  • ๐Ÿ’ป BE:
    • JavaScript, Node.js, AWS, MySql
  • ๐Ÿ’ป FE:
    • JavaScript, React, Styled-components

๐Ÿ‘ฉโ€๐Ÿ’ป DB Modeling

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

  1. ์˜ํ™” ์˜ˆ๋งค, ์˜ํ™” ๊ฒ€์ƒ‰ ๐Ÿ™‹โ€โ™€๏ธ
  2. ์ขŒ์„ ์„ ํƒ
  3. ์†Œ์…œ ๋กœ๊ทธ์ธ& ์ง€๋„ API Map ๊ธฐ๋Šฅ
  4. ์นด์นด์˜คํ†ก ๊ฒฐ์ œ, ์˜ˆ๋งค๋‚ด์—ญ

๐Ÿฅณ ๋‚˜์˜ ์ œ์ž‘ํŒŒํŠธ

  1. ๐ŸŽซ ์˜ํ™” ์˜ˆ๋งค

    • ๋‹ค์‹œ ๊ณ ๋ฅด๊ธฐ ๊ธฐ๋Šฅ
  2. ๐Ÿ” ์˜ํ™” ๊ฒ€์ƒ‰

๐Ÿ’ช ์œ„์˜ ํŒŒํŠธ๋ฅผ ๋‹ด๋‹นํ•˜๊ฒŒ ๋œ ์ด์œ 

  1. ๋ฐ€์ง‘๋„๊ฐ€ ๋†’๊ณ , ์ž‘์€ UI๋ฅผ ๊ฐœ์„  ํ•˜์—ฌ ์˜ˆ๋งค์œจ ์ƒ์Šน ๋ชฉ์ 
  2. ๋ธŒ๋žœ๋“œ ์ปฌ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•œ ๋ธŒ๋žœ๋”ฉ์„ ํ†ตํ•œ ๊ธ์ •์ ์ธ ์„œ๋น„์Šค ๊ฒฝํ—˜
  3. ์˜ํ™” ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋กœ ์‰ฌ์šด ์˜ํ™” ์„œ์น˜ ๋ฐ ์ดํƒˆ์œจ ๊ฐ์†Œ
  4. ์–ด๋ ต๊ณ , ๋ณต์žกํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์€ ์—ด์ •์ด ์žˆ์—ˆ๊ธฐ์— ๋„์ „ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿ‘€ ๋‚˜๋ฅผ ์„ฑ์žฅํ•˜๊ฒŒ ํ•œ ์ฝ”๋“œ ๋“ค์—ฌ๋‹ค๋ณด๊ธฐ

๐Ÿ“ Nesting Map

{movieData?.map((movie, index) => (
    <PlacePickTextSeoul key={index}>
        <PlaceTextBox key={movie.region_id}>
        <PlacePickP>๐Ÿ“{movie.name}</PlacePickP>
        </PlaceTextBox>
        <PlacePickButtonContainer>
        <Pick>
        {movie.location.map(lo => {
        return (
            <>
            <Input
                type="radio"
                name="place"
                id={lo.branch_id}
                defaultValue={lo.branch_name}
                onChange={onChangeData}
            />
            <Label htmlFor={lo.branch_id}>{lo.branch_name}</Label>
            </>
        );
})}
  • ์ค‘์ฒฉ map์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ„ํŠผ์„ ๋ฐ”๋ฅด๊ฒŒ ๋ Œ๋”ํ–ˆ๋‹ค.
  • ์ˆ˜์ • ๊ณผ์ •
    • Mock data์˜ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ์–ด ๋ Œ๋”
    • ์ค‘์ฒฉ ๋งต์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ์ฒด์•ˆ์˜ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ (branch)๋ฅผ ๋ Œ๋”
    • ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์ง„ ์ง€์ ์˜ ๋ฐ์ดํ„ฐ๋Š” 1๊ฐœ์ด์ง€๋งŒ, UI๋Š” 2๊ฐœ ์ด๊ธฐ์— ์ง€์ ์ด ๋‘ ๋ฒˆ ๋ Œ๋” ๋จ

๐Ÿ’ช Before

๐Ÿ‘ After (๋‚ด๊ฐ€ ์›ํ–ˆ๋˜ ๋ Œ๋” ๋ชจ์Šต)

๐Ÿซ‚ ์ค‘์ฒฉ ์‚ผํ•ญ์—ฐ์‚ฐ์ž

Step 3 ๋ฌธ๊ตฌ๋ฅผ ์ฃผ๋ชฉ!

  • ์ฒซ๋ฒˆ์งธ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž
    • ์กฐ๊ฑด: ์˜ํ™”๊ด€์ด ์„ ํƒ ๋˜์—ˆ๋‹ค๋ฉด
    • true์ผ ๋•Œ ํ•ด๋‹น ์ผ์ž์— ๋Œ€ํ•œ ์˜ํ™” ์‹œ๊ฐ„์„ UI๋กœ ๊ทธ๋ ค๋‚ด๊ณ 
      • โœจ true ์ด์ง€๋งŒ, ํ•ด๋‹น ์˜ํ™” ์‹œ๊ฐ„์ด ์—†๋‹ค๋ฉด ์˜ํ™”๊ฐ€ ๋งค์ง„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ๋ผ๋Š” ๋ฌธ๊ตฌ๋ฅผ ๋„์šด๋‹ค
    • false๋ผ๋ฉด ์˜ํ™”๋ฅผ ๋จผ์ € ์„ ํƒํ•ด ์ฃผ์„ธ์š”!๋ผ๋Š” ๋ฌธ๊ตฌ๋ฅผ ๋„์šด๋‹ค
      • ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์ฑ„ํƒํ•œ ์ด์œ  ๐Ÿ“Ž ๋นˆ์นธ์€ ์˜ค๋ฅ˜๋กœ ๋ณด์ธ๋‹ค! 12/2
        • ์‹ค์ œ ์˜ํ™” ์‚ฌ์ดํŠธ ์ฒ˜๋Ÿผ ์˜ํ™”, ์‹œ๊ฐ„, ์ผ์ž๋ฅผ ๋ˆ„๋ฅผ ๋•Œ ๋งˆ๋‹ค ์œ ์—ฐํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉด ์ข‹๊ฒ ์ง€๋งŒ, ๋‚œ์ด๋„๊ฐ€ ๋†’์•„์„œ UI๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ทธ๋ ค์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ์ง„ํ–‰ํ–ˆ๋‹ค.
        • ๋‚œ์ด๋„ ์กฐ์ ˆ๊ณผ ์œ ์ €์—๊ฒŒ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” flow๋กœ ์ง„ํ–‰ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๊ฝค ๋ฟŒ๋“ฏํ•˜๋‹ค.
    • ๐Ÿ‘ ์‚ฌ์‹ค ์œ„์˜ ๊ธฐ๋Šฅ์„ ๋‡Œ๋กœ๋Š” ์ดํ•ดํ–ˆ์ง€๋งŒ, ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ•ด์„œ ๋‹ต๋‹ตํ•œ ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋‹ค.
    • ํ•˜๋‚˜์”ฉ ๋œฏ์–ด๋ณด๊ณ , ๋™๊ธฐ์—๊ฒŒ ๋งŽ์€ ๋„์›€์„ ์–ป์–ด ์„ฑ๊ณตํ–ˆ๋‹ค! ๐Ÿ‘‡
<TimePickContainer>
  {day ? (
    <TimePick>
      {timeFilter.length !== 0 ? (
        timeFilter.map((movieTime, i) => {
          return (
            <React.Fragment key={i}>
              {timeFilter[i].time.map((detailTime, index) => {
                return (
                  <React.Fragment key={index}>
                    <TimeRadio
                      type="radio"
                      name="time"
                      id={detailTime.time}
                      defaultValue={detailTime.time}
                      onChange={onChangeData}
                    />
                    <TimeLabel htmlFor={detailTime.time}>
                      {detailTime.time}
                    </TimeLabel>
                  </React.Fragment>
                );
              })}
            </React.Fragment>
          );
        })
      ) : (
        <TimePickReadyBox>
          <TimePickReady>๐Ÿฅฒ ๋งค์ง„ ๋˜์—ˆ์–ด์š”!</TimePickReady>
        </TimePickReadyBox>
      )}
    </TimePick>
  ) : (
    <TimePickReadyBox>
      <TimePickReady>๐Ÿ“† ๋‚ ์งœ๋ฅผ ๋จผ์ € ์ •ํ•ด์ฃผ์„ธ์š”!</TimePickReady>
    </TimePickReadyBox>
  )}
</TimePickContainer>
  • ์˜ํ™”์‹œ๊ฐ„์ด ์—†์„ ๊ฒฝ์šฐ์˜ ์ฝ”๋“œ๋ฅผ ์•Œ๋Ÿฟ์œผ๋กœ ๋„์šธ ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ์ค‘์ฒฉ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋” ์ ์€ ์ฝ”๋“œ๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ๋ Œ๋”๋ง ํ–ˆ์Œ!
  • ํ•˜๋‚˜์˜ ํ•จ์ˆ˜ ์•ˆ์— ์ฒ˜๋ฆฌํ•ด์•ผํ•  ๋ฐ์ดํ„ฐ๋‚˜ ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด ๋Š๋ฆฌ๊ฒŒ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  • fetch๊ฐ€ ์ง„ํ–‰ํ•˜๋Š” ๋น„๋™๊ธฐ์  ํŠน์„ฑ์„ ์ฃผ๋ง์— ๊ณต๋ถ€!
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋™๊ธฐ์  ์–ธ์–ด์ด๋‹ค
    • ๋ธŒ๋ผ์šฐ์ € ์—”์ง„์—์„œ ์ž‘๋™ ํ•  ๋•Œ๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ๋œ๋‹ค.

๐Ÿ“ ์ดˆ๊ธฐํ™” ๋ฒ„ํŠผ ๊ธฐ๋Šฅ ์ˆ˜์ •

//after
const deleteObj = () => {
  setSelectList({ place: "", day: "", time: "" });
};

//before
const deleteObj = () => {
  delete selectList.place;
  delete selectList.day;
  delete selectList.time;
};
  • ๐Ÿ” delete ๋ฉ”์†Œ๋“œ๋Š” Key & Value๋ฅผ ์ง€์šด๋‹ค. == null
  • ๊ทธ๋Ÿฌํ•˜์—ฌ after ์ฝ”๋“œ๋กœ ๋ฆฌํŒฉํ† ๋ง
  • ์ž˜ ์งœ์—ฌ์ง„ ์ฝ”๋“œ๋Š” ๋ฌผ ํ๋ฅด๋“ฏ ๊ธฐ์กด ๊ธฐ๋Šฅ๋“ค๊ณผ ์ž˜ ์ž‘๋™ํ•œ๋‹ค
    • ๋ฆฌํŒฉํ† ๋ง ํ•œ ์ฝ”๋“œ๋Š” ์ดˆ๊ธฐ๊ฐ’(true)์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ์— uesEffect๋ฅผ ์‚ฌ์šฉ ํ•  ํ•„์š”๋„ ์—†๋‹ค!

๐Ÿ“ ํšŒ๊ณ :

  • ๐Ÿ˜ ์ข‹์•˜๋˜ ๊ฒƒ(Liked)
    • ๋“ ๋“ ํ•œ ๋™๊ธฐ๋“ค๊ณผ ํ•จ๊ป˜ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ
    • ์–ด๋ ต์ง€๋งŒ 1์ฐจ ํ”„๋กœ์ ํŠธ ๋•Œ ๋ณด๋‹ค ์‹ฌํ™” ๋œ ๋ ˆ๋ฒจ์˜ ํ”„๋กœ์ ํŠธ (ํ•„ํ„ฐ๋ง& ๋™์ ๋ผ์šฐํŒ…)
    • ๋งค์ผ ์•„์นจ ์ •๊ฐ, ํŒ€์›๋“ค์ด ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•œ ์Šคํƒ ๋“œ์—… ํ…œํ”Œ๋ฆฟ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ผ๋ฆฌ ์Šคํƒ ๋“œ์—…์„ ์ง„ํ–‰ ํ•œ ๊ฒƒ
    • ์• ์ž์ผ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํŠธ๋ ๋กœ ์‚ฌ์šฉ ๋ฐ ํ™œ์šฉ
    • ๊พธ์ค€ํ•œ ๊ธฐ๋ก์„ ํ†ตํ•ด ์–ด์ œ๋Š” ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๋˜ ์ฝ”๋“œ๋ฅผ ์˜ค๋Š˜์€ ์ž‘์„ฑํ•ด๋ณด๊ณ  ์ดํ•ดํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์—ˆ๋‹ค.
    • ๋Š์ž„ ์—†๋Š” ๋„์ „
    • ์—๋Ÿฌ์ฐฝ ๋งŒ๋‚˜๊ณ  ์Šค์Šค๋กœ ํ•ด๊ฒฐ ํ•˜๊ธฐ
  • ๐Ÿ“š ๋ฐฐ์šด ๊ฒƒ(Learned)
    • ๋งŽ์ด ๋„˜์–ด์ง€๊ณ  ์—๋Ÿฌ์ฐฝ์„ ๋งŒ๋‚˜๊ณ  ํ•ด๊ฒฐํ•˜๋ฉด์„œ ์„ฑ์žฅํ–ˆ๋‹ค.
    • ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•˜์—ฌ ๋” ์ข‹์€ ์ฝ”๋“œ๋Š” ์ˆ˜์ •์ด ๋˜์–ด๋„ ๋ฌผ ํ๋ฅด๋“ฏ์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ
  • ๐Ÿ’ฆ ๋ถ€์กฑํ–ˆ๋˜ ๊ฒƒ(Lacked)
    • ์—๋Ÿฌ ๋Œ€์ฒ˜๋ฒ•์ด ์•„์ง ๋ฏธ์ˆ™ํ•˜๊ณ , console.log๋ฅผ ํ™œ์šฉํ•œ ๋””๋ฒ„๊น… ์ˆ™๋ จ๋„๊ฐ€ ๋‚ฎ์Œ
    • ๋Œ๋ฐœ ์ƒํ™ฉ(e.g. ์ „๋‹ฌํ•ด์•ผํ•  ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋ฐ”๋€Œ์–ด์•ผํ•œ๋‹ค๊ฑฐ๋‚˜ ๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ)์—์„œ ๋ธ”๋ฝ์ปค๋ฅผ ๋งŽ์ด ๋งŒ๋‚ฌ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค๋ฉด, ๋‚ด๊ฐ€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ •์ฒดํ•˜๋Š”๋ฐ ๋งŽ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋“ค๊ณ  ๋น„ํšจ์œจ ์ ์ด๋ผ๋Š” ํŒ๋‹จ์ด ๋‚ด๋ ค์ง„๋‹ค๋ฉด, ๋ฐฑ์—”๋“œ์— ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ์š”์ฒญํ•ด๋„ ๋œ๋‹ค๋Š” ์ 
    • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ํ•ธ๋“ค๋ง ๋ชปํ•œ ์ .
    • ์ฒ˜์Œ์ด๊ณ , ๊ธฐํš ๋‹จ๊ณ„์—์„œ ์™„๋ฒฝํ•˜๋‹ค ์ƒ๊ฐํ•œ ๋ถ€๋ถ„์—์„œ๋„ ๋ณ€์ˆ˜๊ฐ€ ๋Š˜ ์ƒ๊ฒผ๊ธฐ์— ์ˆ˜์‹œ๋กœ ๋…ผ์˜ํ•ด๋ณด๊ณ  ๋ณ€์ˆ˜์— ํ”๋“ค๋ฆฌ์ง€ ์•Š๋Š” ๋งˆ์Œ๊ฐ€์ง
      • ์ œ๊ฐ€ ์–ด๋ ต๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ถ€๋ถ„์€ ๋ชจ๋‘๊ฐ€ ์–ด๋ ค์šด ๊ฒƒ์ด ๋งž๊ณ , ๊ณ ๋ฏผ์ด ๊นŠ์–ด์งˆ ๋•Œ๋ฉด ํŒ€์›์ด๋“  ๋ฉ˜ํ† ๋‹˜๊ณผ ์˜๊ฒฌ์„ ๋‚˜๋ˆ ๋ณด๋Š”๊ฒƒ๋„ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ์ด๊ฑด ์—ฌ๋Ÿฌ๋ถ„๊ณผ ๊ณต์œ ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค..
        ์ฆ‰ ํ˜ผ์ž ๊นŠ๊ฒŒ ๊ณ ๋ฏผํ•˜๊ณ  ์•“์ง€ ๋ง๊ธฐ! 12/7 ์Šคํƒ ๋“œ์—… ๋ฏธํŒ… -๋‚˜-

  • ๐Ÿ•ฏ ๋ฐ”๋ผ๋Š” ๊ฒƒ(Longed for)
    • ์ฒ˜์Œ๋ถ€ํ„ฐ ์™„๋ฒฝํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š”๊ฒƒ์— ์—ด์ค‘ํ•˜์ง€ ๋ง ๊ฒƒ, ๋‚˜๋„ ๋ชจ๋ฅด๊ฒŒ ์ฃผ๋Š” ์ŠคํŠธ๋ ˆ์Šค๊ฐ€ ๋˜์–ด ์˜์š•์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

๐ŸŒณ ์•ž์œผ๋กœ์˜ ๋ชฉํ‘œ

  • ๋ฐฑ์—”๋“œ์™€ ํ†ต์‹ ์„ ์œ„ํ•˜์—ฌ ERD ์ž‘์„ฑ๋ฒ•๊ณผ ์ฝ๋Š” ๋ฒ• ํ•™์Šต ํ•  ๊ฒƒ
    • ์ดˆ๊ธฐ ๊ธฐํš๋‹จ๊ณ„์—์„œ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹  ๋ฐฉ์‹์„ ๋” ๊ผผ๊ผผํžˆ ๊ธฐํš
      • e.g. ์–ธ์ œ ์–ด๋Š ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ณ , ์–ด๋– ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ์ „๋‹ฌ ๋ฐ›์„์ง€ ๋“ฑ๋“ฑ
  • ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•œ ๋ณต์Šต ๋ฐ ๋” ๋‚˜์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ
  • ๋‚ด ์ฝ”๋“œ๋ฅผ ์ง€์šธ ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์ž!

E.O.D

profile
๐ŸŒŽ Code up a better world! ๐Ÿ‘ฉโ€๐ŸŽจ ๊ทธ๋ž˜ํ”ฝ ๋””์ž์ด๋„ˆ โ†’ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๐Ÿ‘ฉโ€๐Ÿ’ป

0๊ฐœ์˜ ๋Œ“๊ธ€