์š”์ฆ˜ ๋– ์˜ค๋ฅด๋Š” gRPC ํ†บ์•„๋ณด๊ธฐ

gRPC๋Š” ์™œ ์‹ค์šฉ์ ์ผ๊นŒ? ์ด ๊ธ€์€ gRPC๋ฅผ ์ ‘ํ•œ ์ง€ ์–ผ๋งˆ ์•ˆ ๋๊ฑฐ๋‚˜ ์ƒˆ๋กญ๊ฒŒ ์•Œ์•„๋ณด๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ์„ ๋Œ€์ƒ์œผ๋กœ go, gRPC ๊ทธ๋ฆฌ๊ณ  MSA ํ™˜๊ฒฝ์—์„œ์˜ ์‹ค๋ฌด ๊ฒฝํ—˜์„ ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” gRPC๋Š” ์ธํ”„๋ผ ๊ตฌ์ถ•์— ์žˆ์–ด ๋‹ค์†Œ ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ์žˆ๋Š” ํŽธ์ด์ง€๋งŒ ๊ต‰์žฅํžˆ ์‹ค์šฉ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์ด์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”. ๋จผ์ €, gRPC๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? gRPC๋Š” ํ•œ ๋ฌธ์žฅ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. gRPC๋Š” Protocol Buffer๋ฅผ IDL(Interface Definition Language)๋กœ ์‚ฌ์šฉํ•˜๋Š” HTTP/2๊ธฐ๋ฐ˜์˜ RPC ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ƒ์†Œํ•œ ๋‹จ์–ด๋“ค์ด ๋งŽ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ์š”! ์ž ๊น ๋ช‡ ๊ฐ€์ง€ ์‚ดํŽด๋ณผ๊นŒ์š”? RPC(Remote Procedure Call) RPC๋Š” ๋ง ๊ทธ๋Œ€..

BackEnd 2022. 12. 4. 18:39
Go : ๊ณ ๋ฃจํ‹ด(goroutine), ์ฑ„๋„(channels)

๊ฐœ์š” ๊ณ ๋ฃจํ‹ด(goroutine)๊ณผ ์ฑ„๋„(channel)์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž ๊ณ ๋ฃจํ‹ด(goroutine) ๊ณ ๋ฃจํ‹ด์€ Go๋Ÿฐํƒ€์ž„์—์„œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์ด์šฉํ•œ ๋™์‹œ์„ฑ์„ ์ง€์›ํ•˜๋Š” ๊ฒฝ๋Ÿ‰ ๊ฐ€์ƒ ์“ฐ๋ ˆ๋“œ์ด๋‹ค. ๊ฐ€์ƒ ์“ฐ๋ ˆ๋“œ๋ผ๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ OS๋ ˆ๋ฒจ์—์„œ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Go)๋ ˆ๋ฒจ์—์„œ ๊ฐ€์ƒ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋‹ˆ ์ฃผ์˜ํ•˜์ž ๋Ÿฐํƒ€์ž„์—์„œ๋งŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— main ๋Ÿฐํƒ€์ž„์ด ์ข…๋ฃŒ๋˜๋ฉด ๋ชจ๋“  ๊ณ ๋ฃจํ‹ด์ด ์ข…๋ฃŒ๋˜๋‹ˆ ์ฃผ์˜ํ•˜์ž go ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ๊ณ ๋ฃจํ‹ด์„ ์„ ์–ธํ•œ๋‹ค ๋‹ค์Œ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด์„œ ๊ณ ๋ฃจํ‹ด์˜ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž import ( "fmt" "time" ) func main() { // go ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ๊ณ ๋ฃจํ‹ด ์ƒ์„ฑ -> ๋™์‹œ์— ์‹คํ–‰๋จ. ์ „์ฒด ์ถœ๋ ฅ์„ ๋ณด๋ฉด์„œ ์ดํ•ดํ•ด๋ณด์ž go bar("foo") bar("bar") /..

Go 2022. 3. 20. 15:27
Go ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž

๊ฐœ์š” go ์–ธ์–ด ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž ๋‹ค์Œ ๋ชฉ์ฐจ๋กœ ์ง„ํ–‰๋˜๋ฉฐ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ฒฝํ—˜ํ•ด๋ณธ ์‚ฌ๋žŒ ๋Œ€์ƒ์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค ๊ฐœ์š” ๋ณ€์ˆ˜, ์ƒ์ˆ˜ ์„ ์–ธ(+์ถ•์•ฝํ˜• ์„ ์–ธ) ํƒ€์ž… ํ•จ์ˆ˜ ์„ ์–ธ(ignore value(_), defer, export function) ์กฐ๊ฑด๋ฌธ(if, switch) ๋ฐ˜๋ณต๋ฌธ(for) pointer(*) ๋ฐฐ์—ด(slice, array) ๋ณ€์ˆ˜, ์ƒ์ˆ˜ ์„ ์–ธ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์ˆ˜๋Š” const, ๋ณ€์ˆ˜๋Š” var ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ์„ ์–ธํ•œ๋‹ค ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณ€์ˆ˜, ์ƒ์ˆ˜ ์„ ์–ธ๋„ ๊ฐ€๋Šฅํ•œ๋ฐ, ์ด๋Š” ์•„๋ž˜ ์ฝ”๋“œ๋กœ ์‚ดํŽด๋ณด์ž // ๊ธฐ๋ณธ ์„ ์–ธ var age = 23 var name string name = "mokhs" // ๋ณ€์ˆ˜ ์ถ•์•ฝํ˜• ์„ ์–ธ : ์•„๋ž˜์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž role := "Backend Engineer" // ์ƒ์ˆ˜ ์„ ์–ธ ..

Go 2022. 3. 18. 23:33
[๋ฐฑ์ค€] 7576 : ํ† ๋งˆํ†  - java [์ž๋ฐ”]

https://www.acmicpc.net/problem/7576 7576๋ฒˆ: ํ† ๋งˆํ†  ์ฒซ ์ค„์—๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜ M,N์ด ์ฃผ์–ด์ง„๋‹ค. M์€ ์ƒ์ž์˜ ๊ฐ€๋กœ ์นธ์˜ ์ˆ˜, N์€ ์ƒ์ž์˜ ์„ธ๋กœ ์นธ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‹จ, 2 ≤ M,N ≤ 1,000 ์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ๋Š” ํ•˜๋‚˜์˜ ์ƒ์ž์— ์ €์žฅ๋œ ํ† ๋งˆํ†  www.acmicpc.net ์ดํ•ด ํ’€์ด์— ์•ž์„œ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•ด๋ณด์ž ํ† ๋งˆํ† ์˜ ์ต์€ ์ƒํƒœ๊ฐ€ 1์ดˆ๋งˆ๋‹ค 1์นธ์”ฉ ์ „์ด๋˜๋Š” ์ƒํ™ฉ์ด๊ณ  ์ „์ฒด ํ† ๋งˆํ† ์— ์ „์ด๋˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ตœ์†Œ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•ด์•ผํ•œ๋‹ค ๊ฒฐ๊ตญ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•ด์•ผํ•˜๊ณ , ๊ฐ ์ขŒํ‘œ์— ์ตœ์†Œ ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•ด์•ผํ•˜๋ฏ€๋กœ BFS๋ฅผ ์ด์šฉํ•ด์•ผํ•œ๋‹ค BFS๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ cost๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ํƒ์ƒ‰ ์ข…๋ฃŒ ํ›„์— cost ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค ํ’€์ด ์—ฌ๊ธฐ์„œ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋Š” ์ต์€ ํ† ๋งˆํ†  ์—ฌ๋ถ€๋กœ ํ•œ๋‹ค = 1..

PS/๋ฐฑ์ค€ 2022. 3. 2. 11:55
[๋ฐฑ์ค€] 2667 : ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ - java [์ž๋ฐ”]

https://www.acmicpc.net/problem/2667 2667๋ฒˆ: ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ ๊ณผ ๊ฐ™์ด ์ •์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ์ง€๋„๊ฐ€ ์žˆ๋‹ค. 1์€ ์ง‘์ด ์žˆ๋Š” ๊ณณ์„, 0์€ ์ง‘์ด ์—†๋Š” ๊ณณ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฒ ์ˆ˜๋Š” ์ด ์ง€๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์—ฐ๊ฒฐ๋œ ์ง‘์˜ ๋ชจ์ž„์ธ ๋‹จ์ง€๋ฅผ ์ •์˜ํ•˜๊ณ , ๋‹จ์ง€์— ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์ด๋ ค ํ•œ๋‹ค. ์—ฌ www.acmicpc.net ์ดํ•ด ํ•ด๋‹น ๋ฌธ์ œ๋Š” 2์ฐจ์› ๋ฐฐ์—ด๋กœ ์ฃผ์–ด์ง€๋Š” map์„ ํƒ์ƒ‰ํ•˜์—ฌ ์—ฐ๊ฒฐ๋œ ์ง€์—ญ์„ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ฆ‰ map์„ ์ˆœํšŒํ•˜๋ฉฐ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ์ขŒํ‘œ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ธ์ ‘ํ•œ ์ขŒํ‘œ๋ฅผ ๋ชจ๋‘ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์—ฐ๊ฒฐ๋œ ์ง€์—ญ์€ ๋ชจ๋‘ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋  ๊ฒƒ์ด๊ณ  map์„ ์ˆœํšŒ ์ค‘์— ๋ฐฉ๋ฌธ๋˜์ง€ ์•Š์€ ์ขŒํ‘œ๋ฅผ ์ฐพ๋Š”๋‹ค๋ฉด ์ƒˆ๋กœ์šด ์ง€์—ญ์˜ ๋ฐœ๊ฒฌ์„ ์˜๋ฏธํ•œ๋‹ค. ๋”ฐ๋ผ์„œ map์„ ์ˆœํšŒํ•˜๋ฉฐ ๋ฐฉ๋ฌธ๋˜์ง€ ์•Š์€ ์ขŒํ‘œ๋ฅผ ์ฐพ์„ ์‹œ ํ•ด๋‹น ์ขŒํ‘œ๋ฅผ ์‹œ์ž‘..

PS/๋ฐฑ์ค€ 2022. 2. 28. 18:32
[๋ฐฑ์ค€] 11724 : ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ - java [์ž๋ฐ”]

https://www.acmicpc.net/problem/11724 11724๋ฒˆ: ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ ์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N๊ณผ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฐ„์„ ์˜ ์–‘ ๋์  u์™€ v๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ u, v ≤ N, u ≠ v) ๊ฐ™์€ ๊ฐ„์„ ์€ ํ•œ ๋ฒˆ๋งŒ ์ฃผ www.acmicpc.net ์ดํ•ด ๋ฌธ์ œ ํ’€์ด์— ์•ž์„œ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•ด๋ณด์ž. ์—ฐ๊ฒฐ ์š”์†Œ(Connected Component)๋Š” ์—ฐ๊ฒฐ๋œ ์ •์ ์˜ ์ง‘ํ•ฉ์„ ์˜๋ฏธํ•œ๋‹ค. ๋‹ค์Œ ์ด๋ฏธ์ง€์—์„œ์˜ ์—ฐ๊ฒฐ ์š”์†Œ๋Š” 4๊ฐœ์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์„ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ ์ •์ ์„ ๋ชจ๋‘ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ๋˜์ง€ ์•Š์€ ์ •์ ์ด ๋ฐœ๊ฒฌ๋˜๋ฉด ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ ์š”์†Œ์ž„์„ ์˜๋ฏธํ•œ๋‹ค. ํ’€์ด ์ „์ฒด ๋…ธ๋“œ(1~N)๋ฅผ ์ˆœํšŒ..

PS/๋ฐฑ์ค€ 2022. 2. 28. 17:24
[๋ฐฑ์ค€] 2252 : ์ค„ ์„ธ์šฐ๊ธฐ - java [์ž๋ฐ”]

https://www.acmicpc.net/problem/2252 2252๋ฒˆ: ์ค„ ์„ธ์šฐ๊ธฐ ์ฒซ์งธ ์ค„์— N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. M์€ ํ‚ค๋ฅผ ๋น„๊ตํ•œ ํšŒ์ˆ˜์ด๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ํ‚ค๋ฅผ ๋น„๊ตํ•œ ๋‘ ํ•™์ƒ์˜ ๋ฒˆํ˜ธ A, B๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด๋Š” ํ•™์ƒ A๊ฐ€ ํ•™์ƒ B์˜ ์•ž์— ์„œ์•ผ ํ•œ๋‹ค๋Š” ์˜ www.acmicpc.net ํ’€์ด "์—ฐ๊ฒฐ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„ N๋ช…์˜ ํ•™์ƒ ์ค„ ์„ธ์šฐ๊ธฐ"๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค. => ์—ฐ๊ฒฐ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„ ์ˆœํ™˜ํ•˜์ง€ ์•Š๋Š” ๋ฐฉํ–ฅ์„ฑ ๊ทธ๋ž˜ํ”„(DAG=๋ฐฉํ–ฅ์„ฑ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„)์—์„œ ๊ฐ ๋…ธ๋“œ๋ฅผ ์ค„ ์„ธ์šฐ์‹œ์˜ค. ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์œ„์ƒ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ผ์น˜ํ•˜๋ฏ€๋กœ ์œ„์ƒ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด ํ’€์ดํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ ๋…ธ๋“œ์˜ ์—ฐ๊ฒฐ ๋‹นํ•œ ์ •๋ณด๋ฅผ linked ๋ฐฐ์—ด์— ๋ฏธ๋ฆฌ ์ž…๋ ฅ ํ›„ ..

PS/๋ฐฑ์ค€ 2022. 2. 27. 12:06