(๋น„)๊ณต์‹ Habr ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ - HabrApp 2.0: ์•ก์„ธ์Šค ๊ถŒํ•œ ์–ป๊ธฐ

๋‚˜๋ฅธํ•˜๊ณ  ๋ฒŒ์จ ๊ฝค ์ง€๋ฃจํ•œ ์–ด๋Š ์ €๋…, ๋‚˜๋Š” ๋‚˜๋ญ‡์žŽ์„ ํ—ค์ณ๋‚˜๊ฐ€๊ณ  ์žˆ๋‹ค ๊ด€๋ฆฌ Habr ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์†๊ฐ€๋ฝ์„ ๊ตฌ๋ถ€๋ ธ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๊ธฐ์„œ๋Š” ๋Œ“๊ธ€์„ ๋‹ฌ ์ˆ˜ ์—†๊ณ  ํˆฌํ‘œ๊ถŒ์ด ๊ฑฐ๋ถ€๋˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜์‹์ด ํ™”๋ฉด์— ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

(๋น„)๊ณต์‹ Habr ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ - HabrApp 2.0: ์•ก์„ธ์Šค ๊ถŒํ•œ ์–ป๊ธฐ
๊ฒฐ์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์—๊ฒŒ๋Š” ํŽธ์•ˆํ•˜๊ณ  ์ฆ๊ฑฐ์šด ๊ฒƒ, ์šฐ๋ฆฌ๋งŒ์˜ ๊ฒƒ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. Habr์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์‹ ์ฒญ์„œ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?
์ƒํ™ฉ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์Šคํฌ๋ฆฐ์ƒท์„ ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

(๋น„)๊ณต์‹ Habr ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ - HabrApp 2.0: ์•ก์„ธ์Šค ๊ถŒํ•œ ์–ป๊ธฐ์–ด์ฉ์ง€ ์ด๋ ‡๊ฒŒ ์ƒ๊ฒผ์–ด ๊ทธ๊ฒƒ - ์˜. habr.com ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

"๋ถˆํŽธํ•œ ์ " ๋ชฉ๋ก

  • ๋“ฑ๊ธ‰์ด 0์ด ์•„๋‹Œ ์ถœํŒ๋ฌผ์€ ๋“ฑ๊ธ‰์„ ๋งค๊ธธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๋Œ“๊ธ€์„ ์“ฐ๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
  • ์—ฌ๋ก ์กฐ์‚ฌ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค
  • ์–ด๋‘์šด ํ…Œ๋งˆ์—์„œ๋Š” ์ˆ˜์‹์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๊ฒ€์€์ƒ‰ ๋ฐ”ํƒ•์— ๊ฒ€์€์ƒ‰).
  • ์ผ๋ถ€ ๋ถ๋งˆํฌ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋„ค, ์ž‘๋…„ XNUMX์›” ์ดํ›„๋กœ ์•ฑ ์—…๋ฐ์ดํŠธ๊ฐ€ ์•ˆ๋๋Š”๋ฐ ์—ฌ์ „ํžˆ ์ƒํƒœ๊ฐ€ ์•ˆ์ข‹๋„ค์š”. ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

XNUMX๋ถ€. ์•ก์„ธ์Šค๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋น ๋ฅธ Google ์ฟผ๋ฆฌ "ํ•˜๋ธŒ๋ผํ•˜๋ธŒ๋ฅด API" ์ด๋ฏธ ๊ฝค ๊ตฌ์‹์ด๋ผ๊ณ  ํ•˜๋„ค์š” ์ €์žฅ์†Œ Github์—์„œ๋Š” ์ดํ›„ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. 11์›” 21 2016, ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ์ž ์‹œ ๋™์•ˆ, XNUMX๋…„ ๋ฐ˜.

์ด๊ฒƒ์ด PHP๋ผ๋Š” ์‚ฌ์‹ค์„ ๋ฌด์‹œํ•˜๊ณ  ์•„๋ž˜๋กœ ์Šคํฌ๋กคํ•˜์—ฌ ๋‹ค์Œ์„ ์ฝ์œผ์‹ญ์‹œ์˜ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ID ๊ฐ€์ ธ์˜ค๊ธฐ

ํ™œ์šฉ ์ด ์–‘์‹ Habrahabr์—์„œ๋Š” ์ƒˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณธ์งˆ๊ณผ API๊ฐ€ ํ•„์š”ํ•œ ๋ชฉ์ ์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ก์„ธ์Šค ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์˜์‹ฌ์˜ ์—ฌ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํŽธ์ง€๋ฅผ ์”๋‹ˆ๋‹ค (์ถ•์•ฝ):

ํŽธ์ง€

PWA๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Habr์— ๋Œ€ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ์š•๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 

์ฒซ ๋ฒˆ์งธ์ด์ž ๊ฐ€์žฅ ๋ถ„๋ช…ํ•œ ์ ์€ Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‚ด ๊ฐœ์ธ์ ์ธ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‘˜์งธ: ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋ฉ”์ผ๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ชจ๋“  ์ข…๋ฅ˜์˜ ํ•ญ๋ชฉ(์˜ˆ: ๋Œ“๊ธ€)์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์•Œ๋ฆผ์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์…‹์งธ: ๋‚ด ๊ด€์‹ฌ์‚ฌ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๊ด€์‹ฌ ์žˆ๋Š” ์‚ฌ๋žŒ/ํ—ˆ๋ธŒ์— ๋Œ€ํ•œ ๊ฐœ์ธ์ ์ธ ์š”์•ฝ(๊ด€์ )์ž…๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๋Œ€๋‹ต์€ ๊ทธ๋‹ค์ง€ ์œ ์พŒํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์ ์–ด๋„ ์ •์งํ–ˆ์Šต๋‹ˆ๋‹ค.

์•ˆํƒ€๊น๊ฒŒ๋„ ํ˜„์žฌ API์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. API ์™„์„ฑ ํ›„ ์•ก์„ธ์Šค ์ œ๊ณต์„ ์žฌ๊ฐœํ•  ๊ณ„ํš์ด์ง€๋งŒ ์•„์ง ์ •ํ™•ํ•œ ๋‚ ์งœ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ๋‹ค๋ฅธ ์šฐ์„ ์ˆœ์œ„ ์ž‘์—…์„ ํ•ด๊ฒฐํ•˜๋Š๋ผ ๋ฐ”์ฉ๋‹ˆ๋‹ค.

"๊ทธ๋ž˜, ๋ฌธ์ œ ์—†์–ด! ์šฐ๋ฆฌ๋Š” ๋ญ”๊ฐ€๋ฅผ ์ƒ๊ฐํ•ด ๋‚ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค!" -๋‚˜๋Š” ๋‚˜ ์ž์‹ ์—๊ฒŒ ๋งํ•˜๊ณ  ์ฐพ๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„. ๊นŠ์€ ๋ฐœ๊ตด.

๋…ผ๋ฆฌ์— ๋”ฐ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰ ์ค‘์ด๋ฉด API์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋‚ด์žฅ๋ฉ๋‹ˆ๋‹ค. ๋ถ„์„ํ•ด ๋ด…์‹œ๋‹ค.

์šฐ๋ฆฌ๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— Wireshark๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์•ฝ๊ฐ„์˜ ์–ด๋ ค์›€ ์—†์ด ๋ฐ์Šคํฌํ†ฑ ์ปดํ“จํ„ฐ๋ฅผ ํ†ตํ•ด ์ „ํ™”๋ฅผ ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐํ•œ ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ด๊ณ  ์š”์ฒญ์„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

(๋น„)๊ณต์‹ Habr ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ - HabrApp 2.0: ์•ก์„ธ์Šค ๊ถŒํ•œ ์–ป๊ธฐ
์•„๋ฌด๊ฒƒ๋„ ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค

์˜ˆ, ๋ชจ๋“  ๊ฒƒ์ด ์•”ํ˜ธํ™”๋˜์–ด ์žˆ์ง€๋งŒ ์•”ํ˜ธํ™”๋ฅผ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด ๋‚ด๋ถ€๋ฅผ ์‚ดํŽด๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋””์ปดํŒŒ์ผ๋จ ์˜ .apk, ์‚ดํŽด๋ณด๊ธฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. API์—๋Š” ๋ฌด์—‡์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ์˜ค๋ฅธ์ชฝ, ์—”๋“œ ํฌ์ธํŠธ, ๋ชจ๋“  ์š”์ฒญ์ด ์ „๋‹ฌ๋˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ http(s)์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. "https://"๋ฅผ ์ฐพ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ์—์„œ AuthLinkManager.smali ์ฐพ๊ธฐ

.field OAUTH:Ljava/lang/String; = "https://habrahabr.ru/auth/o/%s/"
.field OAUTH_PARAMS:Ljava/lang/String; = "?client_id=%s&response_type=token&redirect_uri=%s"
.field OAUTH_REDIRECT_URL:Ljava/lang/String; = "http://cleverpumpkin.ru"

์ด๊ฒƒ์€ Android ๊ฐ€์ƒ ๋จธ์‹ ์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค(๋‹ฌ๋น… VM), ์ธ๊ฐ„์—๊ฒŒ๋Š” ๊ทธ๋‹ค์ง€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต์ง€๋งŒ ์—ฌ์ „ํžˆ ์œ ์ตํ•ฉ๋‹ˆ๋‹ค. ์ฝ˜ํ…์ธ ์™€ ์ด๋ฆ„, GitHub ์ €์žฅ์†Œ๋กœ ํŒ๋‹จ๋˜๋Š” ์ด ์„ธ ๊ฐ€์ง€ ์ƒ์ˆ˜๋Š” ๋‹ค์Œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šค ํ† ํฐ์„ ์š”์ฒญํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. GET.

๋” ์ž์„ธํžˆ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰์—์„œ ๋‹ค์Œ์— ๋‚˜์˜ค๋Š” ํŒŒ์ผ์€ NetworkModule.smali:

const-string v0, "https://habr.com/api/v1/"

๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ๊ฐ€ ๊ท€ํ•˜์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค!

์ž์ฒด ์ž‘์„ฑ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋ ค๋ฉด ์•Œ์•„๋‚ด์•ผ ํ•  ๊ฒƒ์ด ํ•œ ๊ฐ€์ง€๋ฟ์ž…๋‹ˆ๋‹ค. client_id, ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ณ ์œ  ์‹๋ณ„์ž์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์†Œ์Šค์ฝ”๋“œ์—์„œ ์ด ํ…์ŠคํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•ด๋„ ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค...

๊ทธ๋Ÿฐ๋ฐ ๊ฐ‘์ž๊ธฐ ํŒŒ์ผ ์ค‘ ํ•˜๋‚˜์—์„œ ํฅ๋ฏธ๋กœ์šด ๋ฌธ๊ตฌ๊ฐ€ ๋ˆˆ์— ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค.

const-string p8, "log-tag"
invoke-static {p8, p2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

์•„์‹œ๋‹ค์‹œํ”ผ ์ด๊ฒƒ์€ ๋กœ๊ทธ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฌด์—‡์„ ๋…น์Œํ•˜๋‚˜์š”?

XNUMX๋ถ€. ์ด๊ฒƒ๋“ค์€ ๋กœ๊ทธ์ž…๋‹ˆ๋‹ค!

์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ adb logcat ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ทธ๋ฅผ ๋ณด๋ ค๋ฉด

(๋น„)๊ณต์‹ Habr ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ - HabrApp 2.0: ์•ก์„ธ์Šค ๊ถŒํ•œ ์–ป๊ธฐ

์˜ˆ์ƒ์™ธ๋กœ ๋กœ๊ทธ๋Š” ์˜ˆ์ƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ž์„ธํ•œ ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ํ•„์š”ํ•œ ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ client_idํ•˜์ง€๋งŒ ํ† ํฐ ์‚ฌ์šฉ์ž/์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ๋กœ๊ทธ์ธ ะธ ์•”ํ˜ธ ๋ช…ํ™•ํ•œ ํ…์ŠคํŠธ๋กœ!

์ผ๋ถ€ ์Œ๋ชจ๋ก ๋กœ๊ทธ์— ๋กœ๊ทธ์ธ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์•„๋ฌด๋Ÿฐ ํ•ด๋ฅผ ๋ผ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋กœ๊ทธ๋Š” ๋ฃจํŠธ ๊ถŒํ•œ์ด๋‚˜ ๋‹ค์Œ์„ ํ†ตํ•œ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด์„œ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. adb. ๊ทธ๋Ÿฌ๋‚˜ Habr์„ ์ฝ๋Š” ์‚ฌ๋žŒ๋“ค ์ค‘์—๋Š” ๋””๋ฒ„๊น…์„ ํ™œ์„ฑํ™”ํ•œ Android ๊ฐœ๋ฐœ์ž๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ์ธํ•ด ์ด๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ ๊ณตํ•ญ์—์„œ '๋ฌด๋ฃŒ ์ถฉ์ „'์„ ํ•˜๋ฉด ๊ณ„์ •๋„์šฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ˆ„๊ฐ€ ํ•„์š”ํ• ๊นŒ์š”?
์ด ๋กœ๊ทธ์—์„œ ๋‹ค์Œ์„ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • client_id ะธ apikey์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ํ•„์š” API๋ฅผ;
  • ์‚ฌ์šฉ์ž ์ธ์ฆ URL(์ด์ƒํ•˜์ง€๋งŒ ์ €์žฅ์†Œ์— ์ด ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ œ๊ณต๋˜์ง€ ์•Š์•˜์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.)

๊ทธ๊ฒƒ์ด ์ผ์–ด๋‚œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด ์ž‘์€ ์—ฐ๊ตฌ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž์ฒด์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ ์ž‘์—…์ด ์ด๋ฏธ ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ์„ ๋•๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ๋“ค๊ณผ ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํˆฌํ‘œ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค (๋ˆ„๊ตฌ์—๊ฒŒ ์ด๊ฒƒ์ด ํ•„์š”ํ•œ์ง€ ์ดํ•ดํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค).

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋“ฑ๋ก๋œ ์‚ฌ์šฉ์ž๋งŒ ์„ค๋ฌธ ์กฐ์‚ฌ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ์ œ๋ฐœ

Habr ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜์‹œ๋‚˜์š”?

  • ๋„ค, ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด์š” ๋งŒ์กฑํ•ด์š”

  • ๋„ค, ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ถˆํŽธ์„ ๋ผ์นฉ๋‹ˆ๋‹ค.

  • ์•„๋‹ˆ์š”, ํœด๋Œ€์ „ํ™”์—์„œ ์›น ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์•„๋‹ˆ์š”, ๋‚ด ์ปดํ“จํ„ฐ์—์„œ Habr์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

357๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ํˆฌํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. 30๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๊ถŒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€