gRPC 동기 λΆ€μ—¬ 및 λ””μžμΈ 원칙(Motivation and Design Principles)
Β·
IT/gRPC
Motivation Google은 StubbyλΌλŠ” 단일 λ²”μš© RPC 인프라λ₯Ό μ‚¬μš©ν•˜μ—¬ 10λ…„ λ„˜κ²Œ 데이터 μ„Όν„° λ‚΄λΆ€ 및 μ „μ²΄μ—μ„œ μ‹€ν–‰λ˜λŠ” μˆ˜λ§Žμ€ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ₯Ό μ—°κ²°ν•΄ μ™”μŠ΅λ‹ˆλ‹€. 우리의 λ‚΄λΆ€ μ‹œμŠ€ν…œμ€ μ˜€λŠ˜λ‚  인기λ₯Ό μ–»κ³  μžˆλŠ” λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜λ₯Ό μ˜€λž«λ™μ•ˆ μˆ˜μš©ν•΄ μ™”μŠ΅λ‹ˆλ‹€. κ· μΌν•œ 크둜슀 ν”Œλž«νΌ RPC 인프라λ₯Ό 톡해 νš¨μœ¨μ„±, λ³΄μ•ˆ, μ‹ λ’°μ„± 및 행동 λΆ„μ„μ—μ„œ ν”Œλ¦Ώ μ „λ°˜μ˜ κ°œμ„ μ„ 둀아웃할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. Stubbyμ—λŠ” λ§Žμ€ ν›Œλ₯­ν•œ κΈ°λŠ₯이 μžˆμ§€λ§Œ ν‘œμ€€μ„ κΈ°λ°˜μœΌλ‘œν•˜μ§€ μ•ŠμœΌλ©° λ‚΄λΆ€ 인프라와 λ„ˆλ¬΄ λ°€μ ‘ν•˜κ²Œ κ²°ν•©λ˜μ–΄ 곡개 λ¦΄λ¦¬μŠ€μ— μ ν•©ν•œ κ²ƒμœΌλ‘œ κ°„μ£Όλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. SPDY, HTTP/2 및 QUIC의 μΆœν˜„μœΌλ‘œ Stubbyκ°€ μ œκ³΅ν•˜μ§€ μ•ŠλŠ” λ‹€λ₯Έ κΈ°λŠ₯κ³Ό ν•¨κ»˜ μ΄λŸ¬ν•œ λ™μΌν•œ κΈ°λŠ₯ 쀑 λ§Žμ€ 뢀뢄이 곡개 ν‘œμ€€μ— λ“±μž₯ν–ˆμŠ΅λ‹ˆ..
gRPC 핡심 κ°œλ…, μ•„ν‚€ν…μ²˜ 및 수λͺ… μ£ΌκΈ°(Core concepts, architecture and lifecycle)
Β·
IT/gRPC
gRPC에 μ΅μˆ™ν•˜μ§€ μ•ŠμœΌμ‹ κ°€μš”? λ¨Όμ € gRPC μ†Œκ°œλ₯Ό 읽어 λ³΄μ‹­μ‹œμ˜€. 언어별 μ„ΈλΆ€ μ •λ³΄λŠ” μ„ νƒν•œ 언어에 λŒ€ν•œ λΉ λ₯Έ μ‹œμž‘, μžμŠ΅μ„œ 및 μ°Έμ‘° μ„€λͺ…μ„œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”. Overview Service definition λ§Žμ€ RPC μ‹œμŠ€ν…œκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ gRPCλŠ” 맀개 λ³€μˆ˜ 및 λ°˜ν™˜ ν˜•μ‹μ„ μ‚¬μš©ν•˜μ—¬ μ›κ²©μœΌλ‘œ ν˜ΈμΆœν•  수 μžˆλŠ” λ©”μ„œλ“œλ₯Ό μ§€μ •ν•˜μ—¬ μ„œλΉ„μŠ€λ₯Ό μ •μ˜ν•˜λŠ” κ°œλ…μ„ 기반으둜 ν•©λ‹ˆλ‹€. 기본적으둜 gRPCλŠ” ν”„λ‘œν† μ½œ 버퍼λ₯Ό μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄μŠ€μ™€ νŽ˜μ΄λ‘œλ“œ λ©”μ‹œμ§€μ˜ ꡬ쑰λ₯Ό λͺ¨λ‘ μ„€λͺ…ν•˜κΈ° μœ„ν•œ IDL(μΈν„°νŽ˜μ΄μŠ€ μ •μ˜ μ–Έμ–΄)둜 μ‚¬μš©ν•©λ‹ˆλ‹€. μ›ν•˜λŠ” 경우 λ‹€λ₯Έ λŒ€μ•ˆμ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. service HelloService { rpc SayHello (HelloRequest) returns (HelloResponse); } mes..
gRPC λž€?(Introduction to Remote Procedure Calls)
Β·
IT/gRPC
이 νŽ˜μ΄μ§€μ—μ„œλŠ” gRPC 및 ν”„λ‘œν† μ½œ 버퍼λ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€. gRPCλŠ” ν”„λ‘œν† μ½œ 버퍼λ₯Ό IDL(μΈν„°νŽ˜μ΄μŠ€ μ •μ˜ μ–Έμ–΄) 및 κΈ°λ³Έ λ©”μ‹œμ§€ κ΅ν™˜ ν˜•μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. gRPC 및/λ˜λŠ” ν”„λ‘œν† μ½œ 버퍼λ₯Ό 처음 μ‚¬μš©ν•˜λŠ” 경우 이 λ‚΄μš©μ„ μ½μ–΄λ³΄μ„Έμš”. λ¨Όμ € gRPCκ°€ μž‘λ™ν•˜λŠ” 것을 보렀면 μ–Έμ–΄λ₯Ό μ„ νƒν•˜κ³  λΉ λ₯Έ μ‹œμž‘μ„ μ‚¬μš©ν•΄ λ³΄μ„Έμš”. Overview gRPCμ—μ„œ ν΄λΌμ΄μ–ΈνŠΈ μ‘μš© ν”„λ‘œκ·Έλž¨μ€ 둜컬 개체인 κ²ƒμ²˜λŸΌ λ‹€λ₯Έ μ»΄ν“¨ν„°μ˜ μ„œλ²„ μ‘μš© ν”„λ‘œκ·Έλž¨μ— μžˆλŠ” λ©”μ„œλ“œλ₯Ό 직접 ν˜ΈμΆœν•  수 μžˆμœΌλ―€λ‘œ λΆ„μ‚° μ‘μš© ν”„λ‘œκ·Έλž¨ 및 μ„œλΉ„μŠ€λ₯Ό 더 μ‰½κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. λ§Žμ€ RPC μ‹œμŠ€ν…œκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ gRPCλŠ” 맀개 λ³€μˆ˜ 및 λ°˜ν™˜ ν˜•μ‹μ„ μ‚¬μš©ν•˜μ—¬ μ›κ²©μœΌλ‘œ ν˜ΈμΆœν•  수 μžˆλŠ” λ©”μ„œλ“œλ₯Ό μ§€μ •ν•˜μ—¬ μ„œλΉ„μŠ€λ₯Ό μ •μ˜ν•˜λŠ” κ°œλ…μ„ 기반으둜 ν•©λ‹ˆλ‹€. μ„œλ²„ μͺ½μ—μ„œ..
[Spring] Web on Reactive Stack(λ°˜μ‘ν˜• μŠ€νƒμ˜ μ›Ή)
Β·
Framework/spring
1. Spring WebFlux μŠ€ν”„λ§ ν”„λ ˆμž„ μ›Œν¬μ— 포함 된 μ›λž˜ μ›Ή ν”„λ ˆμž„ μ›Œν¬ 인 μŠ€ν”„λ§ μ›Ή MVCλŠ” μ„œλΈ”λ¦Ώ API 및 μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆ 용으둜 νŠΉλ³„νžˆ μ œμž‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ°˜μ‘ν˜• μŠ€νƒ μ›Ή ν”„λ ˆμž„μ›Œν¬μΈ Spring WebFluxλŠ” 버전 5.0 ν›„λ°˜μ— μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ™„μ „νžˆ μ°¨λ‹¨λ˜μ§€ μ•Šκ³  λ°˜μ‘ν˜• 슀트림 μ—­ μ••λ ₯을 지원 ν•˜λ©° Netty, Undertow 및 μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆμ™€ 같은 μ„œλ²„μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€. 두 μ›Ή ν”„λ ˆμž„ μ›Œν¬λŠ” μ†ŒμŠ€ λͺ¨λ“ˆ (spring-webmvc 및 spring-webflux)의 이름을 λ―ΈλŸ¬λ§ν•˜κ³  Spring ν”„λ ˆμž„ μ›Œν¬μ—μ„œ λ‚˜λž€νžˆ κ³΅μ‘΄ν•©λ‹ˆλ‹€. 각 λͺ¨λ“ˆμ€ 선택 μ‚¬ν•­μž…λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ ν•˜λ‚˜ λ˜λŠ” λ‹€λ₯Έ λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜κ±°λ‚˜ κ²½μš°μ— 따라 λ‘˜ λ‹€ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ (예 : λ°˜μ‘ν˜• WebClientκ°€μžˆλŠ”..
REST APIλ₯Ό μ„€κ³„ν•˜λŠ” 방법(How to Design a REST API)
Β·
IT/RESTful
RESTλ₯Ό 쑰각으둜 λ°°μš°λŠ” 것은 ν•œ κ°€μ§€μ΄μ§€λ§Œ μ΄λŸ¬ν•œ λͺ¨λ“  κ°œλ…μ„ μ‹€μ œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ— μ μš©ν•˜λŠ” 것은 μ™„μ „νžˆ 또 λ‹€λ₯Έ κ³Όμ œμž…λ‹ˆλ‹€. 이 μžμŠ΅μ„œμ—μ„œλŠ” λ„€νŠΈμ›Œν¬ 기반 μ‘μš© ν”„λ‘œκ·Έλž¨μ„μœ„ν•œ REST APIλ₯Ό μ„€κ³„ν•˜λŠ” 방법을 μ•Œλ €μ€λ‹ˆλ‹€. 이 전체 μ—°μŠ΅μ—μ„œ 얻은 μš”μ μ€ μ‘μš© ν”„λ‘œκ·Έλž¨ λ””μžμΈ ν”„λ‘œμ„ΈμŠ€μ—μ„œ REST 원칙을 μ μš©ν•˜λŠ” 방법을 λ°°μš°λŠ” κ²ƒμž…λ‹ˆλ‹€. 1. Identify the Resources – Object Modeling REST API 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ””μžμΈν•˜λŠ” 첫 번째 λ‹¨κ³„λŠ” λ¦¬μ†ŒμŠ€λ‘œ ν‘œμ‹œλ  였브젝트λ₯Ό μ‹λ³„ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ„€νŠΈμ›Œν¬ 기반 μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ 경우 개체 λͺ¨λΈλ§μ΄ 훨씬 더 κ°„λ‹¨ν•©λ‹ˆλ‹€. μž₯치, κ΄€λ¦¬λ˜λŠ” μ—”ν„°ν‹°, λΌμš°ν„°, λͺ¨λŽ€ λ“±κ³Ό 같은 λ§Žμ€ ν•­λͺ©μ΄ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹¨μˆœν™”λ₯Ό μœ„ν•΄ μš°λ¦¬λŠ” 두 ..
RESTλž€?(What is REST)
Β·
IT/RESTful
RESTλŠ” μ•½μ–΄μž…λ‹ˆλ‹€. for REpresentational State Transfer and an architectural style for distributed hypermedia systems. 둜이 ν•„λ”© (Roy Fielding)은 2000 λ…„ 그의 유λͺ…ν•œ λ…Όλ¬Έμ—μ„œ 처음으둜 그것을 λ°œν‘œν–ˆμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ μ•„ν‚€ν…μ²˜ μŠ€νƒ€μΌκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ RESTμ—λŠ” κΈ°λ³Έ 원칙과 μ œμ•½ 쑰건이 μžˆμŠ΅λ‹ˆλ‹€. μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό RESTful이라고 ν•΄μ•Ό ν•˜λŠ” 경우 μ΄λŸ¬ν•œ 원칙을 μΆ©μ‘±ν•΄μ•Ό ν•©λ‹ˆλ‹€. A Web API (or Web Service) conforming to the REST architectural style is a REST API. 1. Guiding Principles of REST RESTful μ•„ν‚€ν…μ²˜μ˜ 6κ°€μ§€ ..
Spring Boot 3.0 Release Notes
Β·
Framework/spring
Upgrading from Spring Boot 2.7 이것은 Spring Boot의 μ£Όμš” λ¦΄λ¦¬μŠ€μ΄λ―€λ‘œ κΈ°μ‘΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ—…κ·Έλ ˆμ΄λ“œν•˜λŠ” 것이 ν‰μ†Œλ³΄λ‹€ 쑰금 더 볡작 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κΈ°μ‘΄ Spring Boot 2.7 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ—…κ·Έλ ˆμ΄λ“œν•˜λŠ” 데 도움이 λ˜λŠ” μ „μš© λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ κ°€μ΄λ“œλ₯Ό 마련 ν–ˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ 이전 λ²„μ „μ˜ Spring Bootλ₯Ό μ‚¬μš© 쀑인 경우 Spring Boot 2.7으둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ ν•˜κΈ° 전에 Spring Boot 3.0둜 μ—…κ·Έλ ˆμ΄λ“œν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. New and Noteworthy Tip. ꡬ성 λ³€κ²½ λ‘œκ·Έμ—μ„œ ꡬ성 λ³€κ²½ 사항에 λŒ€ν•œ 전체 κ°œμš”λ₯Ό ν™•μΈν•˜μ‹­μ‹œμ˜€. Java 17 Baseline and Java 19 Support μŠ€ν”„λ§ λΆ€νŠΈ 3.0μ—λŠ” μ΅œμ†Œ λ²„μ „μœΌλ‘œ Java 17이..
[Gradle] ν•˜μœ„ ν”„λ‘œμ νŠΈ κ°„ λΉŒλ“œ 둜직 곡유 (Sharing Build Logic between Subprojects)
Β·
Tool/Gradle
Convention Plugins 일반적으둜 닀쀑 ν”„λ‘œμ νŠΈ λΉŒλ“œμ˜ ν•˜μœ„ ν”„λ‘œμ νŠΈλŠ” λͺ‡ κ°€μ§€ κ³΅ν†΅λœ νŠΉμ„±μ„ κ³΅μœ ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ—¬λŸ¬ ν•˜μœ„ ν”„λ‘œμ νŠΈμ—λŠ” νŠΉμ • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œ 된 μ½”λ“œκ°€ 포함될 수 μžˆμ§€λ§Œ λ‹€λ₯Έ ν•˜μœ„ ν”„λ‘œμ νŠΈλŠ” λ¬Έμ„œν™” μ „μš©μΌ 수 μžˆμŠ΅λ‹ˆλ‹€. μ½”λ“œ ν’ˆμ§ˆ κ·œμΉ™μ€ λͺ¨λ“  μ½”λ“œ ν•˜μœ„ ν”„λ‘œμ νŠΈμ— μ μš©λ˜μ§€λ§Œ μ„€λͺ…μ„œ ν•˜μœ„ ν”„λ‘œμ νŠΈμ—λŠ” μ μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ™μ‹œμ—, ν•˜λ‚˜μ˜ κ³΅ν†΅λœ νŠΉμ„±μ„ κ³΅μœ ν•˜λŠ” ν•˜μœ„ ν”„λ‘œμ νŠΈλŠ” λ‹€λ₯Έ λͺ©μ μ„ μˆ˜ν–‰ ν•  수 μžˆμŠ΅λ‹ˆλ‹€ - 그듀은 그듀을 λ”μš± μ°¨λ³„ν™”ν•˜λŠ” λ‹€λ₯Έ μ•„ν‹°νŒ©νŠΈ μœ ν˜•μ„ 생성 ν•  수 μžˆμŠ΅λ‹ˆλ‹€ , for example: public libraries - libraries that are published to some repository internal libraries - lib..
[Gradle] ν•˜μœ„ ν”„λ‘œμ νŠΈ κ°„μ˜ 쒅속성 μ„ μ–Έ(Declaring Dependencies between Subprojects)
Β·
Tool/Gradle
Project dependencies ν•œ ν”„λ‘œμ νŠΈκ°€ 컴파일 클래슀 κ²½λ‘œμ—μ„œ λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ—μ„œ 생성 ν•œ jarλ₯Ό ν•„μš”λ‘œν•œλ‹€λ©΄ μ–΄λ–¨κΉŒμš”? λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ˜ 전이 쒅속성도 ν•„μš”ν•œ 경우 μ–΄λ–»κ²Œν•΄μ•Όν•©λ‹ˆκΉŒ? λΆ„λͺ…νžˆ 이것은 Java 닀쀑 ν”„λ‘œμ νŠΈ λΉŒλ“œμ˜ 맀우 일반적인 μ‚¬μš© μ‚¬λ‘€μž…λ‹ˆλ‹€. ν”„λ‘œμ νŠΈ μ’…μ†μ„±μ—μ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄ Gradle은 이에 λŒ€ν•œ ν”„λ‘œμ νŠΈ 쒅속성을 μ œκ³΅ν•©λ‹ˆλ‹€. Example 1. Project dependencies . β”œβ”€β”€ buildSrc β”‚ ... β”œβ”€β”€ api β”‚ β”œβ”€β”€ src β”‚ β”‚ └──... β”‚ └── build.gradle.kts β”œβ”€β”€ services β”‚ └── person-service β”‚ β”œβ”€β”€ src β”‚ β”‚ └──... β”‚ └── build.gradle.kts β”œβ”€β”€ shared β”‚ β”œβ”€..
Gradle을 μ‚¬μš©ν•˜μ—¬ μ†Œν”„νŠΈμ›¨μ–΄ κ΅¬μ„±μš”μ†Œ ꡬ성 μš”μ†Œ ꡬ성 및 λΉŒλ“œν•˜κΈ°
Β·
Tool/Gradle
Gradle을 μ‚¬μš©ν•˜μ—¬ νŠΉμ • 크기의 μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λΉŒλ“œν•˜λŠ” 경우 두 κ°€μ§€ κΈ°λ³Έ ꡬ쑰화 λ©”μ»€λ‹ˆμ¦˜μ΄ μžˆμŠ΅λ‹ˆλ‹€. λ¨Όμ € 이 μž₯μ—μ„œλŠ” Gradle 닀쀑 ν”„λ‘œμ νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ μ†Œν”„νŠΈμ›¨μ–΄ ν”„λ‘œμ νŠΈλ₯Ό κ΅¬μ„±ν•˜λŠ” 방법을 μ„€λͺ…ν•©λ‹ˆλ‹€. 이 μ„€λͺ…μ„œμ—μ„œλŠ” 이λ₯Ό λ‚΄λΆ€μ μœΌλ‘œ κ΅¬μ‘°ν™”λœ 단일 μ†Œν”„νŠΈμ›¨μ–΄ ꡬ성 μš”μ†Œλ‘œ κ°„μ£Όν•©λ‹ˆλ‹€. λ‘˜μ§Έ, μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ—¬λŸ¬ μ†Œν”„νŠΈμ›¨μ–΄ κ΅¬μ„±μš”μ†Œλ‘œ κ΅¬μ„±λœ μ†Œν”„νŠΈμ›¨μ–΄ μ œν’ˆμœΌλ‘œ κ°„μ£Όν•  수 있으며, 각 κ΅¬μ„±μš”μ†ŒλŠ” λ³„λ„μ˜ Gradle λΉŒλ“œλ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€. 이에 λŒ€ν•΄μ„œλŠ” Gradle을 μ‚¬μš©ν•œ μ†Œν”„νŠΈμ›¨μ–΄ μ œν’ˆ ꡬ쑰화 μž₯ 에 μžμ„Ένžˆ μ„€λͺ…λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. Creating a multi-project build Gradle의 닀쀑 ν”„λ‘œμ νŠΈ λΉŒλ“œλŠ” ν•˜λ‚˜μ˜ 루트 ν”„λ‘œμ νŠΈμ™€ ν•˜λ‚˜ μ΄μƒμ˜ ν•˜μœ„ ν”„λ‘œμ νŠΈλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€. κΈ°λ³Έ 닀쀑 ν”„λ‘œμ νŠΈ λΉŒλ“œ..