Dev Tool/Git & Github

GitHub์— ์ฒซ push ๋กœ๊ทธ์ธ ์—๋Ÿฌ ํ•ด๊ฒฐ๋ฒ• (MacOS)

UNarD 2025. 5. 9. 12:42

๐Ÿงจ GitHub์— ์ฒซ push ํ•˜๋ ค๋Š”๋ฐ ๋กœ๊ทธ์ธ ์—๋Ÿฌ?! (๋น„๋ฐ€๋ฒˆํ˜ธ ์ธ์ฆ ์‹คํŒจ ํ•ด๊ฒฐ๋ฒ•)

์ฒ˜์Œ GitHub์— ์ฝ”๋“œ๋ฅผ push ํ•˜๋ ค๋Š”๋ฐโ€ฆ
์•„๋ž˜ ์ฒ˜๋Ÿผ ๋กœ๊ทธ์ธ์ด ์•ˆ๋œ๋‹ค๊ณ  ๋œน๋‹ˆ๋‹ค.

remote: Support for password authentication was removed on August 13, 2021.
fatal: Authentication failed

๐Ÿ˜ฑ ๋‚ด ๋น„๋ฐ€๋ฒˆํ˜ธ ๋งž๋Š”๋ฐ ์™œ ์•ˆ ๋˜๋Š” ๊ฑฐ์•ผ?!
๋ฐ”๋กœ ์—ฌ๊ธฐ์„œ ๋ฉ˜๋ถ• ์˜ค์ฃ . ์ €๋„ ๊ทธ๋žฌ์Šต๋‹ˆ๋‹ค. (์ง„์งœ๋กœ์š”...)

๐Ÿ’ข ์›์ธ ๐Ÿ‘‰ GitHub, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ธ์ฆ์„ ์•„์˜ˆ ๋ง‰์•„๋ฒ„๋ ธ์–ด์š”

2021๋…„ 8์›”๋ถ€ํ„ฐ GitHub๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ ์ธ์ฆ์„ ์ „๋ฉด ์ค‘๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.
โ†’ ์•ž์œผ๋กœ๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์จ๋„ ์ ˆ๋Œ€ ๋กœ๊ทธ์ธ๋˜์ง€ ์•Š์•„์š”.

โ— ๊ทธ๋ž˜์„œ ๋ญ˜ ์จ์•ผ ํ•˜๋ƒ๊ณ ์š”?

๋ฐ”๋กœ Personal Access Token (PAT) ์ด๋ผ๋Š” ๊ฑธ ์จ์•ผ ํ•ด์š”!
์ด์ œ ์ด๊ฒŒ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ์ธ์ฆ ์ˆ˜๋‹จ์ด ๋์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ์„ค๋ช…๋Œ€๋กœ ๋”ฐ๋ผํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

1๏ธโƒฃ GitHub์—์„œ ํ† ํฐ(PAT) ๋งŒ๋“ค๊ธฐ

๐Ÿ“ ๋งํฌ ํด๋ฆญ ๐Ÿ‘‰ํ† ํฐ ์ƒ์„ฑํ•˜๋Ÿฌ ๊ฐ€๊ธฐ

โœ๏ธ ํ† ํฐ ์ข…๋ฅ˜ ๊ณ ๋ฅด๊ธฐ

์˜ต์…˜ ์„ค๋ช…
Fine-grained token โœ… GitHub๊ฐ€ ๊ณต์‹ ์ถ”์ฒœํ•˜๋Š” ๋ฐฉ์‹, ๋” ์•ˆ์ „
Classic token ๊ตฌ๋ฒ„์ „ ํ˜ธํ™˜์šฉ, ํ•„์š” ์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๐Ÿ’ก ์ง€๊ธˆ์€ Fine-grained token์œผ๋กœ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๐Ÿ”Ž Classic Token vs Fine-grained Token... ๋ญ๊ฐ€ ๋‹ค๋ฅธ๊ฐ€์š”?

GitHub์—์„œ Personal Access Token(PAT)์„ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด
โ€œClassicโ€์ด๋ž‘ โ€œFine-grainedโ€ ์ค‘ ๋ญ ๊ณ ๋ฅผ์ง€ ๊ณ ๋ฏผ๋  ์ˆ˜ ์žˆ์–ด์š”.

๋‘ ํ† ํฐ์€ ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋น„์Šทํ•˜์ง€๋งŒ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ ๐Ÿ” Classic Token ๐Ÿงฌ Fine-grained Token
์ ์šฉ ๋ฒ”์œ„ ๋‚ด ๊ณ„์ •์˜ ๋ชจ๋“  ์ €์žฅ์†Œ ์„ ํƒํ•œ ํŠน์ • ์ €์žฅ์†Œ๋งŒ
๊ถŒํ•œ ์„ค์ • ๋Œ€๋žต์ ์ธ ๋ฒ”์œ„ (repo, gist, ๋“ฑ) ๐Ÿ“Œ ์ฝ๊ธฐ, ์“ฐ๊ธฐ, ์‚ญ์ œ๊นŒ์ง€ ์„ธ๋ถ€ ์„ค์ • ๊ฐ€๋Šฅ
๋ณด์•ˆ์„ฑ ๋ณดํ†ต ์ˆ˜์ค€ โœ… ํ›จ์”ฌ ์•ˆ์ „ํ•จ
์‚ฌ์šฉ ๊ฐ€๋Šฅ์„ฑ ๋Œ€๋ถ€๋ถ„์˜ ํˆด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์ผ๋ถ€ ์˜ค๋ž˜๋œ ํˆด์—์„œ๋Š” ๋ฏธ์ง€์› ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ
GitHub ๊ณต์‹ ๊ถŒ์žฅ๋„ โš ๏ธ ์ ์ฐจ ์ค„์–ด๋“œ๋Š” ์ค‘ โœ… GitHub๊ฐ€ ๊ณต์‹ ์ถ”์ฒœํ•˜๋Š” ๋ฐฉ์‹

๐ŸŽฏ ์–ด๋–ค ๊ฑธ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ?

  • ์ฒ˜์Œ Git์„ ๋ฐฐ์šฐ๊ณ  ์žˆ๊ณ , ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค๋ฉด
    โ†’ โœ… Fine-grained Token ์ถ”์ฒœ!

  • ํšŒ์‚ฌ ๋‚ด๋ถ€ ํˆด, CI/CD, GitHub CLI ๋“ฑ ๋‹ค์–‘ํ•œ ๋„๊ตฌ์™€ ์—ฐ๋™ํ•ด์•ผ ํ•˜๊ณ ,
    ์ด ๋„๊ตฌ๋“ค์ด ์•„์ง Fine-grained๋ฅผ ์ œ๋Œ€๋กœ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด
    โ†’ โœ… Classic Token๋„ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์–ด์š”

โš ๏ธ ๋‹จ, Classic Token์€ ๊ณ„์ • ์ „์ฒด์— ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์—
์‹ค์ˆ˜ํ•˜๋ฉด ๋ฏผ๊ฐํ•œ ์ €์žฅ์†Œ๊นŒ์ง€ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์–ด์š”!
๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์“ฐ๋Š” ๊ฒŒ ์ข‹์•„์š”.

๐Ÿ’ก Tip
  • ๊ณต๋ถ€์šฉ / ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์—๋Š” โ†’ Fine-grained๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค
  • ํšŒ์‚ฌ ํŒ€ ํ”„๋กœ์ ํŠธ ์ค‘ ์ผ๋ถ€ ์ €์žฅ์†Œ๋งŒ ๊ด€๋ฆฌ โ†’ Fine-grained + "Only select repositories"
  • ํˆด ์—ฐ๋™ ๋ฌธ์ œ๋กœ Classic์ด ํ•„์š”ํ•  ๋•Œ โ†’ ์ตœ์†Œ ๊ถŒํ•œ๋งŒ ๋ถ€์—ฌํ•˜๊ณ , ๋งŒ๋ฃŒ๊ธฐ๊ฐ„๋„ ์งง๊ฒŒ!

โš™๏ธ Repository access ์„ค์ •

์ด๊ฑด ๋‚ด ํ† ํฐ์ด ์–ด๋–ค ์ €์žฅ์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€๋ฅผ ์ •ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

์˜ต์…˜ ์„ค๋ช… ์ถ”์ฒœ ์ƒํ™ฉ
Public repositories ๊ณต๊ฐœ ์ €์žฅ์†Œ๋งŒ ์ฝ๊ธฐ ์ „์šฉ โŒ push๋Š” ์•ˆ ๋จ
All repositories ๋ชจ๋“  ์ €์žฅ์†Œ(read/write) ์ ‘๊ทผ โœ… ํ˜ผ์ž ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ
Only select repositories ํŠน์ • ์ €์žฅ์†Œ๋งŒ ์„ ํƒํ•ด์„œ ์„ค์ • โœ… ํšŒ์‚ฌ/ํŒ€ ํ”„๋กœ์ ํŠธ

โš ๏ธ push, commit ํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ All or Only select ์ค‘ ํ•˜๋‚˜ ์„ ํƒํ•ด์•ผ ํ•ด์š”!

๐Ÿ” Repository permissions ์„ค์ •

์—ฌ๊ธฐ์—์„œ ์‹ค์ œ ๊ถŒํ•œ์„ ์ •ํ•ฉ๋‹ˆ๋‹ค. ( ์œ„์˜ Repository access๋ฅผ ์„ ํƒํ•˜๋ฉด ์•„๋ž˜์— Repository permissions์ด ๋œน๋‹ˆ๋‹ค.)

All repositories๋ฅผ ์„ ํƒํ–ˆ๋‹ค๋ฉด, ์•„๋ž˜์— ์—ฌ๋Ÿฌ ๋ฉ”๋‰ด๊ฐ€ ๋œฐ ๊ฑฐ์˜ˆ์š”.
๊ทธ ์ค‘์— ์•„๋ž˜ ํ•ญ๋ชฉ ์„ค์ • ๊ฐ’ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ ๊ธฐ๋ณธ๊ฐ’ ํ•ด์•ผ ํ•  ์„ค์ •
Contents โŒ No access โœ… Read and write โ† ๊ผญ!
Metadata Read-only ๊ทธ๋Œ€๋กœ OK
๋‚˜๋จธ์ง€ (Issues, PR ๋“ฑ) No access ํ•„์š”ํ•  ๋•Œ๋งŒ ์„ค์ •

๐Ÿงฉ No access๋Š” ๋ง ๊ทธ๋Œ€๋กœ โ€œ์•„๋ฌด ๊ฒƒ๋„ ๋ชป ํ•จโ€์ด์—์š”.
push๊ฐ€ ์•ˆ ๋˜๋Š” ์ด์œ ๋Š” ๋Œ€๋ถ€๋ถ„ ์—ฌ๊ธฐ์—์„œ Contents๊ฐ€ No access์ธ ์ƒํƒœ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค!

โœจ ๋‚˜์ค‘์— ๊ถŒํ•œ ๋ฐ”๊พธ๊ณ  ์‹ถ์œผ๋ฉด?

โœ… ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!
GitHub์—์„œ๋Š” ์ƒ์„ฑํ•œ ํ† ํฐ์„ ๋‚˜์ค‘์— ์–ธ์ œ๋“  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.

  • Personal access tokens ๊ด€๋ฆฌ ํŽ˜์ด์ง€๋กœ ๊ฐ€์„œ
  • ์›ํ•˜๋Š” ํ† ํฐ ์šฐ์ธก์˜ Edit ํด๋ฆญ
  • Repository access, Permissions ๋“ฑ ์›ํ•˜๋Š” ํ•ญ๋ชฉ ์ˆ˜์ •
  • ์ €์žฅํ•˜๋ฉด ๋ฐ”๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
๐Ÿ’ก ์˜ˆ: ์›๋ž˜๋Š” read-only๋กœ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ๋‚˜์ค‘์— push ์ž‘์—…๋„ ํ•˜๊ฒŒ ๋˜๋ฉด Read and write๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ!

2๏ธโƒฃ Git์— ํ† ํฐ์„ ๋ถ™์—ฌ๋„ฃ๊ธฐ

์œ„์˜ ์ˆœ์„œ๋Œ€๋กœ ํ† ํฐ์„ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด ํ† ํฐ์ด ์ƒ์„ฑ๋˜๋ฉด์„œ '๋‹ค์Œ์—๋Š” ๋ณผ ์ˆ˜ ์—†๋‹ค' ๋ผ๊ณ  ๋œน๋‹ˆ๋‹ค. (๊ทธ๋Ÿฌ๋‹ˆ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•˜๋ฉด ์•ˆ๋ผ์š”...ใ… ใ… )
๋ฐ”๋กœ ํ† ํฐ์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด์ œ ๋‹ค์‹œ ํ„ฐ๋ฏธ๋„์—์„œ push ํ•ด๋ณด์„ธ์š”.
Git์—์„œ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ๋ฌผ์„ ๋•Œ ์ด๋ ‡๊ฒŒ ๋œฐ ๊ฑฐ์˜ˆ์š”.

Username: your-email@example.com
Password: [๐Ÿ‘‰ ์—ฌ๊ธฐ๋‹ค ๋ณต์‚ฌํ•œ ํ† ํฐ ๋ถ™์—ฌ๋„ฃ๊ธฐ!]

โœ… GitHub๊ฐ€ ์ด ํ† ํฐ์„ ๋น„๋ฐ€๋ฒˆํ˜ธ์ฒ˜๋Ÿผ ์ธ์‹ํ•ด์„œ ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค!


3๏ธโƒฃ ๋‹ค์Œ๋ถ€ํ„ฐ ์•ˆ ๋ฌผ์–ด๋ณด๊ฒŒ ์ €์žฅํ•˜๊ธฐ

โœ… macOS์—์„œ๋Š” Git 2.9.0 (2016๋…„ 6์›” ์ถœ์‹œ)๋ถ€ํ„ฐ
credential-osxkeychain helper๊ฐ€ ์ž๋™์œผ๋กœ ์„ค์น˜๋˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋‹ค๋งŒ, ์ž๋™ ์„ค์ •(--global)๋กœ ๋“ฑ๋ก๋˜๋Š” ์‹œ์ ์€ Git ์„ค์น˜ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

โœ… ํ™•์ธ ๋ฐฉ๋ฒ•

git config --global credential.helper

โ†’ ๊ฒฐ๊ณผ๊ฐ€ osxkeychain์ด๋ฉด ์ด๋ฏธ ์„ค์ •๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์„ค์ • ์•ˆ ๋˜์–ด ์žˆ์œผ๋ฉด ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค!
git config --global credential.helper osxkeychain

๐Ÿ™Œ ๋“œ๋””์–ด ์„ฑ๊ณต~~ ๐ŸŽ‰

์ฒ˜์Œ์—” ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•œ ๋ฒˆ๋งŒ ์ œ๋Œ€๋กœ ์„ค์ •ํ•˜๋ฉด
๊ทธ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ์ •๋ง ํŽธํ•˜๊ฒŒ GitHub์™€ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ์–ด์š”.

๐Ÿ’ฌ "์ฒ˜์Œ push ํ•˜๋‹ค๊ฐ€ ์ธ์ฆ ์˜ค๋ฅ˜ ๋‚˜์„œ ํ•˜๋ฃจ๋ฅผ ๋‚ ๋ ธ์Šต๋‹ˆ๋‹คโ€ฆ"
โ†’ ๊ทธ๋Ÿฐ ๋ถ„๋“ค์ด ๋” ์ด์ƒ ์ƒ๊ธฐ์ง€ ์•Š๊ธธ ๋ฐ”๋ผ๋ฉฐ, ์ด ๊ธ€์„ ์”๋‹ˆ๋‹ค.