CS 곡뢀 22

λ©€ν‹° νƒœμŠ€ν‚Ή, λ©€ν‹° ν”„λ‘œκ·Έλž˜λ°, λ©€ν‹° ν”„λ‘œμ„Έμ‹±, λ©€ν‹° μ½”μ–΄, λ©€ν‹° ν”„λ‘œμ„ΈμŠ€, λ©€ν‹° μŠ€λ ˆλ“œ

λ©€ν‹° νƒœμŠ€ν‚Ή (닀쀑 μž‘μ—… 운영체제) λ™μ‹œμ— 2개 μ΄μƒμ˜ ν”„λ‘œκ·Έλž¨μ„ μˆ˜ν–‰ν•˜λŠ” 닀쀑 μž‘μ—… 운영체제λ₯Ό λ§ν•œλ‹€. OS μŠ€μΌ€μ€„λ§κ³Ό CPU μ‹œλΆ„ν• μ„ 톡해 λ‹€μˆ˜μ˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ „ν™˜ν•˜λŠ” λ©€ν‹° ν”„λ‘œκ·Έλž˜λ°μ„ 톡해 λ©€ν‹° νƒœμŠ€ν‚Ήμ„ κ΅¬ν˜„ν–ˆλ‹€. λ©€ν‹° ν”„λ‘œκ·Έλž˜λ° (닀쀑 ν”„λ‘œκ·Έλž˜λ° μ‹œμŠ€ν…œ) ν”„λ‘œμ„Έμ„œλž€? ν”„λ‘œμ„ΈμŠ€κ°€ λ™μž‘ν•˜λ„λ‘ ν•˜λŠ” ν•˜λ“œμ›¨μ–΄(= CPU) ν”„λ‘œκ·Έλž¨μ΄λž€? μ–΄λ–€ μž‘μ—…μ„ μœ„ν•΄ 운영체제 μœ„μ—μ„œ μ‹€ν–‰ν•  수 μžˆλŠ” 파일 ν”„λ‘œμ„ΈμŠ€λž€? 운영체제 μœ„μ—μ„œ μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨ ν•˜λ‚˜μ˜ CPUκ°€ 2개 μ΄μƒμ˜ ν”„λ‘œκ·Έλž¨μ„ μ „ν™˜ν•œλ‹€. CPUκ°€ 유휴 μƒνƒœμΌ λ•Œ μ‹€ν–‰ 쀑인 λ‘˜ μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ CPUλ₯Ό μ „ν™˜ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ„λ‘ λ™μž‘ν•œλ‹€. (Context switching) 즉, μ—¬λŸ¬ ν”„λ‘œκ·Έλž¨μ„ λ©”λͺ¨λ¦¬μ— μ μž¬ν•œ ν›„ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ CPUλ₯Ό μ‚¬μš©ν•˜λ‹€κ°€, μž…..

CS 곡뢀 2021.12.09

μΈλ±μŠ€κ°€μ— Hash보닀 B-TREEλ₯Ό μ“°λŠ” 이유?

Buckets (Hash Table)λŠ” O(1)둜 νƒμƒ‰μ‹œκ°„μ΄ λΉ λ₯΄λ‹€ Hash ν•¨μˆ˜λŠ” μž…λ ₯ κ°’(keys)이 λ“€μ–΄μ˜€λ©΄ μ–Έμ œλ‚˜ 같은 좜λ ₯ κ°’(Hash κ°’)을 가짐 buckets의 index κ°’μœΌλ‘œ λ§€ν•‘λ˜μ–΄ 찾고자 ν•˜λŠ” 데이터λ₯Ό 얻을 수 있음 미리 μ €μž₯된 λ©”λͺ¨λ¦¬ 곡간(buckets)에 ν•œ λ²ˆμ— 접근을 ν•˜κΈ° λ•Œλ¬Έμ—, 탐색 μ‹œκ°„μ΄ O(1)둜 빠름 Hash 값이 좩돌이 μΌμ–΄λ‚˜λŠ” λ“±μ˜ μ΅œμ•…μ˜ 경우, O(N)이 될 μˆ˜λ„ 있음 νƒμƒ‰μ‹œκ°„μ΄ λΉ λ₯Έ Hashκ°€ 인덱슀둜 μ μ ˆν•˜μ§€ μ•Šμ€ 이유 단 ν•˜λ‚˜μ˜ 데이터λ₯Ό νƒμƒ‰ν•˜λŠ” μ‹œκ°„μ΄ O(1)으둜 λΉ λ₯Έ 것이닀. Hash Table에 μ €μž₯λ˜λŠ” 값듀은 μ •λ ¬λ˜μ–΄ μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— νŠΉμ • 값보닀 ν¬κ±°λ‚˜ μž‘μ€ 값을 찾을 수 μ—†λ‹€. SQL μΏΌλ¦¬λ¬Έμ—μ„œ νŠΉμ • λ²”μœ„μ˜ 값을 μ‘°νšŒν•˜λŠ” 경우, νŠΉμ • 값보닀 ν¬κ±°λ‚˜..

CS 곡뢀 2021.11.29

Redis

WEB-WAS-DB의 μ „ν˜•μ μΈ 3ν‹°μ–΄ ꡬ쑰 -> μ‚¬μš©μžκ°€ λŠ˜μ–΄λ‚˜λ©΄ DB에 슬슬 무리가 κ°€κΈ° μ‹œμž‘ 맀 transaction λ§ˆλ‹€ λ””μŠ€ν¬μ— μ ‘κ·Όν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— λΆ€ν•˜κ°€ λ§Žμ•„μ§€λ©΄ μƒλ‹Ήνžˆ 느렀짐 μ‚¬μš©μžκ°€ λŠ˜μ–΄λ‚˜λ©΄ DBλ§ŒμœΌλ‘œλŠ” λΆ€ν•˜λ₯Ό κ²¬λ”œ 수 μ—†μ–΄ μΊμ‹œμ„œλ²„ λ„μž… μΊμ‹œ ν•œ 번 μ½μ–΄μ˜¨ 데이터λ₯Ό μž„μ˜μ˜ 곡간에 μ €μž₯ν•˜μ—¬ λ‹€μŒμ— 읽을 λ•ŒλŠ” λΉ λ₯΄κ²Œ 결과값을 받을 수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” 곡간 같은 μš”μ²­μ΄ μ—¬λŸ¬λ²ˆ λ“€μ–΄μ˜€λŠ” 경우 μΊμ‹œμ„œλ²„μ—μ„œ λ°”λ‘œ 결과값을 λ°˜ν™˜ DBλΆ€ν•˜λ₯Ό 쀄일 수 있음, μ„œλΉ„μŠ€μ˜ κ°œμ„  cache Hit ν΄λΌμ΄μ–ΈνŠΈκ°€ μ›Ήμ„œλ²„μ— μš”μ²­ μ›Ήμ„œλ²„λŠ” 데이터λ₯Ό DBμ—μ„œ κ°€μ Έμ˜€κΈ° 전에 Cache에 데이터가 μžˆλŠ”μ§€ 확인 Cacheμ„œλ²„μ— 데이터가 있으면, 데이터λ₯Ό DB에 데이터λ₯Ό μš”μ²­ν•˜μ§€ μ•Šκ³  λ°”λ‘œ ν΄λΌμ΄μ–ΈνŠΈμ— 데이터λ₯Ό λ°˜ν™˜ cache ..

CS 곡뢀 2021.11.25

μ—­μ •κ·œν™”

λΉ„μ •κ·œν™”(Unnormalized form) : μ •κ·œν™”λœ ν…Œμ΄λΈ”(λ¦΄λ ˆμ΄μ…˜)을 읽기성λŠ₯ ν–₯상을 μœ„ν•΄ ν…Œμ΄λΈ”μ„ λ‹€μ‹œ ν•©μΉ˜λŠ” 방법 μ—­μ •κ·œν™”(Denormalization) : μ •κ·œν™”λœ ν…Œμ΄λΈ”μ„ λΉ„μ •κ·œν™” μƒνƒœλ‘œ λ§Œλ“€κΈ° μœ„ν•œ 방법 쀑 ν•˜λ‚˜ (λΉ„μ •κ·œν™”κ°€ 더 포괄적) μ—­μ •κ·œν™”λ₯Ό ν•˜λŠ” 이유 μ½κΈ°μž‘μ—…μ΄ 많이 ν•„μš”ν•œ ν…Œμ΄λΈ”μ˜ 읽기성λŠ₯ ν–₯상을 μœ„ν•΄μ„œ λΉ„μ •κ·œν™” μƒνƒœλ‘œ λ§Œλ“œλŠ” μ—­μ •κ·œν™” ν”„λ‘œμ„ΈμŠ€ λ°μ΄ν„°λ² μ΄μŠ€μ˜ μ™„λ²½ν•œ ꡬ쑰섀계λ₯Ό ν¬κΈ°ν•˜κ³  λ°μ΄ν„°μ˜ 무결성을 λ–¨μ–΄νŠΈλ¦¬λŠ” λŒ€μ‹  κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ˜ 읽기(Read)μ„±λŠ₯ ν–₯상을 μœ„ν•œ 섀계 방법 μ •κ·œν™”λ₯Ό 톡해 λΆ„λ¦¬λ˜μ—ˆλ˜ λ¦΄λ ˆμ΄μ…˜μ—μ„œ 쀑볡을 ν—ˆμš©ν•˜κ³  λ‹€μ‹œ ν†΅ν•©ν•˜κ±°λ‚˜ λΆ„ν• ν•˜μ—¬ ꡬ쑰λ₯Ό μž¬μ‘°μ •ν•˜λŠ” κ³Όμ • μ •κ·œν™”λœ λ¦΄λ ˆμ΄μ…˜μ˜ μ„±λŠ₯ μ €ν•˜ μš”μΈ 1. JOIN μ—°μ‚° μ •κ·œν™”λœ ν…Œμ΄λΈ”μ—μ„œλŠ” 3가지 ν…Œμ΄λΈ”μ„ 같은 ν‚€..

CS 곡뢀 2021.11.18

Key의 μ’…λ₯˜ (candidate key, primary key, alternate key, super key, foreign key)

Key? λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 쑰건에 λ§Œμ‘±ν•˜λŠ” νŠœν”Œμ„ μ°Ύκ±°λ‚˜ μˆœμ„œλŒ€λ‘œ μ •λ ¬ν•  λ•Œ λ‹€λ₯Έ νŠœν”Œλ“€κ³Ό ꡬ별 ν•  수 μžˆλŠ” μœ μΌν•œ 기쀀이 λ˜λŠ” 속성 μœ μΌμ„± : ν•˜λ‚˜μ˜ ν‚€κ°’μœΌλ‘œ νŠœν”Œμ„ μœ μΌν•˜κ²Œ 식별할 수 μžˆλŠ” μ„±μ§ˆ --> 각각의 νŠœν”Œμ„ μ„œλ‘œ ꡬ뢄할 수 μžˆμ–΄μ•Ό ν•œλ‹€. μ΅œμ†Œμ„± : ν‚€λ₯Ό κ΅¬μ„±ν•˜λŠ” 속성듀 쀑 κΌ­ ν•„μš”ν•œ μ΅œμ†Œν•œμ˜ μ†μ„±λ“€λ‘œλ§Œ ν‚€λ₯Ό κ΅¬μ„±ν•˜λŠ” μ„±μ§ˆ --> ꡳ이 없어도 될 속성은 넣지 말자. μŠˆνΌν‚€ (Super Key) : μœ μΌμ„± O, μ΅œμ†Œμ„± X μœ μΌμ„±μ˜ νŠΉμ„±μ„ λ§Œμ‘±ν•˜λŠ” 속성 λ˜λŠ” μ†μ„±λ“€μ˜ 집합 ν•œ λ¦΄λ ˆμ΄μ…˜μ˜ μ†μ„±λ“€μ˜ μ§‘ν•©μœΌλ‘œ κ΅¬μ„±λœ ν‚€ λ¦΄λ ˆμ΄μ…˜μ— μžˆλŠ” λͺ¨λ“  νŠœν”Œμ— λŒ€ν•΄ μœ μΌμ„±μ„ λ§Œμ‘±μ‹œν‚¨λ‹€. (아이디) : 각 νŠœν”Œμ„ ꡬ뢄할 수 있음 --> μœ μΌμ„±O (λ‚˜μ΄, 직업, λ“±κΈ‰) : λ‹€λ₯Έ νŠœν”Œκ³Ό μΆ©λΆ„νžˆ 쀑볡될 수 있음 --> 유일..

CS 곡뢀 2021.11.11

λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œμ˜ λ·°(view)?

λ·°(view)? λ‹€λ₯Έ ν…Œμ΄λΈ”μ„ 기반으둜 λ§Œλ“€μ–΄μ§„ κ°€μƒμ˜ ν…Œμ΄λΈ”, λ…Όλ¦¬μ μœΌλ‘œλ§Œ 쑴재 ν…Œμ΄λΈ” : λ””μŠ€ν¬ 곡간이 ν• λ‹Ήλ˜μ–΄ 데이터λ₯Ό μ €μž₯ λ·° : λ””μŠ€ν¬μ— μ €μž₯ 곡간이 ν• λ‹ΉX, 데이터 λ”•μ…”λ„ˆλ¦¬ ν…Œμ΄λΈ”*에 뷰에 λŒ€ν•œ μ •μ˜λ§Œ μ €μž₯ (질의 λ¬Έμž₯λ§Œμ„ 가짐) *DBMS Dictionary Table : 객체의 생성 / μˆ˜μ • / μ‚­μ œλ‚˜ μ‚¬μš©μžμ˜ νŠΉμ • 행동(μ œμ•½ 쑰건 λ“±)듀에 μ˜ν•΄ λ°œμƒν•˜λŠ” Meta Dataλ₯Ό λ³΄κ΄€ν•˜λŠ” 였라클 μ‹œμŠ€ν…œ ν…Œμ΄λΈ” = named table, derived table, virtual table 전체 데이터 μ€‘μ—μ„œ μΌλΆ€λ§Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ μ œν•œν•˜κΈ° μœ„ν•œ 기법 μ‚¬μš©μžμ—κ²Œ 접근이 ν—ˆμš©λœ λ°μ΄ν„°λ§Œμ„ μ œν•œμ μœΌλ‘œ 보여주기 μœ„ν•΄ ν•˜λ‚˜ μ΄μƒμ˜ κΈ°λ³Έ ν…Œμ΄λΈ”λ‘œλΆ€ν„° μœ λ„λœ 가상 ν…Œμ΄λΈ” 데이터 λ³΄μ •μž‘μ—…, μ²˜λ¦¬κ³Όμ • μ‹œν—˜ λ“± ..

CS 곡뢀 2021.11.08

λͺ¨μ˜λ©΄μ ‘ ν‚€μ›Œλ“œ 정리 2021-11-04

ν•΄μ‹œν•¨μˆ˜ : μž…λ ₯κ°’κ³Ό 좜λ ₯κ°’, μ•”ν˜Έν™” 기법, ν‚€κ°’ 좜λ ₯값을 톡해 μž…λ ₯값을 μ•Œ 수 있으면 μ•ˆλœλ‹€. μ•”ν˜Έν™” κΈ°λ²•μœΌλ‘œ, 킀값을 좜λ ₯ν•œλ‹€. ν•΄μ‹œ 좩돌 ν•΄κ²° 기법 1. 체이닝 : μ—°κ²°λ¦¬μŠ€νŠΈ ν•΄μ‹œ 좩돌이 λ°œμƒν•˜λ©΄ 버킷에 μ—°κ²°λ¦¬μŠ€νŠΈλ‘œ 데이터λ₯Ό μ—°κ²°ν•œλ‹€. μ—°κ²°λ¦¬μŠ€νŠΈκ°€ κΈΈμ–΄μ§ˆμˆ˜λ‘ μ„±λŠ₯ μ €ν•˜ (Closed Addressing) 2. 개방 μ£Όμ†Œλ²•(Open Addressing) : λ‹€λ₯Έ 버킷에 μ‚½μž… ν•΄μ‹œ 좩돌이 μΌμ–΄λ‚˜λ©΄ λ‹€λ₯Έ 버킷에 데이터λ₯Ό μ‚½μž…ν•œλ‹€. *ν•΄μ‹œ 좩돌 : μ„œλ‘œ λ‹€λ₯Έ (두 개의) μž…λ ₯값에 λŒ€ν•΄ λ™μΌν•œ 좜λ ₯값을 λ‚΄λŠ” 상황 λΆ„ν•  정볡 μ•Œκ³ λ¦¬μ¦˜μ˜ μ’…λ₯˜ : Merge sort, Quick sort 합병 μ •λ ¬ : stable sort, 데이터λ₯Ό 절반의 크기둜 λΆ„ν•  퀡 μ •λ ¬ : unstable sort, ν”Όλ²—(쀑앙값에 κ°€κΉŒμšΈ..

CS 곡뢀 2021.11.04

인덱슀의 κΈ°λŠ₯ (μž₯점, μ—­ν• )

인덱슀 색인. λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 쑰회 및 검색을 더 λΉ λ₯΄κ²Œ ν•  수 μžˆλŠ” 방법/기술 λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”μ˜ 검색 속도λ₯Ό ν–₯μƒμ‹œν‚€κΈ° μœ„ν•œ 자료ꡬ쑰 좔가적인 μ“°κΈ° μž‘μ—…κ³Ό μ €μž₯ 곡간을 ν™œμš© 데이터와 λ°μ΄ν„°μ˜ μœ„μΉ˜λ₯Ό ν¬ν•¨ν•œ 자료ꡬ쑰λ₯Ό 생성 select문을 μ‚¬μš©ν•˜μ—¬ μ›ν•˜λŠ” 쑰건의 데이터λ₯Ό 검색할 λ•Œ, μ €μž₯된 λ°μ΄ν„°μ˜ 양이 μ—„μ²­λ‚˜κ²Œ λ§Žλ‹€λ©΄ λͺ¨λ“  데이터λ₯Ό κ²€μƒ‰ν•˜κΈ° μœ„ν•œ μˆœνšŒμ— λ§Žμ€ μžμ›κ³Ό μ‹œκ°„μ΄ μ†Œλͺ¨ B+ Tree μ•Œκ³ λ¦¬μ¦˜ 인덱슀λ₯Ό κ΄€λ¦¬ν•˜λŠ”λ° 일반적으둜 μ‚¬μš©λ˜λŠ” μ•Œκ³ λ¦¬μ¦˜ Root node : 경둜의 좜발점이 λ˜λŠ” 루트 λ…Έλ“œ Non-leaf nodes : λ¦¬ν”„λ…Έλ“œκΉŒμ§€μ˜ 경둜 역할을 ν•˜λŠ” λ…Όλ¦¬ν”„λ…Έλ“œ Leaf nodes : μ‹€μ œ 데이터가 μ €μž₯된 λ¦¬ν”„λ…Έλ“œ λ¦¬ν”„λ…Έλ“œμ— 이λ₯΄κΈ°κΉŒμ§€μ— λŒ€ν•œ μžμ‹ λ…Έλ“œμ— 포인터가 μ €μž₯ B+트리의 검색은 ..

CS 곡뢀 2021.11.01

λ‹€ν˜•μ„±(Polymorphism)μ΄λž€?

OOP(객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°)의 4가지 νŠΉμ§• 쀑 ν•˜λ‚˜ 좔상화, μΊ‘μŠν™”, μΌλ°˜ν™” 관계, λ‹€ν˜•μ„± λ‹€ν˜•μ„±(Polymorphism) μ„œλ‘œ λ‹€λ₯Έ 클래슀의 객체가 같은 λ©”μ‹œμ§€λ₯Ό λ°›μ•˜μ„ λ•Œ 각자의 λ°©μ‹μœΌλ‘œ λ™μž‘ν•˜λŠ” λŠ₯λ ₯ μ˜€λ²„λΌμ΄λ”©(Overriding), μ˜€λ²„λ‘œλ”©(Overloading) μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ ν•  뿐 μ•„λ‹ˆλΌ 변화에도 μœ μ—°ν•˜κ²Œ λŒ€μ²˜ν•  수 μžˆλ‹€. ꡬ체적으둜 ν˜„μž¬ μ–΄λ–€ 클래슀 객체가 μ°Έμ‘°λ˜λŠ”μ§€μ™€ λ¬΄κ΄€ν•˜κ²Œ ν”„λ‘œκ·Έλž˜λ°μ„ ν•  수 μžˆλ‹€. 1. λ‹€ν˜•μ„±μ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 경우 public class Cat { public void meow(){ System.out.println("μ•Όμ˜Ή"); } } public class Dog { public void bark(){ System.out.println("멍멍"); } } publi..

CS 곡뢀 2021.10.28

CPU μŠ€μΌ€μ€„λŸ¬ μ „λž΅ (FCFS, SJF, HRN, SRT, Round Robin, Multi-Level Queue)

CPU μŠ€μΌ€μ€„λ§ λ©”λͺ¨λ¦¬μ— 올라온 ν”„λ‘œμ„ΈμŠ€λ“€ 쀑 μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ¨Όμ € μ²˜λ¦¬ν• μ§€ μˆœμ„œλ₯Ό μ •ν•˜λŠ” 것이닀. Ready Queue에 μžˆλŠ” ν”„λ‘œμ„ΈμŠ€λ“€ 쀑에 λˆ„κ΅¬μ—κ²Œ CPUλ₯Ό ν• λ‹Ήν•΄ 쀄 것인지 μ •ν•œλ‹€. μ™œ ν•„μš”ν• κΉŒ? CPUλŠ” ν•œλ²ˆμ— ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ§Œ μ‹€ν–‰μ‹œν‚¬ 수 μžˆλ‹€. νŠΉμ • ν”„λ‘œμ„ΈμŠ€κ°€ I/O μš”μ²­μ— μ˜ν•΄ λŒ€κΈ°ν•΄μ•Όν•  경우 CPUλŠ” κ·Έμ € 놀고 있게 λœλ‹€. 닀쀑 ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” μ΄λŸ¬ν•œ μ‹œκ°„μ„ μƒμ‚°μ μœΌλ‘œ ν™œμš©ν•˜κ³ μž CPUλ₯Ό κ·Έ ν”„λ‘œμ„ΈμŠ€λ‘œλΆ€ν„° νšŒμˆ˜ν•΄ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ— ν• λ‹Ήν•œλ‹€. (Context Switching) CPU 이용λ₯  증가 : ν”„λ‘œμ„ΈμŠ€ μ‹€ν–‰ κ³Όμ •μ—μ„œ μ£Ό κΈ°μ–΅μž₯치λ₯Ό μ•‘μ„ΈμŠ€ν•œλ‹€λ“ μ§€, μž…μΆœλ ₯ λͺ…λ Ήμ‹€ν–‰ λ“±μ˜ 원인에 μ˜ν•΄ λ°œμƒν•  수 μžˆλŠ” CPU의 λ‚­λΉ„ μ‹œκ°„μ„ 쀄이고, CPUκ°€ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰ν•˜λŠ”λ° μ‚¬μš©λ˜λŠ” μ‹œκ°„ λΉ„μœ¨μ„ μ¦κ°€μ‹œν‚΅..

CS 곡뢀 2021.10.24