Repository files navigation

πŸ‹ Lemonaid

Lemonaid

β˜€οΈ 기획배경

λͺΈμ— 이상 μ§•ν›„κ°€ μžˆμ„ 경우, 그에 λŒ€ν•œ μ§ˆλ³‘μ„ μ•ŒκΈ°κ°€ 쉽지 μ•ŠμŠ΅λ‹ˆλ‹€.

μ§ˆλ³‘μ„ μ•Œμ•„λ„ μ–΄λ–€ λ³‘μ›μ—μ„œ ν•΄λ‹Ή μ§ˆλ³‘μ„ μ§„λ£Œν•΄μ£ΌλŠ”μ§€ μ•ŒκΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

μ²˜λ°©λ°›μ€ 약에 λŒ€ν•œ 정보λ₯Ό 얻을 방법이 μ œν•œμ μž…λ‹ˆλ‹€.

κ·Έλž˜μ„œ 이λ₯Ό ν•΄κ²°ν•  Lemonaidλ₯Ό κΈ°νšν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

πŸ‘» μ„œλΉ„μŠ€ μ£Όμš”λ‚΄μš©

  • μ£Όμ†Œ 기반 μ£Όλ³€μ˜ μ˜λ£Œμ‹œμ„€ 쑰회(병원쒅λ₯˜, μ§„λ£Œκ³Όλͺ©, 응급싀 μ—¬λΆ€ λ“±) λ‹€μ–‘ν•œ ν˜•νƒœμ˜ μ˜λ£Œμ‹œμ„€ 정보 제곡
  • μ„ νƒν•œ 증상에 λŒ€ν•œ μ§ˆλ³‘ 쑰회
  • μ•½μ˜ μƒκΉ€μƒˆμ— λŒ€ν•œ ν•΄λ‹Ή μ•½μ˜ 정보 쑰회
  • ν˜„μž¬ μ½”λ‘œλ‚˜ ν™•μ§„μž 정보 쑰회

πŸ“£ 차별성

  • μ‚¬μš©μžμ˜ 증상에 λ”°λ₯Έ μ§ˆλ³‘ λͺ©λ‘μ„ μ œκ³΅ν•˜κ³ , μ§ˆλ³‘μ— 따라 μ§„λ£Œ κ°€λŠ₯ν•œ μ˜λ£Œμ‹œμ„€μ„ μ‘°νšŒν•  수 μžˆλ‹€.
  • 병원 규λͺ¨, μ§„λ£Œμ’…λͺ©μ— 따라 μ§„λ£Œ 쀑인 λ³‘μ›μ˜ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • μ½”λ‘œλ‚˜ κ΄€λ ¨ μ˜λ£ŒκΈ°κ΄€(μ„ λ³„μ§„λ£Œμ†Œ λ“±)의 정보λ₯Ό μœ„μΉ˜μ™€ ν•¨κ»˜ 제곡 κ°€λŠ₯ν•˜λ‹€.

🌿 κΈ°λŒ€νš¨κ³Ό

  • μ‚¬μš©μžμ˜ 건강과 μ§κ²°λ˜λŠ” 만큼, μ‹ μ†ν•˜κ³  μ •ν™•ν•œ 정보λ₯Ό 전달할 수 μžˆλ‹€.
  • 정보 전달 μ‹œ, ν•΄λ‹Ή μ˜λ£ŒκΈ°κ΄€μ˜ μœ„μΉ˜ 뿐 μ•„λ‹ˆλΌ μ§„λ£Œκ³Όλͺ© λ“± λ‹€μ–‘ν•œ μ •λ³΄μ œκ³΅ν•  수 μžˆλ‹€.
  • λͺΈμ˜ 이상 징후에 λ”°λ₯Έ μ§ˆλ³‘ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • 볡용 μ•½μ˜ 상세 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • μ½”λ‘œλ‚˜ κ΄€λ ¨ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.

🌡 μ‹œμ—° 및 μ‹œλ‚˜λ¦¬μ˜€

πŸŽ‡ Lemonaid μ„œλΉ„μŠ€ ν™”λ©΄

  • Lemonaid μ„œλΉ„μŠ€μ˜ 메인 ν™”λ©΄μž…λ‹ˆλ‹€.

Main

  • λ‹€μŒμ€ μ˜λ£ŒκΈ°κ΄€ 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. μ‚¬μš©μžμœ„μΉ˜ μ€‘μ‹¬μœΌλ‘œ 맡이 μžλ™μœΌλ‘œ μ΄λ™ν•˜κ³ , μ£Όλ³€μ˜ 병원을 κ²€μƒ‰ν•©λ‹ˆλ‹€. μ£Όμ†Œμž…λ ₯을 ν†΅ν•œ μœ„μΉ˜λ³€κ²½ κΈ°λŠ₯도 μ œκ³΅ν•©λ‹ˆλ‹€.

medical_1

  • 병원 μ’…λ₯˜, μ§„λ£Œ κ³Όλͺ©, 응급싀 μ—¬λΆ€λ₯Ό μ„ νƒν•˜μ—¬ ν•΄λ‹Ήν•˜λŠ” 병원을 κ²€μƒ‰ν•©λ‹ˆλ‹€. μ•½κ΅­ 선택 μ‹œ 약ꡭ을 κ²€μƒ‰ν•©λ‹ˆλ‹€.

medical_2

  • 병원 상세보기 μ„ νƒν•˜λ©΄ ν•΄λ‹Ή 병원 정보가 λ‚˜μ˜€κ³  지도 클릭 μ‹œ λ³‘μ›κΉŒμ§€ κΈΈμ°ΎκΈ°κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.

medical_3

  • λ‹€μŒμ€ μ˜μ•½ν’ˆ 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. μ‚¬μš©μžλ“€μ΄ κ²€μƒ‰ν•œ μ˜μ•½ν’ˆ TOP5λ¦¬μŠ€νŠΈκ°€ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

medicine_1

  • μ•½ν’ˆλͺ…μœΌλ‘œ 검색 μ‹œ ν•΄λ‹Ήν•˜λŠ” μ•½ν’ˆ λ¦¬μŠ€νŠΈκ°€ κ²€μƒ‰λ©λ‹ˆλ‹€. μ΄ˆκΈ°ν™” μ‹œ μ›λž˜ ν™”λ©΄μœΌλ‘œ λŒμ•„κ°‘λ‹ˆλ‹€.

medicine_2

  • λͺ¨μ–‘μœΌλ‘œ 검색 μ‹œ ν•΄λ‹Ήν•˜λŠ” μ•½ν’ˆ λ¦¬μŠ€νŠΈκ°€ κ²€μƒ‰λ©λ‹ˆλ‹€. μ•½ν’ˆ 선택 μ‹œ 상세정보 ν™”λ©΄μœΌλ‘œ λ°”λ€λ‹ˆλ‹€.

medicine_3

  • λ‹€μŒμ€ 증상 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. λΆ€μœ„ λ³„λ‘œ 증상이 λ°”λ€ŒλŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

disease_1

  • 증상은 μ΅œλŒ€ 6개 선택가λŠ₯ν•˜κ³  μ„ νƒν•œ 증상에 따라 κ²€μƒ‰λ˜λŠ” μ§ˆλ³‘κ²°κ³Όκ°€ λ°”λ€λ‹ˆλ‹€.

disease_2

  • 증상 선택 μ‹œ 상세정보 ν™”λ©΄μœΌλ‘œ λ°”λ€Œκ³ , 상세정보 ν™”λ©΄μ—μ„œ 지도 선택 μ‹œ μ˜λ£ŒκΈ°κ΄€ ν™”λ©΄μœΌλ‘œ μ „ν™˜λ©λ‹ˆλ‹€.

disease_3

  • λ‹€μŒμ€ μ½”λ‘œλ‚˜ 정보 μ‘°νšŒν™”λ©΄μž…λ‹ˆλ‹€. λ‚ μ§œ, λ‚˜μ΄, μ§€μ—­, 성별에 λŒ€ν•œ 정보λ₯Ό κ·Έλž˜ν”„λ‘œ λ³΄μ—¬μ€λ‹ˆλ‹€.

corona

κ°œλ°œν™˜κ²½

Frontend

  • IDE: VSCode
  • Node JS 16.13.x
  • Language: HTML5, Javascript, CSS3
  • Library: React 17.0.2, SCSS, TypeScript, Axios, Redux
  • Open API: Kakao Map API

Backend

  • IDE: IntelliJ 2021.3.1
  • Language: Java 1.8, Python 3.9
  • Framework: Spring Boot 2.4.5
  • Library: Spring Boot JPA, Spring Security, pandas

Data

  • MySQL 8.0.28
  • Hadoop 3.3.1
  • Sqoop 1.4.7

Server

  • Ubuntu 20.04 LTS
  • Jenkins 2.332.1
  • Nginx 1.18.0
  • Docker 20.10.13
  • Docker-compose 1.29.2

Other Tools

  • 회의둝 : Notion
  • μ½”λ“œ 관리: GitLab
  • 일정 관리: Jira
  • μ™€μ΄μ–΄ν”„λ ˆμž„: Figma
  • μ‹œν€€μŠ€ λ‹€μ΄μ–΄κ·Έλž¨: Mermaid
  • ERD μž‘μ„±: ERDCloud
  • 회의 : Webex, Mattermost, Discord

μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜

SystemArchitecture

ER Diagram

lemonaid_erd_220407

μ•ˆλ…•μ¦ˆ νŒ€

teampng

λ°•μŠΉμ›

νŒ€μž₯을 λ§‘μ•„ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λŠ” 것이 μ²˜μŒμ΄μ—¬μ„œ λ§Žμ€ 것이 λ‚―μ„€μ—ˆμŠ΅λ‹ˆλ‹€. 회의λ₯Ό μ§„ν–‰ν•˜λ©°, ν”„λ‘œμ νŠΈκ°€ λ‹€λ₯Έ 길둜 μ ‘μ–΄λ“€μ§€ μ•Šλ„λ‘ 길작이의 역할을 ν•˜κΈ°λ„ ν•˜κ³ , μˆ˜λ§Žμ€ μ˜κ²¬μ„ μ‘°μœ¨ν•˜κ³  더 λ‚˜μ€ μ˜κ²¬μ„ μ΄λŒμ–΄λ‚΄λŠ” 것이 μ‰½μ§€λ§Œμ€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ·Έλž˜λ„ 기간이 μ§€λ‚  수둝 νŒ€μ›λ“€κ³Ό μ˜μ‚¬μ†Œν†΅ν•˜λŠ” 방법을 κΉ¨λ‹«κ³ , μ„œλ‘œ 응원과 κ²©λ €ν•˜λŠ” λΆ„μœ„κΈ°λ₯Ό λ§Œλ“œλŠ” 것에 λ¬˜ν•œ 희열을 느끼며, ν•œμΈ΅ μ„±μž₯ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. 이λ₯Ό κ³„κΈ°λ‘œ λ‹€μŒμ˜ ν”„λ‘œμ νŠΈμ—μ„œλŠ” 더 λ‚˜μ€ νŒ€μž₯의 λͺ¨μŠ΅μ„ 보여쀄 수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.

빅데이터 ν”„λ‘œμ νŠΈμΈ 만큼 μˆ˜λ§Žμ€ 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  이λ₯Ό μ²˜λ¦¬ν•˜λŠ” 과정이 맀우 μ–΄λ ΅κ³  λ³΅μž‘ν–ˆμŠ΅λ‹ˆλ‹€. 빅데이터에 λ―ΈμΉ˜μ§„ λͺ»ν–ˆμ§€λ§Œ μˆ˜λ§Žμ€ 데이터λ₯Ό μ²˜λ¦¬ν•˜μ—¬ μš°λ¦¬μ—κ²Œ ν•„μš”ν•œ 데이터λ₯Ό μΆ”μΆœν•˜κ³  λΆ„μ‚°μ²˜λ¦¬ν•˜λŠ” 과정을 톡해 데이터 뢄야에 λ”μš± 관심을 κ°€μ§€κ²Œ 된 것 κ°™μŠ΅λ‹ˆλ‹€. μ•žμœΌλ‘œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•  λ•ŒλŠ” μŠ€νŒŒν¬μ™€ 같은 λ‹€λ₯Έ 빅데이터 λΌμ΄λΈŒλŸ¬λ¦¬λ„ ν•¨κ»˜ μ‚¬μš©ν•΄λ³΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ§€μˆ˜μ—°

ν•˜λ‘‘μ„ κ°„λ‹¨ν•œ Word Countμ—λ§Œ μ‚¬μš©ν•˜κ²Œ λ˜μ–΄μ„œ μ•„μ‰¬μš΄ 점은 μžˆμ—ˆμ§€λ§Œ λ§Žμ€ μ–‘μ˜ 데이터λ₯Ό κ°€μ§€κ³  ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ 데이터λ₯Ό μ–΄λ–»κ²Œ ν•˜λ©΄ μ’€ 더 λΉ λ₯΄κ³  보기 μ’‹κ²Œ μ œκ³΅ν•  수 μžˆμ„κΉŒμ— λŒ€ν•œ 생각을 ν•  수 있게 된 계기가 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 배포 과정에 λŒ€ν•΄ μ’€ 더 μ΅μˆ™ν•΄μ§ˆ 수 μžˆμ–΄ μ’‹μ•˜κ³ , νŒ€μ›λΆ„λ“€μ΄ 각각의 역할을 묡묡히 ν•΄λ‚˜μ£Όμ…”μ„œ 물흐λ₯΄λ“―이 μ§€λ‚˜κ°ˆ 수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. μž¬λ°Œμ—ˆμŠ΅λ‹ˆλ‹€!

이진곀

λΉ…λ°μ΄ν„°λΌλŠ” 주제λ₯Ό 처음 λ‹€λ€„λ³΄λŠ”μ§€λΌ λ‚œκ΄€μ΄ λ§Žμ•˜μ§€λ§Œ, 데이터 μˆ˜μ§‘ κ³Όμ •λΆ€ν„° μ „μ²˜λ¦¬, λΆ„μ‚°μ²˜λ¦¬λ₯Ό 거쳐 DB에 두고 ν”„λ‘œμ νŠΈμ— λ…Ήμ—¬λ‚΄κΈ°κΉŒμ§€ 일련의 과정을 배울 수 μžˆλŠ” 쒋은 κ²½ν—˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€. μŠ€ν”„λ§ λΆ€νŠΈλ‘œ λ°±μ—”λ“œλ₯Ό κ°œλ°œν•˜λŠ” 데에도 점점 λŠ₯μˆ™ν•΄μ§€λŠ” 것 κ°™κ³ , 이전 ν”„λ‘œμ νŠΈμ—μ„œ 해보고 μ‹Άμ—ˆμ§€λ§Œ ν•˜μ§€ λͺ»ν–ˆλ˜ 배포 과정도 직접 닀뀄볼 수 μžˆμ–΄μ„œ μ’‹μ•˜μŠ΅λ‹ˆλ‹€. λ“ λ“ ν•œ νŒ€μ›λ“€ 덕뢄에 ν›Œλ₯­ν•œ ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€μ–΄λ‚΄λŠ” 쒋은 κ²½ν—˜μ„ ν•  수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. λ‹€μŒ ν”„λ‘œμ νŠΈμ—λ„ μ—΄μ‹¬νžˆ μž„ν•˜μ—¬ 쒋은 결과물을 λ§Œλ“€μ–΄λ‚΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ΄μ’…ν˜„

빅데이터 λΆ„μ‚°μ΄λΌλŠ” λ„λ©”μΈμœΌλ‘œ 아이디어λ₯Ό λ„μΆœν•΄λ‚΄κΈ° νž˜λ“€μ—ˆλŠ”λ° μ‹€μƒν™œμ— 도움이 될 수 μžˆλŠ” 쒋은 아이디어λ₯Ό 찾은 것 κ°™μ•„ λΏŒλ“―ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μ†Œ λΆ€μ‘±ν•œ μ‹œκ°„μ΄μ—ˆμ§€λ§Œ νŒ€μ›λ“€κ³Όμ˜ ν˜‘μ—…μ„ 톡해 잘 λ§ˆλ¬΄λ¦¬ν•  수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. Reactλ₯Ό 2번째둜 μ‚¬μš©ν•΄λ΄€λŠ”λ° μ΄μ œλŠ” 많이 μ΅μˆ™ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. νŒ€μ›λ“€κ³Όμ˜ ν˜‘λ™μ΄ μ€‘μš”ν•˜λ‹€λŠ” 것을 λ‹€μ‹œ ν•œλ²ˆ 깨달을 수 μžˆμ—ˆλ˜ ν”„λ‘œμ νŠΈμ˜€λ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄μƒν˜„

μ£Όμ œμ„ μ •μ΄ λŠ¦μ–΄μ‘ŒμŒμ—λ„ νŒ€μ›λ“€ λͺ¨λ‘κ°€ μ—΄μ‹¬νžˆν•˜λŠ” λΆ„μœ„κΈ°μ—¬μ„œ μ΄ˆκΈ°μ— κΈ°νšν–ˆλ˜λŒ€λ‘œ 결과물을 μ™„μ„±ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν”Όλ“œλ°±μ„ μ£Όκ³  λ°›μœΌλ©΄μ„œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν–ˆκΈ° λ•Œλ¬Έμ— ν˜Όμžμ„  μƒκ°ν•˜μ§€ λͺ»ν–ˆλ˜ 뢀뢄듀을 찾을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈ μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ 쀑간쀑간에 API μˆ˜μ • μš”μ²­λ„ 자주 ν–ˆμ—ˆλŠ”λ° 빨리 μˆ˜μ •ν•΄μ€˜μ„œ κ³ λ§ˆμ› μŠ΅λ‹ˆλ‹€. λ¦¬μ•‘νŠΈμ™€ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ— λŒ€ν•΄ ν•œμΈ΅ 더 곡뢀할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ ν”„λ‘œμ νŠΈ μ§„ν–‰ν•˜λŠ”λ° 큰 도움이 될 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄μˆ˜ν™˜

빅데이터라고 ν•  μˆ˜μ€€μ˜ 데이터 양이 μ•„λ‹ˆμ—ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  ν•΄λ‹Ή 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  μ •μ œν•˜μ—¬ λΆ„μ‚°μ²˜λ¦¬ ν•˜λŠ” 것이 쉽지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 이 κ²½ν—˜μ„ ν†΅ν•΄μ„œ 빅데이터λ₯Ό λΆ„μ‚°μ²˜λ¦¬ν•˜λŠ” μž‘μ—…μ΄ μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•˜κ³  μ‚¬μš©μžμ˜ κ²½ν—˜μ„ ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ 맀우 μ£Όμš”ν•˜λ‹€λŠ” 것을 λŠλ‚„ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

React와 Typescript μ—­μ‹œ 처음 ν™œμš©ν•˜λ‹€λ³΄λ‹ˆ μ μ‘ν•˜λŠ”λ° μ‹œκ°„μ΄ κ±Έλ ΈμœΌλ‚˜ νŒ€μ›λ“€μ΄ 잘 도와쀀 덕뢄에 λΉ λ₯΄κ²Œ μ μ‘ν•΄μ„œ μž‘μ—…μ„ μ§„ν–‰ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ Typescriptλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” 라이브러리λ₯Ό ν™œμš©ν•˜λŠ” κ³Όμ •μ—μ„œ ν•΄κ²°ν•˜μ§€ λͺ»ν•˜κ³  μ‚¬μš©ν•˜μ§€ λͺ»ν•œ 뢀뢄이 λ°œμƒν–ˆλŠ”λ° 좔가적인 ν•™μŠ΅μ„ 톡해 λ‹€μŒ ν”„λ‘œμ νŠΈμ—μ„œ 보닀 완성도 높은 결과물을 얻을 수 μžˆλ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

About

πŸ‹κ±΄κ°• 의료 정보 제곡 ν”Œλž«νΌ

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

πŸ‹ Lemonaid

Lemonaid

β˜€οΈ 기획배경

λͺΈμ— 이상 μ§•ν›„κ°€ μžˆμ„ 경우, 그에 λŒ€ν•œ μ§ˆλ³‘μ„ μ•ŒκΈ°κ°€ 쉽지 μ•ŠμŠ΅λ‹ˆλ‹€.

μ§ˆλ³‘μ„ μ•Œμ•„λ„ μ–΄λ–€ λ³‘μ›μ—μ„œ ν•΄λ‹Ή μ§ˆλ³‘μ„ μ§„λ£Œν•΄μ£ΌλŠ”μ§€ μ•ŒκΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

μ²˜λ°©λ°›μ€ 약에 λŒ€ν•œ 정보λ₯Ό 얻을 방법이 μ œν•œμ μž…λ‹ˆλ‹€.

κ·Έλž˜μ„œ 이λ₯Ό ν•΄κ²°ν•  Lemonaidλ₯Ό κΈ°νšν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

πŸ‘» μ„œλΉ„μŠ€ μ£Όμš”λ‚΄μš©

  • μ£Όμ†Œ 기반 μ£Όλ³€μ˜ μ˜λ£Œμ‹œμ„€ 쑰회(병원쒅λ₯˜, μ§„λ£Œκ³Όλͺ©, 응급싀 μ—¬λΆ€ λ“±) λ‹€μ–‘ν•œ ν˜•νƒœμ˜ μ˜λ£Œμ‹œμ„€ 정보 제곡
  • μ„ νƒν•œ 증상에 λŒ€ν•œ μ§ˆλ³‘ 쑰회
  • μ•½μ˜ μƒκΉ€μƒˆμ— λŒ€ν•œ ν•΄λ‹Ή μ•½μ˜ 정보 쑰회
  • ν˜„μž¬ μ½”λ‘œλ‚˜ ν™•μ§„μž 정보 쑰회

πŸ“£ 차별성

  • μ‚¬μš©μžμ˜ 증상에 λ”°λ₯Έ μ§ˆλ³‘ λͺ©λ‘μ„ μ œκ³΅ν•˜κ³ , μ§ˆλ³‘μ— 따라 μ§„λ£Œ κ°€λŠ₯ν•œ μ˜λ£Œμ‹œμ„€μ„ μ‘°νšŒν•  수 μžˆλ‹€.
  • 병원 규λͺ¨, μ§„λ£Œμ’…λͺ©μ— 따라 μ§„λ£Œ 쀑인 λ³‘μ›μ˜ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • μ½”λ‘œλ‚˜ κ΄€λ ¨ μ˜λ£ŒκΈ°κ΄€(μ„ λ³„μ§„λ£Œμ†Œ λ“±)의 정보λ₯Ό μœ„μΉ˜μ™€ ν•¨κ»˜ 제곡 κ°€λŠ₯ν•˜λ‹€.

🌿 κΈ°λŒ€νš¨κ³Ό

  • μ‚¬μš©μžμ˜ 건강과 μ§κ²°λ˜λŠ” 만큼, μ‹ μ†ν•˜κ³  μ •ν™•ν•œ 정보λ₯Ό 전달할 수 μžˆλ‹€.
  • 정보 전달 μ‹œ, ν•΄λ‹Ή μ˜λ£ŒκΈ°κ΄€μ˜ μœ„μΉ˜ 뿐 μ•„λ‹ˆλΌ μ§„λ£Œκ³Όλͺ© λ“± λ‹€μ–‘ν•œ μ •λ³΄μ œκ³΅ν•  수 μžˆλ‹€.
  • λͺΈμ˜ 이상 징후에 λ”°λ₯Έ μ§ˆλ³‘ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • 볡용 μ•½μ˜ 상세 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • μ½”λ‘œλ‚˜ κ΄€λ ¨ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.

🌡 μ‹œμ—° 및 μ‹œλ‚˜λ¦¬μ˜€

πŸŽ‡ Lemonaid μ„œλΉ„μŠ€ ν™”λ©΄

  • Lemonaid μ„œλΉ„μŠ€μ˜ 메인 ν™”λ©΄μž…λ‹ˆλ‹€.

Main

  • λ‹€μŒμ€ μ˜λ£ŒκΈ°κ΄€ 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. μ‚¬μš©μžμœ„μΉ˜ μ€‘μ‹¬μœΌλ‘œ 맡이 μžλ™μœΌλ‘œ μ΄λ™ν•˜κ³ , μ£Όλ³€μ˜ 병원을 κ²€μƒ‰ν•©λ‹ˆλ‹€. μ£Όμ†Œμž…λ ₯을 ν†΅ν•œ μœ„μΉ˜λ³€κ²½ κΈ°λŠ₯도 μ œκ³΅ν•©λ‹ˆλ‹€.

medical_1

  • 병원 μ’…λ₯˜, μ§„λ£Œ κ³Όλͺ©, 응급싀 μ—¬λΆ€λ₯Ό μ„ νƒν•˜μ—¬ ν•΄λ‹Ήν•˜λŠ” 병원을 κ²€μƒ‰ν•©λ‹ˆλ‹€. μ•½κ΅­ 선택 μ‹œ 약ꡭ을 κ²€μƒ‰ν•©λ‹ˆλ‹€.

medical_2

  • 병원 상세보기 μ„ νƒν•˜λ©΄ ν•΄λ‹Ή 병원 정보가 λ‚˜μ˜€κ³  지도 클릭 μ‹œ λ³‘μ›κΉŒμ§€ κΈΈμ°ΎκΈ°κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.

medical_3

  • λ‹€μŒμ€ μ˜μ•½ν’ˆ 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. μ‚¬μš©μžλ“€μ΄ κ²€μƒ‰ν•œ μ˜μ•½ν’ˆ TOP5λ¦¬μŠ€νŠΈκ°€ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

medicine_1

  • μ•½ν’ˆλͺ…μœΌλ‘œ 검색 μ‹œ ν•΄λ‹Ήν•˜λŠ” μ•½ν’ˆ λ¦¬μŠ€νŠΈκ°€ κ²€μƒ‰λ©λ‹ˆλ‹€. μ΄ˆκΈ°ν™” μ‹œ μ›λž˜ ν™”λ©΄μœΌλ‘œ λŒμ•„κ°‘λ‹ˆλ‹€.

medicine_2

  • λͺ¨μ–‘μœΌλ‘œ 검색 μ‹œ ν•΄λ‹Ήν•˜λŠ” μ•½ν’ˆ λ¦¬μŠ€νŠΈκ°€ κ²€μƒ‰λ©λ‹ˆλ‹€. μ•½ν’ˆ 선택 μ‹œ 상세정보 ν™”λ©΄μœΌλ‘œ λ°”λ€λ‹ˆλ‹€.

medicine_3

  • λ‹€μŒμ€ 증상 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. λΆ€μœ„ λ³„λ‘œ 증상이 λ°”λ€ŒλŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

disease_1

  • 증상은 μ΅œλŒ€ 6개 선택가λŠ₯ν•˜κ³  μ„ νƒν•œ 증상에 따라 κ²€μƒ‰λ˜λŠ” μ§ˆλ³‘κ²°κ³Όκ°€ λ°”λ€λ‹ˆλ‹€.

disease_2

  • 증상 선택 μ‹œ 상세정보 ν™”λ©΄μœΌλ‘œ λ°”λ€Œκ³ , 상세정보 ν™”λ©΄μ—μ„œ 지도 선택 μ‹œ μ˜λ£ŒκΈ°κ΄€ ν™”λ©΄μœΌλ‘œ μ „ν™˜λ©λ‹ˆλ‹€.

disease_3

  • λ‹€μŒμ€ μ½”λ‘œλ‚˜ 정보 μ‘°νšŒν™”λ©΄μž…λ‹ˆλ‹€. λ‚ μ§œ, λ‚˜μ΄, μ§€μ—­, 성별에 λŒ€ν•œ 정보λ₯Ό κ·Έλž˜ν”„λ‘œ λ³΄μ—¬μ€λ‹ˆλ‹€.

corona

κ°œλ°œν™˜κ²½

Frontend

  • IDE: VSCode
  • Node JS 16.13.x
  • Language: HTML5, Javascript, CSS3
  • Library: React 17.0.2, SCSS, TypeScript, Axios, Redux
  • Open API: Kakao Map API

Backend

  • IDE: IntelliJ 2021.3.1
  • Language: Java 1.8, Python 3.9
  • Framework: Spring Boot 2.4.5
  • Library: Spring Boot JPA, Spring Security, pandas

Data

  • MySQL 8.0.28
  • Hadoop 3.3.1
  • Sqoop 1.4.7

Server

  • Ubuntu 20.04 LTS
  • Jenkins 2.332.1
  • Nginx 1.18.0
  • Docker 20.10.13
  • Docker-compose 1.29.2

Other Tools

  • 회의둝 : Notion
  • μ½”λ“œ 관리: GitLab
  • 일정 관리: Jira
  • μ™€μ΄μ–΄ν”„λ ˆμž„: Figma
  • μ‹œν€€μŠ€ λ‹€μ΄μ–΄κ·Έλž¨: Mermaid
  • ERD μž‘μ„±: ERDCloud
  • 회의 : Webex, Mattermost, Discord

μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜

SystemArchitecture

ER Diagram

lemonaid_erd_220407

μ•ˆλ…•μ¦ˆ νŒ€

teampng

λ°•μŠΉμ›

νŒ€μž₯을 λ§‘μ•„ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λŠ” 것이 μ²˜μŒμ΄μ—¬μ„œ λ§Žμ€ 것이 λ‚―μ„€μ—ˆμŠ΅λ‹ˆλ‹€. 회의λ₯Ό μ§„ν–‰ν•˜λ©°, ν”„λ‘œμ νŠΈκ°€ λ‹€λ₯Έ 길둜 μ ‘μ–΄λ“€μ§€ μ•Šλ„λ‘ 길작이의 역할을 ν•˜κΈ°λ„ ν•˜κ³ , μˆ˜λ§Žμ€ μ˜κ²¬μ„ μ‘°μœ¨ν•˜κ³  더 λ‚˜μ€ μ˜κ²¬μ„ μ΄λŒμ–΄λ‚΄λŠ” 것이 μ‰½μ§€λ§Œμ€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ·Έλž˜λ„ 기간이 μ§€λ‚  수둝 νŒ€μ›λ“€κ³Ό μ˜μ‚¬μ†Œν†΅ν•˜λŠ” 방법을 κΉ¨λ‹«κ³ , μ„œλ‘œ 응원과 κ²©λ €ν•˜λŠ” λΆ„μœ„κΈ°λ₯Ό λ§Œλ“œλŠ” 것에 λ¬˜ν•œ 희열을 느끼며, ν•œμΈ΅ μ„±μž₯ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. 이λ₯Ό κ³„κΈ°λ‘œ λ‹€μŒμ˜ ν”„λ‘œμ νŠΈμ—μ„œλŠ” 더 λ‚˜μ€ νŒ€μž₯의 λͺ¨μŠ΅μ„ 보여쀄 수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.

빅데이터 ν”„λ‘œμ νŠΈμΈ 만큼 μˆ˜λ§Žμ€ 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  이λ₯Ό μ²˜λ¦¬ν•˜λŠ” 과정이 맀우 μ–΄λ ΅κ³  λ³΅μž‘ν–ˆμŠ΅λ‹ˆλ‹€. 빅데이터에 λ―ΈμΉ˜μ§„ λͺ»ν–ˆμ§€λ§Œ μˆ˜λ§Žμ€ 데이터λ₯Ό μ²˜λ¦¬ν•˜μ—¬ μš°λ¦¬μ—κ²Œ ν•„μš”ν•œ 데이터λ₯Ό μΆ”μΆœν•˜κ³  λΆ„μ‚°μ²˜λ¦¬ν•˜λŠ” 과정을 톡해 데이터 뢄야에 λ”μš± 관심을 κ°€μ§€κ²Œ 된 것 κ°™μŠ΅λ‹ˆλ‹€. μ•žμœΌλ‘œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•  λ•ŒλŠ” μŠ€νŒŒν¬μ™€ 같은 λ‹€λ₯Έ 빅데이터 λΌμ΄λΈŒλŸ¬λ¦¬λ„ ν•¨κ»˜ μ‚¬μš©ν•΄λ³΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ§€μˆ˜μ—°

ν•˜λ‘‘μ„ κ°„λ‹¨ν•œ Word Countμ—λ§Œ μ‚¬μš©ν•˜κ²Œ λ˜μ–΄μ„œ μ•„μ‰¬μš΄ 점은 μžˆμ—ˆμ§€λ§Œ λ§Žμ€ μ–‘μ˜ 데이터λ₯Ό κ°€μ§€κ³  ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ 데이터λ₯Ό μ–΄λ–»κ²Œ ν•˜λ©΄ μ’€ 더 λΉ λ₯΄κ³  보기 μ’‹κ²Œ μ œκ³΅ν•  수 μžˆμ„κΉŒμ— λŒ€ν•œ 생각을 ν•  수 있게 된 계기가 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 배포 과정에 λŒ€ν•΄ μ’€ 더 μ΅μˆ™ν•΄μ§ˆ 수 μžˆμ–΄ μ’‹μ•˜κ³ , νŒ€μ›λΆ„λ“€μ΄ 각각의 역할을 묡묡히 ν•΄λ‚˜μ£Όμ…”μ„œ 물흐λ₯΄λ“―이 μ§€λ‚˜κ°ˆ 수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. μž¬λ°Œμ—ˆμŠ΅λ‹ˆλ‹€!

이진곀

λΉ…λ°μ΄ν„°λΌλŠ” 주제λ₯Ό 처음 λ‹€λ€„λ³΄λŠ”μ§€λΌ λ‚œκ΄€μ΄ λ§Žμ•˜μ§€λ§Œ, 데이터 μˆ˜μ§‘ κ³Όμ •λΆ€ν„° μ „μ²˜λ¦¬, λΆ„μ‚°μ²˜λ¦¬λ₯Ό 거쳐 DB에 두고 ν”„λ‘œμ νŠΈμ— λ…Ήμ—¬λ‚΄κΈ°κΉŒμ§€ 일련의 과정을 배울 수 μžˆλŠ” 쒋은 κ²½ν—˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€. μŠ€ν”„λ§ λΆ€νŠΈλ‘œ λ°±μ—”λ“œλ₯Ό κ°œλ°œν•˜λŠ” 데에도 점점 λŠ₯μˆ™ν•΄μ§€λŠ” 것 κ°™κ³ , 이전 ν”„λ‘œμ νŠΈμ—μ„œ 해보고 μ‹Άμ—ˆμ§€λ§Œ ν•˜μ§€ λͺ»ν–ˆλ˜ 배포 과정도 직접 닀뀄볼 수 μžˆμ–΄μ„œ μ’‹μ•˜μŠ΅λ‹ˆλ‹€. λ“ λ“ ν•œ νŒ€μ›λ“€ 덕뢄에 ν›Œλ₯­ν•œ ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€μ–΄λ‚΄λŠ” 쒋은 κ²½ν—˜μ„ ν•  수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. λ‹€μŒ ν”„λ‘œμ νŠΈμ—λ„ μ—΄μ‹¬νžˆ μž„ν•˜μ—¬ 쒋은 결과물을 λ§Œλ“€μ–΄λ‚΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ΄μ’…ν˜„

빅데이터 λΆ„μ‚°μ΄λΌλŠ” λ„λ©”μΈμœΌλ‘œ 아이디어λ₯Ό λ„μΆœν•΄λ‚΄κΈ° νž˜λ“€μ—ˆλŠ”λ° μ‹€μƒν™œμ— 도움이 될 수 μžˆλŠ” 쒋은 아이디어λ₯Ό 찾은 것 κ°™μ•„ λΏŒλ“―ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μ†Œ λΆ€μ‘±ν•œ μ‹œκ°„μ΄μ—ˆμ§€λ§Œ νŒ€μ›λ“€κ³Όμ˜ ν˜‘μ—…μ„ 톡해 잘 λ§ˆλ¬΄λ¦¬ν•  수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. Reactλ₯Ό 2번째둜 μ‚¬μš©ν•΄λ΄€λŠ”λ° μ΄μ œλŠ” 많이 μ΅μˆ™ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. νŒ€μ›λ“€κ³Όμ˜ ν˜‘λ™μ΄ μ€‘μš”ν•˜λ‹€λŠ” 것을 λ‹€μ‹œ ν•œλ²ˆ 깨달을 수 μžˆμ—ˆλ˜ ν”„λ‘œμ νŠΈμ˜€λ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄μƒν˜„

μ£Όμ œμ„ μ •μ΄ λŠ¦μ–΄μ‘ŒμŒμ—λ„ νŒ€μ›λ“€ λͺ¨λ‘κ°€ μ—΄μ‹¬νžˆν•˜λŠ” λΆ„μœ„κΈ°μ—¬μ„œ μ΄ˆκΈ°μ— κΈ°νšν–ˆλ˜λŒ€λ‘œ 결과물을 μ™„μ„±ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν”Όλ“œλ°±μ„ μ£Όκ³  λ°›μœΌλ©΄μ„œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν–ˆκΈ° λ•Œλ¬Έμ— ν˜Όμžμ„  μƒκ°ν•˜μ§€ λͺ»ν–ˆλ˜ 뢀뢄듀을 찾을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈ μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ 쀑간쀑간에 API μˆ˜μ • μš”μ²­λ„ 자주 ν–ˆμ—ˆλŠ”λ° 빨리 μˆ˜μ •ν•΄μ€˜μ„œ κ³ λ§ˆμ› μŠ΅λ‹ˆλ‹€. λ¦¬μ•‘νŠΈμ™€ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ— λŒ€ν•΄ ν•œμΈ΅ 더 곡뢀할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ ν”„λ‘œμ νŠΈ μ§„ν–‰ν•˜λŠ”λ° 큰 도움이 될 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄μˆ˜ν™˜

빅데이터라고 ν•  μˆ˜μ€€μ˜ 데이터 양이 μ•„λ‹ˆμ—ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  ν•΄λ‹Ή 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  μ •μ œν•˜μ—¬ λΆ„μ‚°μ²˜λ¦¬ ν•˜λŠ” 것이 쉽지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 이 κ²½ν—˜μ„ ν†΅ν•΄μ„œ 빅데이터λ₯Ό λΆ„μ‚°μ²˜λ¦¬ν•˜λŠ” μž‘μ—…μ΄ μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•˜κ³  μ‚¬μš©μžμ˜ κ²½ν—˜μ„ ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ 맀우 μ£Όμš”ν•˜λ‹€λŠ” 것을 λŠλ‚„ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

React와 Typescript μ—­μ‹œ 처음 ν™œμš©ν•˜λ‹€λ³΄λ‹ˆ μ μ‘ν•˜λŠ”λ° μ‹œκ°„μ΄ κ±Έλ ΈμœΌλ‚˜ νŒ€μ›λ“€μ΄ 잘 도와쀀 덕뢄에 λΉ λ₯΄κ²Œ μ μ‘ν•΄μ„œ μž‘μ—…μ„ μ§„ν–‰ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ Typescriptλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” 라이브러리λ₯Ό ν™œμš©ν•˜λŠ” κ³Όμ •μ—μ„œ ν•΄κ²°ν•˜μ§€ λͺ»ν•˜κ³  μ‚¬μš©ν•˜μ§€ λͺ»ν•œ 뢀뢄이 λ°œμƒν–ˆλŠ”λ° 좔가적인 ν•™μŠ΅μ„ 톡해 λ‹€μŒ ν”„λ‘œμ νŠΈμ—μ„œ 보닀 완성도 높은 결과물을 얻을 수 μžˆλ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

About

πŸ‹κ±΄κ°• 의료 정보 제곡 ν”Œλž«νΌ

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

πŸ‹ Lemonaid

Lemonaid

β˜€οΈ 기획배경

λͺΈμ— 이상 μ§•ν›„κ°€ μžˆμ„ 경우, 그에 λŒ€ν•œ μ§ˆλ³‘μ„ μ•ŒκΈ°κ°€ 쉽지 μ•ŠμŠ΅λ‹ˆλ‹€.

μ§ˆλ³‘μ„ μ•Œμ•„λ„ μ–΄λ–€ λ³‘μ›μ—μ„œ ν•΄λ‹Ή μ§ˆλ³‘μ„ μ§„λ£Œν•΄μ£ΌλŠ”μ§€ μ•ŒκΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

μ²˜λ°©λ°›μ€ 약에 λŒ€ν•œ 정보λ₯Ό 얻을 방법이 μ œν•œμ μž…λ‹ˆλ‹€.

κ·Έλž˜μ„œ 이λ₯Ό ν•΄κ²°ν•  Lemonaidλ₯Ό κΈ°νšν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

πŸ‘» μ„œλΉ„μŠ€ μ£Όμš”λ‚΄μš©

  • μ£Όμ†Œ 기반 μ£Όλ³€μ˜ μ˜λ£Œμ‹œμ„€ 쑰회(병원쒅λ₯˜, μ§„λ£Œκ³Όλͺ©, 응급싀 μ—¬λΆ€ λ“±) λ‹€μ–‘ν•œ ν˜•νƒœμ˜ μ˜λ£Œμ‹œμ„€ 정보 제곡
  • μ„ νƒν•œ 증상에 λŒ€ν•œ μ§ˆλ³‘ 쑰회
  • μ•½μ˜ μƒκΉ€μƒˆμ— λŒ€ν•œ ν•΄λ‹Ή μ•½μ˜ 정보 쑰회
  • ν˜„μž¬ μ½”λ‘œλ‚˜ ν™•μ§„μž 정보 쑰회

πŸ“£ 차별성

  • μ‚¬μš©μžμ˜ 증상에 λ”°λ₯Έ μ§ˆλ³‘ λͺ©λ‘μ„ μ œκ³΅ν•˜κ³ , μ§ˆλ³‘μ— 따라 μ§„λ£Œ κ°€λŠ₯ν•œ μ˜λ£Œμ‹œμ„€μ„ μ‘°νšŒν•  수 μžˆλ‹€.
  • 병원 규λͺ¨, μ§„λ£Œμ’…λͺ©μ— 따라 μ§„λ£Œ 쀑인 λ³‘μ›μ˜ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • μ½”λ‘œλ‚˜ κ΄€λ ¨ μ˜λ£ŒκΈ°κ΄€(μ„ λ³„μ§„λ£Œμ†Œ λ“±)의 정보λ₯Ό μœ„μΉ˜μ™€ ν•¨κ»˜ 제곡 κ°€λŠ₯ν•˜λ‹€.

🌿 κΈ°λŒ€νš¨κ³Ό

  • μ‚¬μš©μžμ˜ 건강과 μ§κ²°λ˜λŠ” 만큼, μ‹ μ†ν•˜κ³  μ •ν™•ν•œ 정보λ₯Ό 전달할 수 μžˆλ‹€.
  • 정보 전달 μ‹œ, ν•΄λ‹Ή μ˜λ£ŒκΈ°κ΄€μ˜ μœ„μΉ˜ 뿐 μ•„λ‹ˆλΌ μ§„λ£Œκ³Όλͺ© λ“± λ‹€μ–‘ν•œ μ •λ³΄μ œκ³΅ν•  수 μžˆλ‹€.
  • λͺΈμ˜ 이상 징후에 λ”°λ₯Έ μ§ˆλ³‘ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • 볡용 μ•½μ˜ 상세 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • μ½”λ‘œλ‚˜ κ΄€λ ¨ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.

🌡 μ‹œμ—° 및 μ‹œλ‚˜λ¦¬μ˜€

πŸŽ‡ Lemonaid μ„œλΉ„μŠ€ ν™”λ©΄

  • Lemonaid μ„œλΉ„μŠ€μ˜ 메인 ν™”λ©΄μž…λ‹ˆλ‹€.

Main

  • λ‹€μŒμ€ μ˜λ£ŒκΈ°κ΄€ 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. μ‚¬μš©μžμœ„μΉ˜ μ€‘μ‹¬μœΌλ‘œ 맡이 μžλ™μœΌλ‘œ μ΄λ™ν•˜κ³ , μ£Όλ³€μ˜ 병원을 κ²€μƒ‰ν•©λ‹ˆλ‹€. μ£Όμ†Œμž…λ ₯을 ν†΅ν•œ μœ„μΉ˜λ³€κ²½ κΈ°λŠ₯도 μ œκ³΅ν•©λ‹ˆλ‹€.

medical_1

  • 병원 μ’…λ₯˜, μ§„λ£Œ κ³Όλͺ©, 응급싀 μ—¬λΆ€λ₯Ό μ„ νƒν•˜μ—¬ ν•΄λ‹Ήν•˜λŠ” 병원을 κ²€μƒ‰ν•©λ‹ˆλ‹€. μ•½κ΅­ 선택 μ‹œ 약ꡭ을 κ²€μƒ‰ν•©λ‹ˆλ‹€.

medical_2

  • 병원 상세보기 μ„ νƒν•˜λ©΄ ν•΄λ‹Ή 병원 정보가 λ‚˜μ˜€κ³  지도 클릭 μ‹œ λ³‘μ›κΉŒμ§€ κΈΈμ°ΎκΈ°κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.

medical_3

  • λ‹€μŒμ€ μ˜μ•½ν’ˆ 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. μ‚¬μš©μžλ“€μ΄ κ²€μƒ‰ν•œ μ˜μ•½ν’ˆ TOP5λ¦¬μŠ€νŠΈκ°€ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

medicine_1

  • μ•½ν’ˆλͺ…μœΌλ‘œ 검색 μ‹œ ν•΄λ‹Ήν•˜λŠ” μ•½ν’ˆ λ¦¬μŠ€νŠΈκ°€ κ²€μƒ‰λ©λ‹ˆλ‹€. μ΄ˆκΈ°ν™” μ‹œ μ›λž˜ ν™”λ©΄μœΌλ‘œ λŒμ•„κ°‘λ‹ˆλ‹€.

medicine_2

  • λͺ¨μ–‘μœΌλ‘œ 검색 μ‹œ ν•΄λ‹Ήν•˜λŠ” μ•½ν’ˆ λ¦¬μŠ€νŠΈκ°€ κ²€μƒ‰λ©λ‹ˆλ‹€. μ•½ν’ˆ 선택 μ‹œ 상세정보 ν™”λ©΄μœΌλ‘œ λ°”λ€λ‹ˆλ‹€.

medicine_3

  • λ‹€μŒμ€ 증상 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. λΆ€μœ„ λ³„λ‘œ 증상이 λ°”λ€ŒλŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

disease_1

  • 증상은 μ΅œλŒ€ 6개 선택가λŠ₯ν•˜κ³  μ„ νƒν•œ 증상에 따라 κ²€μƒ‰λ˜λŠ” μ§ˆλ³‘κ²°κ³Όκ°€ λ°”λ€λ‹ˆλ‹€.

disease_2

  • 증상 선택 μ‹œ 상세정보 ν™”λ©΄μœΌλ‘œ λ°”λ€Œκ³ , 상세정보 ν™”λ©΄μ—μ„œ 지도 선택 μ‹œ μ˜λ£ŒκΈ°κ΄€ ν™”λ©΄μœΌλ‘œ μ „ν™˜λ©λ‹ˆλ‹€.

disease_3

  • λ‹€μŒμ€ μ½”λ‘œλ‚˜ 정보 μ‘°νšŒν™”λ©΄μž…λ‹ˆλ‹€. λ‚ μ§œ, λ‚˜μ΄, μ§€μ—­, 성별에 λŒ€ν•œ 정보λ₯Ό κ·Έλž˜ν”„λ‘œ λ³΄μ—¬μ€λ‹ˆλ‹€.

corona

κ°œλ°œν™˜κ²½

Frontend

  • IDE: VSCode
  • Node JS 16.13.x
  • Language: HTML5, Javascript, CSS3
  • Library: React 17.0.2, SCSS, TypeScript, Axios, Redux
  • Open API: Kakao Map API

Backend

  • IDE: IntelliJ 2021.3.1
  • Language: Java 1.8, Python 3.9
  • Framework: Spring Boot 2.4.5
  • Library: Spring Boot JPA, Spring Security, pandas

Data

  • MySQL 8.0.28
  • Hadoop 3.3.1
  • Sqoop 1.4.7

Server

  • Ubuntu 20.04 LTS
  • Jenkins 2.332.1
  • Nginx 1.18.0
  • Docker 20.10.13
  • Docker-compose 1.29.2

Other Tools

  • 회의둝 : Notion
  • μ½”λ“œ 관리: GitLab
  • 일정 관리: Jira
  • μ™€μ΄μ–΄ν”„λ ˆμž„: Figma
  • μ‹œν€€μŠ€ λ‹€μ΄μ–΄κ·Έλž¨: Mermaid
  • ERD μž‘μ„±: ERDCloud
  • 회의 : Webex, Mattermost, Discord

μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜

SystemArchitecture

ER Diagram

lemonaid_erd_220407

μ•ˆλ…•μ¦ˆ νŒ€

teampng

λ°•μŠΉμ›

νŒ€μž₯을 λ§‘μ•„ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λŠ” 것이 μ²˜μŒμ΄μ—¬μ„œ λ§Žμ€ 것이 λ‚―μ„€μ—ˆμŠ΅λ‹ˆλ‹€. 회의λ₯Ό μ§„ν–‰ν•˜λ©°, ν”„λ‘œμ νŠΈκ°€ λ‹€λ₯Έ 길둜 μ ‘μ–΄λ“€μ§€ μ•Šλ„λ‘ 길작이의 역할을 ν•˜κΈ°λ„ ν•˜κ³ , μˆ˜λ§Žμ€ μ˜κ²¬μ„ μ‘°μœ¨ν•˜κ³  더 λ‚˜μ€ μ˜κ²¬μ„ μ΄λŒμ–΄λ‚΄λŠ” 것이 μ‰½μ§€λ§Œμ€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ·Έλž˜λ„ 기간이 μ§€λ‚  수둝 νŒ€μ›λ“€κ³Ό μ˜μ‚¬μ†Œν†΅ν•˜λŠ” 방법을 κΉ¨λ‹«κ³ , μ„œλ‘œ 응원과 κ²©λ €ν•˜λŠ” λΆ„μœ„κΈ°λ₯Ό λ§Œλ“œλŠ” 것에 λ¬˜ν•œ 희열을 느끼며, ν•œμΈ΅ μ„±μž₯ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. 이λ₯Ό κ³„κΈ°λ‘œ λ‹€μŒμ˜ ν”„λ‘œμ νŠΈμ—μ„œλŠ” 더 λ‚˜μ€ νŒ€μž₯의 λͺ¨μŠ΅μ„ 보여쀄 수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.

빅데이터 ν”„λ‘œμ νŠΈμΈ 만큼 μˆ˜λ§Žμ€ 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  이λ₯Ό μ²˜λ¦¬ν•˜λŠ” 과정이 맀우 μ–΄λ ΅κ³  λ³΅μž‘ν–ˆμŠ΅λ‹ˆλ‹€. 빅데이터에 λ―ΈμΉ˜μ§„ λͺ»ν–ˆμ§€λ§Œ μˆ˜λ§Žμ€ 데이터λ₯Ό μ²˜λ¦¬ν•˜μ—¬ μš°λ¦¬μ—κ²Œ ν•„μš”ν•œ 데이터λ₯Ό μΆ”μΆœν•˜κ³  λΆ„μ‚°μ²˜λ¦¬ν•˜λŠ” 과정을 톡해 데이터 뢄야에 λ”μš± 관심을 κ°€μ§€κ²Œ 된 것 κ°™μŠ΅λ‹ˆλ‹€. μ•žμœΌλ‘œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•  λ•ŒλŠ” μŠ€νŒŒν¬μ™€ 같은 λ‹€λ₯Έ 빅데이터 λΌμ΄λΈŒλŸ¬λ¦¬λ„ ν•¨κ»˜ μ‚¬μš©ν•΄λ³΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ§€μˆ˜μ—°

ν•˜λ‘‘μ„ κ°„λ‹¨ν•œ Word Countμ—λ§Œ μ‚¬μš©ν•˜κ²Œ λ˜μ–΄μ„œ μ•„μ‰¬μš΄ 점은 μžˆμ—ˆμ§€λ§Œ λ§Žμ€ μ–‘μ˜ 데이터λ₯Ό κ°€μ§€κ³  ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ 데이터λ₯Ό μ–΄λ–»κ²Œ ν•˜λ©΄ μ’€ 더 λΉ λ₯΄κ³  보기 μ’‹κ²Œ μ œκ³΅ν•  수 μžˆμ„κΉŒμ— λŒ€ν•œ 생각을 ν•  수 있게 된 계기가 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 배포 과정에 λŒ€ν•΄ μ’€ 더 μ΅μˆ™ν•΄μ§ˆ 수 μžˆμ–΄ μ’‹μ•˜κ³ , νŒ€μ›λΆ„λ“€μ΄ 각각의 역할을 묡묡히 ν•΄λ‚˜μ£Όμ…”μ„œ 물흐λ₯΄λ“―이 μ§€λ‚˜κ°ˆ 수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. μž¬λ°Œμ—ˆμŠ΅λ‹ˆλ‹€!

이진곀

λΉ…λ°μ΄ν„°λΌλŠ” 주제λ₯Ό 처음 λ‹€λ€„λ³΄λŠ”μ§€λΌ λ‚œκ΄€μ΄ λ§Žμ•˜μ§€λ§Œ, 데이터 μˆ˜μ§‘ κ³Όμ •λΆ€ν„° μ „μ²˜λ¦¬, λΆ„μ‚°μ²˜λ¦¬λ₯Ό 거쳐 DB에 두고 ν”„λ‘œμ νŠΈμ— λ…Ήμ—¬λ‚΄κΈ°κΉŒμ§€ 일련의 과정을 배울 수 μžˆλŠ” 쒋은 κ²½ν—˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€. μŠ€ν”„λ§ λΆ€νŠΈλ‘œ λ°±μ—”λ“œλ₯Ό κ°œλ°œν•˜λŠ” 데에도 점점 λŠ₯μˆ™ν•΄μ§€λŠ” 것 κ°™κ³ , 이전 ν”„λ‘œμ νŠΈμ—μ„œ 해보고 μ‹Άμ—ˆμ§€λ§Œ ν•˜μ§€ λͺ»ν–ˆλ˜ 배포 과정도 직접 닀뀄볼 수 μžˆμ–΄μ„œ μ’‹μ•˜μŠ΅λ‹ˆλ‹€. λ“ λ“ ν•œ νŒ€μ›λ“€ 덕뢄에 ν›Œλ₯­ν•œ ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€μ–΄λ‚΄λŠ” 쒋은 κ²½ν—˜μ„ ν•  수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. λ‹€μŒ ν”„λ‘œμ νŠΈμ—λ„ μ—΄μ‹¬νžˆ μž„ν•˜μ—¬ 쒋은 결과물을 λ§Œλ“€μ–΄λ‚΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ΄μ’…ν˜„

빅데이터 λΆ„μ‚°μ΄λΌλŠ” λ„λ©”μΈμœΌλ‘œ 아이디어λ₯Ό λ„μΆœν•΄λ‚΄κΈ° νž˜λ“€μ—ˆλŠ”λ° μ‹€μƒν™œμ— 도움이 될 수 μžˆλŠ” 쒋은 아이디어λ₯Ό 찾은 것 κ°™μ•„ λΏŒλ“―ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μ†Œ λΆ€μ‘±ν•œ μ‹œκ°„μ΄μ—ˆμ§€λ§Œ νŒ€μ›λ“€κ³Όμ˜ ν˜‘μ—…μ„ 톡해 잘 λ§ˆλ¬΄λ¦¬ν•  수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. Reactλ₯Ό 2번째둜 μ‚¬μš©ν•΄λ΄€λŠ”λ° μ΄μ œλŠ” 많이 μ΅μˆ™ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. νŒ€μ›λ“€κ³Όμ˜ ν˜‘λ™μ΄ μ€‘μš”ν•˜λ‹€λŠ” 것을 λ‹€μ‹œ ν•œλ²ˆ 깨달을 수 μžˆμ—ˆλ˜ ν”„λ‘œμ νŠΈμ˜€λ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄μƒν˜„

μ£Όμ œμ„ μ •μ΄ λŠ¦μ–΄μ‘ŒμŒμ—λ„ νŒ€μ›λ“€ λͺ¨λ‘κ°€ μ—΄μ‹¬νžˆν•˜λŠ” λΆ„μœ„κΈ°μ—¬μ„œ μ΄ˆκΈ°μ— κΈ°νšν–ˆλ˜λŒ€λ‘œ 결과물을 μ™„μ„±ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν”Όλ“œλ°±μ„ μ£Όκ³  λ°›μœΌλ©΄μ„œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν–ˆκΈ° λ•Œλ¬Έμ— ν˜Όμžμ„  μƒκ°ν•˜μ§€ λͺ»ν–ˆλ˜ 뢀뢄듀을 찾을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈ μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ 쀑간쀑간에 API μˆ˜μ • μš”μ²­λ„ 자주 ν–ˆμ—ˆλŠ”λ° 빨리 μˆ˜μ •ν•΄μ€˜μ„œ κ³ λ§ˆμ› μŠ΅λ‹ˆλ‹€. λ¦¬μ•‘νŠΈμ™€ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ— λŒ€ν•΄ ν•œμΈ΅ 더 곡뢀할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ ν”„λ‘œμ νŠΈ μ§„ν–‰ν•˜λŠ”λ° 큰 도움이 될 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄μˆ˜ν™˜

빅데이터라고 ν•  μˆ˜μ€€μ˜ 데이터 양이 μ•„λ‹ˆμ—ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  ν•΄λ‹Ή 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  μ •μ œν•˜μ—¬ λΆ„μ‚°μ²˜λ¦¬ ν•˜λŠ” 것이 쉽지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 이 κ²½ν—˜μ„ ν†΅ν•΄μ„œ 빅데이터λ₯Ό λΆ„μ‚°μ²˜λ¦¬ν•˜λŠ” μž‘μ—…μ΄ μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•˜κ³  μ‚¬μš©μžμ˜ κ²½ν—˜μ„ ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ 맀우 μ£Όμš”ν•˜λ‹€λŠ” 것을 λŠλ‚„ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

React와 Typescript μ—­μ‹œ 처음 ν™œμš©ν•˜λ‹€λ³΄λ‹ˆ μ μ‘ν•˜λŠ”λ° μ‹œκ°„μ΄ κ±Έλ ΈμœΌλ‚˜ νŒ€μ›λ“€μ΄ 잘 도와쀀 덕뢄에 λΉ λ₯΄κ²Œ μ μ‘ν•΄μ„œ μž‘μ—…μ„ μ§„ν–‰ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ Typescriptλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” 라이브러리λ₯Ό ν™œμš©ν•˜λŠ” κ³Όμ •μ—μ„œ ν•΄κ²°ν•˜μ§€ λͺ»ν•˜κ³  μ‚¬μš©ν•˜μ§€ λͺ»ν•œ 뢀뢄이 λ°œμƒν–ˆλŠ”λ° 좔가적인 ν•™μŠ΅μ„ 톡해 λ‹€μŒ ν”„λ‘œμ νŠΈμ—μ„œ 보닀 완성도 높은 결과물을 얻을 수 μžˆλ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

About

πŸ‹κ±΄κ°• 의료 정보 제곡 ν”Œλž«νΌ

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

πŸ‹ Lemonaid

Lemonaid

β˜€οΈ 기획배경

λͺΈμ— 이상 μ§•ν›„κ°€ μžˆμ„ 경우, 그에 λŒ€ν•œ μ§ˆλ³‘μ„ μ•ŒκΈ°κ°€ 쉽지 μ•ŠμŠ΅λ‹ˆλ‹€.

μ§ˆλ³‘μ„ μ•Œμ•„λ„ μ–΄λ–€ λ³‘μ›μ—μ„œ ν•΄λ‹Ή μ§ˆλ³‘μ„ μ§„λ£Œν•΄μ£ΌλŠ”μ§€ μ•ŒκΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

μ²˜λ°©λ°›μ€ 약에 λŒ€ν•œ 정보λ₯Ό 얻을 방법이 μ œν•œμ μž…λ‹ˆλ‹€.

κ·Έλž˜μ„œ 이λ₯Ό ν•΄κ²°ν•  Lemonaidλ₯Ό κΈ°νšν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

πŸ‘» μ„œλΉ„μŠ€ μ£Όμš”λ‚΄μš©

  • μ£Όμ†Œ 기반 μ£Όλ³€μ˜ μ˜λ£Œμ‹œμ„€ 쑰회(병원쒅λ₯˜, μ§„λ£Œκ³Όλͺ©, 응급싀 μ—¬λΆ€ λ“±) λ‹€μ–‘ν•œ ν˜•νƒœμ˜ μ˜λ£Œμ‹œμ„€ 정보 제곡
  • μ„ νƒν•œ 증상에 λŒ€ν•œ μ§ˆλ³‘ 쑰회
  • μ•½μ˜ μƒκΉ€μƒˆμ— λŒ€ν•œ ν•΄λ‹Ή μ•½μ˜ 정보 쑰회
  • ν˜„μž¬ μ½”λ‘œλ‚˜ ν™•μ§„μž 정보 쑰회

πŸ“£ 차별성

  • μ‚¬μš©μžμ˜ 증상에 λ”°λ₯Έ μ§ˆλ³‘ λͺ©λ‘μ„ μ œκ³΅ν•˜κ³ , μ§ˆλ³‘μ— 따라 μ§„λ£Œ κ°€λŠ₯ν•œ μ˜λ£Œμ‹œμ„€μ„ μ‘°νšŒν•  수 μžˆλ‹€.
  • 병원 규λͺ¨, μ§„λ£Œμ’…λͺ©μ— 따라 μ§„λ£Œ 쀑인 λ³‘μ›μ˜ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • μ½”λ‘œλ‚˜ κ΄€λ ¨ μ˜λ£ŒκΈ°κ΄€(μ„ λ³„μ§„λ£Œμ†Œ λ“±)의 정보λ₯Ό μœ„μΉ˜μ™€ ν•¨κ»˜ 제곡 κ°€λŠ₯ν•˜λ‹€.

🌿 κΈ°λŒ€νš¨κ³Ό

  • μ‚¬μš©μžμ˜ 건강과 μ§κ²°λ˜λŠ” 만큼, μ‹ μ†ν•˜κ³  μ •ν™•ν•œ 정보λ₯Ό 전달할 수 μžˆλ‹€.
  • 정보 전달 μ‹œ, ν•΄λ‹Ή μ˜λ£ŒκΈ°κ΄€μ˜ μœ„μΉ˜ 뿐 μ•„λ‹ˆλΌ μ§„λ£Œκ³Όλͺ© λ“± λ‹€μ–‘ν•œ μ •λ³΄μ œκ³΅ν•  수 μžˆλ‹€.
  • λͺΈμ˜ 이상 징후에 λ”°λ₯Έ μ§ˆλ³‘ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • 볡용 μ•½μ˜ 상세 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • μ½”λ‘œλ‚˜ κ΄€λ ¨ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.

🌡 μ‹œμ—° 및 μ‹œλ‚˜λ¦¬μ˜€

πŸŽ‡ Lemonaid μ„œλΉ„μŠ€ ν™”λ©΄

  • Lemonaid μ„œλΉ„μŠ€μ˜ 메인 ν™”λ©΄μž…λ‹ˆλ‹€.

Main

  • λ‹€μŒμ€ μ˜λ£ŒκΈ°κ΄€ 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. μ‚¬μš©μžμœ„μΉ˜ μ€‘μ‹¬μœΌλ‘œ 맡이 μžλ™μœΌλ‘œ μ΄λ™ν•˜κ³ , μ£Όλ³€μ˜ 병원을 κ²€μƒ‰ν•©λ‹ˆλ‹€. μ£Όμ†Œμž…λ ₯을 ν†΅ν•œ μœ„μΉ˜λ³€κ²½ κΈ°λŠ₯도 μ œκ³΅ν•©λ‹ˆλ‹€.

medical_1

  • 병원 μ’…λ₯˜, μ§„λ£Œ κ³Όλͺ©, 응급싀 μ—¬λΆ€λ₯Ό μ„ νƒν•˜μ—¬ ν•΄λ‹Ήν•˜λŠ” 병원을 κ²€μƒ‰ν•©λ‹ˆλ‹€. μ•½κ΅­ 선택 μ‹œ 약ꡭ을 κ²€μƒ‰ν•©λ‹ˆλ‹€.

medical_2

  • 병원 상세보기 μ„ νƒν•˜λ©΄ ν•΄λ‹Ή 병원 정보가 λ‚˜μ˜€κ³  지도 클릭 μ‹œ λ³‘μ›κΉŒμ§€ κΈΈμ°ΎκΈ°κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.

medical_3

  • λ‹€μŒμ€ μ˜μ•½ν’ˆ 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. μ‚¬μš©μžλ“€μ΄ κ²€μƒ‰ν•œ μ˜μ•½ν’ˆ TOP5λ¦¬μŠ€νŠΈκ°€ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

medicine_1

  • μ•½ν’ˆλͺ…μœΌλ‘œ 검색 μ‹œ ν•΄λ‹Ήν•˜λŠ” μ•½ν’ˆ λ¦¬μŠ€νŠΈκ°€ κ²€μƒ‰λ©λ‹ˆλ‹€. μ΄ˆκΈ°ν™” μ‹œ μ›λž˜ ν™”λ©΄μœΌλ‘œ λŒμ•„κ°‘λ‹ˆλ‹€.

medicine_2

  • λͺ¨μ–‘μœΌλ‘œ 검색 μ‹œ ν•΄λ‹Ήν•˜λŠ” μ•½ν’ˆ λ¦¬μŠ€νŠΈκ°€ κ²€μƒ‰λ©λ‹ˆλ‹€. μ•½ν’ˆ 선택 μ‹œ 상세정보 ν™”λ©΄μœΌλ‘œ λ°”λ€λ‹ˆλ‹€.

medicine_3

  • λ‹€μŒμ€ 증상 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. λΆ€μœ„ λ³„λ‘œ 증상이 λ°”λ€ŒλŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

disease_1

  • 증상은 μ΅œλŒ€ 6개 선택가λŠ₯ν•˜κ³  μ„ νƒν•œ 증상에 따라 κ²€μƒ‰λ˜λŠ” μ§ˆλ³‘κ²°κ³Όκ°€ λ°”λ€λ‹ˆλ‹€.

disease_2

  • 증상 선택 μ‹œ 상세정보 ν™”λ©΄μœΌλ‘œ λ°”λ€Œκ³ , 상세정보 ν™”λ©΄μ—μ„œ 지도 선택 μ‹œ μ˜λ£ŒκΈ°κ΄€ ν™”λ©΄μœΌλ‘œ μ „ν™˜λ©λ‹ˆλ‹€.

disease_3

  • λ‹€μŒμ€ μ½”λ‘œλ‚˜ 정보 μ‘°νšŒν™”λ©΄μž…λ‹ˆλ‹€. λ‚ μ§œ, λ‚˜μ΄, μ§€μ—­, 성별에 λŒ€ν•œ 정보λ₯Ό κ·Έλž˜ν”„λ‘œ λ³΄μ—¬μ€λ‹ˆλ‹€.

corona

κ°œλ°œν™˜κ²½

Frontend

  • IDE: VSCode
  • Node JS 16.13.x
  • Language: HTML5, Javascript, CSS3
  • Library: React 17.0.2, SCSS, TypeScript, Axios, Redux
  • Open API: Kakao Map API

Backend

  • IDE: IntelliJ 2021.3.1
  • Language: Java 1.8, Python 3.9
  • Framework: Spring Boot 2.4.5
  • Library: Spring Boot JPA, Spring Security, pandas

Data

  • MySQL 8.0.28
  • Hadoop 3.3.1
  • Sqoop 1.4.7

Server

  • Ubuntu 20.04 LTS
  • Jenkins 2.332.1
  • Nginx 1.18.0
  • Docker 20.10.13
  • Docker-compose 1.29.2

Other Tools

  • 회의둝 : Notion
  • μ½”λ“œ 관리: GitLab
  • 일정 관리: Jira
  • μ™€μ΄μ–΄ν”„λ ˆμž„: Figma
  • μ‹œν€€μŠ€ λ‹€μ΄μ–΄κ·Έλž¨: Mermaid
  • ERD μž‘μ„±: ERDCloud
  • 회의 : Webex, Mattermost, Discord

μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜

SystemArchitecture

ER Diagram

lemonaid_erd_220407

μ•ˆλ…•μ¦ˆ νŒ€

teampng

λ°•μŠΉμ›

νŒ€μž₯을 λ§‘μ•„ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λŠ” 것이 μ²˜μŒμ΄μ—¬μ„œ λ§Žμ€ 것이 λ‚―μ„€μ—ˆμŠ΅λ‹ˆλ‹€. 회의λ₯Ό μ§„ν–‰ν•˜λ©°, ν”„λ‘œμ νŠΈκ°€ λ‹€λ₯Έ 길둜 μ ‘μ–΄λ“€μ§€ μ•Šλ„λ‘ 길작이의 역할을 ν•˜κΈ°λ„ ν•˜κ³ , μˆ˜λ§Žμ€ μ˜κ²¬μ„ μ‘°μœ¨ν•˜κ³  더 λ‚˜μ€ μ˜κ²¬μ„ μ΄λŒμ–΄λ‚΄λŠ” 것이 μ‰½μ§€λ§Œμ€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ·Έλž˜λ„ 기간이 μ§€λ‚  수둝 νŒ€μ›λ“€κ³Ό μ˜μ‚¬μ†Œν†΅ν•˜λŠ” 방법을 κΉ¨λ‹«κ³ , μ„œλ‘œ 응원과 κ²©λ €ν•˜λŠ” λΆ„μœ„κΈ°λ₯Ό λ§Œλ“œλŠ” 것에 λ¬˜ν•œ 희열을 느끼며, ν•œμΈ΅ μ„±μž₯ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. 이λ₯Ό κ³„κΈ°λ‘œ λ‹€μŒμ˜ ν”„λ‘œμ νŠΈμ—μ„œλŠ” 더 λ‚˜μ€ νŒ€μž₯의 λͺ¨μŠ΅μ„ 보여쀄 수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.

빅데이터 ν”„λ‘œμ νŠΈμΈ 만큼 μˆ˜λ§Žμ€ 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  이λ₯Ό μ²˜λ¦¬ν•˜λŠ” 과정이 맀우 μ–΄λ ΅κ³  λ³΅μž‘ν–ˆμŠ΅λ‹ˆλ‹€. 빅데이터에 λ―ΈμΉ˜μ§„ λͺ»ν–ˆμ§€λ§Œ μˆ˜λ§Žμ€ 데이터λ₯Ό μ²˜λ¦¬ν•˜μ—¬ μš°λ¦¬μ—κ²Œ ν•„μš”ν•œ 데이터λ₯Ό μΆ”μΆœν•˜κ³  λΆ„μ‚°μ²˜λ¦¬ν•˜λŠ” 과정을 톡해 데이터 뢄야에 λ”μš± 관심을 κ°€μ§€κ²Œ 된 것 κ°™μŠ΅λ‹ˆλ‹€. μ•žμœΌλ‘œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•  λ•ŒλŠ” μŠ€νŒŒν¬μ™€ 같은 λ‹€λ₯Έ 빅데이터 λΌμ΄λΈŒλŸ¬λ¦¬λ„ ν•¨κ»˜ μ‚¬μš©ν•΄λ³΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ§€μˆ˜μ—°

ν•˜λ‘‘μ„ κ°„λ‹¨ν•œ Word Countμ—λ§Œ μ‚¬μš©ν•˜κ²Œ λ˜μ–΄μ„œ μ•„μ‰¬μš΄ 점은 μžˆμ—ˆμ§€λ§Œ λ§Žμ€ μ–‘μ˜ 데이터λ₯Ό κ°€μ§€κ³  ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ 데이터λ₯Ό μ–΄λ–»κ²Œ ν•˜λ©΄ μ’€ 더 λΉ λ₯΄κ³  보기 μ’‹κ²Œ μ œκ³΅ν•  수 μžˆμ„κΉŒμ— λŒ€ν•œ 생각을 ν•  수 있게 된 계기가 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 배포 과정에 λŒ€ν•΄ μ’€ 더 μ΅μˆ™ν•΄μ§ˆ 수 μžˆμ–΄ μ’‹μ•˜κ³ , νŒ€μ›λΆ„λ“€μ΄ 각각의 역할을 묡묡히 ν•΄λ‚˜μ£Όμ…”μ„œ 물흐λ₯΄λ“―이 μ§€λ‚˜κ°ˆ 수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. μž¬λ°Œμ—ˆμŠ΅λ‹ˆλ‹€!

이진곀

λΉ…λ°μ΄ν„°λΌλŠ” 주제λ₯Ό 처음 λ‹€λ€„λ³΄λŠ”μ§€λΌ λ‚œκ΄€μ΄ λ§Žμ•˜μ§€λ§Œ, 데이터 μˆ˜μ§‘ κ³Όμ •λΆ€ν„° μ „μ²˜λ¦¬, λΆ„μ‚°μ²˜λ¦¬λ₯Ό 거쳐 DB에 두고 ν”„λ‘œμ νŠΈμ— λ…Ήμ—¬λ‚΄κΈ°κΉŒμ§€ 일련의 과정을 배울 수 μžˆλŠ” 쒋은 κ²½ν—˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€. μŠ€ν”„λ§ λΆ€νŠΈλ‘œ λ°±μ—”λ“œλ₯Ό κ°œλ°œν•˜λŠ” 데에도 점점 λŠ₯μˆ™ν•΄μ§€λŠ” 것 κ°™κ³ , 이전 ν”„λ‘œμ νŠΈμ—μ„œ 해보고 μ‹Άμ—ˆμ§€λ§Œ ν•˜μ§€ λͺ»ν–ˆλ˜ 배포 과정도 직접 닀뀄볼 수 μžˆμ–΄μ„œ μ’‹μ•˜μŠ΅λ‹ˆλ‹€. λ“ λ“ ν•œ νŒ€μ›λ“€ 덕뢄에 ν›Œλ₯­ν•œ ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€μ–΄λ‚΄λŠ” 쒋은 κ²½ν—˜μ„ ν•  수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. λ‹€μŒ ν”„λ‘œμ νŠΈμ—λ„ μ—΄μ‹¬νžˆ μž„ν•˜μ—¬ 쒋은 결과물을 λ§Œλ“€μ–΄λ‚΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ΄μ’…ν˜„

빅데이터 λΆ„μ‚°μ΄λΌλŠ” λ„λ©”μΈμœΌλ‘œ 아이디어λ₯Ό λ„μΆœν•΄λ‚΄κΈ° νž˜λ“€μ—ˆλŠ”λ° μ‹€μƒν™œμ— 도움이 될 수 μžˆλŠ” 쒋은 아이디어λ₯Ό 찾은 것 κ°™μ•„ λΏŒλ“―ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μ†Œ λΆ€μ‘±ν•œ μ‹œκ°„μ΄μ—ˆμ§€λ§Œ νŒ€μ›λ“€κ³Όμ˜ ν˜‘μ—…μ„ 톡해 잘 λ§ˆλ¬΄λ¦¬ν•  수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. Reactλ₯Ό 2번째둜 μ‚¬μš©ν•΄λ΄€λŠ”λ° μ΄μ œλŠ” 많이 μ΅μˆ™ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. νŒ€μ›λ“€κ³Όμ˜ ν˜‘λ™μ΄ μ€‘μš”ν•˜λ‹€λŠ” 것을 λ‹€μ‹œ ν•œλ²ˆ 깨달을 수 μžˆμ—ˆλ˜ ν”„λ‘œμ νŠΈμ˜€λ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄μƒν˜„

μ£Όμ œμ„ μ •μ΄ λŠ¦μ–΄μ‘ŒμŒμ—λ„ νŒ€μ›λ“€ λͺ¨λ‘κ°€ μ—΄μ‹¬νžˆν•˜λŠ” λΆ„μœ„κΈ°μ—¬μ„œ μ΄ˆκΈ°μ— κΈ°νšν–ˆλ˜λŒ€λ‘œ 결과물을 μ™„μ„±ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν”Όλ“œλ°±μ„ μ£Όκ³  λ°›μœΌλ©΄μ„œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν–ˆκΈ° λ•Œλ¬Έμ— ν˜Όμžμ„  μƒκ°ν•˜μ§€ λͺ»ν–ˆλ˜ 뢀뢄듀을 찾을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈ μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ 쀑간쀑간에 API μˆ˜μ • μš”μ²­λ„ 자주 ν–ˆμ—ˆλŠ”λ° 빨리 μˆ˜μ •ν•΄μ€˜μ„œ κ³ λ§ˆμ› μŠ΅λ‹ˆλ‹€. λ¦¬μ•‘νŠΈμ™€ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ— λŒ€ν•΄ ν•œμΈ΅ 더 곡뢀할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ ν”„λ‘œμ νŠΈ μ§„ν–‰ν•˜λŠ”λ° 큰 도움이 될 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄μˆ˜ν™˜

빅데이터라고 ν•  μˆ˜μ€€μ˜ 데이터 양이 μ•„λ‹ˆμ—ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  ν•΄λ‹Ή 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  μ •μ œν•˜μ—¬ λΆ„μ‚°μ²˜λ¦¬ ν•˜λŠ” 것이 쉽지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 이 κ²½ν—˜μ„ ν†΅ν•΄μ„œ 빅데이터λ₯Ό λΆ„μ‚°μ²˜λ¦¬ν•˜λŠ” μž‘μ—…μ΄ μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•˜κ³  μ‚¬μš©μžμ˜ κ²½ν—˜μ„ ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ 맀우 μ£Όμš”ν•˜λ‹€λŠ” 것을 λŠλ‚„ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

React와 Typescript μ—­μ‹œ 처음 ν™œμš©ν•˜λ‹€λ³΄λ‹ˆ μ μ‘ν•˜λŠ”λ° μ‹œκ°„μ΄ κ±Έλ ΈμœΌλ‚˜ νŒ€μ›λ“€μ΄ 잘 도와쀀 덕뢄에 λΉ λ₯΄κ²Œ μ μ‘ν•΄μ„œ μž‘μ—…μ„ μ§„ν–‰ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ Typescriptλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” 라이브러리λ₯Ό ν™œμš©ν•˜λŠ” κ³Όμ •μ—μ„œ ν•΄κ²°ν•˜μ§€ λͺ»ν•˜κ³  μ‚¬μš©ν•˜μ§€ λͺ»ν•œ 뢀뢄이 λ°œμƒν–ˆλŠ”λ° 좔가적인 ν•™μŠ΅μ„ 톡해 λ‹€μŒ ν”„λ‘œμ νŠΈμ—μ„œ 보닀 완성도 높은 결과물을 얻을 수 μžˆλ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

About

πŸ‹κ±΄κ°• 의료 정보 제곡 ν”Œλž«νΌ

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

πŸ‹ Lemonaid

Lemonaid

β˜€οΈ 기획배경

λͺΈμ— 이상 μ§•ν›„κ°€ μžˆμ„ 경우, 그에 λŒ€ν•œ μ§ˆλ³‘μ„ μ•ŒκΈ°κ°€ 쉽지 μ•ŠμŠ΅λ‹ˆλ‹€.

μ§ˆλ³‘μ„ μ•Œμ•„λ„ μ–΄λ–€ λ³‘μ›μ—μ„œ ν•΄λ‹Ή μ§ˆλ³‘μ„ μ§„λ£Œν•΄μ£ΌλŠ”μ§€ μ•ŒκΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

μ²˜λ°©λ°›μ€ 약에 λŒ€ν•œ 정보λ₯Ό 얻을 방법이 μ œν•œμ μž…λ‹ˆλ‹€.

κ·Έλž˜μ„œ 이λ₯Ό ν•΄κ²°ν•  Lemonaidλ₯Ό κΈ°νšν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

πŸ‘» μ„œλΉ„μŠ€ μ£Όμš”λ‚΄μš©

  • μ£Όμ†Œ 기반 μ£Όλ³€μ˜ μ˜λ£Œμ‹œμ„€ 쑰회(병원쒅λ₯˜, μ§„λ£Œκ³Όλͺ©, 응급싀 μ—¬λΆ€ λ“±) λ‹€μ–‘ν•œ ν˜•νƒœμ˜ μ˜λ£Œμ‹œμ„€ 정보 제곡
  • μ„ νƒν•œ 증상에 λŒ€ν•œ μ§ˆλ³‘ 쑰회
  • μ•½μ˜ μƒκΉ€μƒˆμ— λŒ€ν•œ ν•΄λ‹Ή μ•½μ˜ 정보 쑰회
  • ν˜„μž¬ μ½”λ‘œλ‚˜ ν™•μ§„μž 정보 쑰회

πŸ“£ 차별성

  • μ‚¬μš©μžμ˜ 증상에 λ”°λ₯Έ μ§ˆλ³‘ λͺ©λ‘μ„ μ œκ³΅ν•˜κ³ , μ§ˆλ³‘μ— 따라 μ§„λ£Œ κ°€λŠ₯ν•œ μ˜λ£Œμ‹œμ„€μ„ μ‘°νšŒν•  수 μžˆλ‹€.
  • 병원 규λͺ¨, μ§„λ£Œμ’…λͺ©μ— 따라 μ§„λ£Œ 쀑인 λ³‘μ›μ˜ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • μ½”λ‘œλ‚˜ κ΄€λ ¨ μ˜λ£ŒκΈ°κ΄€(μ„ λ³„μ§„λ£Œμ†Œ λ“±)의 정보λ₯Ό μœ„μΉ˜μ™€ ν•¨κ»˜ 제곡 κ°€λŠ₯ν•˜λ‹€.

🌿 κΈ°λŒ€νš¨κ³Ό

  • μ‚¬μš©μžμ˜ 건강과 μ§κ²°λ˜λŠ” 만큼, μ‹ μ†ν•˜κ³  μ •ν™•ν•œ 정보λ₯Ό 전달할 수 μžˆλ‹€.
  • 정보 전달 μ‹œ, ν•΄λ‹Ή μ˜λ£ŒκΈ°κ΄€μ˜ μœ„μΉ˜ 뿐 μ•„λ‹ˆλΌ μ§„λ£Œκ³Όλͺ© λ“± λ‹€μ–‘ν•œ μ •λ³΄μ œκ³΅ν•  수 μžˆλ‹€.
  • λͺΈμ˜ 이상 징후에 λ”°λ₯Έ μ§ˆλ³‘ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • 볡용 μ•½μ˜ 상세 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • μ½”λ‘œλ‚˜ κ΄€λ ¨ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.

🌡 μ‹œμ—° 및 μ‹œλ‚˜λ¦¬μ˜€

πŸŽ‡ Lemonaid μ„œλΉ„μŠ€ ν™”λ©΄

  • Lemonaid μ„œλΉ„μŠ€μ˜ 메인 ν™”λ©΄μž…λ‹ˆλ‹€.

Main

  • λ‹€μŒμ€ μ˜λ£ŒκΈ°κ΄€ 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. μ‚¬μš©μžμœ„μΉ˜ μ€‘μ‹¬μœΌλ‘œ 맡이 μžλ™μœΌλ‘œ μ΄λ™ν•˜κ³ , μ£Όλ³€μ˜ 병원을 κ²€μƒ‰ν•©λ‹ˆλ‹€. μ£Όμ†Œμž…λ ₯을 ν†΅ν•œ μœ„μΉ˜λ³€κ²½ κΈ°λŠ₯도 μ œκ³΅ν•©λ‹ˆλ‹€.

medical_1

  • 병원 μ’…λ₯˜, μ§„λ£Œ κ³Όλͺ©, 응급싀 μ—¬λΆ€λ₯Ό μ„ νƒν•˜μ—¬ ν•΄λ‹Ήν•˜λŠ” 병원을 κ²€μƒ‰ν•©λ‹ˆλ‹€. μ•½κ΅­ 선택 μ‹œ 약ꡭ을 κ²€μƒ‰ν•©λ‹ˆλ‹€.

medical_2

  • 병원 상세보기 μ„ νƒν•˜λ©΄ ν•΄λ‹Ή 병원 정보가 λ‚˜μ˜€κ³  지도 클릭 μ‹œ λ³‘μ›κΉŒμ§€ κΈΈμ°ΎκΈ°κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.

medical_3

  • λ‹€μŒμ€ μ˜μ•½ν’ˆ 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. μ‚¬μš©μžλ“€μ΄ κ²€μƒ‰ν•œ μ˜μ•½ν’ˆ TOP5λ¦¬μŠ€νŠΈκ°€ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

medicine_1

  • μ•½ν’ˆλͺ…μœΌλ‘œ 검색 μ‹œ ν•΄λ‹Ήν•˜λŠ” μ•½ν’ˆ λ¦¬μŠ€νŠΈκ°€ κ²€μƒ‰λ©λ‹ˆλ‹€. μ΄ˆκΈ°ν™” μ‹œ μ›λž˜ ν™”λ©΄μœΌλ‘œ λŒμ•„κ°‘λ‹ˆλ‹€.

medicine_2

  • λͺ¨μ–‘μœΌλ‘œ 검색 μ‹œ ν•΄λ‹Ήν•˜λŠ” μ•½ν’ˆ λ¦¬μŠ€νŠΈκ°€ κ²€μƒ‰λ©λ‹ˆλ‹€. μ•½ν’ˆ 선택 μ‹œ 상세정보 ν™”λ©΄μœΌλ‘œ λ°”λ€λ‹ˆλ‹€.

medicine_3

  • λ‹€μŒμ€ 증상 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. λΆ€μœ„ λ³„λ‘œ 증상이 λ°”λ€ŒλŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

disease_1

  • 증상은 μ΅œλŒ€ 6개 선택가λŠ₯ν•˜κ³  μ„ νƒν•œ 증상에 따라 κ²€μƒ‰λ˜λŠ” μ§ˆλ³‘κ²°κ³Όκ°€ λ°”λ€λ‹ˆλ‹€.

disease_2

  • 증상 선택 μ‹œ 상세정보 ν™”λ©΄μœΌλ‘œ λ°”λ€Œκ³ , 상세정보 ν™”λ©΄μ—μ„œ 지도 선택 μ‹œ μ˜λ£ŒκΈ°κ΄€ ν™”λ©΄μœΌλ‘œ μ „ν™˜λ©λ‹ˆλ‹€.

disease_3

  • λ‹€μŒμ€ μ½”λ‘œλ‚˜ 정보 μ‘°νšŒν™”λ©΄μž…λ‹ˆλ‹€. λ‚ μ§œ, λ‚˜μ΄, μ§€μ—­, 성별에 λŒ€ν•œ 정보λ₯Ό κ·Έλž˜ν”„λ‘œ λ³΄μ—¬μ€λ‹ˆλ‹€.

corona

κ°œλ°œν™˜κ²½

Frontend

  • IDE: VSCode
  • Node JS 16.13.x
  • Language: HTML5, Javascript, CSS3
  • Library: React 17.0.2, SCSS, TypeScript, Axios, Redux
  • Open API: Kakao Map API

Backend

  • IDE: IntelliJ 2021.3.1
  • Language: Java 1.8, Python 3.9
  • Framework: Spring Boot 2.4.5
  • Library: Spring Boot JPA, Spring Security, pandas

Data

  • MySQL 8.0.28
  • Hadoop 3.3.1
  • Sqoop 1.4.7

Server

  • Ubuntu 20.04 LTS
  • Jenkins 2.332.1
  • Nginx 1.18.0
  • Docker 20.10.13
  • Docker-compose 1.29.2

Other Tools

  • 회의둝 : Notion
  • μ½”λ“œ 관리: GitLab
  • 일정 관리: Jira
  • μ™€μ΄μ–΄ν”„λ ˆμž„: Figma
  • μ‹œν€€μŠ€ λ‹€μ΄μ–΄κ·Έλž¨: Mermaid
  • ERD μž‘μ„±: ERDCloud
  • 회의 : Webex, Mattermost, Discord

μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜

SystemArchitecture

ER Diagram

lemonaid_erd_220407

μ•ˆλ…•μ¦ˆ νŒ€

teampng

λ°•μŠΉμ›

νŒ€μž₯을 λ§‘μ•„ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λŠ” 것이 μ²˜μŒμ΄μ—¬μ„œ λ§Žμ€ 것이 λ‚―μ„€μ—ˆμŠ΅λ‹ˆλ‹€. 회의λ₯Ό μ§„ν–‰ν•˜λ©°, ν”„λ‘œμ νŠΈκ°€ λ‹€λ₯Έ 길둜 μ ‘μ–΄λ“€μ§€ μ•Šλ„λ‘ 길작이의 역할을 ν•˜κΈ°λ„ ν•˜κ³ , μˆ˜λ§Žμ€ μ˜κ²¬μ„ μ‘°μœ¨ν•˜κ³  더 λ‚˜μ€ μ˜κ²¬μ„ μ΄λŒμ–΄λ‚΄λŠ” 것이 μ‰½μ§€λ§Œμ€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ·Έλž˜λ„ 기간이 μ§€λ‚  수둝 νŒ€μ›λ“€κ³Ό μ˜μ‚¬μ†Œν†΅ν•˜λŠ” 방법을 κΉ¨λ‹«κ³ , μ„œλ‘œ 응원과 κ²©λ €ν•˜λŠ” λΆ„μœ„κΈ°λ₯Ό λ§Œλ“œλŠ” 것에 λ¬˜ν•œ 희열을 느끼며, ν•œμΈ΅ μ„±μž₯ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. 이λ₯Ό κ³„κΈ°λ‘œ λ‹€μŒμ˜ ν”„λ‘œμ νŠΈμ—μ„œλŠ” 더 λ‚˜μ€ νŒ€μž₯의 λͺ¨μŠ΅μ„ 보여쀄 수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.

빅데이터 ν”„λ‘œμ νŠΈμΈ 만큼 μˆ˜λ§Žμ€ 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  이λ₯Ό μ²˜λ¦¬ν•˜λŠ” 과정이 맀우 μ–΄λ ΅κ³  λ³΅μž‘ν–ˆμŠ΅λ‹ˆλ‹€. 빅데이터에 λ―ΈμΉ˜μ§„ λͺ»ν–ˆμ§€λ§Œ μˆ˜λ§Žμ€ 데이터λ₯Ό μ²˜λ¦¬ν•˜μ—¬ μš°λ¦¬μ—κ²Œ ν•„μš”ν•œ 데이터λ₯Ό μΆ”μΆœν•˜κ³  λΆ„μ‚°μ²˜λ¦¬ν•˜λŠ” 과정을 톡해 데이터 뢄야에 λ”μš± 관심을 κ°€μ§€κ²Œ 된 것 κ°™μŠ΅λ‹ˆλ‹€. μ•žμœΌλ‘œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•  λ•ŒλŠ” μŠ€νŒŒν¬μ™€ 같은 λ‹€λ₯Έ 빅데이터 λΌμ΄λΈŒλŸ¬λ¦¬λ„ ν•¨κ»˜ μ‚¬μš©ν•΄λ³΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ§€μˆ˜μ—°

ν•˜λ‘‘μ„ κ°„λ‹¨ν•œ Word Countμ—λ§Œ μ‚¬μš©ν•˜κ²Œ λ˜μ–΄μ„œ μ•„μ‰¬μš΄ 점은 μžˆμ—ˆμ§€λ§Œ λ§Žμ€ μ–‘μ˜ 데이터λ₯Ό κ°€μ§€κ³  ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ 데이터λ₯Ό μ–΄λ–»κ²Œ ν•˜λ©΄ μ’€ 더 λΉ λ₯΄κ³  보기 μ’‹κ²Œ μ œκ³΅ν•  수 μžˆμ„κΉŒμ— λŒ€ν•œ 생각을 ν•  수 있게 된 계기가 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 배포 과정에 λŒ€ν•΄ μ’€ 더 μ΅μˆ™ν•΄μ§ˆ 수 μžˆμ–΄ μ’‹μ•˜κ³ , νŒ€μ›λΆ„λ“€μ΄ 각각의 역할을 묡묡히 ν•΄λ‚˜μ£Όμ…”μ„œ 물흐λ₯΄λ“―이 μ§€λ‚˜κ°ˆ 수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. μž¬λ°Œμ—ˆμŠ΅λ‹ˆλ‹€!

이진곀

λΉ…λ°μ΄ν„°λΌλŠ” 주제λ₯Ό 처음 λ‹€λ€„λ³΄λŠ”μ§€λΌ λ‚œκ΄€μ΄ λ§Žμ•˜μ§€λ§Œ, 데이터 μˆ˜μ§‘ κ³Όμ •λΆ€ν„° μ „μ²˜λ¦¬, λΆ„μ‚°μ²˜λ¦¬λ₯Ό 거쳐 DB에 두고 ν”„λ‘œμ νŠΈμ— λ…Ήμ—¬λ‚΄κΈ°κΉŒμ§€ 일련의 과정을 배울 수 μžˆλŠ” 쒋은 κ²½ν—˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€. μŠ€ν”„λ§ λΆ€νŠΈλ‘œ λ°±μ—”λ“œλ₯Ό κ°œλ°œν•˜λŠ” 데에도 점점 λŠ₯μˆ™ν•΄μ§€λŠ” 것 κ°™κ³ , 이전 ν”„λ‘œμ νŠΈμ—μ„œ 해보고 μ‹Άμ—ˆμ§€λ§Œ ν•˜μ§€ λͺ»ν–ˆλ˜ 배포 과정도 직접 닀뀄볼 수 μžˆμ–΄μ„œ μ’‹μ•˜μŠ΅λ‹ˆλ‹€. λ“ λ“ ν•œ νŒ€μ›λ“€ 덕뢄에 ν›Œλ₯­ν•œ ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€μ–΄λ‚΄λŠ” 쒋은 κ²½ν—˜μ„ ν•  수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. λ‹€μŒ ν”„λ‘œμ νŠΈμ—λ„ μ—΄μ‹¬νžˆ μž„ν•˜μ—¬ 쒋은 결과물을 λ§Œλ“€μ–΄λ‚΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ΄μ’…ν˜„

빅데이터 λΆ„μ‚°μ΄λΌλŠ” λ„λ©”μΈμœΌλ‘œ 아이디어λ₯Ό λ„μΆœν•΄λ‚΄κΈ° νž˜λ“€μ—ˆλŠ”λ° μ‹€μƒν™œμ— 도움이 될 수 μžˆλŠ” 쒋은 아이디어λ₯Ό 찾은 것 κ°™μ•„ λΏŒλ“―ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μ†Œ λΆ€μ‘±ν•œ μ‹œκ°„μ΄μ—ˆμ§€λ§Œ νŒ€μ›λ“€κ³Όμ˜ ν˜‘μ—…μ„ 톡해 잘 λ§ˆλ¬΄λ¦¬ν•  수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. Reactλ₯Ό 2번째둜 μ‚¬μš©ν•΄λ΄€λŠ”λ° μ΄μ œλŠ” 많이 μ΅μˆ™ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. νŒ€μ›λ“€κ³Όμ˜ ν˜‘λ™μ΄ μ€‘μš”ν•˜λ‹€λŠ” 것을 λ‹€μ‹œ ν•œλ²ˆ 깨달을 수 μžˆμ—ˆλ˜ ν”„λ‘œμ νŠΈμ˜€λ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄μƒν˜„

μ£Όμ œμ„ μ •μ΄ λŠ¦μ–΄μ‘ŒμŒμ—λ„ νŒ€μ›λ“€ λͺ¨λ‘κ°€ μ—΄μ‹¬νžˆν•˜λŠ” λΆ„μœ„κΈ°μ—¬μ„œ μ΄ˆκΈ°μ— κΈ°νšν–ˆλ˜λŒ€λ‘œ 결과물을 μ™„μ„±ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν”Όλ“œλ°±μ„ μ£Όκ³  λ°›μœΌλ©΄μ„œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν–ˆκΈ° λ•Œλ¬Έμ— ν˜Όμžμ„  μƒκ°ν•˜μ§€ λͺ»ν–ˆλ˜ 뢀뢄듀을 찾을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈ μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ 쀑간쀑간에 API μˆ˜μ • μš”μ²­λ„ 자주 ν–ˆμ—ˆλŠ”λ° 빨리 μˆ˜μ •ν•΄μ€˜μ„œ κ³ λ§ˆμ› μŠ΅λ‹ˆλ‹€. λ¦¬μ•‘νŠΈμ™€ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ— λŒ€ν•΄ ν•œμΈ΅ 더 곡뢀할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ ν”„λ‘œμ νŠΈ μ§„ν–‰ν•˜λŠ”λ° 큰 도움이 될 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄μˆ˜ν™˜

빅데이터라고 ν•  μˆ˜μ€€μ˜ 데이터 양이 μ•„λ‹ˆμ—ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  ν•΄λ‹Ή 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  μ •μ œν•˜μ—¬ λΆ„μ‚°μ²˜λ¦¬ ν•˜λŠ” 것이 쉽지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 이 κ²½ν—˜μ„ ν†΅ν•΄μ„œ 빅데이터λ₯Ό λΆ„μ‚°μ²˜λ¦¬ν•˜λŠ” μž‘μ—…μ΄ μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•˜κ³  μ‚¬μš©μžμ˜ κ²½ν—˜μ„ ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ 맀우 μ£Όμš”ν•˜λ‹€λŠ” 것을 λŠλ‚„ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

React와 Typescript μ—­μ‹œ 처음 ν™œμš©ν•˜λ‹€λ³΄λ‹ˆ μ μ‘ν•˜λŠ”λ° μ‹œκ°„μ΄ κ±Έλ ΈμœΌλ‚˜ νŒ€μ›λ“€μ΄ 잘 도와쀀 덕뢄에 λΉ λ₯΄κ²Œ μ μ‘ν•΄μ„œ μž‘μ—…μ„ μ§„ν–‰ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ Typescriptλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” 라이브러리λ₯Ό ν™œμš©ν•˜λŠ” κ³Όμ •μ—μ„œ ν•΄κ²°ν•˜μ§€ λͺ»ν•˜κ³  μ‚¬μš©ν•˜μ§€ λͺ»ν•œ 뢀뢄이 λ°œμƒν–ˆλŠ”λ° 좔가적인 ν•™μŠ΅μ„ 톡해 λ‹€μŒ ν”„λ‘œμ νŠΈμ—μ„œ 보닀 완성도 높은 결과물을 얻을 수 μžˆλ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

About

πŸ‹κ±΄κ°• 의료 정보 제곡 ν”Œλž«νΌ

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

πŸ‹ Lemonaid

Lemonaid

β˜€οΈ 기획배경

λͺΈμ— 이상 μ§•ν›„κ°€ μžˆμ„ 경우, 그에 λŒ€ν•œ μ§ˆλ³‘μ„ μ•ŒκΈ°κ°€ 쉽지 μ•ŠμŠ΅λ‹ˆλ‹€.

μ§ˆλ³‘μ„ μ•Œμ•„λ„ μ–΄λ–€ λ³‘μ›μ—μ„œ ν•΄λ‹Ή μ§ˆλ³‘μ„ μ§„λ£Œν•΄μ£ΌλŠ”μ§€ μ•ŒκΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

μ²˜λ°©λ°›μ€ 약에 λŒ€ν•œ 정보λ₯Ό 얻을 방법이 μ œν•œμ μž…λ‹ˆλ‹€.

κ·Έλž˜μ„œ 이λ₯Ό ν•΄κ²°ν•  Lemonaidλ₯Ό κΈ°νšν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

πŸ‘» μ„œλΉ„μŠ€ μ£Όμš”λ‚΄μš©

  • μ£Όμ†Œ 기반 μ£Όλ³€μ˜ μ˜λ£Œμ‹œμ„€ 쑰회(병원쒅λ₯˜, μ§„λ£Œκ³Όλͺ©, 응급싀 μ—¬λΆ€ λ“±) λ‹€μ–‘ν•œ ν˜•νƒœμ˜ μ˜λ£Œμ‹œμ„€ 정보 제곡
  • μ„ νƒν•œ 증상에 λŒ€ν•œ μ§ˆλ³‘ 쑰회
  • μ•½μ˜ μƒκΉ€μƒˆμ— λŒ€ν•œ ν•΄λ‹Ή μ•½μ˜ 정보 쑰회
  • ν˜„μž¬ μ½”λ‘œλ‚˜ ν™•μ§„μž 정보 쑰회

πŸ“£ 차별성

  • μ‚¬μš©μžμ˜ 증상에 λ”°λ₯Έ μ§ˆλ³‘ λͺ©λ‘μ„ μ œκ³΅ν•˜κ³ , μ§ˆλ³‘μ— 따라 μ§„λ£Œ κ°€λŠ₯ν•œ μ˜λ£Œμ‹œμ„€μ„ μ‘°νšŒν•  수 μžˆλ‹€.
  • 병원 규λͺ¨, μ§„λ£Œμ’…λͺ©μ— 따라 μ§„λ£Œ 쀑인 λ³‘μ›μ˜ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • μ½”λ‘œλ‚˜ κ΄€λ ¨ μ˜λ£ŒκΈ°κ΄€(μ„ λ³„μ§„λ£Œμ†Œ λ“±)의 정보λ₯Ό μœ„μΉ˜μ™€ ν•¨κ»˜ 제곡 κ°€λŠ₯ν•˜λ‹€.

🌿 κΈ°λŒ€νš¨κ³Ό

  • μ‚¬μš©μžμ˜ 건강과 μ§κ²°λ˜λŠ” 만큼, μ‹ μ†ν•˜κ³  μ •ν™•ν•œ 정보λ₯Ό 전달할 수 μžˆλ‹€.
  • 정보 전달 μ‹œ, ν•΄λ‹Ή μ˜λ£ŒκΈ°κ΄€μ˜ μœ„μΉ˜ 뿐 μ•„λ‹ˆλΌ μ§„λ£Œκ³Όλͺ© λ“± λ‹€μ–‘ν•œ μ •λ³΄μ œκ³΅ν•  수 μžˆλ‹€.
  • λͺΈμ˜ 이상 징후에 λ”°λ₯Έ μ§ˆλ³‘ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • 볡용 μ•½μ˜ 상세 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • μ½”λ‘œλ‚˜ κ΄€λ ¨ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.

🌡 μ‹œμ—° 및 μ‹œλ‚˜λ¦¬μ˜€

πŸŽ‡ Lemonaid μ„œλΉ„μŠ€ ν™”λ©΄

  • Lemonaid μ„œλΉ„μŠ€μ˜ 메인 ν™”λ©΄μž…λ‹ˆλ‹€.

Main

  • λ‹€μŒμ€ μ˜λ£ŒκΈ°κ΄€ 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. μ‚¬μš©μžμœ„μΉ˜ μ€‘μ‹¬μœΌλ‘œ 맡이 μžλ™μœΌλ‘œ μ΄λ™ν•˜κ³ , μ£Όλ³€μ˜ 병원을 κ²€μƒ‰ν•©λ‹ˆλ‹€. μ£Όμ†Œμž…λ ₯을 ν†΅ν•œ μœ„μΉ˜λ³€κ²½ κΈ°λŠ₯도 μ œκ³΅ν•©λ‹ˆλ‹€.

medical_1

  • 병원 μ’…λ₯˜, μ§„λ£Œ κ³Όλͺ©, 응급싀 μ—¬λΆ€λ₯Ό μ„ νƒν•˜μ—¬ ν•΄λ‹Ήν•˜λŠ” 병원을 κ²€μƒ‰ν•©λ‹ˆλ‹€. μ•½κ΅­ 선택 μ‹œ 약ꡭ을 κ²€μƒ‰ν•©λ‹ˆλ‹€.

medical_2

  • 병원 상세보기 μ„ νƒν•˜λ©΄ ν•΄λ‹Ή 병원 정보가 λ‚˜μ˜€κ³  지도 클릭 μ‹œ λ³‘μ›κΉŒμ§€ κΈΈμ°ΎκΈ°κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.

medical_3

  • λ‹€μŒμ€ μ˜μ•½ν’ˆ 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. μ‚¬μš©μžλ“€μ΄ κ²€μƒ‰ν•œ μ˜μ•½ν’ˆ TOP5λ¦¬μŠ€νŠΈκ°€ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

medicine_1

  • μ•½ν’ˆλͺ…μœΌλ‘œ 검색 μ‹œ ν•΄λ‹Ήν•˜λŠ” μ•½ν’ˆ λ¦¬μŠ€νŠΈκ°€ κ²€μƒ‰λ©λ‹ˆλ‹€. μ΄ˆκΈ°ν™” μ‹œ μ›λž˜ ν™”λ©΄μœΌλ‘œ λŒμ•„κ°‘λ‹ˆλ‹€.

medicine_2

  • λͺ¨μ–‘μœΌλ‘œ 검색 μ‹œ ν•΄λ‹Ήν•˜λŠ” μ•½ν’ˆ λ¦¬μŠ€νŠΈκ°€ κ²€μƒ‰λ©λ‹ˆλ‹€. μ•½ν’ˆ 선택 μ‹œ 상세정보 ν™”λ©΄μœΌλ‘œ λ°”λ€λ‹ˆλ‹€.

medicine_3

  • λ‹€μŒμ€ 증상 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. λΆ€μœ„ λ³„λ‘œ 증상이 λ°”λ€ŒλŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

disease_1

  • 증상은 μ΅œλŒ€ 6개 선택가λŠ₯ν•˜κ³  μ„ νƒν•œ 증상에 따라 κ²€μƒ‰λ˜λŠ” μ§ˆλ³‘κ²°κ³Όκ°€ λ°”λ€λ‹ˆλ‹€.

disease_2

  • 증상 선택 μ‹œ 상세정보 ν™”λ©΄μœΌλ‘œ λ°”λ€Œκ³ , 상세정보 ν™”λ©΄μ—μ„œ 지도 선택 μ‹œ μ˜λ£ŒκΈ°κ΄€ ν™”λ©΄μœΌλ‘œ μ „ν™˜λ©λ‹ˆλ‹€.

disease_3

  • λ‹€μŒμ€ μ½”λ‘œλ‚˜ 정보 μ‘°νšŒν™”λ©΄μž…λ‹ˆλ‹€. λ‚ μ§œ, λ‚˜μ΄, μ§€μ—­, 성별에 λŒ€ν•œ 정보λ₯Ό κ·Έλž˜ν”„λ‘œ λ³΄μ—¬μ€λ‹ˆλ‹€.

corona

κ°œλ°œν™˜κ²½

Frontend

  • IDE: VSCode
  • Node JS 16.13.x
  • Language: HTML5, Javascript, CSS3
  • Library: React 17.0.2, SCSS, TypeScript, Axios, Redux
  • Open API: Kakao Map API

Backend

  • IDE: IntelliJ 2021.3.1
  • Language: Java 1.8, Python 3.9
  • Framework: Spring Boot 2.4.5
  • Library: Spring Boot JPA, Spring Security, pandas

Data

  • MySQL 8.0.28
  • Hadoop 3.3.1
  • Sqoop 1.4.7

Server

  • Ubuntu 20.04 LTS
  • Jenkins 2.332.1
  • Nginx 1.18.0
  • Docker 20.10.13
  • Docker-compose 1.29.2

Other Tools

  • 회의둝 : Notion
  • μ½”λ“œ 관리: GitLab
  • 일정 관리: Jira
  • μ™€μ΄μ–΄ν”„λ ˆμž„: Figma
  • μ‹œν€€μŠ€ λ‹€μ΄μ–΄κ·Έλž¨: Mermaid
  • ERD μž‘μ„±: ERDCloud
  • 회의 : Webex, Mattermost, Discord

μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜

SystemArchitecture

ER Diagram

lemonaid_erd_220407

μ•ˆλ…•μ¦ˆ νŒ€

teampng

λ°•μŠΉμ›

νŒ€μž₯을 λ§‘μ•„ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λŠ” 것이 μ²˜μŒμ΄μ—¬μ„œ λ§Žμ€ 것이 λ‚―μ„€μ—ˆμŠ΅λ‹ˆλ‹€. 회의λ₯Ό μ§„ν–‰ν•˜λ©°, ν”„λ‘œμ νŠΈκ°€ λ‹€λ₯Έ 길둜 μ ‘μ–΄λ“€μ§€ μ•Šλ„λ‘ 길작이의 역할을 ν•˜κΈ°λ„ ν•˜κ³ , μˆ˜λ§Žμ€ μ˜κ²¬μ„ μ‘°μœ¨ν•˜κ³  더 λ‚˜μ€ μ˜κ²¬μ„ μ΄λŒμ–΄λ‚΄λŠ” 것이 μ‰½μ§€λ§Œμ€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ·Έλž˜λ„ 기간이 μ§€λ‚  수둝 νŒ€μ›λ“€κ³Ό μ˜μ‚¬μ†Œν†΅ν•˜λŠ” 방법을 κΉ¨λ‹«κ³ , μ„œλ‘œ 응원과 κ²©λ €ν•˜λŠ” λΆ„μœ„κΈ°λ₯Ό λ§Œλ“œλŠ” 것에 λ¬˜ν•œ 희열을 느끼며, ν•œμΈ΅ μ„±μž₯ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. 이λ₯Ό κ³„κΈ°λ‘œ λ‹€μŒμ˜ ν”„λ‘œμ νŠΈμ—μ„œλŠ” 더 λ‚˜μ€ νŒ€μž₯의 λͺ¨μŠ΅μ„ 보여쀄 수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.

빅데이터 ν”„λ‘œμ νŠΈμΈ 만큼 μˆ˜λ§Žμ€ 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  이λ₯Ό μ²˜λ¦¬ν•˜λŠ” 과정이 맀우 μ–΄λ ΅κ³  λ³΅μž‘ν–ˆμŠ΅λ‹ˆλ‹€. 빅데이터에 λ―ΈμΉ˜μ§„ λͺ»ν–ˆμ§€λ§Œ μˆ˜λ§Žμ€ 데이터λ₯Ό μ²˜λ¦¬ν•˜μ—¬ μš°λ¦¬μ—κ²Œ ν•„μš”ν•œ 데이터λ₯Ό μΆ”μΆœν•˜κ³  λΆ„μ‚°μ²˜λ¦¬ν•˜λŠ” 과정을 톡해 데이터 뢄야에 λ”μš± 관심을 κ°€μ§€κ²Œ 된 것 κ°™μŠ΅λ‹ˆλ‹€. μ•žμœΌλ‘œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•  λ•ŒλŠ” μŠ€νŒŒν¬μ™€ 같은 λ‹€λ₯Έ 빅데이터 λΌμ΄λΈŒλŸ¬λ¦¬λ„ ν•¨κ»˜ μ‚¬μš©ν•΄λ³΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ§€μˆ˜μ—°

ν•˜λ‘‘μ„ κ°„λ‹¨ν•œ Word Countμ—λ§Œ μ‚¬μš©ν•˜κ²Œ λ˜μ–΄μ„œ μ•„μ‰¬μš΄ 점은 μžˆμ—ˆμ§€λ§Œ λ§Žμ€ μ–‘μ˜ 데이터λ₯Ό κ°€μ§€κ³  ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ 데이터λ₯Ό μ–΄λ–»κ²Œ ν•˜λ©΄ μ’€ 더 λΉ λ₯΄κ³  보기 μ’‹κ²Œ μ œκ³΅ν•  수 μžˆμ„κΉŒμ— λŒ€ν•œ 생각을 ν•  수 있게 된 계기가 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 배포 과정에 λŒ€ν•΄ μ’€ 더 μ΅μˆ™ν•΄μ§ˆ 수 μžˆμ–΄ μ’‹μ•˜κ³ , νŒ€μ›λΆ„λ“€μ΄ 각각의 역할을 묡묡히 ν•΄λ‚˜μ£Όμ…”μ„œ 물흐λ₯΄λ“―이 μ§€λ‚˜κ°ˆ 수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. μž¬λ°Œμ—ˆμŠ΅λ‹ˆλ‹€!

이진곀

λΉ…λ°μ΄ν„°λΌλŠ” 주제λ₯Ό 처음 λ‹€λ€„λ³΄λŠ”μ§€λΌ λ‚œκ΄€μ΄ λ§Žμ•˜μ§€λ§Œ, 데이터 μˆ˜μ§‘ κ³Όμ •λΆ€ν„° μ „μ²˜λ¦¬, λΆ„μ‚°μ²˜λ¦¬λ₯Ό 거쳐 DB에 두고 ν”„λ‘œμ νŠΈμ— λ…Ήμ—¬λ‚΄κΈ°κΉŒμ§€ 일련의 과정을 배울 수 μžˆλŠ” 쒋은 κ²½ν—˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€. μŠ€ν”„λ§ λΆ€νŠΈλ‘œ λ°±μ—”λ“œλ₯Ό κ°œλ°œν•˜λŠ” 데에도 점점 λŠ₯μˆ™ν•΄μ§€λŠ” 것 κ°™κ³ , 이전 ν”„λ‘œμ νŠΈμ—μ„œ 해보고 μ‹Άμ—ˆμ§€λ§Œ ν•˜μ§€ λͺ»ν–ˆλ˜ 배포 과정도 직접 닀뀄볼 수 μžˆμ–΄μ„œ μ’‹μ•˜μŠ΅λ‹ˆλ‹€. λ“ λ“ ν•œ νŒ€μ›λ“€ 덕뢄에 ν›Œλ₯­ν•œ ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€μ–΄λ‚΄λŠ” 쒋은 κ²½ν—˜μ„ ν•  수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. λ‹€μŒ ν”„λ‘œμ νŠΈμ—λ„ μ—΄μ‹¬νžˆ μž„ν•˜μ—¬ 쒋은 결과물을 λ§Œλ“€μ–΄λ‚΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ΄μ’…ν˜„

빅데이터 λΆ„μ‚°μ΄λΌλŠ” λ„λ©”μΈμœΌλ‘œ 아이디어λ₯Ό λ„μΆœν•΄λ‚΄κΈ° νž˜λ“€μ—ˆλŠ”λ° μ‹€μƒν™œμ— 도움이 될 수 μžˆλŠ” 쒋은 아이디어λ₯Ό 찾은 것 κ°™μ•„ λΏŒλ“―ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μ†Œ λΆ€μ‘±ν•œ μ‹œκ°„μ΄μ—ˆμ§€λ§Œ νŒ€μ›λ“€κ³Όμ˜ ν˜‘μ—…μ„ 톡해 잘 λ§ˆλ¬΄λ¦¬ν•  수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. Reactλ₯Ό 2번째둜 μ‚¬μš©ν•΄λ΄€λŠ”λ° μ΄μ œλŠ” 많이 μ΅μˆ™ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. νŒ€μ›λ“€κ³Όμ˜ ν˜‘λ™μ΄ μ€‘μš”ν•˜λ‹€λŠ” 것을 λ‹€μ‹œ ν•œλ²ˆ 깨달을 수 μžˆμ—ˆλ˜ ν”„λ‘œμ νŠΈμ˜€λ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄μƒν˜„

μ£Όμ œμ„ μ •μ΄ λŠ¦μ–΄μ‘ŒμŒμ—λ„ νŒ€μ›λ“€ λͺ¨λ‘κ°€ μ—΄μ‹¬νžˆν•˜λŠ” λΆ„μœ„κΈ°μ—¬μ„œ μ΄ˆκΈ°μ— κΈ°νšν–ˆλ˜λŒ€λ‘œ 결과물을 μ™„μ„±ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν”Όλ“œλ°±μ„ μ£Όκ³  λ°›μœΌλ©΄μ„œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν–ˆκΈ° λ•Œλ¬Έμ— ν˜Όμžμ„  μƒκ°ν•˜μ§€ λͺ»ν–ˆλ˜ 뢀뢄듀을 찾을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈ μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ 쀑간쀑간에 API μˆ˜μ • μš”μ²­λ„ 자주 ν–ˆμ—ˆλŠ”λ° 빨리 μˆ˜μ •ν•΄μ€˜μ„œ κ³ λ§ˆμ› μŠ΅λ‹ˆλ‹€. λ¦¬μ•‘νŠΈμ™€ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ— λŒ€ν•΄ ν•œμΈ΅ 더 곡뢀할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ ν”„λ‘œμ νŠΈ μ§„ν–‰ν•˜λŠ”λ° 큰 도움이 될 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄μˆ˜ν™˜

빅데이터라고 ν•  μˆ˜μ€€μ˜ 데이터 양이 μ•„λ‹ˆμ—ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  ν•΄λ‹Ή 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  μ •μ œν•˜μ—¬ λΆ„μ‚°μ²˜λ¦¬ ν•˜λŠ” 것이 쉽지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 이 κ²½ν—˜μ„ ν†΅ν•΄μ„œ 빅데이터λ₯Ό λΆ„μ‚°μ²˜λ¦¬ν•˜λŠ” μž‘μ—…μ΄ μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•˜κ³  μ‚¬μš©μžμ˜ κ²½ν—˜μ„ ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ 맀우 μ£Όμš”ν•˜λ‹€λŠ” 것을 λŠλ‚„ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

React와 Typescript μ—­μ‹œ 처음 ν™œμš©ν•˜λ‹€λ³΄λ‹ˆ μ μ‘ν•˜λŠ”λ° μ‹œκ°„μ΄ κ±Έλ ΈμœΌλ‚˜ νŒ€μ›λ“€μ΄ 잘 도와쀀 덕뢄에 λΉ λ₯΄κ²Œ μ μ‘ν•΄μ„œ μž‘μ—…μ„ μ§„ν–‰ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ Typescriptλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” 라이브러리λ₯Ό ν™œμš©ν•˜λŠ” κ³Όμ •μ—μ„œ ν•΄κ²°ν•˜μ§€ λͺ»ν•˜κ³  μ‚¬μš©ν•˜μ§€ λͺ»ν•œ 뢀뢄이 λ°œμƒν–ˆλŠ”λ° 좔가적인 ν•™μŠ΅μ„ 톡해 λ‹€μŒ ν”„λ‘œμ νŠΈμ—μ„œ 보닀 완성도 높은 결과물을 얻을 수 μžˆλ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

About

πŸ‹κ±΄κ°• 의료 정보 제곡 ν”Œλž«νΌ

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

πŸ‹ Lemonaid

Lemonaid

β˜€οΈ 기획배경

λͺΈμ— 이상 μ§•ν›„κ°€ μžˆμ„ 경우, 그에 λŒ€ν•œ μ§ˆλ³‘μ„ μ•ŒκΈ°κ°€ 쉽지 μ•ŠμŠ΅λ‹ˆλ‹€.

μ§ˆλ³‘μ„ μ•Œμ•„λ„ μ–΄λ–€ λ³‘μ›μ—μ„œ ν•΄λ‹Ή μ§ˆλ³‘μ„ μ§„λ£Œν•΄μ£ΌλŠ”μ§€ μ•ŒκΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

μ²˜λ°©λ°›μ€ 약에 λŒ€ν•œ 정보λ₯Ό 얻을 방법이 μ œν•œμ μž…λ‹ˆλ‹€.

κ·Έλž˜μ„œ 이λ₯Ό ν•΄κ²°ν•  Lemonaidλ₯Ό κΈ°νšν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

πŸ‘» μ„œλΉ„μŠ€ μ£Όμš”λ‚΄μš©

  • μ£Όμ†Œ 기반 μ£Όλ³€μ˜ μ˜λ£Œμ‹œμ„€ 쑰회(병원쒅λ₯˜, μ§„λ£Œκ³Όλͺ©, 응급싀 μ—¬λΆ€ λ“±) λ‹€μ–‘ν•œ ν˜•νƒœμ˜ μ˜λ£Œμ‹œμ„€ 정보 제곡
  • μ„ νƒν•œ 증상에 λŒ€ν•œ μ§ˆλ³‘ 쑰회
  • μ•½μ˜ μƒκΉ€μƒˆμ— λŒ€ν•œ ν•΄λ‹Ή μ•½μ˜ 정보 쑰회
  • ν˜„μž¬ μ½”λ‘œλ‚˜ ν™•μ§„μž 정보 쑰회

πŸ“£ 차별성

  • μ‚¬μš©μžμ˜ 증상에 λ”°λ₯Έ μ§ˆλ³‘ λͺ©λ‘μ„ μ œκ³΅ν•˜κ³ , μ§ˆλ³‘μ— 따라 μ§„λ£Œ κ°€λŠ₯ν•œ μ˜λ£Œμ‹œμ„€μ„ μ‘°νšŒν•  수 μžˆλ‹€.
  • 병원 규λͺ¨, μ§„λ£Œμ’…λͺ©μ— 따라 μ§„λ£Œ 쀑인 λ³‘μ›μ˜ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • μ½”λ‘œλ‚˜ κ΄€λ ¨ μ˜λ£ŒκΈ°κ΄€(μ„ λ³„μ§„λ£Œμ†Œ λ“±)의 정보λ₯Ό μœ„μΉ˜μ™€ ν•¨κ»˜ 제곡 κ°€λŠ₯ν•˜λ‹€.

🌿 κΈ°λŒ€νš¨κ³Ό

  • μ‚¬μš©μžμ˜ 건강과 μ§κ²°λ˜λŠ” 만큼, μ‹ μ†ν•˜κ³  μ •ν™•ν•œ 정보λ₯Ό 전달할 수 μžˆλ‹€.
  • 정보 전달 μ‹œ, ν•΄λ‹Ή μ˜λ£ŒκΈ°κ΄€μ˜ μœ„μΉ˜ 뿐 μ•„λ‹ˆλΌ μ§„λ£Œκ³Όλͺ© λ“± λ‹€μ–‘ν•œ μ •λ³΄μ œκ³΅ν•  수 μžˆλ‹€.
  • λͺΈμ˜ 이상 징후에 λ”°λ₯Έ μ§ˆλ³‘ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • 볡용 μ•½μ˜ 상세 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • μ½”λ‘œλ‚˜ κ΄€λ ¨ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.

🌡 μ‹œμ—° 및 μ‹œλ‚˜λ¦¬μ˜€

πŸŽ‡ Lemonaid μ„œλΉ„μŠ€ ν™”λ©΄

  • Lemonaid μ„œλΉ„μŠ€μ˜ 메인 ν™”λ©΄μž…λ‹ˆλ‹€.

Main

  • λ‹€μŒμ€ μ˜λ£ŒκΈ°κ΄€ 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. μ‚¬μš©μžμœ„μΉ˜ μ€‘μ‹¬μœΌλ‘œ 맡이 μžλ™μœΌλ‘œ μ΄λ™ν•˜κ³ , μ£Όλ³€μ˜ 병원을 κ²€μƒ‰ν•©λ‹ˆλ‹€. μ£Όμ†Œμž…λ ₯을 ν†΅ν•œ μœ„μΉ˜λ³€κ²½ κΈ°λŠ₯도 μ œκ³΅ν•©λ‹ˆλ‹€.

medical_1

  • 병원 μ’…λ₯˜, μ§„λ£Œ κ³Όλͺ©, 응급싀 μ—¬λΆ€λ₯Ό μ„ νƒν•˜μ—¬ ν•΄λ‹Ήν•˜λŠ” 병원을 κ²€μƒ‰ν•©λ‹ˆλ‹€. μ•½κ΅­ 선택 μ‹œ 약ꡭ을 κ²€μƒ‰ν•©λ‹ˆλ‹€.

medical_2

  • 병원 상세보기 μ„ νƒν•˜λ©΄ ν•΄λ‹Ή 병원 정보가 λ‚˜μ˜€κ³  지도 클릭 μ‹œ λ³‘μ›κΉŒμ§€ κΈΈμ°ΎκΈ°κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.

medical_3

  • λ‹€μŒμ€ μ˜μ•½ν’ˆ 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. μ‚¬μš©μžλ“€μ΄ κ²€μƒ‰ν•œ μ˜μ•½ν’ˆ TOP5λ¦¬μŠ€νŠΈκ°€ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

medicine_1

  • μ•½ν’ˆλͺ…μœΌλ‘œ 검색 μ‹œ ν•΄λ‹Ήν•˜λŠ” μ•½ν’ˆ λ¦¬μŠ€νŠΈκ°€ κ²€μƒ‰λ©λ‹ˆλ‹€. μ΄ˆκΈ°ν™” μ‹œ μ›λž˜ ν™”λ©΄μœΌλ‘œ λŒμ•„κ°‘λ‹ˆλ‹€.

medicine_2

  • λͺ¨μ–‘μœΌλ‘œ 검색 μ‹œ ν•΄λ‹Ήν•˜λŠ” μ•½ν’ˆ λ¦¬μŠ€νŠΈκ°€ κ²€μƒ‰λ©λ‹ˆλ‹€. μ•½ν’ˆ 선택 μ‹œ 상세정보 ν™”λ©΄μœΌλ‘œ λ°”λ€λ‹ˆλ‹€.

medicine_3

  • λ‹€μŒμ€ 증상 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. λΆ€μœ„ λ³„λ‘œ 증상이 λ°”λ€ŒλŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

disease_1

  • 증상은 μ΅œλŒ€ 6개 선택가λŠ₯ν•˜κ³  μ„ νƒν•œ 증상에 따라 κ²€μƒ‰λ˜λŠ” μ§ˆλ³‘κ²°κ³Όκ°€ λ°”λ€λ‹ˆλ‹€.

disease_2

  • 증상 선택 μ‹œ 상세정보 ν™”λ©΄μœΌλ‘œ λ°”λ€Œκ³ , 상세정보 ν™”λ©΄μ—μ„œ 지도 선택 μ‹œ μ˜λ£ŒκΈ°κ΄€ ν™”λ©΄μœΌλ‘œ μ „ν™˜λ©λ‹ˆλ‹€.

disease_3

  • λ‹€μŒμ€ μ½”λ‘œλ‚˜ 정보 μ‘°νšŒν™”λ©΄μž…λ‹ˆλ‹€. λ‚ μ§œ, λ‚˜μ΄, μ§€μ—­, 성별에 λŒ€ν•œ 정보λ₯Ό κ·Έλž˜ν”„λ‘œ λ³΄μ—¬μ€λ‹ˆλ‹€.

corona

κ°œλ°œν™˜κ²½

Frontend

  • IDE: VSCode
  • Node JS 16.13.x
  • Language: HTML5, Javascript, CSS3
  • Library: React 17.0.2, SCSS, TypeScript, Axios, Redux
  • Open API: Kakao Map API

Backend

  • IDE: IntelliJ 2021.3.1
  • Language: Java 1.8, Python 3.9
  • Framework: Spring Boot 2.4.5
  • Library: Spring Boot JPA, Spring Security, pandas

Data

  • MySQL 8.0.28
  • Hadoop 3.3.1
  • Sqoop 1.4.7

Server

  • Ubuntu 20.04 LTS
  • Jenkins 2.332.1
  • Nginx 1.18.0
  • Docker 20.10.13
  • Docker-compose 1.29.2

Other Tools

  • 회의둝 : Notion
  • μ½”λ“œ 관리: GitLab
  • 일정 관리: Jira
  • μ™€μ΄μ–΄ν”„λ ˆμž„: Figma
  • μ‹œν€€μŠ€ λ‹€μ΄μ–΄κ·Έλž¨: Mermaid
  • ERD μž‘μ„±: ERDCloud
  • 회의 : Webex, Mattermost, Discord

μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜

SystemArchitecture

ER Diagram

lemonaid_erd_220407

μ•ˆλ…•μ¦ˆ νŒ€

teampng

λ°•μŠΉμ›

νŒ€μž₯을 λ§‘μ•„ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λŠ” 것이 μ²˜μŒμ΄μ—¬μ„œ λ§Žμ€ 것이 λ‚―μ„€μ—ˆμŠ΅λ‹ˆλ‹€. 회의λ₯Ό μ§„ν–‰ν•˜λ©°, ν”„λ‘œμ νŠΈκ°€ λ‹€λ₯Έ 길둜 μ ‘μ–΄λ“€μ§€ μ•Šλ„λ‘ 길작이의 역할을 ν•˜κΈ°λ„ ν•˜κ³ , μˆ˜λ§Žμ€ μ˜κ²¬μ„ μ‘°μœ¨ν•˜κ³  더 λ‚˜μ€ μ˜κ²¬μ„ μ΄λŒμ–΄λ‚΄λŠ” 것이 μ‰½μ§€λ§Œμ€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ·Έλž˜λ„ 기간이 μ§€λ‚  수둝 νŒ€μ›λ“€κ³Ό μ˜μ‚¬μ†Œν†΅ν•˜λŠ” 방법을 κΉ¨λ‹«κ³ , μ„œλ‘œ 응원과 κ²©λ €ν•˜λŠ” λΆ„μœ„κΈ°λ₯Ό λ§Œλ“œλŠ” 것에 λ¬˜ν•œ 희열을 느끼며, ν•œμΈ΅ μ„±μž₯ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. 이λ₯Ό κ³„κΈ°λ‘œ λ‹€μŒμ˜ ν”„λ‘œμ νŠΈμ—μ„œλŠ” 더 λ‚˜μ€ νŒ€μž₯의 λͺ¨μŠ΅μ„ 보여쀄 수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.

빅데이터 ν”„λ‘œμ νŠΈμΈ 만큼 μˆ˜λ§Žμ€ 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  이λ₯Ό μ²˜λ¦¬ν•˜λŠ” 과정이 맀우 μ–΄λ ΅κ³  λ³΅μž‘ν–ˆμŠ΅λ‹ˆλ‹€. 빅데이터에 λ―ΈμΉ˜μ§„ λͺ»ν–ˆμ§€λ§Œ μˆ˜λ§Žμ€ 데이터λ₯Ό μ²˜λ¦¬ν•˜μ—¬ μš°λ¦¬μ—κ²Œ ν•„μš”ν•œ 데이터λ₯Ό μΆ”μΆœν•˜κ³  λΆ„μ‚°μ²˜λ¦¬ν•˜λŠ” 과정을 톡해 데이터 뢄야에 λ”μš± 관심을 κ°€μ§€κ²Œ 된 것 κ°™μŠ΅λ‹ˆλ‹€. μ•žμœΌλ‘œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•  λ•ŒλŠ” μŠ€νŒŒν¬μ™€ 같은 λ‹€λ₯Έ 빅데이터 λΌμ΄λΈŒλŸ¬λ¦¬λ„ ν•¨κ»˜ μ‚¬μš©ν•΄λ³΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ§€μˆ˜μ—°

ν•˜λ‘‘μ„ κ°„λ‹¨ν•œ Word Countμ—λ§Œ μ‚¬μš©ν•˜κ²Œ λ˜μ–΄μ„œ μ•„μ‰¬μš΄ 점은 μžˆμ—ˆμ§€λ§Œ λ§Žμ€ μ–‘μ˜ 데이터λ₯Ό κ°€μ§€κ³  ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ 데이터λ₯Ό μ–΄λ–»κ²Œ ν•˜λ©΄ μ’€ 더 λΉ λ₯΄κ³  보기 μ’‹κ²Œ μ œκ³΅ν•  수 μžˆμ„κΉŒμ— λŒ€ν•œ 생각을 ν•  수 있게 된 계기가 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 배포 과정에 λŒ€ν•΄ μ’€ 더 μ΅μˆ™ν•΄μ§ˆ 수 μžˆμ–΄ μ’‹μ•˜κ³ , νŒ€μ›λΆ„λ“€μ΄ 각각의 역할을 묡묡히 ν•΄λ‚˜μ£Όμ…”μ„œ 물흐λ₯΄λ“―이 μ§€λ‚˜κ°ˆ 수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. μž¬λ°Œμ—ˆμŠ΅λ‹ˆλ‹€!

이진곀

λΉ…λ°μ΄ν„°λΌλŠ” 주제λ₯Ό 처음 λ‹€λ€„λ³΄λŠ”μ§€λΌ λ‚œκ΄€μ΄ λ§Žμ•˜μ§€λ§Œ, 데이터 μˆ˜μ§‘ κ³Όμ •λΆ€ν„° μ „μ²˜λ¦¬, λΆ„μ‚°μ²˜λ¦¬λ₯Ό 거쳐 DB에 두고 ν”„λ‘œμ νŠΈμ— λ…Ήμ—¬λ‚΄κΈ°κΉŒμ§€ 일련의 과정을 배울 수 μžˆλŠ” 쒋은 κ²½ν—˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€. μŠ€ν”„λ§ λΆ€νŠΈλ‘œ λ°±μ—”λ“œλ₯Ό κ°œλ°œν•˜λŠ” 데에도 점점 λŠ₯μˆ™ν•΄μ§€λŠ” 것 κ°™κ³ , 이전 ν”„λ‘œμ νŠΈμ—μ„œ 해보고 μ‹Άμ—ˆμ§€λ§Œ ν•˜μ§€ λͺ»ν–ˆλ˜ 배포 과정도 직접 닀뀄볼 수 μžˆμ–΄μ„œ μ’‹μ•˜μŠ΅λ‹ˆλ‹€. λ“ λ“ ν•œ νŒ€μ›λ“€ 덕뢄에 ν›Œλ₯­ν•œ ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€μ–΄λ‚΄λŠ” 쒋은 κ²½ν—˜μ„ ν•  수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. λ‹€μŒ ν”„λ‘œμ νŠΈμ—λ„ μ—΄μ‹¬νžˆ μž„ν•˜μ—¬ 쒋은 결과물을 λ§Œλ“€μ–΄λ‚΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ΄μ’…ν˜„

빅데이터 λΆ„μ‚°μ΄λΌλŠ” λ„λ©”μΈμœΌλ‘œ 아이디어λ₯Ό λ„μΆœν•΄λ‚΄κΈ° νž˜λ“€μ—ˆλŠ”λ° μ‹€μƒν™œμ— 도움이 될 수 μžˆλŠ” 쒋은 아이디어λ₯Ό 찾은 것 κ°™μ•„ λΏŒλ“―ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μ†Œ λΆ€μ‘±ν•œ μ‹œκ°„μ΄μ—ˆμ§€λ§Œ νŒ€μ›λ“€κ³Όμ˜ ν˜‘μ—…μ„ 톡해 잘 λ§ˆλ¬΄λ¦¬ν•  수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. Reactλ₯Ό 2번째둜 μ‚¬μš©ν•΄λ΄€λŠ”λ° μ΄μ œλŠ” 많이 μ΅μˆ™ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. νŒ€μ›λ“€κ³Όμ˜ ν˜‘λ™μ΄ μ€‘μš”ν•˜λ‹€λŠ” 것을 λ‹€μ‹œ ν•œλ²ˆ 깨달을 수 μžˆμ—ˆλ˜ ν”„λ‘œμ νŠΈμ˜€λ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄μƒν˜„

μ£Όμ œμ„ μ •μ΄ λŠ¦μ–΄μ‘ŒμŒμ—λ„ νŒ€μ›λ“€ λͺ¨λ‘κ°€ μ—΄μ‹¬νžˆν•˜λŠ” λΆ„μœ„κΈ°μ—¬μ„œ μ΄ˆκΈ°μ— κΈ°νšν–ˆλ˜λŒ€λ‘œ 결과물을 μ™„μ„±ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν”Όλ“œλ°±μ„ μ£Όκ³  λ°›μœΌλ©΄μ„œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν–ˆκΈ° λ•Œλ¬Έμ— ν˜Όμžμ„  μƒκ°ν•˜μ§€ λͺ»ν–ˆλ˜ 뢀뢄듀을 찾을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈ μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ 쀑간쀑간에 API μˆ˜μ • μš”μ²­λ„ 자주 ν–ˆμ—ˆλŠ”λ° 빨리 μˆ˜μ •ν•΄μ€˜μ„œ κ³ λ§ˆμ› μŠ΅λ‹ˆλ‹€. λ¦¬μ•‘νŠΈμ™€ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ— λŒ€ν•΄ ν•œμΈ΅ 더 곡뢀할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ ν”„λ‘œμ νŠΈ μ§„ν–‰ν•˜λŠ”λ° 큰 도움이 될 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄μˆ˜ν™˜

빅데이터라고 ν•  μˆ˜μ€€μ˜ 데이터 양이 μ•„λ‹ˆμ—ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  ν•΄λ‹Ή 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  μ •μ œν•˜μ—¬ λΆ„μ‚°μ²˜λ¦¬ ν•˜λŠ” 것이 쉽지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 이 κ²½ν—˜μ„ ν†΅ν•΄μ„œ 빅데이터λ₯Ό λΆ„μ‚°μ²˜λ¦¬ν•˜λŠ” μž‘μ—…μ΄ μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•˜κ³  μ‚¬μš©μžμ˜ κ²½ν—˜μ„ ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ 맀우 μ£Όμš”ν•˜λ‹€λŠ” 것을 λŠλ‚„ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

React와 Typescript μ—­μ‹œ 처음 ν™œμš©ν•˜λ‹€λ³΄λ‹ˆ μ μ‘ν•˜λŠ”λ° μ‹œκ°„μ΄ κ±Έλ ΈμœΌλ‚˜ νŒ€μ›λ“€μ΄ 잘 도와쀀 덕뢄에 λΉ λ₯΄κ²Œ μ μ‘ν•΄μ„œ μž‘μ—…μ„ μ§„ν–‰ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ Typescriptλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” 라이브러리λ₯Ό ν™œμš©ν•˜λŠ” κ³Όμ •μ—μ„œ ν•΄κ²°ν•˜μ§€ λͺ»ν•˜κ³  μ‚¬μš©ν•˜μ§€ λͺ»ν•œ 뢀뢄이 λ°œμƒν–ˆλŠ”λ° 좔가적인 ν•™μŠ΅μ„ 톡해 λ‹€μŒ ν”„λ‘œμ νŠΈμ—μ„œ 보닀 완성도 높은 결과물을 얻을 수 μžˆλ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

About

πŸ‹κ±΄κ°• 의료 정보 제곡 ν”Œλž«νΌ

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

πŸ‹ Lemonaid

Lemonaid

β˜€οΈ 기획배경

λͺΈμ— 이상 μ§•ν›„κ°€ μžˆμ„ 경우, 그에 λŒ€ν•œ μ§ˆλ³‘μ„ μ•ŒκΈ°κ°€ 쉽지 μ•ŠμŠ΅λ‹ˆλ‹€.

μ§ˆλ³‘μ„ μ•Œμ•„λ„ μ–΄λ–€ λ³‘μ›μ—μ„œ ν•΄λ‹Ή μ§ˆλ³‘μ„ μ§„λ£Œν•΄μ£ΌλŠ”μ§€ μ•ŒκΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

μ²˜λ°©λ°›μ€ 약에 λŒ€ν•œ 정보λ₯Ό 얻을 방법이 μ œν•œμ μž…λ‹ˆλ‹€.

κ·Έλž˜μ„œ 이λ₯Ό ν•΄κ²°ν•  Lemonaidλ₯Ό κΈ°νšν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

πŸ‘» μ„œλΉ„μŠ€ μ£Όμš”λ‚΄μš©

  • μ£Όμ†Œ 기반 μ£Όλ³€μ˜ μ˜λ£Œμ‹œμ„€ 쑰회(병원쒅λ₯˜, μ§„λ£Œκ³Όλͺ©, 응급싀 μ—¬λΆ€ λ“±) λ‹€μ–‘ν•œ ν˜•νƒœμ˜ μ˜λ£Œμ‹œμ„€ 정보 제곡
  • μ„ νƒν•œ 증상에 λŒ€ν•œ μ§ˆλ³‘ 쑰회
  • μ•½μ˜ μƒκΉ€μƒˆμ— λŒ€ν•œ ν•΄λ‹Ή μ•½μ˜ 정보 쑰회
  • ν˜„μž¬ μ½”λ‘œλ‚˜ ν™•μ§„μž 정보 쑰회

πŸ“£ 차별성

  • μ‚¬μš©μžμ˜ 증상에 λ”°λ₯Έ μ§ˆλ³‘ λͺ©λ‘μ„ μ œκ³΅ν•˜κ³ , μ§ˆλ³‘μ— 따라 μ§„λ£Œ κ°€λŠ₯ν•œ μ˜λ£Œμ‹œμ„€μ„ μ‘°νšŒν•  수 μžˆλ‹€.
  • 병원 규λͺ¨, μ§„λ£Œμ’…λͺ©μ— 따라 μ§„λ£Œ 쀑인 λ³‘μ›μ˜ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • μ½”λ‘œλ‚˜ κ΄€λ ¨ μ˜λ£ŒκΈ°κ΄€(μ„ λ³„μ§„λ£Œμ†Œ λ“±)의 정보λ₯Ό μœ„μΉ˜μ™€ ν•¨κ»˜ 제곡 κ°€λŠ₯ν•˜λ‹€.

🌿 κΈ°λŒ€νš¨κ³Ό

  • μ‚¬μš©μžμ˜ 건강과 μ§κ²°λ˜λŠ” 만큼, μ‹ μ†ν•˜κ³  μ •ν™•ν•œ 정보λ₯Ό 전달할 수 μžˆλ‹€.
  • 정보 전달 μ‹œ, ν•΄λ‹Ή μ˜λ£ŒκΈ°κ΄€μ˜ μœ„μΉ˜ 뿐 μ•„λ‹ˆλΌ μ§„λ£Œκ³Όλͺ© λ“± λ‹€μ–‘ν•œ μ •λ³΄μ œκ³΅ν•  수 μžˆλ‹€.
  • λͺΈμ˜ 이상 징후에 λ”°λ₯Έ μ§ˆλ³‘ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • 볡용 μ•½μ˜ 상세 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
  • μ½”λ‘œλ‚˜ κ΄€λ ¨ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.

🌡 μ‹œμ—° 및 μ‹œλ‚˜λ¦¬μ˜€

πŸŽ‡ Lemonaid μ„œλΉ„μŠ€ ν™”λ©΄

  • Lemonaid μ„œλΉ„μŠ€μ˜ 메인 ν™”λ©΄μž…λ‹ˆλ‹€.

Main

  • λ‹€μŒμ€ μ˜λ£ŒκΈ°κ΄€ 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. μ‚¬μš©μžμœ„μΉ˜ μ€‘μ‹¬μœΌλ‘œ 맡이 μžλ™μœΌλ‘œ μ΄λ™ν•˜κ³ , μ£Όλ³€μ˜ 병원을 κ²€μƒ‰ν•©λ‹ˆλ‹€. μ£Όμ†Œμž…λ ₯을 ν†΅ν•œ μœ„μΉ˜λ³€κ²½ κΈ°λŠ₯도 μ œκ³΅ν•©λ‹ˆλ‹€.

medical_1

  • 병원 μ’…λ₯˜, μ§„λ£Œ κ³Όλͺ©, 응급싀 μ—¬λΆ€λ₯Ό μ„ νƒν•˜μ—¬ ν•΄λ‹Ήν•˜λŠ” 병원을 κ²€μƒ‰ν•©λ‹ˆλ‹€. μ•½κ΅­ 선택 μ‹œ 약ꡭ을 κ²€μƒ‰ν•©λ‹ˆλ‹€.

medical_2

  • 병원 상세보기 μ„ νƒν•˜λ©΄ ν•΄λ‹Ή 병원 정보가 λ‚˜μ˜€κ³  지도 클릭 μ‹œ λ³‘μ›κΉŒμ§€ κΈΈμ°ΎκΈ°κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.

medical_3

  • λ‹€μŒμ€ μ˜μ•½ν’ˆ 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. μ‚¬μš©μžλ“€μ΄ κ²€μƒ‰ν•œ μ˜μ•½ν’ˆ TOP5λ¦¬μŠ€νŠΈκ°€ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

medicine_1

  • μ•½ν’ˆλͺ…μœΌλ‘œ 검색 μ‹œ ν•΄λ‹Ήν•˜λŠ” μ•½ν’ˆ λ¦¬μŠ€νŠΈκ°€ κ²€μƒ‰λ©λ‹ˆλ‹€. μ΄ˆκΈ°ν™” μ‹œ μ›λž˜ ν™”λ©΄μœΌλ‘œ λŒμ•„κ°‘λ‹ˆλ‹€.

medicine_2

  • λͺ¨μ–‘μœΌλ‘œ 검색 μ‹œ ν•΄λ‹Ήν•˜λŠ” μ•½ν’ˆ λ¦¬μŠ€νŠΈκ°€ κ²€μƒ‰λ©λ‹ˆλ‹€. μ•½ν’ˆ 선택 μ‹œ 상세정보 ν™”λ©΄μœΌλ‘œ λ°”λ€λ‹ˆλ‹€.

medicine_3

  • λ‹€μŒμ€ 증상 쑰회 ν™”λ©΄μž…λ‹ˆλ‹€. λΆ€μœ„ λ³„λ‘œ 증상이 λ°”λ€ŒλŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

disease_1

  • 증상은 μ΅œλŒ€ 6개 선택가λŠ₯ν•˜κ³  μ„ νƒν•œ 증상에 따라 κ²€μƒ‰λ˜λŠ” μ§ˆλ³‘κ²°κ³Όκ°€ λ°”λ€λ‹ˆλ‹€.

disease_2

  • 증상 선택 μ‹œ 상세정보 ν™”λ©΄μœΌλ‘œ λ°”λ€Œκ³ , 상세정보 ν™”λ©΄μ—μ„œ 지도 선택 μ‹œ μ˜λ£ŒκΈ°κ΄€ ν™”λ©΄μœΌλ‘œ μ „ν™˜λ©λ‹ˆλ‹€.

disease_3

  • λ‹€μŒμ€ μ½”λ‘œλ‚˜ 정보 μ‘°νšŒν™”λ©΄μž…λ‹ˆλ‹€. λ‚ μ§œ, λ‚˜μ΄, μ§€μ—­, 성별에 λŒ€ν•œ 정보λ₯Ό κ·Έλž˜ν”„λ‘œ λ³΄μ—¬μ€λ‹ˆλ‹€.

corona

κ°œλ°œν™˜κ²½

Frontend

  • IDE: VSCode
  • Node JS 16.13.x
  • Language: HTML5, Javascript, CSS3
  • Library: React 17.0.2, SCSS, TypeScript, Axios, Redux
  • Open API: Kakao Map API

Backend

  • IDE: IntelliJ 2021.3.1
  • Language: Java 1.8, Python 3.9
  • Framework: Spring Boot 2.4.5
  • Library: Spring Boot JPA, Spring Security, pandas

Data

  • MySQL 8.0.28
  • Hadoop 3.3.1
  • Sqoop 1.4.7

Server

  • Ubuntu 20.04 LTS
  • Jenkins 2.332.1
  • Nginx 1.18.0
  • Docker 20.10.13
  • Docker-compose 1.29.2

Other Tools

  • 회의둝 : Notion
  • μ½”λ“œ 관리: GitLab
  • 일정 관리: Jira
  • μ™€μ΄μ–΄ν”„λ ˆμž„: Figma
  • μ‹œν€€μŠ€ λ‹€μ΄μ–΄κ·Έλž¨: Mermaid
  • ERD μž‘μ„±: ERDCloud
  • 회의 : Webex, Mattermost, Discord

μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜

SystemArchitecture

ER Diagram

lemonaid_erd_220407

μ•ˆλ…•μ¦ˆ νŒ€

teampng

λ°•μŠΉμ›

νŒ€μž₯을 λ§‘μ•„ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λŠ” 것이 μ²˜μŒμ΄μ—¬μ„œ λ§Žμ€ 것이 λ‚―μ„€μ—ˆμŠ΅λ‹ˆλ‹€. 회의λ₯Ό μ§„ν–‰ν•˜λ©°, ν”„λ‘œμ νŠΈκ°€ λ‹€λ₯Έ 길둜 μ ‘μ–΄λ“€μ§€ μ•Šλ„λ‘ 길작이의 역할을 ν•˜κΈ°λ„ ν•˜κ³ , μˆ˜λ§Žμ€ μ˜κ²¬μ„ μ‘°μœ¨ν•˜κ³  더 λ‚˜μ€ μ˜κ²¬μ„ μ΄λŒμ–΄λ‚΄λŠ” 것이 μ‰½μ§€λ§Œμ€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ·Έλž˜λ„ 기간이 μ§€λ‚  수둝 νŒ€μ›λ“€κ³Ό μ˜μ‚¬μ†Œν†΅ν•˜λŠ” 방법을 κΉ¨λ‹«κ³ , μ„œλ‘œ 응원과 κ²©λ €ν•˜λŠ” λΆ„μœ„κΈ°λ₯Ό λ§Œλ“œλŠ” 것에 λ¬˜ν•œ 희열을 느끼며, ν•œμΈ΅ μ„±μž₯ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. 이λ₯Ό κ³„κΈ°λ‘œ λ‹€μŒμ˜ ν”„λ‘œμ νŠΈμ—μ„œλŠ” 더 λ‚˜μ€ νŒ€μž₯의 λͺ¨μŠ΅μ„ 보여쀄 수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.

빅데이터 ν”„λ‘œμ νŠΈμΈ 만큼 μˆ˜λ§Žμ€ 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  이λ₯Ό μ²˜λ¦¬ν•˜λŠ” 과정이 맀우 μ–΄λ ΅κ³  λ³΅μž‘ν–ˆμŠ΅λ‹ˆλ‹€. 빅데이터에 λ―ΈμΉ˜μ§„ λͺ»ν–ˆμ§€λ§Œ μˆ˜λ§Žμ€ 데이터λ₯Ό μ²˜λ¦¬ν•˜μ—¬ μš°λ¦¬μ—κ²Œ ν•„μš”ν•œ 데이터λ₯Ό μΆ”μΆœν•˜κ³  λΆ„μ‚°μ²˜λ¦¬ν•˜λŠ” 과정을 톡해 데이터 뢄야에 λ”μš± 관심을 κ°€μ§€κ²Œ 된 것 κ°™μŠ΅λ‹ˆλ‹€. μ•žμœΌλ‘œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•  λ•ŒλŠ” μŠ€νŒŒν¬μ™€ 같은 λ‹€λ₯Έ 빅데이터 λΌμ΄λΈŒλŸ¬λ¦¬λ„ ν•¨κ»˜ μ‚¬μš©ν•΄λ³΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ§€μˆ˜μ—°

ν•˜λ‘‘μ„ κ°„λ‹¨ν•œ Word Countμ—λ§Œ μ‚¬μš©ν•˜κ²Œ λ˜μ–΄μ„œ μ•„μ‰¬μš΄ 점은 μžˆμ—ˆμ§€λ§Œ λ§Žμ€ μ–‘μ˜ 데이터λ₯Ό κ°€μ§€κ³  ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ 데이터λ₯Ό μ–΄λ–»κ²Œ ν•˜λ©΄ μ’€ 더 λΉ λ₯΄κ³  보기 μ’‹κ²Œ μ œκ³΅ν•  수 μžˆμ„κΉŒμ— λŒ€ν•œ 생각을 ν•  수 있게 된 계기가 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 배포 과정에 λŒ€ν•΄ μ’€ 더 μ΅μˆ™ν•΄μ§ˆ 수 μžˆμ–΄ μ’‹μ•˜κ³ , νŒ€μ›λΆ„λ“€μ΄ 각각의 역할을 묡묡히 ν•΄λ‚˜μ£Όμ…”μ„œ 물흐λ₯΄λ“―이 μ§€λ‚˜κ°ˆ 수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. μž¬λ°Œμ—ˆμŠ΅λ‹ˆλ‹€!

이진곀

λΉ…λ°μ΄ν„°λΌλŠ” 주제λ₯Ό 처음 λ‹€λ€„λ³΄λŠ”μ§€λΌ λ‚œκ΄€μ΄ λ§Žμ•˜μ§€λ§Œ, 데이터 μˆ˜μ§‘ κ³Όμ •λΆ€ν„° μ „μ²˜λ¦¬, λΆ„μ‚°μ²˜λ¦¬λ₯Ό 거쳐 DB에 두고 ν”„λ‘œμ νŠΈμ— λ…Ήμ—¬λ‚΄κΈ°κΉŒμ§€ 일련의 과정을 배울 수 μžˆλŠ” 쒋은 κ²½ν—˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€. μŠ€ν”„λ§ λΆ€νŠΈλ‘œ λ°±μ—”λ“œλ₯Ό κ°œλ°œν•˜λŠ” 데에도 점점 λŠ₯μˆ™ν•΄μ§€λŠ” 것 κ°™κ³ , 이전 ν”„λ‘œμ νŠΈμ—μ„œ 해보고 μ‹Άμ—ˆμ§€λ§Œ ν•˜μ§€ λͺ»ν–ˆλ˜ 배포 과정도 직접 닀뀄볼 수 μžˆμ–΄μ„œ μ’‹μ•˜μŠ΅λ‹ˆλ‹€. λ“ λ“ ν•œ νŒ€μ›λ“€ 덕뢄에 ν›Œλ₯­ν•œ ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€μ–΄λ‚΄λŠ” 쒋은 κ²½ν—˜μ„ ν•  수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. λ‹€μŒ ν”„λ‘œμ νŠΈμ—λ„ μ—΄μ‹¬νžˆ μž„ν•˜μ—¬ 쒋은 결과물을 λ§Œλ“€μ–΄λ‚΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ΄μ’…ν˜„

빅데이터 λΆ„μ‚°μ΄λΌλŠ” λ„λ©”μΈμœΌλ‘œ 아이디어λ₯Ό λ„μΆœν•΄λ‚΄κΈ° νž˜λ“€μ—ˆλŠ”λ° μ‹€μƒν™œμ— 도움이 될 수 μžˆλŠ” 쒋은 아이디어λ₯Ό 찾은 것 κ°™μ•„ λΏŒλ“―ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μ†Œ λΆ€μ‘±ν•œ μ‹œκ°„μ΄μ—ˆμ§€λ§Œ νŒ€μ›λ“€κ³Όμ˜ ν˜‘μ—…μ„ 톡해 잘 λ§ˆλ¬΄λ¦¬ν•  수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. Reactλ₯Ό 2번째둜 μ‚¬μš©ν•΄λ΄€λŠ”λ° μ΄μ œλŠ” 많이 μ΅μˆ™ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. νŒ€μ›λ“€κ³Όμ˜ ν˜‘λ™μ΄ μ€‘μš”ν•˜λ‹€λŠ” 것을 λ‹€μ‹œ ν•œλ²ˆ 깨달을 수 μžˆμ—ˆλ˜ ν”„λ‘œμ νŠΈμ˜€λ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄μƒν˜„

μ£Όμ œμ„ μ •μ΄ λŠ¦μ–΄μ‘ŒμŒμ—λ„ νŒ€μ›λ“€ λͺ¨λ‘κ°€ μ—΄μ‹¬νžˆν•˜λŠ” λΆ„μœ„κΈ°μ—¬μ„œ μ΄ˆκΈ°μ— κΈ°νšν–ˆλ˜λŒ€λ‘œ 결과물을 μ™„μ„±ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν”Όλ“œλ°±μ„ μ£Όκ³  λ°›μœΌλ©΄μ„œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν–ˆκΈ° λ•Œλ¬Έμ— ν˜Όμžμ„  μƒκ°ν•˜μ§€ λͺ»ν–ˆλ˜ 뢀뢄듀을 찾을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈ μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ 쀑간쀑간에 API μˆ˜μ • μš”μ²­λ„ 자주 ν–ˆμ—ˆλŠ”λ° 빨리 μˆ˜μ •ν•΄μ€˜μ„œ κ³ λ§ˆμ› μŠ΅λ‹ˆλ‹€. λ¦¬μ•‘νŠΈμ™€ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ— λŒ€ν•΄ ν•œμΈ΅ 더 곡뢀할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ ν”„λ‘œμ νŠΈ μ§„ν–‰ν•˜λŠ”λ° 큰 도움이 될 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄μˆ˜ν™˜

빅데이터라고 ν•  μˆ˜μ€€μ˜ 데이터 양이 μ•„λ‹ˆμ—ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  ν•΄λ‹Ή 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  μ •μ œν•˜μ—¬ λΆ„μ‚°μ²˜λ¦¬ ν•˜λŠ” 것이 쉽지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 이 κ²½ν—˜μ„ ν†΅ν•΄μ„œ 빅데이터λ₯Ό λΆ„μ‚°μ²˜λ¦¬ν•˜λŠ” μž‘μ—…μ΄ μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•˜κ³  μ‚¬μš©μžμ˜ κ²½ν—˜μ„ ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ 맀우 μ£Όμš”ν•˜λ‹€λŠ” 것을 λŠλ‚„ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

React와 Typescript μ—­μ‹œ 처음 ν™œμš©ν•˜λ‹€λ³΄λ‹ˆ μ μ‘ν•˜λŠ”λ° μ‹œκ°„μ΄ κ±Έλ ΈμœΌλ‚˜ νŒ€μ›λ“€μ΄ 잘 도와쀀 덕뢄에 λΉ λ₯΄κ²Œ μ μ‘ν•΄μ„œ μž‘μ—…μ„ μ§„ν–‰ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ Typescriptλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” 라이브러리λ₯Ό ν™œμš©ν•˜λŠ” κ³Όμ •μ—μ„œ ν•΄κ²°ν•˜μ§€ λͺ»ν•˜κ³  μ‚¬μš©ν•˜μ§€ λͺ»ν•œ 뢀뢄이 λ°œμƒν–ˆλŠ”λ° 좔가적인 ν•™μŠ΅μ„ 톡해 λ‹€μŒ ν”„λ‘œμ νŠΈμ—μ„œ 보닀 완성도 높은 결과물을 얻을 수 μžˆλ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

About

πŸ‹κ±΄κ°• 의료 정보 제곡 ν”Œλž«νΌ

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages