[TIL_Carrotww] 114 - 23/05/17

μœ ν˜•μ„Β·2023λ…„ 5μ›” 17일
0

TIL

λͺ©λ‘ 보기
129/138
post-thumbnail

πŸ“Carrotww의 μ½”λ”© 기둝μž₯

🧲 python algorithm

πŸ” λ°±μ€€ N-Queen

μ²˜μŒμ— 무슨 λ¬Έμ œμΈκ°€ μ‹Άμ—ˆλŠ”λ° λ‚˜μ€‘μ— μ•Œμ•„λ³΄λ‹ˆ λ‚˜λ¦„ 유λͺ…ν•œ λ¬Έμ œμ˜€μ—ˆλ‹€.
일단 dfs둜 λ°±νŠΈλž˜ν‚Ήμ‹μœΌλ‘œ ν‘ΈλŠ”κ±΄ ν•œλˆˆμ— μ•Œμ•„λ΄€λŠ”λ° μž¬κ·€λ₯Ό μ§œλŠ”λ° λ„ˆλ¬΄ μžΌλ³‘μ΄λΌ λͺ»ν’€μ—ˆλ‹€.
심지어 λ‹€λ₯Έμ‚¬λžŒ 풀이λ₯Ό 보고 λ‚΄ ν’€μ΄λŒ€λ‘œ main ν•¨μˆ˜λ₯Ό λ§Œλ“€κ³  λ‹€μ‹œ ν’€μ–΄λ΄€λŠ”λ° 그건 μ‹œκ°„μ΄ˆκ³Όκ°€ 났닀 pypy둜 ν–ˆμŒμ—λ„... mainν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  ν’€μ—ˆλ”λ‹ˆ μ‹œκ°„μ΄ˆκ³Όκ°€ μ•ˆλ‚˜λ”λΌ..

  • 문제 아이디어
    μ΄μ°¨μ›λ°°μ—΄λ‘œ 풀어도 λ˜κΈ°λŠ” ν•˜μ§€λ§Œ λŒ€λΆ€λΆ„ 1차원 λ°°μ—΄λ‘œ ν’€μ—ˆλ‹€.
    μ–΄λ–»κ²Œ 1차원 λ°°μ—΄λ‘œ ν’€λ¦¬λ‚˜?
    queen이 μ–΄λ– ν•œ row의 μžλ¦¬μ— μœ„μΉ˜ν•œλ‹€λ©΄ ν•΄λ‹Ή rowλŠ” λͺ¨λ‘ μ‚¬μš© λΆˆκ°€λŠ₯ν•˜λ‹€.
    이 μ•„μ΄λ””μ–΄μ—μ„œ 1차원 λ°°μ—΄λ‘œλ§Œ κ°„λ‹¨ν•˜κ²Œ 풀이할 수 μžˆλŠ” 것이닀.
import sys
n = int(sys.stdin.readline())
answer = 0
rows = [0] * n

# queen을 λ‘˜ 수 μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” ν•¨μˆ˜
def check(r):
    for i in range(r):
    	# 같은 열에 있으면 두지 λͺ»ν•œλ‹€.
        if rows[i] == rows[r]:
            return False
        # λŒ€κ°μ„ μ— μžˆλŠ”μ§€ ν™•μΈν•œλ‹€.
        if abs(r - i) == abs(rows[r] - rows[i]):
            return False
    return True

def dfs(r):
    global answer
    if r == n:
        answer += 1
        return

	# λ§€κ°œλ³€μˆ˜λ‘œ λ“€μ–΄μ˜¨ row에 λŒ€ν•΄μ„œ ν•œμΉΈμ”© μ΄λ™ν•˜λ©΄μ„œ λŒλ¦°λ‹€.
    for i in range(n):
        rows[r] = i
        if check(r):
            dfs(r + 1)

dfs(0)
print(answer)

ν•œ 번 μ΄ν•΄ν•˜λ©΄ 쉽닀.
μ½”λ”© μ²˜μŒν–ˆμ„λ•Œ 이 문제 λ§Œλ‚¬λ‹€λ©΄ μ΄ν•΄ν•˜λŠ”λ° 3일은 걸렸을 것 κ°™λ‹€. 유λͺ…ν•œ λ¬Έμ œλ“€μ€ ν‘ΈλŠ” 방법이 μ§„μ§œ κΈ°κ°€ λ§‰νžŒκ²ƒ κ°™λ‹€. 더 μ—΄μ‹¬νžˆ ν’€μ–΄μ•Όκ² λ‹€ γ… 

🧲 Kubernetes

πŸ” λ„μž…

kubernetesλ₯Ό 많이 λ“€μ–΄λ΄€μ§€λ§Œ μ •ν™•νžˆ λ­”μ§€λŠ” λͺ°λΌμ„œ 찾아보고 정리해봀닀.
ν˜Ήμ‹œ 마이크둜 μ„œλΉ„μŠ€λŠ” μ•Œκ³ μžˆλ‚˜?
λ‚΄ λΈ”λ‘œκ·Έμ— κΈ°κ°€λ§‰νžˆκ²Œ λ”°λ‘œ μ •λ¦¬ν•΄λ‘κΈ°λŠ” ν–ˆλ‹€.
일단 μ•ˆλ‹€κ³  κ°€μ •ν•˜κ³  이야기 ν•˜κ² λ‹€.
λ„μ»€λ‘œ 직접 배포λ₯Ό ν•΄ λ³Έ μ‚¬λžŒμ΄ 마이크둜 μ„œλΉ„μŠ€λΌλŠ” κ°œλ…μ„ μ΄ν•΄ν•˜κ²Œ 되면 의문점이 생길것이닀. λ‚˜λ„ κ·Έλž¬λ‹€. μ„œλΉ„μŠ€λ₯Ό μͺΌκ°œμ„œ 도컀에 λ°°ν¬ν•˜κ²Œλ˜λ©΄ μ»¨ν…Œμ΄λ„ˆλ“€μ΄ μ—„μ²­ λ§Žμ•„μ§ˆν…λ° μ–΄λ–»κ²Œ λ°°ν¬ν•˜κ³  κ΄€λ¦¬ν•˜μ§€...? λΌλŠ” 생각
κ·Έ 관리λ₯Ό ν•΄μ£Όκ³  ν•˜λ‚˜ν•˜λ‚˜ ꡐ체해 μ£ΌλŠ” 것을 쿠버가 ν•΄μ€€λ‹€.

πŸ” Kubernetesλ₯Ό μ‚¬μš©ν•˜λŠ” 이유

μ–΄μ§€κ°„ν•΄μ„œ ν˜Όμžμ„œ κ°œλ°œν•œ μ„œλΉ„μŠ€λŠ” 쿠버λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λ‹€. κ³Όν•  것이닀.
ν•˜μ§€λ§Œ μ„œλΉ„μŠ€κ°€ 컀지고 λ§Žμ€ 마이크둜 μ„œλΉ„μŠ€λ₯Ό λ‹€λ£¨κ²Œ λœλ‹€λ©΄ μΏ λ²„μ˜ νš¨κ³Όκ°€ λ°œνœ˜λœλ‹€.

  • μŠ€μΌ€μΌλ§
    μΏ λ²„λ„€ν‹±μŠ€μ˜ μ£Όμš” μž₯점쀑 ν•˜λ‚˜λ‘œ νŠΈλž˜ν”½μ— 따라 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΄€λ¦¬ν•˜κ³  μŠ€μΌ€μΌλ§ ν•  수 μžˆλ‹€. κ°‘μž‘μŠ€λŸ½κ²Œ νŠΈλž˜ν”½μ΄ μΉ˜μ†Ÿμ„λ•Œ μ•Œμ•„μ„œ μ„œλΉ„μŠ€λ₯Ό ν™•μž₯μ‹œμΌœμ€€λ‹€.
  • 지속적인 개발 & 톡합
    지속적인 개발이 λ­”μ†Œλ¦°κ°€. 말 κ·Έλž˜λ„μ΄λ‹€ μΏ λ²„λŠ” 둀링 μ—…λ°μ΄νŠΈ, 블루/κ·Έλ¦° 배포 μ „λž΅μ„ μ΄μš©ν•œλ‹€.
    둀링 μ—…λ°μ΄νŠΈ : μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μΈμŠ€ν„΄μŠ€λ₯Ό 순차적으둜 μ—…λ°μ΄νŠΈ ν•˜λ©΄μ„œ 이전 λ²„μ „μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό λ™μ‹œμ— μ’…λ£Œν•œλ‹€. ν•΄μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 일뢀 μΈμŠ€ν„΄μŠ€ μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©μžμ—κ²Œ μ œκ³΅ν•¨μœΌλ‘œμ¨ μ‚¬μš©μžμ—κ²Œ λ³΄μ΄λŠ” λ‹€μš΄ νƒ€μž„μ„ λ°©μ§€ν•œλ‹€.
    블루/κ·Έλ¦° 배포 : λΈ”λ£¨λŠ” ν˜„μž¬ λ²„μ „μ˜ μΈμŠ€ν„΄μŠ€, 그린은 μƒˆ λ²„μ „μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό κ°€λ₯΄ν‚¨λ‹€. 이 방식은 κΈ°μ‘΄ 버전과 μƒˆλ²„μ „μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ™μ‹œμ— μ‹€ν–‰ν•˜μ—¬ μƒˆ λ²„μ „μ˜ ν…ŒμŠ€νŠΈ 검증이 μ™„λ£Œλ˜λ©΄, νŠΈλž˜ν”½μ„ 블루 -> 그린을 switch over ν•˜μ—¬ μ‚¬μš©μžκ°€ λ°”λ‘œ μƒˆ 버전을 μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•œλ‹€.
  • λ©€ν‹° ν΄λΌμš°λ“œ 지원
    AWS, Google, Azureλ“±κ³Ό 같은 μ—¬λŸ¬ ν΄λΌμš°λ“œ ν”Œλž«νΌμ΄ μžˆμ§€λ§Œ μΏ λ²„λŠ” λ©€ν‹° ν΄λΌμš°λ“œλ₯Ό μ§€μ›ν•œλ‹€. 이게 κ°€λŠ₯ν•œ μ΄μœ λŠ” 쿠버가 cloud κ³΅κΈ‰μžμ— νŠΉν™”λœ apiλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ•„λ‹Œ 곡톡 apiλ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. ν•΄μ„œ ν΄λΌμš°λ“œ ν”Œλž«νΌκ°„μ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 이동할 수 μžˆλ‹€. μ΄λ ‡κ²Œ ν•¨μœΌλ‘œμ¨ 리슀크λ₯Ό λΆ„μ‚°ν•˜κ³  μ—¬λŸ¬λΆ€λΆ„μ—μ„œ 효과적인 ν΄λΌμš°λ“œλ₯Ό 선택할 수 μžˆλ‹€.

πŸ” Kubernetes의 λ™μž‘ 방식

μΏ λ²„λŠ” 선언적 λͺ¨λΈμ— κΈ°λ°˜ν•˜μ—¬ λ™μž‘ν•œλ‹€. YAML, JSON μ„€μ • νŒŒμΌμ— μƒνƒœ μ •μ˜λ₯Ό ν•˜λ©΄ 쿠버가 ν•΄λ‹Ή 섀정을 μ‹€ν•Έν•œλ‹€. μΏ λ²„λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ§€μ†μ μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ν•˜μ—¬ ν˜„μž¬ μƒνƒœκ°€ μ›ν•˜λŠ” μƒνƒœμ™€ μΌμΉ˜ν•˜λŠ”μ§€ ν™•μΈν•œλ‹€.
μ£Όμš” μ»΄ν¬λ„ŒνŠΈ.

  • νŒŒλ“œ(Pods) : μΏ λ²„μ—μ„œ μƒμ‚°ν•˜κ±°λ‚˜ λ°°ν¬ν•˜λŠ” κ°€μž₯ μž‘μ€ λ‹¨μœ„μ΄λ‹€. νŒŒλ“œλŠ” ν΄λŸ¬μŠ€ν„°μ—μ„œ 싀행쀑인 ν”„λ‘œμ„ΈμŠ€μ˜ 단일 μΈμŠ€ν„΄μŠ€λ₯Ό λ‚˜νƒ€λ‚΄λ©°, ν•˜λ‚˜ μ΄μƒμ˜ μ»¨ν…Œμ΄λ„ˆλ₯Ό ν¬ν•¨ν•œλ‹€.
  • μ„œλΉ„μŠ€(Services) : νŒŒλ“œ μ„ΈνŠΈμ—μ„œ 싀행쀑인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μΆ”μƒμ μœΌλ‘œ λ…ΈμΆœν•˜λŠ” 방법이닀. μ„œλΉ„μŠ€λŠ” νŒŒλ“œκ°„ 톡신을 κ°€λŠ₯ν•˜κ²Œ ν•˜λ©°, 인터넷에도 λ…ΈμΆœν•˜κ²Œ ν•  수 μžˆλ‹€.
  • λ³Όλ₯¨(Volumes) : νŒŒλ“œμ˜ μ»¨ν…Œμ΄λ„ˆμ— μ ‘κ·Ό κ°€λŠ₯ν•œ 디렉터리이닀. μΏ λ²„λŠ” μ—¬λŸ¬ μ’…λ₯˜μ˜ λ³Όλ₯¨μ„ μ§€μ›ν•˜μ—¬ 곡유 μŠ€ν† λ¦¬μ§€, λ„€νŠΈν¬ μŠ€ν† λ¦¬μ§€ 등을 μ‚¬μš©ν•  수 있게 ν•΄μ€€λ‹€.
  • λ„€μž„μŠ€νŽ˜μ΄μŠ€(Namespaces) : ν΄λŸ¬μŠ€ν„° λ¦¬μ†ŒμŠ€λ₯Ό μ—¬λŸ¬ μ‚¬μš©μž 간에 λΆˆλ¦¬ν•œλ‹€. 이λ₯Ό 톡해 νŒ€μ΄λ‚˜ ν”„λ‘œμ νŠΈκ°€ λ¦¬μ†ŒμŠ€λ₯Ό κ²©λ¦¬ν•˜κ³  관리할 수 μžˆλ‹€.
  • Ingress : ν΄λŸ¬μŠ€ν„° λ‚΄λΆ€ μ„œλΉ„μŠ€λ₯Ό 외뢀에 λ…ΈμΆœν•˜λŠ” API μ˜€λΈŒμ νŠΈμ΄λ‹€. 이λ₯Ό 톡해 Http, Https 경둜λ₯Ό μ •μ˜ν•  수 μžˆλ‹€.

πŸ” Kubernetesλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ λ˜λŠ” 경우?

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ‹¨μˆœν•˜κ±°λ‚˜ μ£Όμš” λ³€ν™”λ‚˜ νŠΈλž˜ν”½ 급증이 μžˆμ„κ²ƒμœΌλ‘œ μ˜ˆμƒλ˜μ§€ μ•ŠμœΌλ©΄ μΏ λ²„λŠ” μ‚¬μš©μžμ˜ λ°°μ›Œμ•Όν•˜λŠ” μ‹œκ°„, μ„€μ •, 관리에 λŒ€ν•œ μ‹œκ°„μ΄ λ“€λ©°. νŒ€μ΄ μ†Œμˆ˜μ΄κ±°λ‚˜ μ „λ¬Έ 지식이 λΆ€μ‘±ν•œ κ²½μš°λŠ” 쒋지 μ•Šμ€ 선택이닀.

profile
Carrot_hyeong

0개의 λŒ“κΈ€