Skip to content

wonkooklee/thumbnail_maker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

26 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation


썸넀일 메이컀 λ§Œλ“€κΈ°


κ°œμš” πŸ“‹

ν”„λ‘œμ νŠΈλͺ… : 썸넀일 메이컀 (Thumbnail-Maker) 기획 및 μ œμž‘ : WONKOOK LEE λΆ„λ₯˜ : 토이 ν”„λ‘œμ νŠΈ (개인) μ œμž‘ κΈ°κ°„ | 배포일 : 2021.08.09 (1-day) μ£Όμš” κΈ°λŠ₯ : κ°„νŽΈν•œ 썸넀일 ꡬ성, νŽΈμ§‘, 이미지 포맷(PNG) μ»¨λ²„νŒ… νƒ€κ²Ÿ μœ μ € : 포토샡 λ“± νŽΈμ§‘ ν”„λ‘œκ·Έλž¨μ΄ μ΅μˆ™μΉ˜ μ•Šκ±°λ‚˜ 썸넀일 λ§Œλ“œλŠ”κ²Œ 번거둜운 μœ μ € μ‚¬μš© 툴 : HTML, CSS, JavaScript, HTML2CANVAS(JS-Library) 링크 : 썸넀일 메이컀 - 벨둜그 포맷 v 1.2.1




1. λ§Œλ“  이유?

λˆ„κ΅¬λ“ μ§€ 10초 μ•ˆμ— λ¬΄λ‚œν•œ 벨둜그 썸넀일을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 어도비, μ˜€ν”ΌμŠ€ 없어도 λ©λ‹ˆλ‹€. 당신은 개발과 κΈ€μ“°κΈ°μ—λ§Œ μ§‘μ€‘ν•˜μ„Έμš”.

같이 κ³΅λΆ€ν•˜λŠ” 기수 λΆ„λ“€ 쀑에 포토샡 같은 νŽΈμ§‘ ν”„λ‘œκ·Έλž¨μ΄ μ΅μˆ™μΉ˜ μ•Šμ€ 뢄듀도 계싀 것이닀. λ²¨λ‘œκ·Έμ— κΈ°μˆ λΈ”λ‘œκ·Έλ₯Ό κΎΈμ€€νžˆ μ“°λŠ”κ²ƒλ„ 일인데 썸넀일 λ§Œλ“œλŠ”λ° μ—„ν•œ μ‹œκ°„μ„ 뺏기진 μ•Šμ„κΉŒ 생각이 λ“€μ—ˆλ‹€.

썸넀일 λ©”μ΄μ»€λŠ” '배경색 랜덀 생성과 ν•„λ“œ μž…λ ₯ 값을 헀더에 좜λ ₯ν•˜λŠ” μ •λ„μ˜ κ°„λ‹¨ν•œ 기술둜 λ¬΄λ‚œν•œ 썸넀일 μ •λ„λŠ” λ§Œλ“€ 수 μžˆμ§€ μ•Šμ„κΉŒ' λΌλŠ” μƒκ°μ—μ„œ μ‹œμž‘λλ‹€. DOM API둜 HTMLκ³Ό CSS μ‘°μž‘ν•˜λŠ” 것도 λ°°μ› λŠ”λ° μ“Έλͺ¨μžˆλŠ” 것을 λ§Œλ“€μ–΄λ³΄κ³  μ‹Άμ—ˆκ³  아이디어λ₯Ό μ‹€μ œλ‘œ κ΅¬ν˜„ν•˜λŠ” μ—°μŠ΅λ„ ν•„μš”ν–ˆκΈ°μ— κ·Έλƒ₯ ν•œ 번 λ§Œλ“€μ—ˆλ‹€.

단지 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” 것을 λͺ©ν‘œλ‘œ λ§Œλ“€μ–΄μ„œ μ½”λ“œ ν€„λ¦¬ν‹°λŠ” μ ˆλŒ€ 보μž₯ν•  수 μ—†λ‹€ (심지어 λͺ¨λ‘ μ „μ—­ μ ‘κ·Ό κ°€λŠ₯). Release Notes μ λŠ”λ²•κ³Ό 배포 방법 μ‘°μ°¨ λͺ¨λ₯΄κ³  곡뢀 μ‚Όμ•„ λ§Œλ“€μ—ˆκΈ° λ•Œλ¬Έμ— ν…ŒμŠ€νŠΈμš© MVP(minimum viable product)λ‘œμ„œ 의미만 μžˆλ‹€. 이 점 κ°μ•ˆν•˜μ—¬ λ΄μ£Όμ…¨μœΌλ©΄ μ’‹κ² λ‹€.



2. 기획과 λ””μžμΈ

2-1. λ‚΄λ©‹λŒ€λ‘œ λ§Œλ“  μœ μ € ν”Œλ‘œμš° πŸ—Ί

썸넀일 λ©”μ΄μ»€μ˜ λͺ©ν‘œλŠ” ν‘œν˜„μ˜ λ‹€μ–‘μ„± λŒ€μ‹  선택지λ₯Ό 쀄여 μ‚¬μš©μžμ˜ 고민을 λœμ–΄μ£ΌλŠ” 것이닀. 기본적인 ν…μŠ€νŠΈ ꡬ성과 랜덀 배경색, 이미지 λ°±κ·ΈλΌμš΄λ“œ μ„€μ • λ“± ν•„μš”ν•œ κΈ°λŠ₯ μ™Έμ—” λͺ¨λ‘ λœμ–΄λ‚΄κΈ° μœ„ν•΄ κ³ λ―Όν–ˆλ‹€.

λͺ©ν‘œ μ‚¬μš©μžλŠ” νŽΈμ§‘ ν”„λ‘œκ·Έλž¨μ΄ μ΅μˆ™ν•˜μ§€ μ•Šμ€λ° 썸넀일이 ν•„μš”ν•œ 뢄듀이닀. 썸넀일 μ œμž‘μ— 포토샡, μΌλŸ¬μŠ€νŠΈλ ˆμ΄ν„° 같은 ν”„λ‘œκ·Έλž¨μ„ μ‚¬μš©ν•˜λŠ” 뢄듀이야 μ›ν•˜λŠ”λŒ€λ‘œ κ°œμ„±μžˆλŠ” 썸넀일을 λ§Œλ“€ 수 있고, μžμ‹ μ˜ λ§ˆμŒμ— λ“œλŠ” 썸넀일이 λ‚˜μ˜¬ λ•Œ κΉŒμ§€ λ§Œλ“€κ³ μž ν•˜λŠ” μ˜μ§€κ°€ μžˆλ‹€. λ§Œμ•½ μ‚¬μš©μžκ°€ μΈλ„€μΌμ΄λΌλŠ” κ°œλ… μ‘°μ°¨ μƒμ†Œν•˜λ‹€λ©΄ 였히렀 선택지λ₯Ό 쀄이고, 일λ₯ μ μ΄λ”라도 λ¬΄λ‚œν•œ ν…œν”Œλ¦ΏμœΌλ‘œ κ΅¬μ„±ν•˜λŠ” 것이 μ’‹κ² λ‹€κ³  μƒκ°ν–ˆλ‹€.

2-2. ν™”λ©΄ ꡬ성 🎨

2-2-1. ν™”λ©΄ ꡬ획 및 ꡬ성 (Wireframing) πŸ—

썸넀일을 λΈ”λ‘œκ·Έ 포맷에 λ„£μ—ˆμ„λ•Œ μ–΄λ–»κ²Œ 보일지 μ§μž‘ν•  수 μžˆλŠ” ν™”λ©΄ ꡬ성이 쒋지 μ•Šμ„κΉŒ?

썸넀일은 κ²°κ΅­ ν”Œλž«νΌμ˜ ν¬μŠ€νŒ… μš©λ„λ‘œ μ‚¬μš©λ˜κΈ° λ•Œλ¬Έμ—, ν”Œλž«νΌμ˜ ν™”λ©΄ ꡬ성과 썸넀일에 이질감이 μ—†λŠ”μ§€ μ‹€μ‹œκ°„μœΌλ‘œ 보여져야 ν•œλ‹€λŠ” 결둠으둜 κ·€κ²°λ˜μ—ˆλ‹€.

2-2-2. λ””μžμΈ ꡬ체화 πŸ‘¨πŸ»β€πŸŽ¨

λ”°λΌμ„œ μΈν„°νŽ˜μ΄μŠ€ λ””μžμΈμ€ 벨둜그의 ν™”λ©΄ ꡬ성 쀑 #νƒœκ·Έ κ²€μƒ‰ν–ˆμ„λ•Œ λ‚˜νƒ€λ‚˜λŠ” λ ˆμ΄μ•„μ›ƒμ„ μ°Έκ³ ν•˜κ³  각각의 μ»΄ν¬λ„ŒμΈ λ“€μ΄ ν”Œλž«νΌμ˜ λ””μžμΈ μ»¨ν…μŠ€νŠΈμ™€ κΆ€λ₯Ό ν•¨κ»˜ ν•˜λ„λ‘ μ˜λ„ν•˜μ˜€λ‹€. μ‚¬μš©μž ν”„λ‘œν•„ 썸넀일, μ‚¬μš©μž 아이디와 같이 κΉ¨μ•Œκ°™μ€ μš”μ†Œλ“€μ„ λ°˜μ˜ν•˜λŠ” 것은 λ§Œλ“œλŠ” 재미λ₯Ό λ”ν–ˆλ‹€.

λ‚΄κ°€ μ°Έκ³ ν•œ 벨둜그 ν™”λ©΄ ꡬ성




3. μ£Όμš” κΈ°λŠ₯

⌨️ 제λͺ©κ³Ό λΆ€μ œλͺ©, λΆ„λ₯˜ ν…μŠ€νŠΈ μž…λ ₯

μ‚¬μš©μžλŠ” 제λͺ©κ³Ό λΆ€μ œλͺ©, λΆ„λ₯˜λ₯Ό 인풋창을 톡해 μž…λ ₯ν•˜κ²Œ λœλ‹€. addEventListener둜 input 이벀트λ₯Ό κ°μ§€ν•˜μ—¬ μž…λ ₯ ν•„λ“œμ— 타이핑이 될 λ•Œλ§ˆλ‹€ textContentλ₯Ό κ°±μ‹ ν•˜λŠ” 방법을 μ‚¬μš©ν–ˆλ‹€.

const inputFields = document.querySelectorAll('.input__field');

const updateInputValue = function(e) {
  const target = e.target.dataset.set;
  document.querySelector(`.${target}`).textContent = e.target.value;
};

inputFields.forEach(e => {
  e.addEventListener('input', updateInputValue);
});

λ¦¬νŒ©ν† λ§ ν•  땐 input μš”μ†Œλ§ˆλ‹€ 각각의 이벀트 ν•Έλ“€λŸ¬λ₯Ό μƒμ„±ν•˜λŠ” λŒ€μ‹  이벀트 μœ„μž„(Event Delegation)으둜 κ°„κ²°ν•˜κ²Œ μˆ˜μ •ν•  μ˜ˆμ •.



🎲 랜덀 κ·ΈλΌλ””μ–ΈνŠΈ, 단색 λ°°κ²½ λ§Œλ“€κΈ°

μ‚¬μš©μžκ°€ κ³ λ―Όν•˜λŠ” μ‹œκ°„μ„ μ΅œλŒ€ν•œ 쀄여주고 μ‹Άμ—ˆλ‹€. μš”μ¦˜μ²˜λŸΌ 선택μž₯μ• λΌλŠ” 말이 자주 μ–ΈκΈ‰λ˜λŠ” λ•Œλ„ 없을 것이닀. μ–΄λ–€ μƒ‰μƒμœΌλ‘œ μ‹œλ¦¬μ¦ˆ, 포슀트 썸넀일을 λ§Œλ“€κΉŒ κ³ λ―Όν•˜κΈ° 전에 μ‚¬μš©μžμ—κ²Œ 색상을 마ꡬ μ§‘μ–΄λ˜μ§€λŠ” κΈ°λŠ₯이 λ˜μ–΄λ²„λ Έλ‹€.

λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ λ¬΄μž‘μœ„μ˜ 색상 μ½”λ“œκ°€ λ§Œλ“€μ–΄μ Έμ„œ μ‚¬μš©μžλŠ” λ§ˆμŒμ— λ“œλŠ” 색상이 λ‚˜μ˜¬λ•ŒκΉŒμ§€ ν΄λ¦­ν•˜λ©΄ λœλ‹€. μ΄μ€‘μ—ν•˜λ‚˜λŠ”μ‚¬μš©μžμ·¨ν–₯이겠지

랜덀 컬러라고 ν•΄μ„œ λ„ˆλ¬΄ μΉ™μΉ™ν•œ 색이 λ‚˜μ™€λ²„λ¦¬λ©΄ μ•ˆλ˜κΈ° λ•Œλ¬Έμ— RGB κ°’ 각각 0μ—μ„œ 255κΉŒμ§€μ˜ λ²”μœ„ 쀑 μ΅œμ†Œ 150 이상, λ„ˆλ¬΄ 밝으면 κΈ€μžκ°€ μ•ˆλ³΄μ΄λ‹ˆ 150κ³Ό 240 μ‚¬μ΄μ˜ λ²”μœ„μ—μ„œ 값이 μƒμ„±λ˜λ„λ‘ Math.random ν•¨μˆ˜λ₯Ό λ§Œλ“€μ—ˆλ‹€.

λ˜ν•œ DOM으둜 λ°±κ·ΈλΌμš΄λ“œ 색상 μ½”λ“œ μ „λ‹¬ν• λ•Œ rgb(??, ??, ??)λŠ” 적용이 μ•ˆλ˜μ–΄ 16진법 hex μ½”λ“œλ‘œ 각각 λ³€ν™˜ ν›„ 이어뢙여쀬닀. μ΄λ•Œ μ‚¬μš©ν•œ λ©”μ†Œλ“œλŠ” toString(16).

const randomRGB = function() {
  let rgb = '';
  rgb += (Math.floor(Math.random() * 90 + 1)+150).toString(16).padStart(2, '0');
  rgb += (Math.floor(Math.random() * 90 + 1)+150).toString(16).padStart(2, '0');
  rgb += (Math.floor(Math.random() * 90 + 1)+150).toString(16).padStart(2, '0');
  return rgb;
}



πŸŒ… URL μž…λ ₯ν•΄μ„œ 배경에 이미지 μ‚½μž…

λ°°κ²½μƒ‰λ§Œ 있으면 ν™œμš©λ„κ°€ λ„ˆλ¬΄ λ–¨μ–΄μ§ˆ 것 κ°™μ•„ 선택지λ₯Ό μΆ”κ°€ν–ˆλ‹€. λ°”λ‘œ 이미지 μ£Όμ†Œλ₯Ό μž…λ ₯ν•΄μ„œ 배경에 이미지λ₯Ό μ‚½μž…ν•˜λŠ” κΈ°λŠ₯이닀. prompt둜 μ£Όμ†Œκ°’μ„ μ „λ‹¬ν•˜μ—¬ DOM의 style ν”„λ‘œνΌν‹°λ‘œ κ°„λ‹¨ν•˜κ²Œ λ§Œλ“€μ—ˆλ‹€.

썸넀일이 λ§Œλ“€μ–΄μ§€λŠ” ν”„λ ˆμž„ 뿐만 μ•„λ‹ˆλΌ body에도 λΈ”λŸ¬ 처리된 이미지λ₯Ό κΉ”μ•„μ£Όμ–΄ μ‚¬μš©μžκ°€ μΈλ„€μΌμ˜ ν…Œλ§ˆλ₯Ό κ²½ν—˜ν•  수 μžˆλ„λ‘ κ³ λ €ν•΄λ΄€λ‹€.



πŸ’Ύ 핡심기λŠ₯: 이미지 포맷으둜 ν™”λ©΄ μ €μž₯ν•˜κΈ° - HTML2CANVAS

DOM으둜 ν™”λ©΄μ—μ„œ κΎΈλ―ΈλŠ” 것은 μ–΄λ–»κ²Œλ“  해결이 λœλ‹€μ§€λ§Œ, νŠΉμ • 화면을 μ΄λ―Έμ§€λ‘œ μΊ‘μ³ν•΄μ„œ 파일둜 μ €μž₯ν•˜λŠ” 것은 μ§€κΈˆ λ‚΄κ°€ κ΅¬ν˜„ν•  수 μ—†λŠ” κΈ°μˆ μ΄μ—ˆλ‹€.

HTML2CANVAS λΌλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 라이브러리λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄κ²°ν•˜μ˜€λ‹€. 이 λΌμ΄λΈŒλŸ¬λ¦¬λŠ” HTML λ‚΄μ˜ νŠΉμ • DOM μš”μ†Œμ˜ μ˜μ—­μ„ μΊ‘μ³ν•΄μ„œ 이미지 포맷으둜 좜λ ₯, μ €μž₯이 κ°€λŠ₯ν•˜λ„λ‘ λ§Œλ“€μ–΄μ€€λ‹€.

μ•„λž˜λŠ” 라이브러리의 μ‚¬μš© 예제 μŠ€λ‹ˆνŽ«

<!-- HTML -->
<div id="capture" style="padding: 10px; background: #f5da55">
    <h4 style="color: #000; ">Hello world!</h4>
</div>
// JavaScript
html2canvas(document.querySelector("#capture")).then(canvas => {
    document.body.appendChild(canvas)
});

captureλΌλŠ” id값을 가진 μš”μ†Œλ₯Ό μΊ‘μ³ν•˜μ—¬ ν•΄λ‹Ή 이미지λ₯Ό 담은 canvasλ₯Ό body의 μžμ‹ μš”μ†Œλ‘œ μΆ”κ°€ν•œλ‹€. μ˜΅μ…˜ κΈ°λŠ₯을 잘 λͺ°λΌμ„œ 이미지 배경이 μ΅œμ’… 결과에 λ°˜μ˜λ˜μ§€ μ•Šμ•„ 많이 ν•΄λ©”μ˜€μ§€λ§Œ λ‹€ν–‰νžˆ StackOverflowμ—μ„œ 닡을 μ°Ύμ•„ ν•΄κ²°ν•  수 μžˆμ—ˆλ‹€.

HTML2CANVAS



πŸ“ ꡬ성 μš”μ†Œ(λ ˆμ΄μ•„μ›ƒ) λ³€κ²½κ³Ό ν…μŠ€νŠΈ μŠ€νƒ€μΌ μ˜΅μ…˜

λ‚΄κ°€ λ§Œλ“  썸넀일 λ©”μ΄μ»€μ˜ 핡심은 λ‹€μ–‘ν•œ μ»€μŠ€ν„°λ§ˆμ΄μ§• κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” 것이 μ•„λ‹ˆλ‹€. μ΅œλŒ€ν•œ λ‹¨μˆœν•œ μ‚¬μš©μ„±μ„ μΆ”κ΅¬ν•˜λŠ” 것이 λͺ©μ μ΄κΈ° λ•Œλ¬Έμ— λͺ‡ μ•ˆλ˜λŠ” κ°„λ‹¨ν•œ λ ˆμ΄μ•„μ›ƒ, ν…μŠ€νŠΈ μŠ€νƒ€μΌ μ˜΅μ…˜μ„ λ§Œλ“€μ–΄ ν…μŠ€νŠΈκ°€ 배경에 λ¬»νžˆμ§€ μ•Šλ„λ‘ κ³ λ €ν–ˆλ‹€.

각 μŠ€νƒ€μΌ μ˜΅μ…˜λ³„λ‘œ λΆ€λͺ¨ μš”μ†Œμ— νŠΉμ • idλ₯Ό λΆ€μ—¬ν•˜κ³  μžμ‹ μš”μ†Œλ“€μ€ id값에 따라 CSS μŠ€νƒ€μΌμ΄ 달라지도둝, μ˜΅μ…˜ 값에 맞게 λ”°λ‘œ 프리셋을 λ§Œλ“€μ—ˆλ‹€.




4. μ‚¬μš© μ˜ˆμ‹œ πŸ–¨

μ΅œμ†Œν•œμ˜ μ˜΅μ…˜μœΌλ‘œ μ΅œλŒ€ν•œμ˜ λ°”λ¦¬μ—μ΄μ…˜μ„ λ§Œλ“€ 수 μžˆλ„λ‘ μ‹œλ„ν•΄λ³΄μ•˜λ‹€. μ•„λž˜λŠ” 예제둜 λ§Œλ“  μƒ˜ν”Œλ“€μ΄λ‹€.

λ°°κ²½ 이미지 - Unsplash




5. 남은 과제

🧹 λ¦¬νŒ©ν† λ§

일단 λ§Œλ“œλŠ” 것은 λ‹¬μ„±ν–ˆμœΌλ‹ˆ 이제 μ½”λ“œλ₯Ό κΉ”λ”ν•˜κ²Œ μ •λ¦¬ν•˜μ—¬ νš¨μœ¨μ„ λ†’μ΄λŠ” 일이 λ‚¨μ•˜λ‹€. ν•˜μ§€λ§Œ 이게 λ§Œλ“œλŠ” 것 보닀 더 μ–΄λ €μšΈ 것 κ°™λ‹€.

κΈ‰ν•˜κ²Œ λ§Œλ“€λ‹€λ³΄λ‹ˆ μ€‘λ³΅λ˜λŠ” μš”μ†Œλ„ 많고, λ³€μˆ˜ μ„ μ–Έκ³Ό ν•¨μˆ˜λ„ λ‚œλ¬΄ν•œλ‹€. DRY(Don't Repeat Yourself) 원칙에 맞게 λ¦¬νŒ©ν† λ§ ν•˜λŠ” 과정이 λ‚¨μ•˜λŠ”λ°, 이 과정이 λ‚΄κ°€ λ°œμ „ν•  수 μžˆλŠ” μ§„μ§œ 계기가 λ˜μ§€ μ•Šμ„κΉŒ μƒκ°ν•œλ‹€.

κ°œμ„  μ˜ˆμ •

  • Encapsulation (Private Variables, Functions)

  • Implementing JS Module Pattern or πŸ‘‡πŸ»

  • Organizing Properties in Prototypes

  • Implementing CSS cross-browsing (e.g. web-kit)

  • Undo / Redo (5 steps)

  • More Vivid Color Range πŸ‘‡

RGB λͺ¨λ‘ 같은 λ²”μœ„ λ‚΄μ—μ„œ μƒμ„±λœ λ‚œμˆ˜μ΄κΈ° λ•Œλ¬Έμ— μ¨ν•œ 색감 λŒ€μ‹  λ°‹λ°‹ν•œ 색상이 λ‚˜μ˜€κΈ°λ„ ν•œλ‹€. νŠΈλ Œλ””ν•œ νŒŒμŠ€ν…”ν†€ κ·ΈλΌλ””μ–ΈνŠΈλ₯Ό λͺ©ν‘œλ‘œ λ§Œλ“€μ—ˆλŠ”λ°, λͺ¨ν˜Έν•œ 색이 적게 λ‚˜μ˜€λ„λ‘ λΉ„λΉ„λ“œ, νŒŒμŠ€ν…” ν†€μ˜ 색상 μœ„μ£Όλ‘œ κ°œμ„ ν•  μ˜ˆμ •μ΄λ‹€.



6. Log πŸ’»


μƒˆλ‘œ 발견된 문제점 (08/11)

  • CORS 정책을 λ”°λ₯΄λŠ” μ‚¬μ΄νŠΈμ˜ 이미지 URL은 CANVAS 좜λ ₯이 μ•ˆλœλ‹€. μ΄λ²ˆμ— 처음 μ•Œκ²Œλœ CORS의 κ°œλ…μ„ μ‚΄νŽ΄λ³΄μ•˜λ‹€. 기술적으둜 ν”Όν•΄κ°„λ‹€κ³  ν•˜λ”λΌλ„ μœ€λ¦¬μƒ μœ„λ°°λ˜λŠ” 일이기 λ•Œλ¬Έμ— μ΄λ―Έμ§€λŠ” Unsplash 같은 CC-0 License μ‚¬μ΄νŠΈλ₯Ό μ΄μš©ν•  것을 κΆŒκ³ ν•˜λŠ”κ²ƒμ΄ λ‚˜μ„ μˆ˜λ„ μžˆκ² λ‹€.

CORS(Cross-Origin Resource Sharing)λž€?

λ³΄μ•ˆ μƒμ˜ 이유둜 JavaScriptμ—μ„œ λ³΄λ‚΄λŠ” ꡐ차 좜처(μžμ‹ κ³Ό λ‹€λ₯Έ 좜처) HTTP μš”μ²­μ„ μ œν•œν•˜κΈ° μœ„ν•œ μ •μ±… [좜처] CORS (Cross-Origin Resource Sharing)κ°€ λ¬΄μ—‡μΌκΉŒ | μž‘μ„±μž μ΄λ…Έκ·Έλ¦¬λ“œ


μ‚¬μš©μ„± κ°œμ„  의견 (08/12)

Boram Kim λ‹˜κ»˜μ„œ μ‚¬μš©μ„± κ°œμ„  의견(issue)을 λ³΄λ‚΄μ£Όμ…¨μŠ΅λ‹ˆλ‹€. (κ°μ‚¬ν•©λ‹ˆλ‹€ πŸ₯°) κ³¨μžλŠ” 이미지 링크 값이 falsyμΌλ•Œ alertλ₯Ό λ„μš΄ ν›„ ν•¨μˆ˜κ°€ μ’…λ£Œλ˜λŠ” validation μ ˆμ°¨μ—μ„œ λΆˆν•„μš”ν•œ alert의 μ œκ±°μ— λŒ€ν•œ μ˜κ²¬μž…λ‹ˆλ‹€.

λ‹΅λ³€ μ†Œμ€‘ν•œ 의견 μ£Όμ…”μ„œ 정말정말 κ°μ‚¬ν•©λ‹ˆλ‹€. λΆˆν•„μš”ν•˜κ²Œ alert을 λ„μ›Œ μ‚¬μš©μžμ˜ λΆˆνŽΈκ°μ„ μ•ΌκΈ°ν•˜λŠ” 것은 λ§μ”€ν•˜μ‹  바와 같이 쒋은 방식이 μ•„λ‹Œ 것 κ°™μŠ΅λ‹ˆλ‹€. alert λ‹€μ΄μ–Όλ‘œκ·Έ λŒ€μ‹  λ²„νŠΌ μœ„μ— μž‘κ²Œ 툴팁 같은 λ©”μ‹œμ§€(e.g. '잘λͺ»λœ ν˜•μ‹μ˜ μ£Όμ†Œμž…λ‹ˆλ‹€')λ₯Ό λ„μš°λŠ” λ°©λ²•μœΌλ‘œ κ΅μ²΄ν•˜κ³ , μ΄λ―Έμ§€μ˜ μœ νš¨μ„±μ„ λΉ„λ™κΈ°μ μœΌλ‘œ 확인할 수 μžˆλŠ” λ³„λ„μ˜ validation processλ₯Ό μ—°κ΅¬ν•˜κ² μŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€ πŸ™‡πŸ»




πŸ™πŸ» κ°μ‚¬ν•œ 일

처음 λ§Œλ“€μ–΄μ„œ 동기 채널에 처음으둜 λ°°ν¬ν•œ λ―Έλ‹ˆ ν”„λ‘œμ νŠΈλΌμ„œ 별 κΈ°λŒ€λŠ” μ•ˆν–ˆλ‹€. λ„ˆλ¬΄λ‚˜ κ°μ‚¬ν•˜κ²Œλ„ λ‚΄κ°€ λ§Œλ“  앱을 μ‚¬μš©ν•˜μ—¬ λΈ”λ‘œκ·Έ μΈλ„€μΌλ‘œ ν™œμš©ν•˜λŠ” 뢄듀이 계셨닀.

λ””μžμ΄λ„ˆλ‚˜ κ°œλ°œμžλ‚˜ μžμ‹ μ΄ λ§Œλ“  μ œν’ˆκ³Ό μ„œλΉ„μŠ€λ₯Ό 기꺼이 μ‚¬μš©ν•΄μ£Όμ‹œλŠ” 고마운 뢄듀이 κ³„μ‹œκΈ°μ— 직업적 λ³΄λžŒμ„ λŠλΌμ§€ μ•Šμ„κΉŒ μƒκ°ν•˜κ²Œ λœλ‹€. 이 자리λ₯Ό λΉŒμ–΄ λ‹€μ‹œ ν•œλ²ˆ κ°μ‚¬ν•œλ‹€λŠ” 말을 ν‘œν˜„ν•˜κ³  μ‹Άλ‹€. πŸ€—

πŸ™‡πŸ» κ°μ‚¬ν•œ 일 2

μ†Œμ€‘ν•œ λΆ„λ“€μ˜ 관심 덕뢄에 썸넀일 메이컀 ν¬μŠ€νŒ…μ΄ 벨둜그 μ£Όκ°„ νŠΈλ Œλ”© 포슀트 상단에 μ˜¬λΌκ°”μŠ΅λ‹ˆλ‹€. πŸ₯° μ œκ°€ λ§Œλ“  컨텐츠가 λ§Žμ€ λΆ„λ“€μ—κ²Œ λ³΄μ—¬μ§ˆ 수 μžˆλŠ” 기회λ₯Ό 얻은 것에 κ·Έμ € 감사할 λ”°λ¦„μž…λ‹ˆλ‹€.




κΈ€κ³Ό 이미지 Wonkook Lee β“’ All Rights Reserved

Thumbnail-Maker is the simplest thumbnail generator for blogging. Thumbnail-Maker has been built as part of a toy project which in my very first phase of being a web developer. credit: Wonkook Lee (@oneook) contact: [email protected]

Thank you.

πŸ™πŸ» 잘λͺ»λœ 정보가 μžˆλ‹€λ©΄ μ§€μ ν•΄μ£Όμ„Έμš”

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •