mite-rva
mite-rva
λ―Έλ„€λ₯΄λ°”
10 posts
Don't wanna be here? Send us removal request.
mite-rva Β· 1 year ago
Text
μ›Ή μ„œλ²„λž‘ ν΄λΌμ΄μ–ΈνŠΈ-λΈŒλΌμš°μ € 사이
λΈŒλΌμš°μ €λŠ” μ›ν•œλ‹€!
"HTML을!" κ·ΈλŸ¬λ‚˜ 직접 μ½μ–΄μ˜¬ 수 μ—†λ‹€.
κ·Έλž˜μ„œ μš”μ²­ν•œλ‹€
URL의 ν˜•νƒœλ‘œ! HTML을
μ›Ή μ„œλ²„λŠ” μ€€λ‹€!
"HTML을" HTTP 약속 (ν”„λ‘œν† μ½œ, 톡신 κ·œμ•½)을 ν†΅ν•΄μ„œ
μ–Έμ œλ‚˜, μ•ˆμ „ν•˜κ²Œ, λΉ λ₯΄κ²Œ. HTML을
0 notes
mite-rva Β· 1 year ago
Text
Nginx 포트 μ—¬λŸ¬ 개 μ‚¬μš©ν•˜κΈ° (2개!)
NginxλŠ” 기본적으둜 포트 3000을 μ“°λŠ”λ° (예제 ν•™μŠ΅ μ „κΉŒμ§„ μ•„λ§ˆ 8080)
λ‚˜λŠ” 9223을 써보고 μ‹Άμ—ˆλ‹€.
ν•˜μ§€λ§Œ μ™„λ²½ν•˜κ²Œ μ‹€νŒ¨ν•˜μ˜€λ‹€. (읭)
μ΄μœ λŠ” κΈ°λ³Έ 섀정이 3000만 listen ν•˜λ„λ‘ λ˜μ–΄μžˆκΈ° λ•Œλ¬Έ.
(참고 링크: https://velog.io/@dong3789/nginx-%ED%8F%AC%ED%8A%B8%EB%B3%84-%EB%8F%84%EB%A9%94%EC%9D%B8%EC%9D%84-%EB%8B%AC%EC%95%84%EB%B3%B4%EC%9E%90)
sudo nano /opt/homebrew/etc/nginx/nginx.conf
ν•΄μ„œ (κΆŒν•œ 있으면 걍 κ³ μΉ˜κ±°λ‚˜)
μ•„λž˜μ²˜λŸΌ ν•˜λ©΄ λœλ‹€ ( 포트 μΆ”κ°€ )
Tumblr media
참고둜 M2 Mac κΈ°μ€€.
직접 μ“°λ‹€κ°€ μ£½λŠ”μ€„ μ•Œμ•˜λ„€. 3μ‹œλΌλ‹ˆ 흑흑.
κ·Έλž˜λ„ λΏŒλ“―ν•˜λ‹€.
μ›Ή νŽ˜μ΄μ§€λ§ˆλ‹€ μ–΄λ–€ 건 3000만 μ“°κ³ , μ–΄λ–€ 건 9223만 쓰도둝도 해보고 싢은데 그건 λ‹€μŒμ— ν•˜κ³ .
보기에 μ•ˆ 쒋아도 μ½”λ“œ κ·ΈλŒ€λ‘œ 뢙이면 μ•„λž˜λž‘ κ°™λ‹€.
server { listen 9223; server_name sena.com; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #error_page 404 /404.html; #redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:9223 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }
이게 뭐야
0 notes
mite-rva Β· 1 year ago
Text
Nginx
μ°Έκ³ : https://smali-kazmi.medium.com/setup-nginx-node-js-on-mac-os-x-b31eda9f7d5d
how to read (pronounce): μ—”μ§„ μ—‘μŠ€
Nginx currently supportsΒ 7 scripting languages: Go, Node.js, Perl, PHP, Python, Ruby, and Java Servlet Containers
(the last is an experimental module)
It enables you to run applications written in different languages on the same server.
how to install: https://dev.to/logrocket/how-to-run-a-node-js-server-with-nginx-588
how to install by M2: 1. homebrew install with terminal commands
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2. PATH for homebrew: (2-lines)
(echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> /Users/nika/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
3. run:
To start nginx now and restart at login:
Β  brew services start nginx
Or, if you don't want/need a background service you can just run:
Β  /opt/homebrew/opt/nginx/bin/nginx -g daemon\ off\;
[like this] nginx, "http://localhost:8080/"
Tumblr media
4. stop
nginx -s stop
5. μ—λŸ¬ 확인:
Β nginx -t
nginx: the configuration file /opt/homebrew/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /opt/homebrew/etc/nginx/nginx.conf test is successful
6. λ¦¬λ‘œλ“œ:
nginx -s reload
sudo nano /opt/homebrew/etc/nginx/nginx.conf (after password)
λ””ν΄νŠΈ ꡬ성 λ°”κΎΈκΈ°, (nano: vim, emacs 같은 μ—λ””ν„°λ‘œ μˆ˜μ •ν•˜κ²Œλ” μŠˆνΌμœ μ € μ„€μ • κΆŒν•œμ„ μ€€λ‹€)
λ‚˜λ…Έ λͺ…λ Ήμ–΄:
^G : 도움말 보기
^X : 끝내기
^O : 파일 μ €μž₯(μ €μž₯ν•  파일λͺ… μž…λ ₯, λ””ν΄νŠΈλŠ” 졜초 파일λͺ…)
^R : 파일 읽기(ν˜„μž¬ νŒŒμΌμ— μƒˆλ‘œμš΄ 파일 μΆ”κ°€)
^W : ν…μŠ€νŠΈ 검색
^\ : 검색 ν›„ λ°”κΎΈκΈ°
^K : μ„ νƒν•œ λ¬Έμžμ—΄ μž˜λΌλ‚΄κΈ°
^U : μž˜λΌλ‚Έ λ¬Έμžμ—΄ 뢙이기
^J : μ–‘μͺ½ μ •λ ¬(ν•œμ€„λ‘œ ν‘œμ‹œ)
^T : λ§žμΆ€λ²• 체크
^C : ν˜„μž¬ μ»€μ„œ μœ„μΉ˜
^- : μž…λ ₯ν•œ ν–‰λ²ˆν˜Έ, μ—΄λ²ˆν˜Έλ‘œ 이동
^A : ν˜„μž¬ ν–‰μ˜ 처음으둜 이동
^E : ν˜„μž¬ ν–‰μ˜ λ§ˆμ§€λ§‰μœΌλ‘œ 이동
Mac 폴더 생성 λͺ…λ Ήμ–΄: mkdir servers
mkdir -p /var/www/sena.com
Mac 파일 생성 λͺ…λ Ήμ–΄: touch ~/servers/examplePage/example.com (~ kiteκΉŒμ§€ 포함)
touch ~/servers/examplePage/app.js
nano μ•ˆ μ“°κ³  μ—λŸ¬ 해결법:
sudo vi λ§Œλ“œλ €λŠ” 파일λͺ… or μ €μž₯Β ν•  λ•ŒΒ 
:w !sudo teeΒ % > /dev/null
Tumblr media
the page eXample:
make folder and "example.com" file
make app.js (javaScript file)
edit /etc/hosts (add 127.0.0.1 example.com)
μƒˆ 포트 μΆ”κ°€ν•˜λŠ” 법:
Tumblr media
이걸 ν•˜κ³  μ‹ΆμœΌλ©΄ 이러면 λœλ‹€: sudo nano /opt/homebrew/etc/nginx/nginx.conf
링크
0 notes
mite-rva Β· 1 year ago
Text
MacOS zsh commands
echo $SHELL
/bin/zsh
λŒ€μ†Œλ¬Έμž ꡬ뢄은 μ€‘μš”ν•˜λ‹€*
0 notes
mite-rva Β· 1 year ago
Text
nodeJS
Node.js v20.10.0 to /usr/local/bin/node
npm v10.2.3 to /usr/local/bin/npm
/usr/local/bin is in your $PATH.
0 notes
mite-rva Β· 1 year ago
Text
μ˜λ‹¨μ–΄ 정리
deploy 배포
versatile λ‹€μž¬λ‹€λŠ₯ν•œ, λ‹€μš©λ„μ˜
0 notes
mite-rva Β· 1 year ago
Text
ν…€λΈ”λŸ¬ κΈ°λŠ₯ 정리
μ±„νŒ… κΈ°λŠ₯ - 'λˆ„κ΅¬λˆ„κ΅¬:'와 같이 μ“°λ©° 처음 두 μ€„λ§Œ μΈμ‹λœλ‹€.
더보기 링크 κΈ°λŠ₯ - '상세 κΈ°λŠ₯'에 ν•΄λ‹Ήν•˜λŠ”λ°, κΈ€μ“°κΈ° 쀑 이 κΈ°λŠ₯을 ν•œ 번 μ“Έ 수 μžˆλ‹€. 이 κΈ°λŠ₯은 '더보기 링크' μ΄ν›„μ˜ λ‚΄μš©μ„ '계속 보기'둜 κ°€λ €μ€€λ‹€.
0 notes
mite-rva Β· 2 years ago
Text
λ°μ΄ν„°λ² μ΄μŠ€λž€ (mysql) (λͺ©μ°¨)
λ°μ΄ν„°λ² μ΄μŠ€λž€ λ°μ΄ν„°μ˜ 집합이닀.
.
λ°μ΄ν„°λ² μ΄μŠ€ νŠΈλžœμž­μ…˜
.
0 notes
mite-rva Β· 2 years ago
Text
λ°μ΄ν„°λ² μ΄μŠ€ (mysql) νŠΈλžœμž­μ…˜
ACIDλž€?
↳ μ •μ˜, (λΆ€κ°€μ •μ˜,) ν•˜λ“œμ›¨μ–΄μ  원리, ꡬ성법, νŠΈλžœμž­μ…˜ vs 파일 μ‹œμŠ€ν…œ μž‘μ—…
타 λ°μ΄ν„°λ² μ΄μŠ€μ™€ ν˜Έν™˜λ˜λŠ” κΈ°λŠ₯인가?
λŒ€μ²˜λ²•
ACIDκ°€ λ­”μ§€ μ•Œμ•„λ³΄κΈ° 전에 γ€ŒνŠΈλžœμž­μ…˜γ€ 이 λ­”μ§€ μ•Œμ•„λ‚΄μž.
TRANSACTION
데이터λ₯Ό λ‹€λ£¨λŠ” 논리적인 μž‘μ—…μ˜ λ‹¨μœ„ 이닀.
DBMSκ°€ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ‹€λ£° λ•Œ μ‚¬μš©ν•˜λŠ” μž‘μ—… (ν”„λ‘œκ·Έλž¨) λ‹¨μœ„ 이기도
νŠΈλžœμž­μ…˜μ€ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 무결성을 (일관성)을 μœ μ§€ν•˜κΈ° μœ„ν•΄μ„œ μ“΄λ‹€.
+ μž₯μ• κ°€ 일어났을 λ•Œ 데이터λ₯Ό λ³΅κ΅¬ν•˜λŠ” μž‘μ—…μ˜ λ‹¨μœ„ (λ‘€λ°± λ‹¨μœ„)
+ λ™μ‹œμ„± μ œμ–΄ 블둝 λ‹¨μœ„ (같은 데이터λ₯Ό 같은 타이밍에 ν™œμš©ν•  λ•Œ, μ„œλ‘œ λΆ„λ¦¬ν•˜λŠ” λ‹¨μœ„)
γ€Œν•˜λ“œμ›¨μ–΄μ  원리」
START TRANSACTION;
ν•˜λ©΄ νŠΈλžœμž­μ…˜ μ€‘μ—λŠ” 데이터λ₯Ό 'μ£ΌκΈ°μ–΅μž₯치 버퍼' 즉 'λ©”λͺ¨λ¦¬ 버퍼'에 μ €μž₯ν•œλ‹€
(λ©”λͺ¨λ¦¬λŠ” νœ˜λ°œμ„±μ΄λ‹€) μ½μ–΄μ˜¬ λ•Œλ„ λ²„νΌμ—μ„œ μ½μ–΄μ˜¨λ‹€.
λ‚˜μ€‘μ— COMMIT;을 λ§Œλ‚˜λ©΄
ν•˜λ“œλ””μŠ€ν¬, SSD 와 같은 μ‹€μ§ˆμ  물리적 μ €μž₯μž₯μΉ˜μ— μ΅œμ’… μ €μž₯λœλ‹€.
γ€Œμ’…λ£Œ μ•Œλ¦Ό ꡬ성법 i」
β‘  β‘‘ β‘’ β‘£ COMMIT β‘€ β‘₯
γ€Œμ’…λ£Œ μ•Œλ¦Ό ꡬ성법 ii」
β‘  β‘‘ β‘’ β‘£ β‘€ β‘₯ COMMIT
*COMMIT은 νŠΈλžœμž­μ…˜μ˜ μ’…λ£Œλ₯Ό μ•Œλ¦¬λŠ” SQL 문이닀.
(μš°λ¦¬κ°€ 쿼리λ₯Ό μˆ˜ν–‰ ν›„ CLI λ“±μ—μ„œ 'QUERY OK!'λ₯Ό λ°›λŠ” 것은 μ–˜ 덕뢄)
[보톡]
μ‚¬μš©μžλ₯Ό κ³ λ €ν•˜μ—¬, λΉ λ₯Έ λ°˜μ‘μ„± 즉 '응닡성'을 보μž₯ν•˜κΈ° μœ„ν•΄
λ³Έ μ €μž₯μž₯치 μ €μž₯ 전에, 즉 'λ©”λͺ¨λ¦¬ 버퍼' 'μ£ΌκΈ°μ–΅μž₯치 버퍼' μ—μ„œμ˜ μž‘μ—…μ΄
λλ‚˜λ©΄ COMMIT을 ν•˜μ—¬ νŠΈλžœμž­μ…˜μ„ μž„μ‹œ μ’…λ£Œ μ„ μ–Έ ν•˜κ³ 
μ‹€μ œ λ°μ΄ν„°λ² μ΄μŠ€μ— κΈ°λ‘ν•˜λŠ” 것을 DBMS둜 ν•˜μ—¬κΈˆ μˆ˜ν–‰ν•˜κ²Œ ν•œλ‹€.
κ·Έλž˜μ„œ μ‹€μ œλ‘  μš”λ ‡κ²Œ
β‘  β‘‘ β‘’ β‘£ COMMIT(λΆ€λΆ„ μ™„λ£Œ) β‘€ β‘₯ μ™„λ£Œ-
BEGIN(μ‹œμž‘) $
μˆ˜ν–‰(β‘  β‘‘ β‘’ β‘£) $ λΆ€λΆ„μ™„λ£Œ $ λ²„νΌλ‚΄μš© 기둝(β‘€ β‘₯) $ μ™„λ£Œ(COMMIT)
γ€ŒCOMMIT & ROLLBACK」
TCL
νŠΈλžœμž­μ…˜ 컨트둀 λž­κ·€μ§€
νŠΈλžœμž­μ…˜ μ œμ–΄ λͺ…λ Ήμ–΄λ‘œμ„œ, 컀밋과 둀백이 μžˆλ‹€.
기본적으둜 νŠΈλžœμž­μ…˜ 쀑간에 μž‘μ—…μ΄ 잘λͺ»λ˜λ©΄ '회볡 μ•Œκ³ λ¦¬μ¦˜'을 μ“°λŠ”λ°
자의적으둜 νŠΈλžœμž­μ…˜μ„ μ·¨μ†Œν•˜λŠ” λͺ…λ Ήμ–΄ ROLLBACK이 μ΄λ•Œ μ‚¬μš©λ˜κΈ°λ„
λ³€κ²½λœ λ‚΄μš©μ„ μ „λΆ€ μ·¨μ†Œν•œλ‹€.
+ SAVE (μ„Έμ΄ν”„ν¬μΈνŠΈ 생성) (μ—¬λŸ¬ 개 κ°€λŠ₯)
++ AUTO TRANSACTION START
SET TRANSACTION NAME <이름>
OR 'UPDATE'와 같은 데이터 λ³€κ²½ SQL 문이 λ‚˜μ˜€λ©΄ μžλ™μœΌλ‘œ μ‹œμž‘ν•œλ‹€
AND ++
COMMIT λ˜λŠ” ROLLBACK λ˜λŠ” DDL 문을 λ§Œλ‚˜λ©΄ μ’…λ£Œλœλ‹€. (ν…Œμ΄λΈ” 생성 λ“±)
γ€ŒνŠΈλžœμž­μ…˜ vs 파일 μ‹œμŠ€ν…œ μž‘μ—…γ€
νŠΈλžœμž­μ…˜: λ²ˆμ—­κΈ°:: DBMS $ μ„±μ§ˆ:: ACID
파일 μ‹œμŠ€ν…œ μž‘μ—…: λ²ˆμ—­κΈ°:: 컴파일러 $ μ„±μ§ˆ:: NONE $ μž‘μ—… (ν”„λ‘œκ·Έλž¨) ꡬ쑰:: main(){ ... } $ ν™œμš©λ˜λŠ” 데이터: νŒŒμΌμ— μ €μž₯된 데이터
*파일 μ‹œμŠ€ν…œμ€ DBMS 없이 파일, 즉 데이터λ₯Ό 직접 μ²˜λ¦¬ν•œλ‹€.
γ€ŒACID」
μ›μžμ„±, 일관성, 고립성, 지속성
νŠΈλžœμž­μ…˜μ˜ μ„±μ§ˆ 4
I. Atomicity μ›μžμ„±
all or nothing
νŠΈλžœμž­μ…˜μ— ν¬ν•¨λœ μž‘μ—…μ€ μ „λΆ€ μˆ˜ν–‰λ˜κ±°λ‚˜ μ•„λ‹ˆλ©΄ μ „λΆ€ μˆ˜ν–‰λ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.
μ›μžμ²˜λŸΌ 더 이상 μͺΌκ°œμ§€μ§€ μ•ŠλŠ” ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨ λ‹¨μœ„λ‘œ λ™μž‘ν•΄μ•Ό ν•œλ‹€λŠ” 것.
II. Consistency 일관성 (무결성)
'무결성 μ œμ•½μ‘°κ±΄'을 ν™œμš©ν•˜μ—¬
νŠΈλžœμž­μ…˜ μˆ˜ν–‰ μ‹œ 데이터에 변경이 κ°€ν•΄μ§ˆ λ•Œ
미리 μ •μ˜ν•΄ λ‘” '무결성 μ œμ•½μ‘°κ±΄'을 κ²€μ‚¬ν•˜μ—¬ 일관성이 κΉ¨μ§€λŠ” κ±Έ λ§‰λŠ”λ‹€.
그런데 두 개의 νŠΈλžœμž­μ…˜μ΄ λ™μ‹œμ— μˆ˜ν–‰λ  λ•Œ νŠΈλžœμž­μ…˜ 간에 κ°„μ„­μœΌλ‘œ
일관성이 κΉ¨μ§€λŠ” ν˜„μƒμ€ 무결성 μ œμ•½μ‘°κ±΄μ„ κ²€μ‚¬ν•˜λŠ” κ²ƒμœΌλ‘œ ν•΄κ²°ν•  수 μ—†λ‹€!
κ·ΈλŸ¬λ―€λ‘œ λ™μ‹œμ— 같은 데이터λ₯Ό μ ‘κ·Όν•˜λŠ” νŠΈλžœμž­μ…˜λ“€μ΄ μ§ˆμ„œ 있게 μ ‘κ·Όν•˜μ—¬
λ°μ΄ν„°λ² μ΄μŠ€μ˜ 일관성을 μœ μ§€ν•˜λ„λ‘ ν•˜κΈ° μœ„ν•΄μ„œλŠ”
'λ™μ‹œμ„± μ œμ–΄ μ•Œκ³ λ¦¬μ¦˜'을 μž‘λ™μ‹œμΌœμ•Ό ν•œλ‹€.
νŠΈλžœμž­μ…˜μ„ μˆ˜ν–‰ν•˜κΈ° μ „μ΄λ‚˜ μˆ˜ν–‰ν•œ ν›„λ‚˜ λ°μ΄ν„°λ² μ΄μŠ€λŠ” 항상 μΌκ΄€λœ μƒνƒœλ₯Ό μœ μ§€ν•΄μ•Ό ν•œλ‹€λŠ” 것. (μ§ˆλŸ‰ 보쑴의 법칙)
ν…Œμ΄λΈ”μ΄ 생성될 λ•Œ CREATE λ¬Έκ³Ό ALTER 문의 '무결성 μ œμ•½μ‘°κ±΄'을 톡해 λͺ…μ‹œλœλ‹€. νŠΈλžœμž­μ…˜μ€ 이 무결성 μ œμ•½μ‘°κ±΄μ— 따라 일관성을 μœ μ§€ν•œλ‹€.
λ‹€λ§Œ μˆ˜ν–‰ μ€‘μ—λŠ” μΌμ‹œμ μœΌλ‘œ 일관성을 μœ μ§€ν•˜μ§€ λͺ»ν•˜λŠ” μƒνƒœκ°€ μžˆμ„ 수 μžˆλ‹€.
일관성 μ—†λŠ” μƒνƒœ: INCONSISTENT
III. Isolation 고립성
μˆ˜ν–‰ 쀑인 νŠΈλžœμž­μ…˜μ— λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ 끼어듀어 λ³€κ²½ 쀑인 데이터 값을 ν›Όμ†ν•˜λŠ” 일이 μ—†μ–΄μ•Ό ν•œλ‹€. (병렬 μΉ¨λ²”)
λ°μ΄ν„°λ² μ΄μŠ€λŠ” 기본적으둜 '곡유'κ°€ λͺ©μ μ΄κΈ°μ—
μ—¬λŸ¬ νŠΈλžœμž­μ…˜λ“€μ΄ λ™μ‹œμ— μˆ˜ν–‰λœλ‹€
μ΄λ•Œ 각 νŠΈλžœμž­μ…˜μ€ λ³‘λ ¬μ μœΌλ‘œ μˆ˜ν–‰λ˜λŠ” λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ˜ λ°©ν•΄λ₯Ό λ°›μ§€ μ•Šκ³ 
λ…λ¦½μ μœΌλ‘œ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€.
(μƒν˜Έ κ°„μ„­ μ΄λ‚˜ 데이터 좩돌이 μΌμ–΄λ‚˜μ§€ μ•ŠλŠ” ν˜„μƒ => 고립성)
고립성을 μœ μ§€ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ³€κ²½ 쀑인 μž„μ‹œ 데이터λ₯Ό (in λ©”λͺ¨λ¦¬ $ μ£ΌκΈ°μ–΅μž₯치)
λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ μ½κ±°λ‚˜ μ“°λ €κ³  ν•  λ•Œ μ œμ–΄ν•˜λŠ” μž‘μ—…μ΄ ν•„μš”ν•˜λ‹€,
=> 이것도 'λ™μ‹œμ„± μ œμ–΄ μ•Œκ³ λ¦¬μ¦˜'
concurrency control
같은 데이터λ₯Ό κ°€μ§€κ³  μΆ©λŒν•˜μ§€ μ•Šλ„λ‘ μ œμ–΄ν•˜λŠ” μž‘μ—…!
IV. Durability 지속성
μˆ˜ν–‰μ„ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œν•œ νŠΈλžœμž­μ…˜μ€ λ³€κ²½ν•œ 데이터λ₯Ό 영ꡬ히 μ €μž₯ν•΄μ•Ό ν•œλ‹€.
μ €μž₯된 λ°μ΄ν„°λ² μ΄μŠ€λŠ” μ €μž₯ 직후 ν˜Ήμ€ μ–΄λŠ λ•Œλ‚˜ λ°œμƒν•  수 μžˆλŠ”
μ •μ „, μž₯μ• , 였λ₯˜ 에 영ν–₯을 λ°›μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.
DBMS 볡ꡬ μ‹œμŠ€ν…œμ€ νŠΈλžœμž­μ…˜μ΄ μž‘μ—…ν•œ λ‚΄μš©μ„ μˆ˜μ‹œλ‘œ log 둜그 λ°μ΄ν„°λ² μ΄μŠ€
에 κΈ°λ‘ν•˜μ˜€λ‹€κ°€ λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄, 둜그 νŒŒμΌμ„ μ΄μš©ν•˜μ—¬ 볡ꡬ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€
즉 μ‹œμŠ€ν…œμ΄ λ©ˆμΆ”μ–΄λ„ νŠΈλžœμž­μ…˜ μˆ˜ν–‰μœΌλ‘œ λ³€κ²½λœ λ‚΄μš©μ€ λ””μŠ€ν¬μ— κΈ°λ‘λœλ‹€.
μ‹œμž‘ -> μˆ˜ν–‰ 쀑 (active) -> λΆ€λΆ„ μ™„λ£Œ -> 버퍼 λ‚΄μš© 기둝 -> μ™„λ£Œ
↳ μ‹€νŒ¨ -> μž‘μ—… μ·¨μ†Œ -> μ·¨μ†Œ
μ‹œμž‘: BEGIN, λΆ€λΆ„ μ™„λ£Œ: PARTIALLY COMMITTED, μ‹€νŒ¨: FAILED,
μ™„λ£Œ: COMMITTED, μ·¨μ†Œ: ABORTED
μ‹€νŒ¨: νŠΈλžœμž­μ…˜μ„ 쀑간에 μ€‘λ‹¨ν•˜μ˜€κ±°λ‚˜ λΆ€λΆ„ μ™„λ£Œ μƒνƒœμ—μ„œ λ³€κ²½ λ‚΄μš©μ„
λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•˜μ§€ λͺ»ν•œ μƒνƒœλ₯Ό λ§ν•œλ‹€.
μ‹€νŒ¨ μƒνƒœμ—μ„œ DBMSλŠ” νŠΈλžœμž­μ…˜μ΄ μˆ˜ν–‰ν•œ μž‘μ—…μ„ λͺ¨λ‘ μ›μƒλ³΅κ΅¬μ‹œν‚¨λ‹€.
γ€Œλ™μ‹œμ„± μ œμ–΄ μ•Œκ³ λ¦¬μ¦˜γ€
concurrency control
같은 데이터λ₯Ό κ°€μ§€κ³  μΆ©λŒν•˜μ§€ μ•Šλ„λ‘ μ œμ–΄ν•˜λŠ” μž‘μ—…!
락킹
마치 ν•œ νŠΈλžœμž­μ…˜μ”© 순차적으둜 μˆœμ„œλŒ€λ‘œ μ ‘κ·Όν•˜λŠ” κ²ƒμ²˜λŸΌ μ œμ–΄
병렬성을 κΉ¨λœ¨λ¦°λ‹€.
-> 보닀 μ™„ν™”λœ 방법 γ€ŒνŠΈλžœμž­μ…˜ 고립 μˆ˜μ€€γ€
isiolation level
γ€ŒνšŒλ³΅ κ΄€λ¦¬μž μ•Œκ³ λ¦¬μ¦˜γ€
γ€ŒνŠΈλžœμž­μ…˜μ˜ μ„±μ§ˆκ³Ό κ΄€κ³„λœ DBMS의 κΈ°λŠ₯」
A: 회볡 (LOG DB)
C: 무결성 μ œμ•½μ‘°κ±΄(SQL λ¬Έ), λ™μ‹œμ„± μ œμ–΄(LOCKING)
I: λ™μ‹œμ„± μ œμ–΄(락킹)
D: 회볡 (둜그 데베)
[λŒ€μ²˜λ²•]
νŠΈλžœμž­μ…˜μ΄ 두 개라고 ν•˜μž. T1 T2
읽고 읽을 λ•ŒλŠ” 문제 μ—†λ‹€. (λ™μ‹œ 접근을 ν—ˆμš©ν•œλ‹€)
읽고 μ“Έ λ•Œμ—λŠ” λ¬Έμ œκ°€ λ°œμƒν•œλ‹€. 3κ°€μ§€. (λ™μ‹œ 접근을 ν—ˆμš©ν•˜κ±°λ‚˜ κ±°λΆ€ν•˜κ±°λ‚˜)
μ˜€μ† 읽기 dirty-read, uncommitted-dependency
λ°˜λ³΅λΆˆκ°€λŠ₯ 읽기 non-repeatable-read, inconsistent-analysis
유령 데이터 읽기 phantom-read
μ“°κ³  μ“Έ λ•Œμ—λŠ”? 치λͺ…적인 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμœΌλ‹ˆ. (κ±°λΆ€. LOCK을 이용)
κ°±μ‹  손싀 lost-update
γ€Œλ½ν‚Ήγ€
λ™μ‹œμ„± μ œμ–΄λ₯Ό μœ„ν•œ 기법
κ°±μ‹  손싀 λ°©μ§€.
락은 νŠΈλžœμž­μ…˜μ΄ 데이터λ₯Ό μ½κ±°λ‚˜ μˆ˜μ •ν•  λ•Œ 데이터에 ν‘œμ‹œν•˜λŠ” 잠금 μž₯μΉ˜λ‹€
== μžμ‹ μ΄ 데이터λ₯Ό μ½λŠ” 쀑 λ˜λŠ” μˆ˜μ • 쀑 λ˜λŠ” μΆ”κ°€ μ€‘μ΄λΌλŠ” κ±Έ μ•Œλ¦¬λŠ” μž₯치
LS, LX둜 wait λŒ€κΈ° μ‹œν‚€κ±°λ‚˜ UN ν•΄μ§€ν•œλ‹€.
shared lock, eXclusive lock, unlock
곡유락 (LS)λŠ” κ³΅μœ λ½μ„ ν—ˆμš©ν•˜κ³ , 배타락은 κ±°λΆ€ν•œλ‹€.
베타락 (LX)λŠ” κ³΅μœ λ½μ„ κ±°λΆ€ν•˜κ³ , 배타락도 κ±°λΆ€ν•œλ‹€.
COMMIT μ•ˆ ν•˜λ©΄ 영ꡬ μ €μž₯된 게 μ•„λ‹ˆλ‹€.
[κ·Έλƒ₯ 락킹과 '2단계 락킹'의 차이]
νŠΈλžœμž­μ…˜μ΄ 끝날 λ•ŒκΉŒμ§€ 락을 놓아주지 μ•ŠλŠ”λ‹€. (일관성 보호)
λ°λ“œλ½ 즉 ꡐ착 μƒνƒœκ°€ λ°œμƒν•  수 μžˆλ‹€.
ν™•μž₯ 단계 & μˆ˜μΆ• λ‹¨κ³„λ‘œ λ‚˜λ‰œλ‹€.
ν™•μž₯ 단계: Growing phase, Expanding phase
νŠΈλžœμž­μ…˜μ΄ ν•„μš”ν•œ 락을 νšλ“ν•˜λŠ” λ‹¨κ³„λ‘œ,
이 λ‹¨κ³„μ—μ„œλŠ” νŠΈλžœμž­μ…˜μ΄ λλ‚˜κΈ° μ „κΉŒμ§€ 이미 νšλ“ν•œ 락을 ν•΄μ œν•˜μ§€ μ•ŠλŠ”λ‹€.
μˆ˜μΆ• 단계: Shrinking phase
νŠΈλžœμž­μ…˜μ΄ 락을 ν•΄μ œν•˜λŠ” λ‹¨κ³„λ‘œ,
이 λ‹¨κ³„μ—μ„œλŠ” μƒˆλ‘œμš΄ 락을 νšλ“ν•˜μ§€ μ•ŠλŠ”λ‹€. (λͺ½λ•… ν•΄μ§€, 언락)
[ꡐ착 μƒνƒœ == λ°λ“œλ½]
deadrock
μˆœμ„œμƒ T1이 LX(A), T2κ°€ LX(B)을 가져버리면 λ§ν•œλ‹€.
μ μœ μ™€ λŒ€κΈ°, HOLD AND WAIT
λ¬΄ν•œ λŒ€κΈ° μƒνƒœμ— 빠질 수 μžˆλ‹€.
μƒκ°ν•˜λŠ” μ² ν•™μžλ“€μ˜ 식사 μ‹œκ°„
[λ°λ“œλ½μ„ ν•΄κ²°ν•˜λ €λ©΄]
λŒ€κΈ° κ·Έλž˜ν”„λ₯Ό κ·Έλ €μ„œ 사이클이 μžˆλŠ”μ§€ 확인할 ν•„μš”κ°€ μžˆλ‹€.
wait-for graph
Tumblr media
락킹 λ‹¨μœ„λž€,
락이 κ±Έλ¦¬λŠ” 데이터 λ²”μœ„λ‘œ
락킹 λ‹¨μœ„κ°€ μž‘μ•„μ§€λ©΄ 병행성 μˆ˜μ€€μ΄ λ†’μ•„μ§„λ‹€.
...락킹 μ˜€λ²„ν—€λ“œλŠ” 락 κ±Έμ—ˆλ‹€κ°€ ν’€μ—ˆλ‹€κ°€κ°€ μ€„μ–΄λ“œλ‹ˆκΉŒ 쀄어듀고
γ€Œκ³ λ¦½ μˆ˜μ€€γ€
읽고 μ“°κΈ° 상황상 κ³ λ €ν•  수 μžˆλŠ” 방법이닀.
μ˜€μ† 읽기 -> 배타락은 걸어도 κ³΅μœ λ½μ€ κ±Έμ§€ μ•Šμ•„.
(λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ˜ 곡유락과 배타락이 κ±Έλ¦° 데이터λ₯Ό 읽을 수 μžˆλ‹€)
둀백을 걸어버리면, λ‘€λ°± κ±ΈκΈ° μ „ μˆ˜ν–‰ μ€‘μ΄λ˜ λ°μ΄ν„°λ§ˆμ € 읽어버리기에 (버퍼)
잘λͺ»λœ 데이터λ₯Ό μ½μ–΄λ²„λ¦¬λŠ” μ…ˆμ΄ λœλ‹€.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
(레벨 0)
=> κ³΅μœ λ½μ„ 걸어버린닀. (곡유락 κ±Έλ € 있으면 λͺ» λ°”κΎΈκ²Œ)
λ°˜λ³΅λΆˆκ°€λŠ₯ 읽기 -> κ³΅μœ λ½μ„ κ±Έμ§€λ§Œ λλ‚˜λ©΄ νŠΈλžœμž­μ…˜ 전에 λ°”λ‘œ ν•΄μ§€ν•œλ‹€
(λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ μ„€μ •ν•œ κ³΅μœ λ½μ€ μ½μ§€λ§Œ 배타락은 읽지 λͺ»ν•œλ‹€)
트랜 쀑 전에 좜λ ₯ν•œ κ±°λž‘ 후에 좜λ ₯λ˜λŠ” 게 달라도, μ‚¬μš©μžλŠ” λͺ¨λ₯Έλ‹€ (뭐지)
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
(레벨 1) (=기본 락)
=> νŠΈλžœμž­μ…˜ 끝날 λ•ŒκΉŒμ§€ 락 걸자.
유령 데이터 읽기 -> κ³΅μœ λ½μ„ κ±Έκ³  νŠΈλžœμž­μ…˜ λκΉŒμ§€ μœ μ§€ν•œλ‹€
(λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ μ„€μ •ν•œ κ³΅μœ λ½μ€ μ½μ§€λ§Œ 배타락은 읽지 λͺ»ν•œλ‹€)
μˆ˜μ •μ€ λ°©μ§€ν•˜λŠ”λ°, μΆ”κ°€λŠ” λ°©μ§€ λͺ» ν•œλ‹€.
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
(레벨 2) (=2단계 락킹)
=> μΈλ±μŠ€λ³„λ‘œ 락 걸자. (INSERT κ±°λΆ€)
*그럼 κ²°κ΅­ 순차적으둜, μ§λ ¬ν™”λœ 것과 κ°™μ•„μ§„λ‹€
λ§ˆμ§€λ§‰ 레벨 -> μΈλ±μŠ€μ— κ³΅μœ λ½μ„ μ„€μ •ν•˜μ—¬
λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ˜ INSERT 문이 κΈˆμ§€λœλ‹€
(SELECT 질의의 λŒ€μƒμ΄ λ˜λŠ” ν…Œμ΄λΈ”μ— 미리 배타락을 μ„€μ •ν•œ 것과 같은 효과)
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
(레벨 3)
MYSQL은 κ³΅μœ λ½μ„ κ±Έμ§€ μ•Šκ³  졜초 νŠΈλžœμž­μ…˜ SELECT μˆ˜ν–‰ μ‹œ
SNAPSHOT을 λ§Œλ“  ν›„ κ·Έ μŠ€λƒ…μƒ·μœΌλ‘œ μˆ˜ν–‰ν•΄ νŠΈλžœμž­μ…˜μ˜ λ³€κ²½ μ‹œμ—λ„
λ™μΌν•œ κ²°κ³Όλ₯Ό μœ μ§€ν•œλ‹€ (INSERT λ³€ν™” μ—†μŒ)
0 notes
mite-rva Β· 2 years ago
Text
초μž₯ - AppCoding for looks
μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발자 λΆ„μ•Όλ₯Ό κ³΅λΆ€ν•œμ§€ 2달쯀 λ“  생각은 'ν΄λΌμ΄μ–ΈνŠΈλŠ” λ‚΄ 길이 아냐'μ˜€λ‹€. ……즐겁긴 ν•˜μ§€λ§Œ, μ‹¬νžˆ λ…Έκ°€λ‹€λΌλŠ” 인상을 λ°›μ•˜λ‹€. (μ›Ήμ˜ μΌλΆ€λΌλŠ” λŠλ‚Œλ„ λ“€μ—ˆκ³ ) ν•΄μ„œ ν•œ ν•™κΈ° λ™μ•ˆ 배운 것을 μ •λ¦¬ν•˜λ©΄μ„œ λ™μ‹œμ— μžμŠ΅ν•˜κ³  μžˆλŠ” μ„œλ²„ 뢀뢄을 λ…Ήμ—¬λ‚΄λ €κ³  ν•œλ‹€.
γ€Œν΄λΌμ΄μ–ΈνŠΈγ€
Β· basic
Β· lifecycle 생λͺ…μ£ΌκΈ°
Β· inflate (menu and intent) & adapter (entries) & ...
γ€Œμ„œλ²„γ€
Β· spring-boot-3
0 notes