Swiftyinsta: `2.0`으둜 κ°€λŠ” κΈΈ

에 λ§Œλ“  2019λ…„ 07μ›” 21일  Β·  8μ½”λ©˜νŠΈ  Β·  좜처: TheM4hd1/SwiftyInsta

@TheM4hd1 😊 이 ν›Œλ₯­ν•œ 라이브러리λ₯Ό λ§Œλ“€μ–΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€(그리고 Siwa , 더 μΈμƒμ μž…λ‹ˆλ‹€). μ§€κΈˆκΉŒμ§€ λ†€λΌμš΄ 일을 ν•΄λƒˆμŠ΅λ‹ˆλ‹€. 그리고 ν•¨κ»˜ νƒœκ·Έν•˜κ³  도움을 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

2.0 λ‹€κ°€μ˜΄μ— 따라 κ³„νšλœ μ΄μ •ν‘œλ‚˜ κ΅¬ν˜„ν•˜λ €λŠ” νŠΉμ • κΈ°λŠ₯이 μžˆλ‹€λ©΄ ν›Œλ₯­ν•œ κ³„νšμ΄ 무엇인지 κΆκΈˆν–ˆμŠ΅λ‹ˆλ‹€. μž μ‹œ λ™μ•ˆ 이것을 μ‚¬μš©ν•œ 후에 더 큰 μ—…λ°μ΄νŠΈμ—μ„œ λ§Œλ“€ 수 μžˆλŠ” λͺ‡ 가지 μ œμ•ˆμ΄ μžˆμŠ΅λ‹ˆλ‹€.

1) μ½”λ“œ λ‚΄ λ¬Έμ„œ
μ‹±κΈ€ 톀 λͺ¨λΈκ³Ό λͺ¨λ“  λ–¨μ–΄μ§€λŠ” 2) μ‰½κ²Œ ν—ˆκ°€ 처리기, .shared , μ‚¬μš©μžκ°€ λ™μ‹œμ— μ—¬λŸ¬ 개의 계정을 μ‹€ν–‰ν•  수 μžˆλ„λ‘ [λ‚˜λŠ”μ΄ 였늘 λ˜λŠ” 내일 μž‘μ—…μ„ μ‹œμž‘ν•  μˆ˜μžˆλŠ” κ·Έκ²ƒμ˜ 확인을 경우] βœ“λ₯Ό
3) 더 μ‰¬μš΄ 둜그인, μ•‘μ„Έμ„œλ¦¬λ₯Ό λ§Œλ“€κ³  private λ˜λŠ” internal 뒀에 일뢀 μƒμš©κ΅¬ μ½”λ“œλ₯Ό 숨겨 ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°„μ†Œν™”ν•©λ‹ˆλ‹€. βœ“
4) λ§ˆμŠ€ν„°μ—κ²Œ ν‘Έμ‹œν•˜κΈ° 전에 λͺ¨λ“  것을 더 잘 ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•΄ 승인된 _pull μš”μ²­_을 ν‘Έμ‹œν•  수 μžˆλŠ” development λΆ„κΈ°( 2.0 λŠ” ν™•μ‹€νžˆ 큰 μΌμž…λ‹ˆλ‹€ 😊) βœ“
5) κ³ μ •, 이름 지정 κ·œμΉ™ userId , pk , userPk ... 그리고 (λ‚΄κ°€ 가진이 μ•…ν™” μ•Œκ³  맀개 λ³€μˆ˜μ˜ 이름을 κ· μΌν•˜κ²Œ completionHandler λŒ€ completion , ν•˜μ§€λ§Œ UserReference 처럼 λŠκ»΄μ§‘λ‹ˆλ‹€. ν•˜ν•˜ν•˜ν•˜), ν•¨μˆ˜λ₯Ό 더 "λΉ λ₯΄κ²Œ" λ§Œλ“œλŠ” 것(이름 μ§€μ •λœ λ§€κ°œλ³€μˆ˜ λ“± μ‚¬μš©) βœ“
6) ~Swift 5.1, λˆ„κ΅¬? πŸ€” some Protocol νŒ¨ν„΄μ€ λŒ€λΆ€λΆ„μ˜ 둜그인 "문제"λ₯Ό ν•΄κ²°ν•˜λŠ” 데 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€~

ν•˜μ§€λ§Œ λͺ‡ 가지 아이디어. μ–΄λ–€ μš°μ„ μˆœμœ„κ°€ 있고 μ–΄λ–»κ²Œ λ„μšΈ 수 μžˆλŠ”μ§€ μ•Œλ €μ£Όμ‹­μ‹œμ˜€.
평화 ✌️

roadmap

λͺ¨λ“  8 λŒ“κΈ€

μ•ˆλ…•ν•˜μ„Έμš” μŠ€ν…ŒνŒŒλ…Έ
μ €λ₯Ό λ„μ™€μ£Όμ‹œκ³  이 λΌμ΄λΈŒλŸ¬λ¦¬μ— κΈ°μ—¬ν•΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. μ—¬λŸ¬λΆ„μ˜ μ°Έμ—¬κ°€ μ €λ₯Ό ν–‰λ³΅ν•˜κ²Œ ν•˜λŠ” 것 이상은 μ—†μŠ΅λ‹ˆλ‹€.
쒋은 κΈ°λŠ₯κ³Ό λ³€κ²½ 사항이 μžˆλŠ” 버전 2.0 으둜 μ΄λ™ν•˜λŠ” 것은 쒋은 μƒκ°μž…λ‹ˆλ‹€.
λ‚˜λŠ” μ‚¬μš©μžκ°€ 라이브러리λ₯Ό 더 μ‰½κ²Œ λ‹€λ£° 수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” λͺ‡ 가지 μΆ”κ°€ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” 것에 λŒ€ν•΄ μƒκ°ν•˜κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
μˆ˜μ‹ κ³Ό 같은 κΈ°λŠ₯:

  • κ³ ν’ˆμ§ˆ λ―Έλ””μ–΄ [λΉ„λ””μ˜€ λ˜λŠ” 이미지]
  • μ €ν’ˆμ§ˆ λ―Έλ””μ–΄ [λΉ„λ””μ˜€ λ˜λŠ” 이미지]
  • λ―Έλ””μ–΄μš© 이미지 μΆ•μ†ŒνŒ
  • 톡계 κΈ°λŠ₯(총 μ’‹μ•„μš”, λŒ“κΈ€ 계산 λ“±)
  • 더 μ‰¬μš΄ λ°©λ²•μœΌλ‘œ 더 μœ μ—°ν•œ 지연 κΈ°λŠ₯(λŸ°νƒ€μž„μ—μ„œ νŽΈμ§‘ν•˜κ±°λ‚˜ 켜기-끄기).
  • λ“±λ“±....
    μ΄λŠ” μ‚¬μš©μžμ—κ²Œ λ§Žμ€ μ‹œκ°„μ„ μ ˆμ•½ν•΄ μ€λ‹ˆλ‹€. μ΄λŠ” 아이디어일 λΏμž…λ‹ˆλ‹€.
    λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ‹œκ°„μ„ μ „λ‹¬ν•˜μ—¬ μ„±μž₯ν•˜κ³  있기 λ•Œλ¬Έμ—, λΌμ΄λΈŒλŸ¬λ¦¬λŠ” ν™•μ‹€νžˆ λ¬Έμ„œλ₯Ό ν•„μš”λ‘œν•œλ‹€.
    맀우 μ‹€μˆ˜κ°€ 많기 λ•Œλ¬Έμ— λͺ…λͺ… κ·œμΉ™μ„ μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. UserReference 아이디어가 μ’‹μ•˜μŠ΅λ‹ˆλ‹€.
    development 뢄기도 ν•„μš”ν•©λ‹ˆλ‹€.
    μš°λ¦¬λŠ” λ‹€μŒ 버전을 더 κ°•λ ₯ν•˜κ²Œ λ§Œλ“€κΈ° μœ„ν•΄ λ‹€λ₯Έ μ‚¬μš©μžλ₯Ό μ—¬κΈ°μ—μ„œ κΈ°μ—¬ν•˜κ³  아이디어λ₯Ό κ³΅μœ ν•˜λ„λ‘ μ΄ˆλŒ€ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    λ‹€μ‹œ ν•œλ²ˆ κ°μ‚¬ν•©λ‹ˆλ‹€.
    λ¬Έμ•ˆ 인사.
  1. μ‹±κΈ€ 톀 λͺ¨λΈμ„ λ–¨μ–΄ 뜨리고 μ‰½κ²Œ ν—ˆκ°€ 처리기, λͺ¨λ“  .shared , λ™μ‹œμ— μ—¬λŸ¬ 계정을 μ‹€ν–‰ν•˜λŠ” μ‚¬μš©μžλ₯Ό ν—ˆμš©ν•˜λŠ” [λ‚˜λŠ”μ΄ 였늘 λ˜λŠ” 내일 μž‘μ—…μ„ μ‹œμž‘ν•  μˆ˜μžˆλŠ” 경우의 확인]

이 μž‘μ—…μ„ μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€. μ‹€μ œ 인증 λ©”μ»€λ‹ˆμ¦˜μ΄ μ€€λΉ„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ λͺ¨λ“  ν•Έλ“€λŸ¬(😱)에 λŒ€ν•΄ λͺ¨λ“  단일 λ©”μ„œλ“œλ₯Ό λ‹€μ‹œ μž‘μ„±ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€. 그런 λ‹€μŒ Siwa λ™μΌν•œ 변경을 μ μš©ν•˜κΈ°

λ‚΄κ°€ μ§€κΈˆκΉŒμ§€ ν•œ 일:

  • APIBuilder , HttpSettings 및 RequestMessageModel κ°€ μ‚¬λΌμ‘ŒμŠ΅λ‹ˆλ‹€. 이제 Settings (선택 사항) delay , queues , device (μžλ™μœΌλ‘œ User-Agent μ—…λ°μ΄νŠΈ)λ₯Ό μ‚¬μš©ν•˜μ—¬ APIHandler λ₯Ό 직접 μΈμŠ€ν„΄μŠ€ν™”ν•©λ‹ˆλ‹€ delay User-Agent ) 및 session ( URLSession ) λ§€κ°œλ³€μˆ˜.
  • 더 이상 *Handler ν”„λ‘œν† μ½œμ΄ μ—†μŠ΅λ‹ˆλ‹€. κ·Έλ“€μ—κ²ŒλŠ” μ‹€μ§ˆμ μΈ μ˜λ―Έκ°€ μ—†μ—ˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  *Handler λŠ” 이제 APIHandler μΈμŠ€ν„΄μŠ€λ₯Ό 톡해 ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€( UserHandler is .accounts , FeedHandler is .feeds λ“±). .), 그것듀은 게으λ₯Έ 속성이며 μΈμŠ€ν„΄μŠ€ μžμ²΄μ— κ³ μœ ν•©λ‹ˆλ‹€. HttpHelper 및 PaginationHelper ( PaginationHandler μ—μ„œ 1.* PaginationHandler 라고도 함)에 λŒ€ν•΄ λ™μΌν•œ μž‘μ—…μ„ μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ APIHandler λŒ€ν•΄ λͺ¨λ“  단일 λ©”μ„œλ“œλ₯Ό λ‹€μ‹œ μž‘μ„±ν•΄μ•Ό ν•˜λŠ” μ½”λ“œ 쀑볡이 λͺ¨λ‘ 제거되며, μ΄λŠ” λ‘œκ·ΈμΈν•œ μ‚¬μš©μžλ§ˆλ‹€ APIHandler μ—¬λŸ¬ 개λ₯Ό μ‚¬μš©ν•˜λŠ” " λ©€ν‹°νƒœμŠ€ν‚Ή "을 μ˜λ―Έν•©λ‹ˆλ‹€.
  • 인증은 이제 APIHandler μΈμŠ€ν„΄μŠ€μ—μ„œ ν•˜λ‚˜μ˜ 단일 λ°©λ²•μœΌλ‘œ μ²˜λ¦¬λ©λ‹ˆλ‹€. authenticate(with request: Login.Request, completionHandler: escaping (Result<(Login.Response, APIHandler), Error>) -> Void) , μ—¬κΈ°μ„œ Login.Request λŠ” SessionCache λ‘˜ 쀑 ν•˜λ‚˜λ₯Ό μ·¨ν•  수 μžˆλŠ” enum μž…λ‹ˆλ‹€ SessionCache ν•­λͺ©( 1.* SessionCache κ³Ό μœ μ‚¬)이며 "λ‹€μ‹œ 둜그인"ν•˜λŠ” 데 μ‚¬μš©λ˜λ©° Siwa (ν–₯ν›„) λ˜λŠ” LoginWebView (aka InstagramLoginWebView ) β€” 그리고 μ§€κΈˆλ³΄λ‹€ 훨씬 간단 ν•©λ‹ˆλ‹€. 말 κ·ΈλŒ€λ‘œ μ „ν™” ν•œ 톡이면 λμž…λ‹ˆλ‹€. λͺ¨λ“  μ½”λ“œ 쀑볡 κ°„μ˜ μ œκ±°ν•©λ‹ˆλ‹€ Siwa 및 SwiftyInsta : 당신이 "λ¨Έλ¦¬κ°€μ—†λŠ”"인증을 μ›ν•˜λŠ” 경우, μ‚¬μš© Siwa ν•˜κ³  톡과 sessionCache 달리 _Webλ₯Ό μ‚¬μš©, 보기_ SwiftyInsta .
  • _user_ pk λ˜λŠ” username μˆ˜λ½ν•˜λŠ” λͺ¨λ“  단일 λ©”μ„œλ“œλŠ” 이제 λŒ€μ‹  UserReference ν•­λͺ©μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

λ‚΄μΌκΉŒμ§€ λͺ¨λ“  것을 끝내고 μΆ”κ°€ ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ development 둜 ν‘Έμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ§„μ§œ μ™„μ „ μ‹ λ‚¬μ–΄μš” πŸ’ͺ
μ—¬λŸ¬λΆ„μ˜ 생각과 μ˜κ²¬μ„ κΈ°λ‹€λ¦¬κ² μŠ΅λ‹ˆλ‹€.

λ³€κ²½ 사항이 맀우 쒋은 것 κ°™μŠ΅λ‹ˆλ‹€. development 뢄기도 μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
μ €λŠ” Logger λ“±κ³Ό 같은 κΈ°λŠ₯ 및 도ꡬ λͺ©λ‘μ„ μž‘μ„± μ€‘μž…λ‹ˆλ‹€.
그리고 인증에 λŒ€ν•΄ 이 μƒˆλ‘œμš΄ 방법은 3가지 μ’…λ₯˜μ˜ 인증을 λͺ¨λ‘ μ§€μ›ν•©λ‹ˆκΉŒ?

  1. λΉ„κ³΅κ°œ API 둜그인
  2. μ›Ή 둜그인
  3. μ‹œμ™€

μœ„μ˜ λͺ¨λ“  λ³€κ²½ 사항을 μ™„λ£Œν–ˆμŠ΅λ‹ˆλ‹€. μž μ‹œ ν…ŒμŠ€νŠΈν•œ λ‹€μŒ _pull request_λ₯Ό ν‘Έμ‹œν•©λ‹ˆλ‹€.

그리고 인증에 λŒ€ν•΄ 이 μƒˆλ‘œμš΄ 방법은 3가지 μ’…λ₯˜μ˜ 인증을 λͺ¨λ‘ μ§€μ›ν•©λ‹ˆκΉŒ?

μ§€κΈˆμ€ _Web의 login_을 μ§€μ›ν•˜κ³  Siwa (μ΄λ‘ μ μœΌλ‘œλΆ€ν„° Siwa μ‚¬μš© *.shared , 그것은 μ—…λ°μ΄νŠΈν•΄μ•Όν•©λ‹ˆλ‹€ κ·Έλž˜μ„œ,ν•˜μ§€λ§Œ λ‚œ 빨리 κ·Έ 일에 κ³„νšμ΄μ•Ό - 의미 ꢌ리λ₯Ό μ§€κΈˆ , κ·Έλ™μ•ˆ _web login_을 ν†΅ν•΄μ„œλ§Œ ν…ŒμŠ€νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€. SwiftyInsta 와 ν•¨κ»˜ μ œκ³΅λ˜λŠ” username + password 인증이 tbh에 λ―ΈμΉ˜μ§€ λͺ»ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. 그리고 Siwa μ—μ„œ λ†€λΌμš΄ 일을 ν–ˆκΈ° λ•Œλ¬Έμ— 메인 λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ‚­μ œν•  수 μžˆμ„ 것 같은 λŠλ‚Œμ΄ λ“­λ‹ˆλ‹€(ν•˜μ§€λ§Œ 제 생각일 λΏμž…λ‹ˆλ‹€).
username + password 인증을 μˆ˜ν–‰ν•˜λ €λŠ” μ‚¬μš©μžλŠ” λ‹€λ₯Έ λͺ¨λ“  것을 μ§€λ‚˜μΉ˜κ²Œ λ³΅μž‘ν•˜κ²Œ ν•˜κ±°λ‚˜ μ½”λ“œ κΈ°λ°˜μ„ λ³΅μ œν•˜μ§€ μ•Šκ³  μ²˜μŒλΆ€ν„°(즉, Siwa ) λ°”λ‘œ μˆ˜ν–‰ν•΄μ•Ό ν•œλ‹€κ³  κ°•λ ₯히 λ―ΏμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ λ§ν•˜μ§€λ§Œ, κ·Έλƒ₯ λ‚΄ μ˜κ²¬μž…λ‹ˆλ‹€.
λ‹€μ‹œ μΆ”κ°€ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€ 😊

(μ˜€νƒ€λ₯Ό λ°œκ²¬ν–ˆμ„ λ•Œ μ˜€νƒ€μ™€ μ‹€μˆ˜λ₯Ό μˆ˜μ •ν•˜λ €κ³  μ‹œλ„ν–ˆμ§€λ§Œ 일뢀 방법(예: μ΄μƒν•œ POST )이 μ—¬μ „νžˆ μ˜λ„ν•œ λŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. 1.* μ—μ„œλŠ” λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 2.0 없을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. Idk)

@sbertix @canaksoy
더 λ§Žμ€ 아이디어? λͺ¨λ“  μ—…λ°μ΄νŠΈ?

watchOS , tvOS 및 macOS

λ©€ν‹° OS 지원 #61에 λŒ€ν•΄ μƒκ°ν•˜κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
λ‚˜μ€‘μ— μ‹œλ„ν•˜κ³  μž‘μ—…ν•˜κ² μŠ΅λ‹ˆλ‹€.

μ²­μ†Œ 응닡

  • κ³ ν’ˆμ§ˆ λ―Έλ””μ–΄ [λΉ„λ””μ˜€ λ˜λŠ” 이미지]
  • μ €ν’ˆμ§ˆ λ―Έλ””μ–΄ [λΉ„λ””μ˜€ λ˜λŠ” 이미지]
  • λ―Έλ””μ–΄μš© 이미지 μΆ•μ†ŒνŒ
  • 톡계 κΈ°λŠ₯(총 μ’‹μ•„μš”, λŒ“κΈ€ 계산 λ“±)
  • 더 μ‰¬μš΄ λ°©λ²•μœΌλ‘œ 더 μœ μ—°ν•œ 지연 κΈ°λŠ₯(λŸ°νƒ€μž„μ—μ„œ νŽΈμ§‘ν•˜κ±°λ‚˜ 켜기-끄기).
  • λ“±λ“±....

이에 λŒ€ν•΄... μ‚¬μš©μžμ—κ²Œ 응닡이 ν‘œμ‹œλ˜λŠ” 방식을 ν•©λ¦¬ν™”ν•˜μ§€ μ•ŠλŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?
λ””μ½”λ”©λœ 파일( raw μ†μ„±μ²˜λŸΌ 될 수 있음)을 직접 λ°˜ν™˜ν•˜λŠ” λŒ€μ‹  λ‚ μ§œκ°€ 이미 ν˜•μ‹ν™”λœ κΉ¨λ—ν•œ struct , λ‹€λ₯Έ ν’ˆμ§ˆμ˜ 이미지(당신이 λ§ν–ˆλ“―μ΄), 톡계λ₯Ό λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? 그듀에 λ‚΄μž₯… λ“±.

예λ₯Ό λ“€μ–΄ MediaModel κ·ΈλŒ€λ‘œ ν‘Έμ‹œν•˜λŠ” λŒ€μ‹  ...에 더 κ°€κΉŒμš΄ 것을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

public struct MediaModel: Codable {
    /// `MediaModelJSON` would be equal to current `MediaModel`.
    public let rawResponse: MediaModelJSON

    // Accesories
    public var pk: Int! { return rawResponse.pk }
    public lazy var date: Date! = { return self.rawRespone.takenAt.flatMap { Date(timeIntervalSince1970: $0) }}()
    /* etc */
}

λ„€, 쒋은 μƒκ°μž…λ‹ˆλ‹€. μ–΄μ¨Œλ“  λͺ¨λΈμ„ νŽΈμ§‘ν•΄μ•Ό ν•©λ‹ˆλ‹€. κ·Έλ“€ 쀑 μΌλΆ€λŠ” λͺ‡ 가지 속성이 λˆ„λ½λ˜μ—ˆκ³  λͺ¨λΈ 사이에 λ§Žμ€ 쀑볡이 μ“Έλͺ¨μ—†λŠ” ν”„λ‘œν† μ½œκ³Ό ....
μš°λ¦¬λŠ” ν™•μ‹€νžˆ λͺ¨λΈκ³Ό λͺ¨λΈμ΄ μ‚¬μš©μžμ—κ²Œ 데이터λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 방식을 κ°œμ„ ν•΄μ•Ό ν•©λ‹ˆλ‹€.

swiftlint 톡해 ꡬ문 κ·œμΉ™μ„ μ μš©ν•˜λŠ” 것은 μ–΄λ–»μŠ΅λ‹ˆκΉŒ?
Travis CI λŒ€ν•œ 지원을 μ‰½κ²Œ μΆ”κ°€ν•  수 μžˆμ§€λ§Œ μ‹€μ œλ‘œ 전체 μ½”λ“œλ² μ΄μŠ€λ₯Ό μ μ ˆν•˜κ²Œ λ³€κ²½ν•˜λŠ” λ°λŠ” 맀우 였래 κ±Έλ¦½λ‹ˆλ‹€.
ν•˜μ§€λ§Œ κ·Έλ§Œν•œ κ°€μΉ˜κ°€ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
μ–΄λ–»κ²Œ 생각해? @TheM4hd1

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰