Skip to content

lhy0718/2021-SE-Team-Project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Attendance Management System

ꡐ사-μˆ˜μ—…μƒμ„ΈνŽ˜μ΄μ§€

Contents

- Frontend & Server READ.ME

Contributors

이름 ν•™λ²ˆ Github ID λΉ„κ³ 
κΉ€μ§€ν˜œ 20161863 jihye-kim11
λ°•μ’…ν˜ 20185536 jjonyo PM
μœ€μ§„ν˜Έ 20161676 jhyoon9705
μ΄ν•œμš© 20151322 lhy0718
μ •λ‚˜λ¦° 20180396 jnl1128
진겸 20153031 kevinOriginal

Demo

Live Demo μ ‘μ†ν•˜κΈ°

Local μ—μ„œ 싀행을 ν•˜λŠ” 방법

ν΄λΌμ΄μ–ΈνŠΈ(Web)은 Node.js μœ„μ—μ„œ, μ„œλ²„μ™€ DBλŠ” μš΄μ˜μ²΄μ œμ— 상관없이 λŠ” docker μœ„μ—μ„œ λŒμ•„κ°€λ―€λ‘œ λ‹€μŒ ν™˜κ²½λ§Œ κ°–μΆ”κ³  있으면 λœλ‹€.

미리 μ„€μΉ˜ ν•΄μ•Ό ν•  것

  • Node.js 14 이상 & npm
  • yarn 1.0 이상
  • Docker Deskop
  • docker-compose
  1. yarn 이 κΉ”λ €μžˆμ§€ μ•Šλ‹€λ©΄, λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
# μ•„λ¬΄λŒ€μ„œλ‚˜ μ‹€ν–‰ κ°€λŠ₯
$ npm install -g yarn

yarn을 κΉ” λ•Œ λΉΌκ³€ npm λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•  일이 μ—†μœΌλ‹ˆ μœ μ˜ν•΄μ£Όμ„Έμš”.

Docker μ»¨ν…Œμ΄λ„ˆλ₯Ό 톡해 μ„œλ²„μ™€ DBλ₯Ό λ„μš°λŠ” 방법

  1. yarn 및 docker-compose κ°€ 잘 μ„€μΉ˜ λ˜μ—ˆλ‚˜ 확인
$ yarn --version
1.22.5 # μ΄λ ‡κ²Œ 버전 λͺ…이 뜨면 성곡 (κΌ­ 이 버전과 μΌμΉ˜ν•˜μ§€ μ•Šμ•„λ„ 무방)

$ docker-compose --version
docker-compose version 1.29.1, build c34c88b2 # # μ΄λ ‡κ²Œ 버전 λͺ…이 뜨면 성곡 (κΌ­ 이 버전과 μΌμΉ˜ν•˜μ§€ μ•Šμ•„λ„ 무방)
  1. νŒ¨ν‚€μ§€ μ˜μ‘΄μ„± μ„€μΉ˜ (package.json이 λ°”λ€” λ•Œ λ§ˆλ‹€ ν•΄μ£Όμ–΄μ•Ό 함 )
# λ£¨λ“œμ— μžˆλ‹€λŠ” κ°€μ •ν•˜μ— server둜 듀어감
$ cd ./server

# server 디렉토리 λ‚΄μ—μ„œ μ‹€ν–‰
$ yarn

이러면 νŒ¨ν‚€μ§€λ“€μ΄ 깔리고, 이미 λ‹€ κΉ”λ €μžˆλ‹€λ©΄ Already up to date 라 λœΉλ‹ˆλ‹€.

  1. Docker composeλ₯Ό 톡해 μ»¨ν…Œμ΄λ„ˆλ₯Ό λ„μš°κ³  정해진 λͺ…λ Ήμ–΄λ₯Ό 미리 μ‹€ν–‰ν•΄ μ„œλ²„μ™€ λ””λΉ„λ₯Ό λ„μ›λ‹ˆλ‹€. (λ”°λΌμ„œ μš°λ¦¬λŠ” λ”°λ‘œ μ„œλ²„μ™€ λ””λΉ„λ₯Ό 킬 ν•„μš”κ°€ μ—†μŒ)
# 주의 ν”„λ‘œμ νŠΈ 루트 λ””λ ‰ν† λ¦¬μ—μ„œ 싀행해야함! (/server 이 μ•„λ‹™λ‹ˆλ‹€)
$ cd .. # server 내에 μžˆμ„ λ•Œλ§Œ 이 λͺ…λ Ήμ–΄λ₯Ό 톡해 루트둜 λ‚˜μ˜¨λ‹€. (이미 루트면 μ‹€ν–‰ ν•  ν•„μš” X)
$ docker-compose -f docker-compose.dev.yml up
  1. κ°œλ°œμ„ 마치고 μ’…λ£Œν•  λ•Œ (ν„°λ―Έλ„μ—μ„œ 도컀 ν™˜κ²½μ„ 끄고 싢을 λ•Œ)
Ctrl+C λˆ„λ₯΄λ©΄ 됨 (Mac & Windows 동일함)

Node.js λ₯Ό μ‚¬μš©ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ 개발 μ„œλ²„ λ„μš°κΈ°

  1. νŒ¨ν‚€μ§€ μ˜μ‘΄μ„± μ„€μΉ˜ (package.json이 λ°”λ€” λ•Œ λ§ˆλ‹€ ν•΄μ£Όμ–΄μ•Ό 함 )

    # λ£¨λ“œμ— μžˆλ‹€λŠ” κ°€μ •ν•˜μ— server둜 듀어감
    $ cd ./frontend
    
    # server 디렉토리 λ‚΄μ—μ„œ μ‹€ν–‰
    $ yarn

    이러면 ν”„λŸ°νŠΈμ—”λ“œμ— ν•„μš”ν•œ νŒ¨ν‚€μ§€λ“€μ΄ 깔리고, 이미 λ‹€ κΉ”λ €μžˆλ‹€λ©΄ Already up to date 라 λœΉλ‹ˆλ‹€.

  2. ν•΄λ‹Ή λ””λ ‰ν† λ¦¬μ—μ„œ λ°”λ‘œ yarn을 톡해 개발 μ„œλ²„λ₯Ό μ‹€ν–‰ ν•©λ‹ˆλ‹€.

    # 주의 ν”„λ‘œμ νŠΈ 루트 λ””λ ‰ν† λ¦¬μ—μ„œ 싀행해야함! (/server 이 μ•„λ‹™λ‹ˆλ‹€)
    $ yarn start
  3. κ°œλ°œμ„ 마치고 μ’…λ£Œν•  λ•Œ (ν„°λ―Έλ„μ—μ„œ 도컀 ν™˜κ²½μ„ 끄고 싢을 λ•Œ)

     Ctrl+C λˆ„λ₯΄λ©΄ 됨 (Mac & Windows 동일함)
      

Problem Statement

Problem and Purpose

μ½”λ‘œλ‚˜-19 λ°”μ΄λŸ¬μŠ€λ‘œ μΈν•œ λΉ„λŒ€λ©΄ μˆ˜μ—…μ΄ μž₯κΈ°ν™”λ˜μ—ˆλ‹€. 제 4μ°¨ 감염이 μ˜ˆμƒλ˜λŠ” κ°€μš΄λ°, μ΄ˆμ€‘κ³ λ“±ν•™κ΅ 학생듀은 λŒλ΄„ λΆ€μž¬ 속에 λ°©μΉ˜λ˜μ–΄ μžˆλ‹€. λΉ„λŒ€λ©΄ 상황 μ†μ—μ„œ ꡐ수자, ν•™λΆ€λͺ¨ 학생은 μ•„λž˜μ™€ 같은 λ¬Έμ œμ μ„ κ²ͺκ³  μžˆλ‹€.

  1. κ΅μˆ˜μžλŠ” ν•™μƒμ—κ²Œ 곡지사항이 μ œλŒ€λ‘œ 전달이 λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜κΈ° μ–΄λ ΅λ‹€.
  2. ν•™λΆ€λͺ¨λŠ” μžλ…€μ˜ μˆ˜μ—… 곡지사항을 ν™•μΈν•˜κΈ° μ–΄λ ΅λ‹€.
  3. 학생은 ν•΄λ‹Ή μˆ˜μ—…μ— 좜결 μ²˜λ¦¬κ°€ μ •μƒμ μœΌλ‘œ μ²˜λ¦¬λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜κΈ° μ–΄λ ΅κ³  μˆ˜μ—… 참여에 λŒ€ν•œ 동기뢀여λ₯Ό μ–»κΈ° μ–΄λ ΅λ‹€.

μš°λ¦¬λŠ” ꡐ수자, ν•™λΆ€λͺ¨, 학생 λͺ¨λ‘κ°€ λΉ„λŒ€λ©΄ μƒν™©μ—μ„œ λŒλ΄„ 곡백을 λŠλΌμ§€ μ•Šμ„ 수 μžˆλŠ” μ„œλΉ„μŠ€κ°€ μžˆμ—ˆμœΌλ©΄ μ’‹κ² λ‹€. μš°λ¦¬λŠ” κ΅μˆ˜μžκ°€ 학생과 ν•™λΆ€λͺ¨μ—κ²Œ 곡지사항을 일괄 μ „μ†‘ν•˜κ³  ν™•μΈν–ˆλŠ”μ§€ μ—¬λΆ€κΉŒμ§€ νŒŒμ•…ν•΄ μ†Œν†΅μ˜ 문제λ₯Ό ν•΄κ²°ν•  수 있기λ₯Ό μ›ν•œλ‹€. μš°λ¦¬λŠ” ν•™λΆ€λͺ¨κ°€ μˆ˜μ—…λ³„ 곡지사항λ₯Ό κ΅μˆ˜μžλ‘œλΆ€ν„° 확인받아 μžλ…€μ— λŒ€ν•œ 고민을 덜길 λ°”λž€λ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ μš°λ¦¬λŠ” 학생듀이 μˆ˜μ—… 참여에 λŒ€ν•œ 동기뢀여λ₯Ό μžƒμ§€ μ•Šκ³  μΆœμ„κ³Ό 과제 μ°Έμ—¬λ₯Ό 높이기 μœ„ν•œ μ‹œμŠ€ν…œμ΄ 있기λ₯Ό λ°”λž€λ‹€.

Scenarios

μΆœκ²°κ΄€λ¦¬ μ›Ή

μΆœκ²°κ΄€λ¦¬ 웹에 접속함과 λ™μ‹œμ— 둜그인 화면이 λœ¬λ‹€. μ΄λ•Œ λ‘œκ·ΈμΈμ„ ν•  수 μžˆλŠ” μ‚¬μš©μžλŠ” νšŒμ›κ°€μž…μ΄ λ˜μ–΄μžˆλŠ” κ΅μˆ˜μžμ™€ 학생이닀.

ꡐ수자 κ³„μ •μœΌλ‘œ λ‘œκ·ΈμΈν•  경우, 미리 λ“±λ‘λœ 정보에 따라 ꡐ수자(μ‚¬μš©μž)κ°€ λ‹΄λ‹Ήν•˜κ³  μžˆλŠ” μˆ˜μ—…μ˜ λͺ©λ‘λ“€μ΄ ν…Œμ΄λΈ” ν˜•μ‹μœΌλ‘œ 화면에 뜨기 λœλ‹€. κ΅μˆ˜μžλŠ” 이 ν™”λ©΄μ—μ„œ μΆ”κ°€, μˆ˜μ •, μ‚­μ œ λ²„νŠΌλ“€μ„ 톡해 μˆ˜μ—… λͺ©λ‘μ—μ„œ μˆ˜μ—…μ„ μΆ”κ°€, μˆ˜μ •, μ‚­μ œν•  수 μžˆλ‹€. μˆ˜μ—… λͺ©λ‘λ“€ 쀑 ν•˜λ‚˜λ₯Ό ν΄λ¦­ν•˜μ—¬ λ“€μ–΄κ°ˆ 경우 ν•΄λ‹Ή μˆ˜μ—…μ„ μˆ˜κ°•ν•˜κ³  μžˆλŠ” ν•™μƒλ“€μ˜ λͺ…단이 ν…Œμ΄λΈ” ν˜•μ‹μœΌλ‘œ 뜨고, ν•™μƒλ“€μ˜ 이름 μ˜†μ—λŠ” ν•™μƒλ³„λ‘œ ν•™μƒμ˜ 당일 μΆœκ²°μ„ 체크할 수 μžˆλŠ” 4가지(μΆœμ„, 결석, 지각, 곡결)의 μ²΄ν¬λ°•μŠ€κ°€ μžˆλ‹€. κ΅μˆ˜μžλŠ” 이 μ²΄ν¬λ°•μŠ€λ“€μ„ λ‹¨μˆœνžˆ μ²΄ν¬ν•¨μœΌλ‘œμ¨ ν•™μƒλ“€μ˜ μΆœκ²°μ²΄ν¬κ°€ κ°€λŠ₯ν•˜κ²Œ λœλ‹€. λ˜ν•œ 학생듀 λͺ©λ‘ μ€‘μ—μ„œ 검색을 톡해 검색쑰건(학생 이름 λ“±)에 λΆ€ν•©ν•˜λŠ” ν•™μƒλ§Œμ„ λ”°λ‘œ 좜λ ₯이 κ°€λŠ₯ν•˜λ‹€. κ΅μˆ˜μžλŠ” ν•™μƒμ—κ²Œ 좜결과 κ΄€λ ¨ν•˜μ—¬ 별점(Star Point)λ₯Ό λΆ€κ³Όν•  수 있으며, 학생듀은 μžμ‹ μ˜ 별점과 ν•™κΈ‰λ‚΄ 별점 μˆœμœ„μ˜ λ°±λΆ„μœ¨ 값을 확인할 수 μžˆλ‹€. λ˜ν•œ κ΅μˆ˜λŠ” μžμ‹ μ΄ λ‹΄λ‹Ήν•˜λŠ” κ³Όλͺ©μ˜ λͺ©λ‘μ„ 확인할 수 있고, κ³Όλͺ©λ³„λ‘œ ν•΄λ‹Ή κ³Όλͺ©μ„ μˆ˜κ°•ν•˜λŠ” ν•™μƒλ“€μ—κ²Œ μΌκ΄„μ μœΌλ‘œ 곡지λ₯Ό 보낼 수 μžˆλ‹€.

학생은 νšŒμ› κ°€μž…μ‹œ 학ꡐ, ν•™λ²ˆ, 이름 λ“±μ˜ 정보λ₯Ό μ„œλΉ„μŠ€μ— μ œκ³΅ν•œλ‹€. 학생은 μžμ‹ μ˜ ν•™κ΅μ—μ„œ κ°œμ„€λœ μˆ˜μ—… λͺ©λ‘ μ€‘μ—μ„œ μˆ˜κ°•μ€‘μΈ μˆ˜μ—…μ„ κ²€μƒ‰ν•˜μ—¬ μˆ˜μ—… 그룹에 λ“€μ–΄κ°ˆ 수 μžˆλ‹€. 학생이 κ·Έλ£Ή 신청을 μš”μ²­ν•˜λ©΄ κ³Όλͺ©μ„ κ°œμ„€ν•œ ꡐ수자의 확인 절차λ₯Ό 톡해 신청이 μ™„λ£Œ λ˜λŠ” κ±°μ ˆλœλ‹€.

Sub-Group

Group Desecription Contributor
Auth+Core 개발 ν™˜κ²½ μ„ΈνŒ… 및 μ‚¬μš©μž λͺ¨λΈ μ •μ˜, μ‚¬μš©μžκ°€ 앱에 둜그인 및 νšŒμ›κ°€μž… κΉ€μ§€ν˜œ, 진겸
Teacher 학생에 λŒ€ν•œ μΆœμ„ 체크, μˆ˜μ—… 및 학생 λͺ©λ‘, 정보 쑰회, 좜결 κ²°κ³Ό 및 곡지사항 λ°œμ†‘ μ΄ν•œμš©, μ •λ‚˜λ¦°
Student μˆ˜μ—… μ‹ μ²­, 개인 μΆœκ²°ν˜„ν™© 및 μˆ˜μ—…μ°Έμ—¬λ„ 확인 λ°•μ’…ν˜, μœ€μ§„ν˜Έ

1st Checkpoint

0. Meeting logs

1. Requirements (Stories)

2. Use Case

Actor Actor's Goal Use Case Name
ꡐ수자 κ΅μˆ˜μžκ°€ λ³ΈμΈμž„μ„ μΈμ¦ν•˜κ³  κ°€μž… 및 λ‘œκ·ΈμΈμ„ ν•  수 있기 μœ„ν•¨ ꡐ수자 μ˜¨λ³΄λ”© (UC-1)
ꡐ수자 ν•™μƒλ“€μ˜ μΆœκ²°μ„ 관리 ν•˜κΈ° μœ„ν•¨ 좜결 관리(UC-2)
ꡐ수자 ν•™μƒμ—κ²Œ 별점을 λΆ€μ—¬ν•˜κ±°λ‚˜ 뺏기 μœ„ν•¨ 별점 λΆ€μ—¬ (UC-3)
ꡐ수자 μˆ˜μ—…μ„ λ§Œλ“€κ³  κ·Έ 정보λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•¨ ꡐ수의 μˆ˜μ—… 관리 (UC-4)
ꡐ수자 ν•™λΆ€λͺ¨ ν˜Ήμ€ ν•™μƒμ—κ²Œ 곡지사항을 λ°œμ†‘ν•˜κΈ° μœ„ν•¨ 곡지 λ°œμ†‘(UC-5)
ꡐ수자 μžμ‹ μ˜ ν”„λ‘œν•„ 및 정보λ₯Ό μˆ˜μ •ν•˜κΈ° μœ„ν•¨ κ΅μˆ˜μžμ •λ³΄κ΄€λ¦¬(UC-6)
학생 학생이 λ³ΈμΈμž„μ„ μΈμ¦ν•˜κ³  κ°€μž… 및 λ‘œκ·ΈμΈμ„ ν•  수 있기 μœ„ν•¨ 학생 μ˜¨λ³΄λ”© (UC-7)
학생 λ‚˜μ˜ 이번 ν•™κΈ° μˆ˜μ—… λͺ©λ‘μ„ μ„ νƒν•΄μ„œ κ·Έ 정보λ₯Ό 보기 μœ„ν•¨ μˆ˜μ—… μ‹ μ²­ (UC-8)
학생 학생이 μˆ˜μ—…μ˜ 곡지 및 μΆœκ²°μƒνƒœλ₯Ό 확인 ν•˜κΈ° μœ„ν•¨ μˆ˜μ—…μƒνƒœν™•μΈ(UC-9)
학생 μžμ‹ μ˜ ν”„λ‘œν•„ 및 정보λ₯Ό μˆ˜μ •ν•˜κΈ° μœ„ν•¨ 학생정보관리(UC-10)
ꡐ수자,학생 μ§€μ •λœ λ„λ©”μΈμ˜ λ©”μΌμ£Όμ†Œλ₯Ό 가지고 μžˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•¨ ꡐ수자 μ˜¨λ³΄λ”© (UC-1), 학생 μ˜¨λ³΄λ”© (UC-7)
ꡐ수자,학생 μ„œλΉ„μŠ€ νšŒμ› νƒˆν‡΄λ₯Ό ν•˜κΈ° μœ„ν•¨ νšŒμ›νƒˆν‡΄(UC-11)
μ„œλ²„ ν•™λΆ€λͺ¨κ°€ ν•™μƒλ“€μ˜ μΆœκ²°μƒνƒœλ₯Ό ν™•μΈν•˜κΈ° μœ„ν•¨ 좜결 확인(UC-12)
μ„œλ²„,ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μš©μž μš”μ²­μ— λŒ€ν•œ μœ νš¨μ„± 검사 (νƒ€μž…, λ²”μœ„, URL, ...) μœ νš¨μ„± 검사(UC-13)

3. Domain Model


2nd Checkpoint

0. Meeting logs

1. System Design Document(SDD)

Core

Teacher

Student


3rd Checkpoint

0. Meeting logs

1. UI

2. ERD

3. 기술 μŠ€νƒμ— 및 ν™œμš© λ°©μ•ˆ

  • μš΄μ˜μ²΄μ œμ— 관계 없이, 그리고 λΉ λ₯Έ 배포λ₯Ό μœ„ν•΄ docker (가상 ν™˜κ²½) μœ„ν•΄μ„œ μ„œλ²„μ™€ DBλ₯Ό λ„μš°λ„λ‘ ν–ˆλ‹€.

  • Backend와 Frontendκ°€ 유기적으둜 κ°œλ°œμ„ 병행 ν•  수 μžˆλ„λ‘ λ‘˜ λ‹€ ν•œ 언어인 JavaScript 기반으둜 μ½”λ“œλ₯Ό μž‘μ„± ν–ˆλ‹€. μ—¬κΈ°μ„œ 더 λ‚˜μ•„κ°€ μ„œλ²„μ—μ„œλŠ” νƒ€μž… μ•ˆμ •μ„±μ„ 보μž₯ν•˜κΈ° μœ„ν•΄ TypeScriptλ₯Ό μ‚¬μš©ν–ˆλ‹€.

  • SOLID λ””μžμΈ νŒ¨ν„΄μ„ μ΅œλŒ€ν•œ λ”°λ₯΄κΈ° μœ„ν•΄ Node.js runtime μœ„μ—μ„œ λ™μž‘ν•˜λŠ” Nest.js λΌλŠ” ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜μ˜€λ‹€.

    • λ‹€μŒ κ³Ό 같은 방식을 μ„œλ²„λŠ” μ „λ°˜μ μœΌλ‘œ λ”°λ₯Έλ‹€.

      image

      • User이 routeλ₯Ό μ ‘μ†ν•˜λ©΄ controller 을 거쳐 μ•Œλ§žλŠ” μ„œλΉ„μŠ€λ‘œ 가도둝 섀계λ₯Ό ν•˜μ˜€λ‹€.

      img

      • Provider pattern 을 톡해 dependency injection 기법을 ν™œμš©ν–ˆλ‹€.

      img

  • Client - Server κ°„ μ‰½κ²Œ μ†Œν†΅μ„ν•˜κ³  λͺ¨λ“ˆν™”λœ 개발 을 ν•˜κΈ° μœ„ν•΄ REST APIλ₯Ό μ‚¬μš©ν•˜μ˜€μœΌλ©° swagger λ¬Έμ„œν™”λ₯Ό 톡해 ν…ŒμŠ€νŠΈλ₯Ό 직접 ν•΄λ³Ό 수 있게 ν–ˆλ‹€.

  • 쀑볡이 μ‚¬λ‹Ήν•œ UIκ°€ λ§Žμ•„ 이에 μ΅œμ ν™”λœ Reusability κ°€ 쒋은 View Library 인 Reactλ₯Ό μ‚¬μš©ν•˜μ˜€λ‹€.

  • AWS와 Netlifyλ₯Ό 와 같은 IaaS λ₯Ό ν™œμš©ν•˜μ—¬, Email λ°œμ†‘, Uri 처리, deveops 처리, deployment 관리λ₯Ό 체계적이고 μ‰½κ²Œ ν•  수 μžˆμ—ˆλ‹€.

  • Agile ν•˜κ²Œ κ°œλ°œμ„ ν•˜κ²Œ Open sourceλ₯Ό μ΅œλŒ€ν•œ ν™œμš©ν–ˆλ‹€.

  • 개발 ν”„λ‘œμ„ΈμŠ€λ₯Ό μžλ™ ν™” ν•˜κΈ° μœ„ν•΄ CI/CDλ₯Ό λ„μž…. (μ›λž˜λŠ” develop/staging/master 3 가지 브랜치둜 λ‚˜λ‰˜μ–΄μ•Ό ν•˜λ‚˜, ν”„λ‘œμ νŠΈ 규λͺ¨μ™€ μ‹œκ°„ 관계상 master ν•œ λΈŒλžœμΉ˜μ—μ„œλ§Œ λ˜λ„λ‘ ν–ˆλ‹€.)

hi