๐ŸŸฃ Hologram


๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

  • Hologram์€ ํ˜ผ์ž ์‚ฌ๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์ผ์ƒ ๊ณต์œ , ์ž์‹ ๋งŒ์˜ ํŒ, ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ ์ฐฌ๋ฐ˜ํˆฌํ‘œ ๋“ฑ ๋‹ค์–‘ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ™œ๋™์„ ํ•  ์ˆ˜ ์žˆ๋Š” SNS์ž…๋‹ˆ๋‹ค.
  • Hologram์˜ ์ฃผ์š” ๊ธฐ๋Šฅ
    • ์ผ์ƒ ๊ณต์œ , ์ž์‹ ๋งŒ์˜ ํŒ, ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ ์ฐฌ๋ฐ˜ํˆฌํ‘œ ๋“ฑ ๊ฒŒ์‹œ๊ธ€์„ ์ž‘์„ฑํ•˜์—ฌ ์œ ์ €๋“ค ๊ฐ„์˜ ์†Œํ†ต์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋งˆ์Œ์— ๋“œ๋Š” ๊ฒŒ์‹œ๋ฌผ์ด ์žˆ๋‹ค๋ฉด ์ƒ๋Œ€๋ฐฉ์„ ํŒ”๋กœ์šฐํ•˜์—ฌ ์†Œ์‹์„ ๋ฐ›๊ณ  ๊ฒŒ์‹œ๊ธ€์— ๋Œ“๊ธ€์„ ๋‹ฌ๊ณ  '์ข‹์•„์š”'๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ƒํ’ˆ ํŒ๋งค๋ฅผ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํŒ๋งค์ž์˜ ์ƒํ’ˆ์„ ํ™•์ธํ•˜๊ณ  ์ฑ„ํŒ…์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ํŒ€์› ์†Œ๊ฐœ

์ฃผ๋‹ค๋นˆ ์„œ๊ฐ€ํฌ ๋‚จ์œ„์ • ์‹ ํ˜„์šฐ
image image image image
๐Ÿ”— joodb ๐Ÿ”— seokahi ๐Ÿ”— Nam-Wijeong ๐Ÿ”— GitHWS

๊ธฐ์ˆ  ๋ฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

1. ๊ธฐ์ˆ 

  • FrontEnd: HTML, CSS, Vanilla JS
  • BackEnd: ์ œ๊ณต๋œ API ์‚ฌ์šฉ

โ“ Vanilla JS๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ 

  • ํ”„๋กœ์ ํŠธ์—์„œ ์ฃผ์–ด์ง„ ๊ธฐ๊ฐ„ ๋‚ด ์™„์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ตœ์šฐ์„  ๋ชฉํ‘œ์˜€์Šต๋‹ˆ๋‹ค. Vanilla JS๋ฅผ ์‚ฌ์šฉํ•ด ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜์—ฌ ๊ธฐ๋Šฅ์˜ 99% ์™„์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ์ด์œ ๋กœ๋Š” ๋ฆฌ๋นŒ๋”ฉ ๊ฒฝํ—˜๋„ ํ•ด๋ณด๊ณ  ์‹ถ์–ด ์ถ”ํ›„ React๋กœ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

2. ๊ฐœ๋ฐœํ™˜๊ฒฝ


3. ์ œ์ž‘ ๊ธฐ๊ฐ„: 2022.6.29 ~ 2022.07.31


์—ญํ•  ๋ถ„๋‹ด

๊ณตํ†ต UI

  • ๋„ค๋ธŒ๋ฐ”: ํŒ€์› ์ „๋ถ€
  • ํ•˜๋‹จ ํƒญ ๋ฉ”๋‰ด: ๋‚จ์œ„์ •
  • ์œ ์ € ๋ชฉ๋ก(ํŒ”๋กœ์›Œ, ํŒ”๋กœ์ž‰, ๊ฒ€์ƒ‰ ๋ชฉ๋ก): ์ฃผ๋‹ค๋นˆ
  • ์ด๋ฏธ์ง€ ๋ฒ„ํŠผ(ํ”„๋กœํ•„, ๊ฒŒ์‹œ๊ธ€, ์ƒํ’ˆ): ์„œ๊ฐ€ํฌ
  • ์ธํ’‹(ํšŒ์›, ์ƒํ’ˆ): ์‹ ํ˜„์šฐ
  • ๋ชจ๋‹ฌ: ๋‚จ์œ„์ •

์ฃผ๋‹ค๋นˆ

  • ํ”„๋กœ์ ํŠธ ๋ฆฌ๋“œ
  • ๋งˆ์ด ํ”„๋กœํ•„, ์œ ์ € ํ”„๋กœํ•„ ํŽ˜์ด์ง€ ๊ตฌํ˜„ ๋ฐ ํšŒ์› ์ •๋ณด ๋ Œ๋”๋ง
  • ํŒ”๋กœ์›Œ, ํŒ”๋กœ์ž‰ ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„ ๋ฐ ๋ Œ๋”๋ง
  • ํŒ”๋กœ์šฐ ๊ธฐ๋Šฅ
  • ์ƒํ’ˆ ๋“ฑ๋ก, ์ˆ˜์ •, ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ / ์ƒํ’ˆ ๋ชจ๋‹ฌ
  • ์ „๋ฐ˜์ ์ธ ํ”„๋กœ์ ํŠธ UI ๋””์ž์ธ

์„œ๊ฐ€ํฌ

  • ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ, ์‹ ๊ณ  ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง
  • ๋Œ“๊ธ€ ์ž‘์„ฑ, ์‚ญ์ œ, ์‹ ๊ณ  ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ์ฑ„ํŒ… ๋ชฉ๋ก / ์ฑ„ํŒ…๋ฐฉ UI ๊ตฌํ˜„
  • ๋กœ๊ทธ์•„์›ƒ

๋‚จ์œ„์ •

  • ํ”ผ๋“œ ํŽ˜์ด์ง€ ๊ตฌํ˜„ ๋ฐ ํŒ”๋กœ์›Œ ๊ฒŒ์‹œ๊ธ€ ๋ Œ๋”๋ง
  • ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ์ข‹์•„์š” ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ํ”„๋กœํ•„ ํŽ˜์ด์ง€ ๊ฒŒ์‹œ๊ธ€ ๋ Œ๋”๋ง

์‹ ํ˜„์šฐ

  • splash
  • ๋กœ๊ทธ์ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
  • ํšŒ์›๊ฐ€์ž… ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ํ”„๋กœํ•„ ์ˆ˜์ • ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ์ „๋ฐ˜์ ์ธ ํ”„๋กœ์ ํŠธ UI ๋””์ž์ธ
  • ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ(Vercel)
  • ์—๋Ÿฌ ํŽ˜์ด์ง€ ๊ตฌํ˜„

๐ŸŽจ UI


๐Ÿ’ป ๊ธฐ๋Šฅ ์‹œ์—ฐ

๐Ÿ”—๊ธฐ๋Šฅ ์ƒ์„ธ ์„ค๋ช…

0. Splash 1. ํšŒ์›๊ฐ€์ž… 2. ๋กœ๊ทธ์ธ

3. ํ™ˆ ํ”ผ๋“œ 4. ๊ณ„์ • ๊ฒ€์ƒ‰ 5. ๋งˆ์ด ํ”„๋กœํ•„

5-1. ๋งˆ์ด ํ”„๋กœํ•„ ์ˆ˜์ • 6. ์ƒํ’ˆ ๋“ฑ๋ก 6-1. ์ƒํ’ˆ ์ˆ˜์ •, ์‚ญ์ œ

6-2. ์ƒํ’ˆ ์ƒ์„ธ 7. ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก 7-1. ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ •, ์‚ญ์ œ

8.ํŒ”๋กœ์ž‰, ํŒ”๋กœ์›Œ ๋ฆฌ์ŠคํŠธ 9. ํŒ”๋กœ์šฐ ๊ธฐ๋Šฅ 10. ์œ ์ € ํ”„๋กœํ•„

11. ๋Œ“๊ธ€ ์ƒ์„ฑ, ์‚ญ์ œ 11-1. ๋Œ“๊ธ€ ์‹ ๊ณ  12. ์ข‹์•„์š”, ์ฐฌ๋ฐ˜ํˆฌํ‘œ ๊ธฐ๋Šฅ

13. ๊ฒŒ์‹œ๊ธ€ ์‹ ๊ณ  14. ์ฑ„ํŒ… ๋ชฉ๋ก UI, ๋ชจ๋‹ฌ 15. ๋กœ๊ทธ์•„์›ƒ

16. ์—๋ŸฌํŽ˜์ด์ง€

๐Ÿ“‚ ํด๋” ๊ตฌ์กฐ

- assets/ : ์ด๋ฏธ์ง€, ์•„์ด์ฝ˜ ๋“ฑ ์ด๋ฏธ์ง€ ์†Œ์Šค๋ฅผ ์ €์žฅํ•œ ๋””๋ ‰ํ† ๋ฆฌ 
- favicon/ : favicon์„ ์œ„ํ•œ ๋””๋ ‰ํ† ๋ฆฌ 
- font/ : ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” font ์ ์šฉ
- images/ : ์›น์—์„œ ์‚ฌ์šฉ๋˜๋Š” icon, images ๋””๋ ‰ํ† ๋ฆฌ
- css/ : pages์™€ html์— ์—ฐ๊ฒฐ๋˜๋Š” CSS ๋””๋ ‰ํ† ๋ฆฌ, default.css๋Š” ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” CSS ํŒŒ์ผ์„ importํ•˜์—ฌ ์‚ฌ์šฉ
- html/ : ๊ณตํ†ต๋œ UI๋ฅผ ์œ„ํ•œ html ๋””๋ ‰ํ† ๋ฆฌ
- pages/ : ์„œ๋น„์Šค์šฉ html ๋””๋ ‰ํ† ๋ฆฌ
- js/ : pages์™€ html๊ณผ ์—ฐ๊ฒฐ๋˜๋Š” JS ๋””๋ ‰ํ† ๋ฆฌ. common.js๋Š” pages ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋“ฑ๋ก๋œ ํŒŒ์ผ

๐ŸŸฃHologram 
โ”œโ”€๐Ÿ“‚assets
โ”‚  โ”œโ”€๐Ÿ“‚favicon
โ”‚  โ”œโ”€๐Ÿ“‚font
โ”‚  โ”œโ”€๐Ÿ“‚images
โ”œโ”€๐Ÿ“‚css
โ”œโ”€๐Ÿ“‚html
โ”œโ”€๐Ÿ“‚js
โ””โ”€๐Ÿ“‚pages


๐Ÿ’ก ํ•ต์‹ฌ๊ธฐ๋Šฅ


๐Ÿšจ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

ํŒ”๋กœ์šฐ, ํŒ”๋กœ์ž‰ ๋ฆฌ์ŠคํŠธ

  • ์—๋Ÿฌ: ๋‹ค๋ฅธ ์œ ์ €์˜ ํŒ”๋กœ์šฐ, ํŒ”๋กœ์ž‰ ๋ฆฌ์ŠคํŠธ์—์„œ ๋กœ๊ทธ์ธํ•œ ์œ ์ €(๋‚˜)๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ํŒ”๋กœ์šฐ ๋ฒ„ํŠผ์ด ๋ณด์ธ๋‹ค.
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ: isfollow๊ฐ€ false(์–ธํŒ”๋กœ์šฐ์ธ ์ƒํƒœ) ์ผ ๋•Œ ๊ทธ ๋ชฉ๋ก ์ค‘ accountname์ด localStorage.getItem('accountname')์™€ ๊ฐ™๋‹ค๋ฉด ๋ฒ„ํŠผ์„ ๋ณด์—ฌ์ฃผ์ง€ ์•Š๋Š”๋‹ค.
/* ํŒ”๋กœ์šฐํ•œ ์ƒํƒœ ๊ตฌ๋ถ„ */
const userFollowBtn = document.createElement('button');

if (i.isfollow) {
  userFollowBtn.setAttribute('class', 'user-follow-btn cancel');
  userFollowBtn.setAttribute('id', 'user-follow-btn-cancel');
  userFollowBtn.innerText = '์ทจ์†Œ';
} else {
  if (i.accountname === localStorage.getItem('accountname')) {
    userFollowBtn.style.display = 'none';
  } else {
    userFollowBtn.setAttribute('class', 'user-follow-btn');
    userFollowBtn.setAttribute('id', 'user-follow-btn');
    userFollowBtn.innerText = 'ํŒ”๋กœ์šฐ';
  }
}

๋Œ“๊ธ€ ์ž‘์„ฑ ์‹œ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ

  • ์—๋Ÿฌ: ์—๋Ÿฌ ๋‚ด์šฉ: ๋Œ“๊ธ€ ์ž‘์„ฑ ์‹œ ๋กœ๊ทธ์ธํ•œ ์œ ์ €์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ: ๋กœ๊ทธ์ธํ•œ ์œ ์ €๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ•จ์ˆ˜์—์„œ ๋ฐ›์•„์˜จ ์œ ์ € ์ •๋ณด์˜ ์ด๋ฏธ์ง€๋ฅผ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€์— ๋„ฃ์–ด์ค€๋‹ค.
async function handleMyInfo () {
  const token = window.localStorage.getItem('token');
  const accointMe = localStorage.getItem('accountname') 
  const requestMyInformation = {
      method:"GET",
      headers:{
          "Authorization" : `Bearer ${token}`,
          "Content-type" : "application/json"
      }
  }
  const res = await fetch(url+`/profile/${accointMe}`, requestMyInformation)
                      .then((response)=> {return response;})
                      .catch((error) => {location.href="/pages/404.html";})
  const json = await res.json();
  console.log('๋‚ด ์ •๋ณด', json);
  profileImg.src = json.profile.image;
}

์•จ๋ฒ”๋ทฐ ์ด๋ฏธ์ง€ ํด๋ฆญ ์‹œ ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€๋กœ ์ด๋™

  • ์—๋Ÿฌ : ์•จ๋ฒ” ๋ทฐ์—์„œ ์ด๋ฏธ์ง€ ํด๋ฆญ ์‹œ ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์ด ์•„๋‹Œ ๋ชจ๋‘ ๋™์ผํ•œ ํ•˜๋‚˜์˜ ๊ฒŒ์‹œ๊ธ€๋กœ๋งŒ ์ด๋™๋œ๋‹ค.
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ : ํŽ˜์ด์ง€ ์ด๋™ URL์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ์ˆ˜์ •ํ•˜์—ฌ ํด๋ฆญ ์‹œ ํ•ด๋‹น๋˜๋Š” ๊ฒŒ์‹œ๊ธ€๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.
postAlbumLink.addEventListener('click', () => {
          location.href = `/pages/postcomment.html?postId=${value.id}`;
})
  • ์ˆ˜์ • ์ „

  • ์ˆ˜์ • ํ›„

ํ”„๋กœํ•„ ์ˆ˜์ • ํŽ˜์ด์ง€, ์ˆ˜์ •ํ•œ ํ”„๋กœํ•„ ๋ฐ์ดํ„ฐ ๋ฏธ์ ์šฉ ์—๋Ÿฌ

  • ์—๋Ÿฌ : ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ˆœ์„œ ๋ฌธ์ œ๋กœ ํ”„๋กœํ•„ ์ˆ˜์ • ํŽ˜์ด์ง€์—์„œ ์ €์žฅ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ ค ์ˆ˜์ •ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•˜๊ณ  ๋‚ด ํ”„๋กœํ•„ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋ฉด ์•„๋ฌด๋Ÿฐ ๋ฐ์ดํ„ฐ ์—†์ด ์ ์šฉ์ด ๋˜์ง€ ์•Š๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ : ๋ฉ˜ํ† ๋‹˜์˜ ํŒ์„ ๋ฐ›์•„ log๋ฅผ ์ฐ์œผ๋ฉฐ ์ฒ˜๋ฆฌ ์ˆœ์„œ ํŒŒ์•…ํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

async function editUserInfo() {
  const url = 'https://mandarin.api.weniv.co.kr';
  const token = localStorage.getItem('token');
  try {
    const res = await fetch(`${url}/user`, {
      method: 'PUT',
      headers: {
        Authorization: `Bearer ${token}`,
        'Content-type': 'application/json',
      },
      body: JSON.stringify({
        user: {
          username: editUsernameInput.value,
          accountname: editAccountInput.value,
          intro: editIntroInput.value,
          image: hiddenImgSrc.value,
        },
      }),
    });
    console.log('๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ'); // 3
    const resJson = await res.json();
    console.log('ํ”„๋กœํ•„ ๊ฐฑ์‹  ์™„๋ฃŒ', resJson); // 4
  } catch (err) {
    console.error(err);
  }
}

saveBtn.addEventListener('click', () => {
  console.log('ํด๋ฆญ'); // 1
  localStorage.setItem('accountname', editAccountInput.value);
  console.log('ํŽ˜์ด์ง€ ์ด๋™'); // 2
  location.href = './profile.html';
  editUserInfo();
});

error_nonclear

์ˆ˜์ • ์ „ ์ฝ”๋“œ์—์„œ๋Š” ํด๋ฆญ ํ›„์— ํŽ˜์ด์ง€ ์ด๋™์ด ๋จผ์ € ์ด๋ฃจ์–ด์ง€๊ณ  ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ํ”„๋กœํ•„ ๊ฐฑ์‹ ์ด ์™„๋ฃŒ๋˜์–ด ์•„๋ฌด๋Ÿฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์šฉํ•˜์ง€ ๋ชปํ•œ ํŽ˜์ด์ง€๊ฐ€ ์ถœ๋ ฅ์ด ๋˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ˆœ์„œ ๋ฌธ์ œ๋กœ ์ฝ”๋“œ์˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

async function editUserInfo() {
  const url = 'https://mandarin.api.weniv.co.kr';
  const token = localStorage.getItem('token');
  try {
    const res = await fetch(`${url}/user`, {
      method: 'PUT',
      headers: {
        Authorization: `Bearer ${token}`,
        'Content-type': 'application/json',
      },
      body: JSON.stringify({
        user: {
          username: editUsernameInput.value,
          accountname: editAccountInput.value,
          intro: editIntroInput.value,
          image: hiddenImgSrc.value,
        },
      }),
    });
		console.log("๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ"); // 2
    const resJson = await res.json();
    console.log('ํ”„๋กœํ•„ ๊ฐฑ์‹ ', resJson); // 3
    localStorage.setItem('accountname', editAccountInput.value);
    console.log('ํŽ˜์ด์ง€ ์ด๋™'); // 4
    location.href = './profile.html';
  } catch (err) {
    console.error(err);
  }
}

saveBtn.addEventListener('click', () => {
  console.log('ํด๋ฆญ'); // 1
  editUserInfo();
});

clear

์ˆ˜์ • ํ›„ ์ฝ”๋“œ์—์„œ๋Š” ํด๋ฆญ ํ›„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ํ”„๋กœํ•„ ๊ฐฑ์‹ ์ด ์ด๋ฃจ์–ด์ง€๊ณ  ์™„๋ฃŒํ•œ ํ›„ ํŽ˜์ด์ง€ ์ด๋™์ด ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ’œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ์น˜๋ฉฐ

๋ฐฐ์šด์ 

  • ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์ „ ์ฝ”๋“œ, ์ด์Šˆ, PR, ์ปค๋ฐ‹ ๋“ฑ ์ปจ๋ฒค์…˜์„ ์„ค์ •
    • ํŒ€์› ๊ฐ„์˜ ์ง„ํ–‰ ๊ณผ์ •์„ ์›ํ™œํ•˜๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฌธ์ œ ์ƒํ™ฉ์— ๋ถ€๋”ชํ˜”์„ ๋•Œ, ํ˜ผ์ž ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํŒ€์›๋“ค/๋ฉ˜ํ† ๋ถ„๋“ค์—๊ฒŒ ๋„์›€ ์š”์ฒญ
    • ํŒ€์› ๊ฐ„์˜ ์‹ ์†ํ•œ ํ”ผ๋“œ๋ฐฑ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ๊ฒฝํ—˜์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค.
    • ํŒ€์›๋งˆ๋‹ค ๊ฐœ์ธ์ ์œผ๋กœ ์ง„ํ–‰ ๊ณผ์ • ์ค‘ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•ด์„œ ๋ฐœ๊ฒฌํ•œ ์—๋Ÿฌ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ๊ณต์œ ํ•˜์—ฌ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • QA(Quality Assurance)์— ๋Œ€ํ•œ ๊ณ ์ฐฐ
    • ๊ณต๋ฐฑ, ๊ธ€์ž ์ˆ˜ ์ œํ•œ์„ ๋‘์ง€ ์•Š์•„์„œ ๋ ˆ์ด์•„์›ƒ์ด ๋ณ€๊ฒฝ๋˜๋Š” ๋“ฑ์˜ ์‚ฌ์šฉ์ž ๋ณ€์ˆ˜๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฐฐํฌ ํ›„ ํ…Œ์Šคํ„ฐ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)์— ๋Œ€ํ•ด์„œ ํ•œ ๋ฒˆ ๋” ๊ณ ๋ฏผํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์–ด๋ ค์› ๋˜ ์ 

  • ์ƒ์†Œํ•œ API ๋ช…์„ธ ์‚ฌ์šฉ
    • ์ฒ˜์Œ ๋‹ค๋ค„๋ณด๋Š” API ๋ช…์„ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ต์ˆ™์ง€ ์•Š์•„ ํ”„๋กœ์ ํŠธ ์ดˆ๋ฐ˜ ์–ด๋ ค์›€์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๊นƒํ”Œ๋กœ์šฐ ๋ธŒ๋žœ์น˜ ์ „๋žต์œผ๋กœ ํ˜‘์—…
    • ์ฒ˜์Œ ์ง„ํ–‰ํ•˜๋Š” ํŒ€ ํ”„๋กœ์ ํŠธ์—์„œ ๊นƒํ”Œ๋กœ์šฐ ๋ธŒ๋žœ์น˜ ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋ฉฐ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค.
    • ์ปค๋ฐ‹, ์ด์Šˆ, PR ์ปจ๋ฒค์…˜ ๋งž์ถ”๊ธฐ, merge ์ถฉ๋Œ ๋“ฑ์˜ ๋ฌธ์ œ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์—ญํ•  ๋ถ„๋‹ด
    • ํ”„๋กœ์ ํŠธ ์ดˆ๋ฐ˜ ๊ณ ๋ฅด์ง€ ๋ชปํ•œ ์—ญํ•  ๋ถ„๋‹ด์œผ๋กœ ์ค‘๋ฐ˜์— ์—ญํ• ์„ ์žฌ๋ถ„๋‹ดํ•˜์—ฌ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ๊ณผ์ • ์ค‘๊ฐ„์— ๊ณตํ†ต UI ํ†ตํ•ฉ

HologramํŒ€์˜ ์ŠคํŽ˜์…œ ํฌ์ธํŠธ

  • ๋งค์ผ ์ˆ˜์—… ์‹œ์ž‘ 10๋ถ„ ์ „์— ํšŒ์˜ํ•˜๋ฉฐ ์ง„ํ–‰ ์ƒํ™ฉ ๊ณต์œ  ๋ฐ ์ฒดํฌ(8์‹œ 50๋ถ„ ~ 9์‹œ)
    • ํŒ€ ์˜ค์ „ ํšŒ์˜๋ฅผ ํ•˜๋ฃจ์˜ ๋ฃจํ‹ด์œผ๋กœ ์ •ํ•ด๋†“๊ณ  ์˜จ์ „ํžˆ ํšŒ์˜์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
    • ํŒ€ ๋…ธ์…˜ To Do List ํŽ˜์ด์ง€์— ํ•˜๋ฃจ ๋ชฉํ‘œ ์„ค์ •ํ•ด ๋†“์•˜์Šต๋‹ˆ๋‹ค.
    • ๊ฐ์ž ๋งก์€ ํŒŒํŠธ์— ๋งˆ๊ฐ ๊ธฐํ•œ์„ ์ •ํ•˜์—ฌ ๋” ์ฑ…์ž„๊ฐ ์žˆ๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„์‰ฌ์šด ์ 

  • ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•œ ํด๋ฆฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ๋ชปํ•œ ์ ์ด ์•„์‰ฌ์› ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๊ฐ„ ๋‚ด์— Vanilla JS์—์„œ React ๋ฆฌ๋นŒ๋”ฉ๊นŒ์ง€ ํ•˜๊ณ  ์‹ถ์—ˆ์œผ๋‚˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„์—์„œ ์‹œ๊ฐ„์ด ๊ฑธ๋ ค Vanilla JS๋กœ๋งŒ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.