Skip to content

rktnsinger/layout-generator-client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

21 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“ Layout generator

ezgif com-gif-maker

πŸ™ŒπŸ½ Overview

λ ˆμ΄μ•„μ›ƒμ„ κ΅¬μ„±ν•˜λŠ” 일은 μ›Ή κ°œλ°œμ—μ„œ 빼놓을 수 μ—†λŠ” μž‘μ—…μ€‘ ν•˜λ‚˜μž…λ‹ˆλ‹€. UIμ—λŠ” μ‚¬μš©μžκ°€ μ›ν•˜λŠ” 정보듀이 μ μž¬μ μ†Œμ— 잘 λ°°μΉ˜λ˜μ–΄μ•Ό ν•˜λŠ”λ°, 이 배치 곡간을 κ΅¬μ„±ν•˜λŠ” κΈ°λ³Έ 밑바탕이 λ°”λ‘œ λ ˆμ΄μ•„μ›ƒμ΄κΈ° λ•Œλ¬Έμ΄μ£ .

ν•˜μ§€λ§Œ 막상 λ ˆμ΄μ•„μ›ƒ μž‘μ—…μ„ 해보면 μ€κ·Όνžˆ 손도 많이 κ°€κ³  μ–΄λ ΅μŠ΅λ‹ˆλ‹€. λ•Œλ‘  μ–΄λ– ν•œ ν˜•νƒœκ°€ 쒋을지 감이 μž‘νžˆμ§€ μ•Šμ•„, λͺ©μ—…을 μ°Ύμ•„λ‹€λ‹ˆλŠλΌ λ”μš± λ§Žμ€ μ‹œκ°„μ„ ν• μ• ν•˜κ²Œ λ©λ‹ˆλ‹€. κ²Œλ‹€κ°€ λΉ‘λΉ‘ν•œ 일정 μ•ˆμ— κ΅¬ν˜„ν•΄μ•Ό ν•  λ‹€λ₯Έ μˆ˜λ§Žμ€ κΈ°λŠ₯λ“€κΉŒμ§€... 차라리 κ·Έλƒ₯ μ˜ˆμ‹œ 이미지λ₯Ό μ€„ν…Œλ‹ˆ λˆ„κ΅°κ°€κ°€ λΉ λ₯΄κ²Œ λ§Œλ“€μ–΄μ£Όλ©΄ μ’‹κ² λ‹€λŠ” 생각이 λ“€κ³€ ν•©λ‹ˆλ‹€.

λ°”λ‘œ μ΄λŸ¬ν•œ μƒκ°μ—μ„œ, λ³Έ ν”„λ‘œμ νŠΈλŠ” μΆœλ°œν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. Layout GeneratorλŠ” λͺ©μ—… μ΄λ―Έμ§€λ‘œλΆ€ν„° λ ˆμ΄μ•„μ›ƒ ꡬ쑰λ₯Ό μΈμ‹ν•˜μ—¬ HTMLκ³Ό CSS μ½”λ“œλ₯Ό μƒμ„±ν•΄μ£ΌλŠ” μ›Ήμ„œλΉ„μŠ€μž…λ‹ˆλ‹€.

κ·Έμ € λ ˆμ΄μ•„μ›ƒμ„ μΆ”μΆœν•˜κ³  싢은 이미지λ₯Ό μ—…λ‘œλ“œ ν•˜κ³ , 미리보기둜 ν™•μΈν•œ λ’€, μƒμ„±λœ μ½”λ“œλ₯Ό λ³΅μ‚¬ν•˜λ©΄ λμž…λ‹ˆλ‹€!

Contents



🧐 How it works

1. 원본 이미지λ₯Ό 'ν–‰λ ¬(matrix)'의 ν˜•νƒœλ‘œ λ³€ν™˜ (Image -> Canvas API -> OpenCv Mat class). 2. Grayscale λ³€ν™˜ 및 κ°€μž₯자리 κ²€μΆœ (Canny Edge Detection).
ex-01-image-loadPhoto by Team Nocoloco on Unsplash ex-02-canny-edge-detection
3. μ „μ²˜λ¦¬λœ μ΄λ―Έμ§€μ˜ ν”½μ…€ 쀑 "직선"의 성격을 가지며 일정 길이 이상인 데이터 집합을 필터링 ν•œ ν›„, κ·Έ 쀑 ν•„μš”μ—†λŠ” 선뢄을 λ‹€μ‹œ ν•œ 번 ν•„ν„°λ§ν•œ λ’€ 화면에 ν‘œμ‹œ (Probabilistic Hough Transform).
ex-03-hough-transform
4. μΈμ‹λœ μ„ λΆ„μ˜ μ’Œν‘œμ™€ μ΄λ―Έμ§€μ˜ λ„ˆλΉ„, 높이λ₯Ό 기반으둜 각 λ ˆμ΄μ•„μ›ƒ ꡬ획이 μ°¨μ§€ν•˜λŠ” λΉ„μœ¨μ„ κ³„μ‚°ν•œ ν›„, κ·Έ 값을 μ΄μš©ν•˜μ—¬ CSS grid 속성을 λ™μ μœΌλ‘œ 생성(string). λ§ˆμ§€λ§‰μœΌλ‘œ 이 grid 속성을 순차적으둜 λΆ€μ—¬ν•œ <div> νƒœκ·Έλ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜μ—¬ 미리보기 λ Œλ”λ§ 및 ν•΄λ‹Ή μ½”λ“œλ₯Ό μ‚¬μš©μžμ—κ²Œ 전달.
ex-04-result

πŸ§—πŸΌβ€β™‚οΈ What I challenge about

1. λ¨Έμ‹ λŸ¬λ‹μ™Έμ— λ‹€λ₯Έ 방법이 μžˆμ„κΉŒ?

ν”„λ‘œμ νŠΈ 기획 μ΄ˆλ°˜μ—λŠ” ν…μ„œν”Œλ‘œμš°μ˜ object detection κΈ°λŠ₯을 톡해 λ ˆμ΄μ•„μ›ƒ κ΅¬νšμ„ κ²€μΆœν•œ λ’€ ν•΄λ‹Ή 데이터λ₯Ό μ½”λ“œν™” ν•˜λ©΄ λ˜κ² λ‹€κ³  κ΅¬μƒν•˜μ˜€μ§€λ§Œ, μ΄λŠ” μ‹œμž‘μ λΆ€ν„° 잘λͺ»λœ κ³„νšμ΄μ—ˆλ‹€λŠ” 것을 λ¨Έμ§€μ•Šμ•„ κΉ¨λ‹¬μ•˜μŠ΅λ‹ˆλ‹€. λ¨Έμ‹ λŸ¬λ‹μ€ 기술적인 문제λ₯Ό μ‰½κ²Œ ν•΄κ²°ν•΄μ£ΌλŠ” λ§ˆλ²•μ΄ μ•„λ‹ˆλΌ, λ°©λŒ€ν•œ 데이터λ₯Ό ν•™μŠ΅ν•œ λ’€ 이λ₯Ό 기반으둜 μΌλ°˜ν™”λœ κ²°κ³Όλ₯Ό μΆ”λ‘ ν•΄ λ‚΄λŠ” μΌμ’…μ˜ μ•Œκ³ λ¦¬μ¦˜κ³Ό 같은 κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

λ¨Έμ‹ λŸ¬λ‹μ„ μ μš©ν•˜λ €λ©΄ μš°μ„  λ³Έ ν”„λ‘œμ νŠΈμ—μ„œ μš”κ΅¬λ˜λŠ” 기술적 문제λ₯Ό ν•΄κ²°ν•˜λ„λ‘ 사전에 미리 ν•™μŠ΅λœ λ¨Έμ‹ λŸ¬λ‹ λͺ¨λΈμ΄ ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€. 직접 ν•™μŠ΅μ‹œν‚€λŠ” λ°©μ•ˆλ„ μžˆμ—ˆμœΌλ‚˜, 3μ£ΌλΌλŠ” κΈ°κ°„ 내에 μ˜λ―ΈμžˆλŠ” κ²°κ³Όλ₯Ό λ‚Όλ§Œν•œ μ–‘μ˜ 데이터λ₯Ό ꡬ좕 및 λΌλ²¨λ§ν•˜μ—¬ ν•™μŠ΅μ‹œν‚€λŠ” 것은 μ‹œκ°„μ , μžμ›μ μœΌλ‘œ 무리라고 νŒλ‹¨ν•˜μ—¬ κ³ λ €ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” "λ ˆμ΄μ•„μ›ƒ 인식"κ³Ό κ΄€λ ¨ν•˜μ—¬ 사전 ν›ˆλ ¨λœ λͺ¨λΈμ„ 찾을 수 μ—†μ—ˆλ˜ μ μž…λ‹ˆλ‹€. 일뢀 μœ μ‚¬ν•œ μž‘μ—…μ„ ν•˜λŠ” 파이썬 λͺ¨λΈμ€ μžˆμ—ˆμœΌλ‚˜(μ„œλ©΄ λ¬Έμ„œμ—μ„œ 제λͺ©μ΄λ‚˜ 단락 κ²€μΆœ, λͺ©μ—… μ΄λ―Έμ§€μ—μ„œ λ²„νŠΌ, 인풋과 같은 UI μš”μ†Œ κ²€μΆœ) λ ˆμ΄μ•„μ›ƒμ„ μΈμ‹ν•œλ‹€λŠ”κ±΄ 쑰금 λ‹€λ₯Έ λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€.

사싀 이 μ‹œμ μ—μ„œ ν”„λ‘œμ νŠΈ 주제λ₯Ό λ‹€μ‹œ μƒκ°ν•΄μ•Όλ κΉŒλΌλŠ” 고민도 μž μ‹œ λ“€μ—ˆμ§€λ§Œ, "방법은 ν•˜λ‚˜κ°€ μ•„λ‹ˆλ‹€" λΌλŠ” λΆ€νŠΈμΊ ν”„μ—μ„œμ˜ κ°€λ₯΄μΉ¨μ„ λ˜μƒˆκΈ°λ©° λ‹€μ‹œ μ²˜μŒλΆ€ν„° 쑰사λ₯Ό μ΄μ–΄λ‚˜κ°”μŠ΅λ‹ˆλ‹€. 그러던 쀑 "컴퓨터 λΉ„μ „" 뢄야에 λŒ€ν•œ 글을 μ ‘ν–ˆκ³ , ν”νžˆ μ‚¬μš©ν•˜λŠ” 카메라 필터링 μ–΄ν”Œκ³Ό 같이 사진, μ˜μƒμ„ μ œμ–΄ν•˜λŠ” κΈ°μˆ λ“€μ˜ λ§Žμ€ 뢀뢄이 λΉ„μ „ κΈ°μˆ μ„ λ°”νƒ•μœΌλ‘œ κ΅¬ν˜„λ˜μ—ˆλ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” Canvas APIλ₯Ό 톡해 이미지 파일의 ν”½μ…€ 데이터λ₯Ό μ‘°μž‘ν•  수 μžˆμ—ˆκΈ° λ•Œλ¬Έμ—, 이 방식듀을 잘 μ‘μš©ν•˜λ©΄ λ³Έ ν”„λ‘œμ νŠΈμ˜ μš”κ΅¬ 사항듀을 μˆ˜ν–‰ν•΄ λ‚Ό 수 μžˆκ² λ‹€λŠ” 생각이 λ“€μ—ˆμŠ΅λ‹ˆλ‹€. 이후 μž‘μ—…κ³Ό 쑰사λ₯Ό λ³‘ν–‰ν•˜λ©° λ…Έλ ₯ν•œ 끝에, μœ„μ˜ How it worksμ—μ„œ μ†Œκ°œν•œ λ°©μ‹μœΌλ‘œ ν”„λ‘œμ νŠΈλ₯Ό κ΅¬ν˜„ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

2. ν•˜λ‚˜μ˜ 직선이 μΈμ ‘ν•œ μ—¬λŸ¬κ°œμ˜ μ„ λΆ„μœΌλ‘œ μΈμ‹λ˜λ˜ 문제

기본적인 직선 μΈμ‹μ—λŠ” μ„±κ³΅ν–ˆμ§€λ§Œ, μ΄λ―Έμ§€μ˜ ν¬κΈ°λ‚˜ 해상도, μ„ λͺ…도 λ“±μ˜ 쑰건이 λ„ˆλ¬΄λ‚˜λ„ λ‹€μ–‘ν–ˆκΈ°μ— μ›ν•˜λŠ” μ„ λΆ„λ“€λ§Œ 콕 μ§‘μ–΄μ„œ μΆ”μΆœν•΄λ‚΄κΈ°μ—λŠ” 어렀움이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. μ΄λ―Έμ§€μƒμ—μ„œλŠ” ν•œ μ€„λ‘œ λ³΄μ΄μ§€λ§Œ κ²½μš°μ— 따라 2, 3개의 μΈμ ‘ν•œ μ„ μœΌλ‘œ μΈμ‹λ˜κΈ°λ„ ν–ˆκ³ , λ ˆμ΄μ•„μ›ƒ 내뢀에 μŠ€ν¬λ‘€λ°”κ°€ μžˆμ„ 경우 λ‹Ήμ—°ν•˜κ²Œλ„ 두 개의 μ„ λΆ„μœΌλ‘œ κ²€μΆœλ˜μ–΄ λ³„λ„μ˜ λ ˆμ΄μ•„μ›ƒ μ˜μ—­μœΌλ‘œ μΈμ‹λ˜κΈ°λ„ ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 이에 μΈμ ‘ν•œ 선뢄듀은 ν•˜λ‚˜λ₯Ό μ œμ™Έν•˜κ³ λŠ” λͺ¨λ‘ μ œκ±°ν•˜λŠ” 과정이 μžˆμ–΄μ•Ό μ΄ν›„μ˜ μž‘μ—…μ΄ μˆ˜μ›”ν•  κ²ƒμœΌλ‘œ νŒλ‹¨ν–ˆκ³ , 선뢄을 필터링할 κΈ°μ€€κ³Ό 방법에 λŒ€ν•œ κ³ λ―Ό 끝에 μ•„λž˜μ™€ 같은 μ•Œκ³ λ¦¬μ¦˜μ„ μž‘μ„±ν•˜μ—¬ μ μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

λ¨Όμ € μΈμ‹λœ 선뢄듀을 각각 ν–‰κ³Ό μ—΄λ‘œ λ‚˜λˆˆ λ’€, μ’Œν‘œκ°’μ— 따라 μˆ˜ν‰μ„ μ€ 상 -> ν•˜ 순으둜, 수직 선은 쒌 -> 우 순으둜 μ •λ ¬ ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 이후 각 ν–‰κ³Ό 열을 λ³„λ„λ‘œ μˆœνšŒν•˜λ©° ν˜„μž¬ μ„ λΆ„κ³Ό 이전 μ„ λΆ„μ˜ μ’Œν‘œκ°’ 차이가 일정 λ²”μœ„ 내에 μžˆλŠ” 경우, ν•΄λ‹Ή 선뢄은 이전에 이미 μΈμ‹λœ μ„ λΆ„κ³Ό μΈμ ‘ν•΄μžˆλŠ” κ²ƒμœΌλ‘œ νŒλ‹¨ν•˜κ³  버리도둝 ν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ˜ν•œ μΆ”κ°€μ μœΌλ‘œ μ΄λ―Έμ§€μ˜ κ°€μž₯ λ°”κΉ₯ ν…Œλ‘λ¦¬κ°€ μ„ μœΌλ‘œ μΈμ‹λ˜λŠ” κ²½μš°λ„ λ°œκ²¬λ˜μ–΄, ν…Œλ‘λ¦¬λ‘œλΆ€ν„° 일정 marginκ°’ μ΄λ‚΄μ˜ μœ„μΉ˜μ—μ„œ μΈμ‹λœ 선뢄도 λ§ˆμ°¬κ°€μ§€λ‘œ 버리도둝 ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 이 μž‘μ—…μ„ 톡해 결과적으둜 λ ˆμ΄μ•„μ›ƒ μΆ”μΆœμ— ν•„μš”ν•œ μ„ λΆ„ λ°μ΄ν„°λ“€λ§Œ 선별해낼 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

3. 일단 인식은 λλŠ”λ°, 이걸 μ–΄λ–»κ²Œ μ½”λ“œλ‘œ..?

이번 ν”„λ‘œμ νŠΈμ—μ„œ κ°€μž₯ 였랜 μ‹œκ°„μ„ λ“€μ—¬μ•Ό ν–ˆλ˜ λΆ€λΆ„μž…λ‹ˆλ‹€. 기획 λ‹Ήμ‹œμ—λŠ” "ν”½μ…€ λ°μ΄ν„°λ‘œ λ ˆμ΄μ•„μ›ƒ ꡬ획의 λ„ˆλΉ„, 높이λ₯Ό μ•Œ 수 μžˆμœΌλ‹ˆ 이λ₯Ό μ μš©ν•œ <div> νƒœκ·Έλ₯Ό μƒμ„±ν•˜λ©΄ λ˜κ² λ‹€" 라고 μƒκ°ν•˜μ˜€μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 막상 μž‘μ—…μ„ μ‹œμž‘ν•΄λ³΄λ‹ˆ 이 방법을 톡해 μ»΄ν¬λ„ŒνŠΈμ™€ 같은 κ°œλ³„μ μΈ μš”μ†Œλ₯Ό λ§Œλ“€ μˆ˜λŠ” μžˆμ—ˆμ§€λ§Œ, ν™”λ©΄ μ „μ²΄μ˜ κ΅¬νšμ„ λ‚˜λˆ„λŠ” 것은 μ˜ˆμƒκ³ΌλŠ” μ „ν˜€ λ‹€λ₯Έ λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€. 무엇보닀도 λ„ˆλΉ„, 높이 λ“±μ˜ ν˜•νƒœμ— λŒ€ν•œ μˆ˜μΉ˜κ°€ μ•„λ‹Œ display 속성이 μΆ”κ°€λ˜μ–΄μ•Ό λΉ„λ‘œμ†Œ ν™”λ©΄ μ „μ²΄μ˜ λ ˆμ΄μ•„μ›ƒμ„ μž‘μ„ 수 μžˆκ² λ‹€λŠ” 사싀을 깨달은 λ’€μ—λŠ”, μ΄λŸ¬λ‹€ ν”„λ‘œμ νŠΈλ₯Ό 끝내지 λͺ»ν•  μˆ˜λ„ μžˆλ‹€λŠ” κ±±μ •κΉŒμ§€ μ•žμ„°μŠ΅λ‹ˆλ‹€. κΈ‰ν•œ λ§ˆμŒμ— λ¨Έμ‹ λŸ¬λ‹μ—μ„œ 힌트λ₯Ό 얻을 수 μžˆμ§€ μ•Šμ„κΉŒ λ‹€μ‹œ μ‚΄νŽ΄λ³΄μ•˜μ§€λ§Œ, 이 μ—­μ‹œ "UI μš”μ†Œμ™€ HTML μ½”λ“œλ₯Ό 1:1둜 맀칭"ν•˜μ—¬ 데이터셋을 κ΅¬μΆ•ν•œ λ’€ 이λ₯Ό ν•™μŠ΅μ‹œμΌœ μ΄λ―Έμ§€μ—μ„œ μ½”λ“œλ₯Ό μΆ”μΆœν•΄λ‚΄λŠ” κ²ƒμ΄μ—ˆκΈ°μ— 도움 λ λ§Œν•œ λ‹¨μ„œλ₯Ό μ–»μ§€λŠ” λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.

이후 λ©°μΉ κ°„ λ‹€μ–‘ν•œ μ‹œν–‰μ°©μ˜€λ₯Ό κ±°μ³€κ³ , κ²°κ΅­μ—λŠ” CSS grid 속성을 ν™œμš©ν•˜μ—¬, κ²€μΆœλœ λ ˆμ΄μ•„μ›ƒκ³Ό μΌμΉ˜ν•˜λ„λ‘ νƒœκ·Έλ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜λŠ” 방법을 생각해낼 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ¨Όμ € μ΄λ―Έμ§€μ˜ λ„ˆλΉ„, 높이에 μ„ λΆ„ λ°μ΄ν„°μ˜ μ’Œν‘œλ₯Ό λŒ€μž…ν•˜μ—¬ λ‚˜λˆ μ§„ 각 κ΅¬νšλ“€μ΄ 전체 λ„ˆλΉ„, λ†’μ΄μ—μ„œ μ°¨μ§€ν•˜λŠ” λΉ„μœ¨μ„ κ΅¬ν–ˆκ³ , 이λ₯Ό grid λ ˆμ΄μ•„μ›ƒμ—μ„œ νŠΈλž™ μ‚¬μ΄μ¦ˆλ₯Ό μ •ν•˜λŠ”λ° μ‚¬μš©ν•˜λŠ” fr λ‹¨μœ„λ₯Ό 가진 λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 이후 각 λ ˆμ΄μ•„μ›ƒ κ΅¬νšμ— λŒ€ν•œ <div> νƒœκ·Έλ“€ 전체λ₯Ό κ°μ‹ΈλŠ” λΆ€λͺ¨ νƒœκ·Έλ₯Ό μΆ”κ°€ν•œ λ’€ μœ„μ—μ„œ μƒμ„±ν•œ λ¬Έμžμ—΄μ„ 각 grid-template-rows, grid-template-columnsμ†μ„±μ˜ κ°’μœΌλ‘œ λΆ€μ—¬ν•˜μ—¬ 기본적인 λ ˆμ΄μ•„μ›ƒ ν˜•νƒœλ₯Ό μž‘μ„ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 이 방법은 λ ˆμ΄μ•„μ›ƒμ΄ κ°€λ‘œ, λ˜λŠ” μ„Έλ‘œ 쀑 ν•œ μ’…λ₯˜μ˜ μ„ λΆ„λ§Œ μžˆμ„ λ•Œ 적용 κ°€λŠ₯ν–ˆκ³ , 볡합적인 λ ˆμ΄μ•„μ›ƒμ˜ κ²½μš°μ—” μΆ”κ°€μ μœΌλ‘œ μžμ‹νƒœκ·Έλ“€μ—κ²Œλ„ λ™μ μœΌλ‘œ κ΄€λ ¨ 속성이 λΆ€μ—¬λ˜μ–΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€. λͺ‡ μ°¨λ‘€ 속성 λΆ€μ—¬ λ‘œμ§μ„ μž‘μ„±ν•΄λ³Έ κ²°κ³Ό 단일 λ‘œμ§μ—μ„œ λͺ¨λ“  경우의 μˆ˜μ— λŒ€μ‘ν•˜λ©° 속성을 λ™μ μœΌλ‘œ λΆ€μ—¬ν•˜λŠ” 것은 κ·Έλ•Œκ·Έλ•Œ ν•„μš”ν•œ μ’Œν‘œκ°’μ˜ μ’…λ₯˜κ°€ λ‹€λ₯΄κΈ°μ— μ–΄λ ΅λ‹€κ³  νŒλ‹¨μ΄ λ˜μ—ˆκ³ , λŒ€μ•ˆμœΌλ‘œ 사전에 λ ˆμ΄μ•„μ›ƒ νƒ€μž…μ„ μ§€μ •ν•œ λ’€ 각 νƒ€μž…μ— ν•΄λ‹Ήν•˜λŠ” λ ˆμ΄μ•„μ›ƒμ΄ μΈμ‹λ˜μ—ˆμ„ 경우 이에 λ§žλŠ” 둜직이 μ‹€ν–‰λ˜λ„λ‘ λ³€κ²½ν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ ˆμ΄μ•„μ›ƒ νƒ€μž…μ€ 일반적으둜 많이 μ‚¬μš©λ˜λŠ” 경우λ₯Ό κ³ λ €ν•΄ λ‹€μŒκ³Ό 같이 λΆ„λ₯˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

  • κ°€λ‘œ μ„ λΆ„λ§Œ μžˆλŠ” 경우(ex: header, main, footer)
  • μ„Έλ‘œ μ„ λΆ„λ§Œ μžˆλŠ” 경우(ex: side, main)
  • κ°€λ‘œ μ„Έλ‘œκ°€ μ„žμ—¬μžˆμœΌλ‚˜, 화면을 κ°€λ‘œμ§€λ₯΄λŠ” 선뢄이 κ°€λ‘œ 선뢄인 경우(주둜 holy grail λ ˆμ΄μ•„μ›ƒκ³Ό 같은 ν˜•νƒœ)

비둝 μ œν•œμ μ΄κΈ΄ ν•˜λ‚˜, 이 과정을 ν†΅ν•΄μ„œ 기초적인 μˆ˜μ€€μ˜ λ ˆμ΄μ•„μ›ƒ ν˜•νƒœμ— λŒ€ν•΄μ„œλŠ” λ™μ μœΌλ‘œ μ½”λ“œλ₯Ό 생성해낼 수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ΄ν›„μ—λŠ” 미리보기둜 λ Œλ”λ§λœ μ½”λ“œμ˜ λΆ€λͺ¨ μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό useRef둜 뢈러온 λ’€, ν•΄λ‹Ή μ—˜λ¦¬λ¨ΌνŠΈμ˜ μžμ‹ νƒœκ·Έλ“€μ„ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜μ—¬ μ΅œμ’…μ μœΌλ‘œ μ‚¬μš©μžμ—κ²Œ ν‘œμ‹œν•΄ 쀄 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

4. λ”μš± λ°œμ „ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όλ κΉŒ?

근본적으둜 λ³Έ ν”„λ‘œμ νŠΈλŠ” "각 λ ˆμ΄μ•„μ›ƒ μ˜μ—­μ΄ μ„ μ΄λ‚˜ μƒ‰μƒμœΌλ‘œ λͺ…ν™•νžˆ κ΅¬λΆ„λ˜λŠ”" 이미지에 ν•œν•΄μ„œ λ ˆμ΄μ•„μ›ƒ κ²€μΆœμ΄ κ°€λŠ₯ν•˜λ‹€λŠ” ν•œκ³„λ₯Ό μ§€λ‹ˆκ³  μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” edge detection κ³Όμ •μ—μ„œ μ£Όλ³€κ³Ό 색이 λ‹€λ₯Έ 픽셀듀을 μ„ λ³„ν•˜μ—¬ ν…Œλ‘λ¦¬λ‘œ κ²€μΆœν•  후보ꡰ을 κ³„μ‚°ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. ν…Œλ‘λ¦¬ 없이 μ½˜ν…μΈ κ°€ 배치된 μ˜μ—­λ§Œμ„ κΈ°μ€€μœΌλ‘œ λ ˆμ΄μ•„μ›ƒμ„ κ²€μΆœν•΄λ‚΄λ €λ©΄ object detection λ˜λŠ” symantic segmentation λ“±μ˜ λ¨Έμ‹ λŸ¬λ‹μ΄ 적용된 κΈ°μˆ μ„ μ‚¬μš©ν•˜μ—¬ 이미지에 μ‘΄μž¬ν•˜λŠ” 각 μš”μ†Œλ“€μ„ ꡬ뢄할 수 μžˆμ–΄μ•Ό ν•  κ²ƒμœΌλ‘œ νŒλ‹¨μ΄ λ©λ‹ˆλ‹€. 사싀 μ΄λ²ˆμ—λŠ” 여건상 μ μš©ν•˜μ§€λŠ” λͺ»ν–ˆμœΌλ‚˜, ν”„λ‘œμ νŠΈ 기획 κ³Όμ •μ—μ„œ λ¨Έμ‹ λŸ¬λ‹ 뢄야에 λŒ€ν•˜μ—¬ λ§Žμ€ ν₯λ―Έλ‘œμ›€μ„ 느꼈고, μΆ”ν›„ κ°€λŠ₯ν•˜λ‹€λ©΄ 더 깊게 κ³΅λΆ€ν•œ λ’€ λ³Έ ν”„λ‘œμ νŠΈμ—λ„ ν•΄λ‹Ή κΈ°μˆ μ„ μΆ”κ°€λ‘œ μ μš©ν•΄λ³΄κ³  싢은 마음이 ν½λ‹ˆλ‹€.

μœ„μ™€ λ”λΆˆμ–΄, ν˜„μž¬μ˜ λ‘œμ§μ„ κΈ°μ€€μœΌλ‘œ μ½”λ“œλ₯Ό μΆ”μΆœν•΄λ‚Ό 수 μžˆλŠ” λ ˆμ΄μ•„μ›ƒμ˜ ν˜•νƒœκ°€ ν•œμ •μ μ΄λΌλŠ” 점도 μ•„μ‰¬μ›€μœΌλ‘œ λ‚¨μŠ΅λ‹ˆλ‹€. λ‹¨νŽΈμ μœΌλ‘œλŠ” λ ˆμ΄μ•„μ›ƒ νƒ€μž…μ˜ 경우의 수λ₯Ό 늘리고 이에 ν•΄λ‹Ήν•˜λŠ” λ‘œμ§μ„ μΆ”κ°€ν•¨μœΌλ‘œμ¨ 보완할 수 μžˆμœΌλ‚˜, ν•œμ •λœ ν”„λ‘œμ νŠΈ κΈ°ν•œ λ‚΄μ—μ„œ 더 이상 λ³΄μ™„μž‘μ—…μ— μ‹œκ°„μ„ λΆ„λ°°ν•  수 μ—†μ—ˆκΈ°μ— λ”μš± 아쉬움이 ν½λ‹ˆλ‹€. ν—ˆλ‚˜ μ΄λŸ¬ν•œ 방식은 λ‹€μ–‘ν•œ λ ˆμ΄μ•„μ›ƒμ„ μΆ”μΆœν•˜λ €ν•¨μ— λΉ„λ‘€ν•˜μ—¬ 둜직이 κ³„μ†ν•΄μ„œ λΉ„λŒ€ν•΄μ§ˆ 것이기 λ•Œλ¬Έμ—, 근본적인 해결책은 μ•„λ‹ˆκΈ°λ„ ν•©λ‹ˆλ‹€. 이에 μΆ”μΆœ 과정을 μΌκ΄€λœ ν•˜λ‚˜μ˜ ν•¨μˆ˜λ‘œ ν•΄κ²°ν•  수 μžˆλ„λ‘ 더 κ³ λ―Όν•˜κ³  보완을 μ‹œλ„ν•΄λ³Ό μ˜ˆμ •μž…λ‹ˆλ‹€.


πŸ“ Dev Log

Weekly work (22/11/07 ~ 22/11/27)

Week 01 - 기획 및 κΈ°μˆ κ²€μ¦
  • 아이디어 쑰사
  • 기술 검증 및 κ΅¬ν˜„ λ°©ν–₯ κ³ λ―Ό
  • λͺ©μ—…(figma) 및 ꡬ체적인 κ³„νš 수립(canvan μž‘μ„±)
Week 02 - κΈ°λŠ₯ 개발
  • ν”„λ‘œμ νŠΈ 초기 μ„ΈνŒ…(Git repo, lint μ„€μ • λ“±)
  • 정적 νŽ˜μ΄μ§€ κ΅¬ν˜„
  • 이미지 μ‚¬μ „μ²˜λ¦¬ 둜직 κ΅¬ν˜„
  • μ΄λ―Έμ§€λ‘œλΆ€ν„° 직선 선뢄을 κ²€μΆœν•˜λŠ” 둜직 κ΅¬ν˜„
Week 03 - κΈ°λŠ₯ 개발 및 마무리 μž‘μ—…
  • κ²€μΆœλœ μ„ λΆ„μœΌλ‘œ λ ˆμ΄μ•„μ›ƒμ„ κ΅¬ν˜„ν•˜λŠ” 둜직 μž‘μ„±
  • 엣지 μΌ€μ΄μŠ€ 확인에 λ”°λ₯Έ 지속적인 둜직 보완 μž‘μ—…
  • μ „λ°˜μ μΈ λ¦¬νŒ©ν† λ§, μ½”λ“œ μŠ€νƒ€μΌ 점검
  • 배포 이슈 ν•΄κ²°(webpack config override)
  • λ¦¬λ“œλ―Έ μž‘μ„±

What I realized & learned

β€œdependencies”: β€œother-peoples-work”

이번 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ 정말 λ§Žμ€ 것듀을 느끼고 λ°°μ› μ§€λ§Œ, κ·Έ μ€‘μ—μ„œλ„ κ°€μž₯ λΌˆμ €λ¦¬κ²Œ λŠλ‚€μ μ€ β€œλ‚΄κ°€ κ·Έλ™μ•ˆ μ–Όλ§ˆλ‚˜ λ‹€λ₯Έ μ‚¬λžŒλ“€μ˜ μž‘μ—…λ¬Όμ— μ˜μ‘΄ν•΄μ™”λ‚˜β€λΌλŠ” λΆ€λΆ„μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

돌이켜 μƒκ°ν•΄λ³΄λ‹ˆ μ‹€μ œλ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©° κ΅¬ν˜„ν•΄λ‚˜κ°”λ˜ μ‹œκ°„λ“€ 보닀, 초기 기획과 κΈ°μˆ κ²€μ¦ μž‘μ—…μ„ μ§„ν–‰ν•œ 첫 번째 μ£Όκ°€ μ €μ—κ²ŒλŠ” κ°€μž₯ νž˜λ“€κ³  κ³ ν†΅μŠ€λŸ¬μš΄ μ‹œκ°„μ΄μ—ˆμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ κ³„νšν•˜κ³  κ³ λ―Όν•˜κ³  μžˆλŠ” λ°©ν–₯이 λ§žλŠ”μ§€, μ‹€μ œλ‘œ 정말 κ΅¬ν˜„μ΄ κ°€λŠ₯ν•  지 ν™•μ‹ ν•˜κΈ° 어렀웠을 λΏλ”λŸ¬, "λͺ¨λ‹¬ λ§Œλ“œλŠ” 방법"μ΄λ‚˜ "쒋은 디렉토리 ꡬ쑰 μ§œλŠ” 방법"κ³ΌλŠ” 달리 "μ΄λ―Έμ§€μ—μ„œ λ ˆμ΄μ•„μ›ƒμ„ κ²€μΆœν•΄ μ½”λ“œν™” ν•˜λŠ” 방법"에 λŒ€ν•΄μ„œλŠ” μ†μ‹œμ›ν•œ κ΄€λ ¨μžλ£Œλ‚˜ μ˜ˆμ‹œ, 레퍼런슀둜 삼을 μž‘μ—…λ¬Όμ„ 도톡 λ°œκ²¬ν•  μˆ˜κ°€ μ—†μ—ˆκ³ , κ·Έμ•Όλ§λ‘œ λ§λ§λŒ€ν•΄μ— ν™€λ‘œ 남겨진 기뢄을 λŠλ‚„ λΏμ΄μ—ˆμŠ΅λ‹ˆλ‹€. λ™μ‹œμ—, 아무리 곡뢀 쀑인 μž…μž₯μ΄λΌμ§€λ§Œ μ΄λ ‡κ²ŒκΉŒμ§€ λ‹€λ₯Έ μ‚¬λžŒλ“€μ˜ μž‘μ—…λ¬Όμ— 의쑴적이라면 "λ‚΄κ°€ 개발자둜써 혼자 ν•  수 μžˆλŠ” 일이 있긴 μžˆμ„κΉŒ?" λΌλŠ” 도움 μ•ˆλ˜λŠ” κ±±μ •κ³Ό μ—¬λŸ¬ κ³ λ―Όλ“€λ‘œ 밀을 μ§€μƒˆμš°κΈ°λ„ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

천 리 길도 ν•œ κ±ΈμŒλΆ€ν„°

μ΄λŸ¬ν•œ 상황 μ†μ—μ„œ ν•œ 가지 번뜩 λ– μ˜€λ₯Έ 쑰언이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ°”λ‘œ "λ§‰μ—°ν•˜κ³  감이 μž‘νžˆμ§€ μ•Šμ„λ•ŒλŠ” μš°μ„  μš”κ΅¬λ˜λŠ” 사항을 잘게 λ‚˜λˆ„κ³ , κ°€μž₯ μž‘μ€ λΆ€λΆ„λΆ€ν„° μ°¨κ·Όμ°¨κ·Ό κ΅¬ν˜„ν•΄λ‚˜κ°€λΌ"λŠ” μΌ„λ‹˜μ˜ μ‘°μ–Έμ΄μ—ˆμŠ΅λ‹ˆλ‹€. 자료 쑰사와 기술 검증에 κ·Έλ ‡κ²Œ λͺ°λ‘ν–ˆμœΌλ©΄μ„œλ„ 첫 μ£Όκ°€ λ‹€ μ§€λ‚˜κ°ˆ λ¬΄λ ΅κΉŒμ§€ λͺ…ν™•ν•œ κ³„νšμ„ μˆ˜λ¦½ν•˜μ§€ λͺ»ν–ˆμ—ˆλŠ”데, μ΄λŠ” λ§‰μ—°ν•œ 두렀움에 λ‹₯μΉ˜λŠ”λŒ€λ‘œ κ΄€λ ¨μžλ£Œλ‚˜ 레퍼런슀 μž‘μ—…λ¬Όμ„ μ°Ύμ•„ ν—€λ©˜ κ²ƒμ΄μ—ˆμ„ 뿐 μ§€κΈˆ λˆˆμ•žμ— μžˆλŠ” 문제 해결을 μœ„ν•΄ "정말, μ œλŒ€λ‘œ 된" λ…Έλ ₯을 ν•œ 것은 μ•„λ‹ˆμ—ˆκ΅¬λ‚˜λΌλŠ” 것을 κ·Έλ•Œμ„œμ•Ό κΉ¨λ‹«κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

이후 μ €λŠ” 상황을 쑰금 더 μ°¨λΆ„ν•˜κ²Œ 바라볼 수 μžˆμ—ˆκ³ , 이 ν”„λ‘œμ νŠΈλ₯Ό κ΅¬ν˜„ν•˜λŠ”λ° ν•„μš”ν•œ 기술이 무엇인지 μž‘μ€ λ‹¨μœ„λΆ€ν„° λ‹€μ‹œ κ³ λ―Όν•˜κΈ° μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€. "근본적으둜 μ΄λ―Έμ§€μ—μ„œ 무언가 κ²€μΆœν•˜λ €λ©΄ 일단 ν”½μ…€ 데이터λ₯Ό λ‹€λ£° 수 μžˆμ–΄μ•Όκ² λ„€.", "픽셀을 μ‘°μž‘ν•  수 μžˆλ‹€λ©΄ 이미지λ₯Ό κ°€λ‘œμ§€λ₯΄λŠ” μ§μ„ λ“€λ§Œ 둜직으둜 κ³¨λΌμ„œ μΆ”μΆœν•  수 μžˆμ§€ μ•Šμ„κΉŒ?", "λ‹€λ₯Έ 뢀뢄듀은 μ œμ™Έν•˜κ³  μ„ λΆ„λ§Œ μΈμ‹ν•˜λ €λ©΄ μ΄λ―Έμ§€μ—μ„œ ν…Œλ‘λ¦¬λ§Œ λΆ€κ°μ‹œν‚€λŠ” μ „μ²˜λ¦¬κ°€ ν•„μš”ν•˜κ² λ‹€!" ... .

μ΄λŸ¬ν•œ 과정듀을 κ±°μ³μ„œ λ‹€μ‹œκΈˆ ꡬ체적인 κ³„νšμ„ μ„Έμ› κ³ , μž‘μ—…μ΄ μ‹œμž‘λœ μ΄ν›„λ‘œλŠ” κ³„νšμ— λ§žμΆ”μ–΄ ν•˜λ£¨ν•˜λ£¨ κ·Έμ € μΆ©μ‹€νžˆ κ΅¬ν˜„μ‹œμΌœ λ‚˜κ°”μŠ΅λ‹ˆλ‹€. μž‘μ—…μ„ 진행할 수둝 μ²˜μŒμ—λŠ” μ˜ˆμƒν•˜μ§€ λͺ»ν–ˆλ˜ λ‹€μ–‘ν•œ μ΄μŠˆλ“€μ΄ λΉ—λ°œμ³ λ‚˜μ˜€λ©° λ§ˆμŒμ„ 꺾으렀 λ“€μ—ˆμ§€λ§Œ, 기획 λ‹¨κ³„μ—μ„œμ˜ 고민듀을 λ– μ˜¬λ¦¬λ©° 문제의 μš”μ§€λ₯Ό νŒŒμ•…ν•˜κ³  ν•΄κ²°ν•  κ·Όκ±°λ₯Ό λ§ˆλ ¨ν•˜λŠ”λ° μ§‘μ€‘ν•˜κ³ μž λ…Έλ ₯ν–ˆμŠ΅λ‹ˆλ‹€. κ·Έ κ²°κ³Ό, 비둝 많이 λΆ€μ‘±ν•˜μ§€λ§Œ κ·Έλž˜λ„ κ³„νšν–ˆλ˜ λ™μž‘μ„ μ–΄λŠμ •λ„ μˆ˜ν–‰ν•˜λŠ” 결과물을 λ§Œλ“€μ–΄ λ‚Ό 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

곡격수이기 전에, μΆ•κ΅¬μ„ μˆ˜λ‹€

ν”„λ‘œμ νŠΈλ₯Ό λ§ˆλ¬΄λ¦¬ν•˜λŠ” μ‹œμ μ—μ„œ, λΆˆν˜„λ“― 이 생각이 λ‡Œλ¦¬μ— λ°•ν˜”μŠ΅λ‹ˆλ‹€.

"ν”„λ‘ νŠΈμ—”λ“œ 개발자이기 전에, λ‚˜λŠ” λ¨Όμ € '개발자 'κ°€ λ˜μ–΄μ•Ό ν•˜λŠ” κ²ƒμ΄κ΅¬λ‚˜."

아무리 μŠ›μ„ μž˜ν•˜κ³  λ“œλ¦¬λΈ” λŠ₯λ ₯이 λ›°μ–΄λ‚˜λ”λΌλ„ 좕ꡬ μ„ μˆ˜λ‘œμ¨μ˜ 기초 체λ ₯μ΄λ‚˜ 피지컬, 좕ꡬ 지λŠ₯이 ν˜•νŽΈμ—†λ‹€λ©΄ ν›Œλ₯­ν•œ μ„ μˆ˜κ°€ λ˜κΈ°λŠ” μ–΄λ €μšΈ κ²ƒμž…λ‹ˆλ‹€. κ°œλ°œμžλ„ λ§ˆμ°¬κ°€μ§€λ‘œ, 아무리 λ‚΄κ°€ μ΅œμ‹  κΈ°λŠ₯을 μžλž‘ν•˜λŠ” 라이브러리λ₯Ό λŠ₯수λŠ₯λž€νžˆ 닀루며 νŠΈλ Œλ“œλ₯Ό 잘 따라가더라도, 근본적으둜 "λˆˆμ•žμ˜ 문제λ₯Ό λ…Όλ¦¬μ μœΌλ‘œ μ‚΄ν”Όκ³  기술적으둜 슀슀둜 ν•΄κ²°ν•΄λ‚΄λŠ” λŠ₯λ ₯"이 μ—†λ‹€λ©΄, 그것은 10뢄도 λͺ» λ›°κ³  νƒˆμ§„ν•΄λ²„λ¦¬λŠ” μΆ•κ΅¬μ„ μˆ˜μ™€ λ‹€λ₯Όλ°” 없을 κ²ƒμž…λ‹ˆλ‹€.

ν—ˆλ‚˜ λΆ€λ„λŸ½κ²Œλ„, μ΄λŠ” 처음 λ– μ˜¬λ¦° 생각이 μ•„λ‹ˆλΌ λΆ€νŠΈμΊ ν”„λ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ 항상 λ“€μ–΄μ™”λ˜ μ‘°μ–Έμž…λ‹ˆλ‹€. μ§€κΈˆκΉŒμ§€λŠ” 머리둜만 μ΄ν•΄ν–ˆκ³  ꡬ체적으둜 λŠκ»΄μ§„ 적이 μ—†μ—ˆλŠ”λ°, μ‹€μ œλ‘œ κ·Έ 상황을 κ²ͺκ³  λ‚˜μ„œμ•Ό μ‚¬λ¬΄μΉ˜κ²Œ κΉ¨λ‹«λŠ” 제 μžμ‹ μ„ 보며 λ§Žμ€ λ°˜μ„±κ³Ό 성찰도 ν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ˜ν•œ 문제λ₯Ό ν•΄κ²°ν•΄λ‚˜κ°μ— μžˆμ–΄ λ‹€λ₯Έ μž‘μ—…λ¬Όμ— μ§€λ‚˜μΉ˜κ²Œ μ˜μ‘΄ν•˜μ§€ 말고, κ·Έ μž‘μ—…λ¬Όλ“€μ΄ λ§Œλ“€μ–΄μ§„ κ³Όμ •μ΄λ‚˜ 사고방식을 톡해 배운 ν›„ 슀슀둜 μ μš©ν•΄λ³΄λŠ” μ‹œλ„λ₯Ό ν•„νžˆ λ¨Όμ € μˆ˜ν–‰ν•΄μ•Όκ² λ‹€κ³  λ‹€μ§ν•˜λŠ” 계기가 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μš°μ™•μ’Œμ™• λ°©ν™©ν•˜κ³  괜히 μ„ νƒν–ˆλ‹€λ©° μ΄ˆλ°˜μ—λŠ” ν›„νšŒλ„ λ§‰μ‹¬ν–ˆλ˜ ν”„λ‘œμ νŠΈμ΄μ§€λ§Œ, κ²°κ³Όμ μœΌλ‘œλŠ” λœ»κΉŠμ€ κ²½ν—˜λ“€μ΄ 정말 λ§Žμ•˜κ³ , μ§€λ‚œ 3μ£Όκ°„ 느꼈던 이 감정과 고민듀을 잘 μ •λˆν•˜μ—¬ 기본에 μΆ©μ‹€ν•œ κ°œλ°œμžκ°€ λ˜μ–΄μ•Όκ² λ‹€κ³  마음이 λ‹€μž‘μ•„μ§€λŠ” μ—¬μ •μ΄μ—ˆκΈ° λ•Œλ¬Έμ— κ°μ‚¬ν•œ 마음이 ν½λ‹ˆλ‹€. 비둝 완성도가 λ›°μ–΄λ‚˜μ§„ μ•Šμ§€λ§Œ κ·Έ κ³Όμ •μ—μ„œ λ§Žμ€ 배움과 κΉ¨λ‹¬μŒμ΄ μžˆμ—ˆλ˜, 참으둜 고마운 ν”„λ‘œμ νŠΈκ°€ λ˜μ—ˆλ‹€λŠ” μƒκ°μž…λ‹ˆλ‹€. 이λ₯Ό λ°œνŒμ‚Όμ•„ "μ§„μ§œ 개발자" κ°€ 되기 μœ„ν•΄ μ„±μž₯ν•΄ λ‚˜κ°€λ„λ‘ ν•΄μ•Όκ² μŠ΅λ‹ˆλ‹€. πŸ”₯


πŸ’» More Description

Libraries & tools used
  • React
  • React-router
  • Recoil
  • OpenCv
  • Styled-components
  • React-app-rewired
How to run it locally
  • μ•„λž˜μ˜ μˆœμ„œμ— 따라, ν”„λ‘œμ νŠΈλ₯Ό clone 받은 ν›„ ν”„λ‘œμ νŠΈ 디렉토리 λ‚΄μ—μ„œ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.

git clone <https://github.com/rktnsinger/layout-generator-client.git>

npm install

npm start

Author