Archive
이 블로그 이전에 쌓아 온 기록들입니다.
WIKI 751편 · MEDIUM 10편 — 각 블로그의 RSS 에 공개된 글입니다. 제목을 누르면 원문으로 갑니다.
- SPEC DRIVEN DEVELOPMENT WIKI
스펙 주도 개발(SPEC DRIVEN DEVELOPMENT) 은 구현 코드보다 명세(Specification)를 먼저 정의하고, 그 명세를 기준으로 설계, 구현, 테스트를 진행하는 개발방식이다. 이렇게 작성된 "명세는 시스템이 만족해야하는 계약과 규칙의 SSOT" 이다.
- PHILOSOPHY WIKI
자신이 내린 결정과 결과물에 대해서는 논리적으로 설득이 가능해야 한다. 설계에 정답은 없다. 같은 시스템을 구현하더라도 엔지니어가 내린 설계 방향성에 따라 탄생한 코드 결과물은 각기 다를 수 있다. 따라서 본인만의 올바른 철학(PHILOSOPHY, 哲學) 이 중요하다고 생각한다.
- DIGITAL KEY WIKI
Digital Key 란 차량 접근 인증에 사용되는 디지털 자격증명(Digital credentials used to authenticate access to the vehicle) 이다.
- GO FUNDAMENTALS WIKI
Go 는 Google 에서 2009 년에 공개한 시스템 프로그래밍 언어이다. Rob Pike, Ken Thompson, Robert Griesemer 가 설계했으며, 핵심 설계 철학은 simplicity 이다.
- GRPC FUNDAMENTALS WIKI
RPC(Remote Procedure Call) 는 네트워크 상의 다른 컴퓨터에 있는 함수를 마치 로컬 함수처럼 호출하는 기술이다. 이 아이디어는 1984년 Birrell과 Nelson의 논문 "Implementing Remote Procedure Calls"에서 처음 체계화되었다.
- Consistent Hashing WIKI
Consistent Hashing 은 분산 시스템에서 데이터를 여러 노드에 분배하는 기법으로, 노드의 추가 또는 제거 시 재분배되는 키의 수를 최소화하는 것이 핵심 목표이다.
- Symmetric Encryption WIKI
AES(Advanced Encryption Standard) 는 2001년 NIST(National Institute of Standards and Technology)가 FIPS 197로 표준화한 대칭키 블록 암호 알고리즘이다. 벨기에 암호학자 Joan Daemen과 Vincent Rijmen이 설계한 Rijndael…
- SUSPEND MECHANISM WIKI
Kotlin Coroutine 의 suspend 함수는 비동기 코드를 동기 코드처럼 작성할 수 있게 하는 핵심 메커니즘이다. 그런데 "suspend 함수가 non-blocking 으로 동작한다"는 말은 정확히 무엇을 의미하는가?
- Gossip Protocol WIKI
Gossip Protocol 은 분산 시스템에서 노드 간 정보를 전파하기 위한 통신 프로토콜이다. 사람들 사이에서 소문이 퍼지는 방식과 동일한 원리로 동작한다. 각 노드는 자신이 알고 있는 정보를 무작위로 선택한 소수의 이웃 노드에게 전달하고, 그 이웃 노드들이 다시 자신의 이웃에게 전달하는 과정을 반복한다.
- KAFKA FUNDAMENTALS WIKI
Apache Kafka 는 분산 이벤트 스트리밍 플랫폼이다. 높은 처리량(Throughput), 내구성(Durability), 수평 확장성(Horizontal Scalability) 을 동시에 달성하기 위해 설계된 아키텍처를 가지고 있다.
- EVENTUAL CONSISTENCY WIKI
Eventual Consistency 는 분산 시스템에서 가용성(Availability) 과 분할 내성(Partition Tolerance) 을 확보하면서도 데이터 일관성을 포기하지 않기 위한 일관성 모델이다.
- TESLA SIGNED COMMAND PROTOCOL WIKI
Tesla 는 2023년부터 차량 제어 명령에 대해 End-to-End Command Authentication 을 도입했다. 이 프로토콜은 Tesla 의 공식 저장소에서 "vehicle-command" 로 명명되어 있으며, 본 문서에서는 이를 "Signed Command Protocol" 이라는 설명적 명칭으로 표기한다…
- Decentralized Identifiers, Zero-Knowledge Proof WIKI
블록체인과 암호기술의 발전은 디지털 신원(Digital Identity) 을 근본적으로 재정의하고 있다. 그 중심에는 DID(Decentralized Identifier, 탈중앙 식별자) 와 영지식 증명(Zero-Knowledge Proof, ZKP) 이 있다.
- Demystifying Passkeys; CTAP MakeCredential and GetAssertion WIKI
Passkey, FIDO, TrustZone, Trusted Execution Environment, Seed Vault
- Architecture Decision Record - API Gateway WIKI
API Gateway 를 선택할 때 가장 보편적으로 논의하는 주제는 '구현할 것인가', '구입할 것인가' 이다. 보통 직접 구현하는 것보다 오픈 소스 구현체 또는 상용 솔루션을 구매하는 것이 더 낫다.
- Proof-of-Stake, Staking WIKI
PoW(작업 증명)가 "에너지(전기)와 하드웨어" 를 담보로 잡고 보안을 유지한다면, PoS는 "자본(코인)" 자체를 담보로 잡는다.
- TDD After TDD; How Developers Think in the Age of AI WIKI
Claude Code, Gemini, ChatGPT 등 AI 를 활용한 Vibe Coding 이전 시절에는 TDD 를 활용하여 손으로 직접 코드를 구현하는 과정에서 얻는 인사이트가 있었다. 예를 들면, RED 과정에서 Deserialize 함수를 구현하기도 전에 테스트 코드에서 먼저 호출해 봄으로써 이 함수의 입력과 출력…
- BITCOIN NODE - Transaction WIKI
If Bitcoin were a living organism, transactions would be its heartbeat . Every action in the Bitcoin network—sending money, receiving money, mining rewards—is expressed as a transa…
- Smart Contract WIKI
스마트 컨트랙트(smart contract) 는 Nick Szabo 가 1990년대에 제안한 프로토콜 이름이다. 닉 사보는 디지털 환경을 잘 구성하면 변호사나 법무사 등의 제 3자가 개임하지 않고도 법률행위를 담은 계약이 자동으로 '집행'될 수 있을 것이라고 생각하고 이름을 '스마트 컨트랙트'이라 지었다.
- Decentralization WIKI
분산 시스템(Distributed System) 과 탈중앙화 시스템(Decentralization System) 은 공통점도 있고 차이점도 존재한다.
- Bitcoin Address WIKI
비트코인 지갑을 설치하면 제일 먼저 사용자를 위한 두 개의 암호키(public key, private key)가 생성된다. 비트코인 탈중앙화 시스템이므로 개인키를 분실하거나 도난 당하면 문제를 해결할 방법이 없다.
- Double Spending Problem WIKI
전산학 관점에서 BLOCKCHAIN 은 "익명의 비동기화 네트워크에서 발생하는 사건들을 중앙 서버의 관여 없이도 일관성 있게 순서를 정할 수 있는 장치"다. 이 순서를 정하는 것은 이중 사용(Double Spending) 문제와 직결된다.
- cypherpunk WIKI
사이퍼펑크(cypherpunk) 는 "컴퓨터 네트워크를 사용할 때 특히 정부기관으로부터 프라이버시를 보호하기 위해 암호화 기술을 사용하는 사람"을 의미한다.
- Latency, Bandwidth WIKI
빠른 사용자 경험(user experience)을 위해서는 속도가 중요하다. 빠른 속도를 내기 위해서는 여러가지 요소와 근본적인 제약사항에 대해 이해해야 한다. 비유적으로 먼저 설명하자면 대역폭은 수도관의 굵기(지름)이며, 레이턴시는 물이 수도관 끝에서 끝까지 이동하는 속도이다. 엔지니어링 관점에서 레이턴시를 더 세분화…
- BITCOIN NODE - Encoding VarInt WIKI
비트코인 네트워크는 JSON 을 사용하지 않는다. 대신 바이너리 데이터를 TCP로 직접 주고받는다 . 이 과정에서 다음과 같은 문제가 발생한다.
- BITCOIN NODE - Encoding Endian WIKI
비트코인 네트워크에서는 HTTP 나 JSON 을 쓰지 않고 바이너리(Binary) 로 데이터를 TCP 로 직접 주고 받는다. 이때 모든 정수(Integer)는 Little Endian 으로 통신한다. (일부 네트워크 포트나 IP 는 Big Endian 이지만 대부분은 Little Endian) 이 도구 없이는 Versio…
- Genesis Block, Coinbase Transaction WIKI
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
- Base58, Base58Check WIKI
base 라는 의미는 값을 나타내는데 사용되는 문자 수를 의미한다. base2 는 0,1 이진수, base10 은 10진수, base16 은 16진수 0123456789abcdef 를 의미한다.
- Checksum, Bitcoin Address WIKI
비트코인 지갑 주소는 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa 처럼 복잡한 난수들의 집합으로 보인다. 만약 친구에게 돈을 보내려다 주소의 맨 마지막 글자 a를 b로 잘못 입력하면 어떻게 될까? 내 소중한 비트코인은 영원히 허공으로 사라지는 걸까? 다행히도 그런 일은 거의 발생하지 않는다. 바로 체크섬…
- The Lifecycle of a Network Packet in Linux WIKI
eth0 is the traditional name for the first Ethernet network interface (wired) in Linux and Unix-like systems, representing the physical connection for network communication, but mo…
- SOCKET, PROTOCOL WIKI
SOCKET 을 정의할 수 있는 말은 너무 많다. 소켓 자체로는 다양한 Layer 에서 의미를 가지고 있는데, Network, OS 수준으로 소켓이라는 것을 정의하면 다음과 같다. 소켓은 특정 통신 프로토콜(TCP 또는 UDP)을 사용하여, 네트워크 상의 고유한 주소({IP:Port})와 결합된, 프로세스가 접근 가능한…
- A Deep Dive into Distributed Transactions; Patterns and Trade-offs in Practice WIKI
Two Phase Commit, Try-Confirm/Cancel, Event Sourcing
- SOFTWARE FUNDAMENTALS; CRITICAL THINKING & ABSTRACTION WIKI
소프트웨어 엔지니어로서 중요한 두 가지를 뽑으라면 CRITICAL THINKING 과 ABSTRACTION 라고 생각하며, 뛰어난 소프트웨어 엔지니어는 문제를 깊이 이해하는 비판적 사고와 복잡함을 단순화하는 추상화 능력을 갖추고 있다.
- DIGITAL TWIN WIKI
디지털 트윈(Digital Twin) 기술은 물리적 완전한 디지털 복제본을 생성하여 실시간 모니터링, 예측 분석, 그리고 가상 테스트를 가능하게 하는 핵심 기술이다.
- Chapter7 - Practical TDD Strategies in Legacy code WIKI
"Legacy code is code without tests… but that doesn't mean we have to live with it forever." - Michael Feathers
- Chapter6 - Refactoring and Test Evolution WIKI
"Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior." - Martin Fowler
- Chapter4 - Driving OOP, DDD, DESIGNPATTERN design with TDD WIKI
"Objects are not just bundles of data and functions. They are models of concepts in your domain." - Eric Evans
- Chapter3 - Test Design Principle WIKI
"Code without tests is bad code. It doesn't matter how well written it is; it doesn't matter how pretty or object-oriented or well-encapsulated it is. With tests, we can change the…
- Chapter2 - First TDD Experience Position Class Implementation WIKI
"Make each program do one thing well." - Unix philosophy
- Chapter1 - What is Test-Driven Development WIKI
TDD(Test-Driven Development)는 개발자가 프로덕션 코드를 작성하기 전에 요구 사항에 집중하여 새로운 기능에 대한 테스트 시나리오를 먼저 생각하고 작성하게 한다. 작성된 테스트 시나리오를 기반으로 테스트 코드를 작성하고 테스를 실행하여 실패 하는 것을 확인한다. 그리고 테스트를 통과 하기 위한 가장 간…
- What is the Software Defined Vehicle? WIKI
Software Defined Vehicle 는 자동차의 물리적 구성요소와 디지털 구성 요소가 분리되고 차량의 기능을 소프트웨어로 제어할 수 있다. 마치 스마트폰 처럼 소프트웨어를 통해 기능과 성능을 지속적으로 개선하고 확장할 수 있다는 특징이 있다. 즉, 도로위의 스마트폰 이다. 자동차가 SDV 로 전환되면서 사이버 보…
- Software Regression WIKI
A software regression is a type of software bug where a feature that has worked before stops working. This may happen after changes are applied to the software's source code, inclu…
- Some drawbacks of component teams, Alternative is Feature Team WIKI
What is sometimes not seen is that a component team structure reinforces sequential development (a ‘waterfall’ or V-model), with many queues with varying-sized work packages, high…
- Why Randomized Exponential Backoff Is Essential for Distributed Systems WIKI
Exponential Backoff 는 is a common strategy for handling retries of failed network calls.
- How Spring Brings Object-Oriented Principles to Life WIKI
스프링(Spring)은 자바 기반의 프레임워크로, Object Oriented Programming 의 원칙과 철학을 구현하고 실현하는 데 실질적인 도움을 준다. 스프링의 핵심 요소들이 객체지향에 어떤 도움을 주는지를 살펴보자.
- Exactly-once processing strategy in an Event-Driven Architectures WIKI
Producer Delivery, Message Delivery Guarantees
- DIGITAL TREE WIKI
A trie , also known as a digital tree or prefix tree , is a specialized search tree data structure used to store and retrieve strings from a dictionary or set.
- SIGNED CERTIFICATES WIKI
현실 세계에서 서명(署名, signature) 이란 계약서나 문서 하단에 직접 자신의 이름을 쓰는 행위를 의미한다. 서명은 위조가 어렵도록 본인만의 고유한 필체를 사용하거나 지장을 사용한다. 이는 본인이 확인했음을 증명하며, 책임을 진다는 의미가 있다.
- Command Query Responsibility Segregation WIKI
CQRS 는 명령(Command)과 조회(Query)의 책임을 분리하는 아키텍처 패턴이. 전통적인 CRUD 모델에서 벗어나 데이터를 변경하는 작업과 데이터를 읽는 작업을 완전히 분리한다.
- High Performance; Binary Packet Protocol WIKI
How HTTP/2's Binary Foundation Transformed Web Communication Efficiency
- Zero Trust Architecture WIKI
Zero Trust Architecture 는 Never Trust , Always Verify(Continuous Verification) , Least Privilege , Dynamic Policies 원칙을 따른다. 즉, 어떤 요청이든, 인증과 권한 확인 전까지는 허용하지 않으며, 요청마다 데이터 소유자, 권한,…
- Key Exchange WIKI
키 교환(Key Exchange) 은 앨리스와 밥이 각각 가상키(공개키/개인키 쌍)를 생성하고 공개키를 서로에게 보낸다. 그 다음 앨리스는 밥의 공개 키와 자신의 비밀 키를 사용하여 공유 비밀(shared secret) 을 계산한다. 밥도 마찬가지다.
- Digital Signature WIKI
디지털 서명(digital signature, digital 署名) 은 송신자가 자신의 비밀키(private key)로 암호화한 메시지를 수신자가 송신자의 공개키(public key)로 해독하는 과정이다. 이때 공개키가 유출된다면 의도하지 않은 공격자에 의해 데이터가 복호화될 위험이 있지만, 디지털 서명은 데이터를 보호하…
- Software Architecture Lifecycle Activities WIKI
Requirements, Design, Documentation, Evaluation, Implementation
- Type Driven Architecture WIKI
In a programming language like F#, types play a key role , so let's look at what a functional programmer means by type .
- DECOUPLING WIKI
대규모 리팩토링(시스템, 모듈, 코드 구조, 클래스 간 관계 등의 리팩토링)의 목적은 DECOUPLING 이다. 소규모 리팩터링은 가독성 개선이 목적이다.
- Law of Demeter WIKI
LoD(Law of Demeter) 는 최소 지식의 원칙(the least knowledge principle) 이라고도 한다. 최소 지식 원칙은 모든 유닛이 자신과 매우 밀접하게 관련된 유닛에 대해서 제한된 지식만 알아야 한다.
- Minimalist Concepts WIKI
Minimalist Concepts 는 IT 분야에서 단순성과 본질 에 집중하는 철학을 의미한다. 이는 불필요한 복잡성을 제거하고, 핵심 가치를 유지하면서 효율적이고 명확한 시스템을 구축하는 데 초점을 둔다.
- Functional Object WIKI
Functional Object 설계의 핵심 중 하나는, 항상 새로운 객체를 생성하는 것이다. 변경 불가능한 객체는 시간에 따라 변하는 상태 공간을 갖지 않아서, 추론이 쉽다. 객체 전달이 자유롭다. 상태를 갖는 변경 가능한 객체는 코드의 다른 부분에 전달하기 전에 복사를 해놓는 등의 방어조치가 필요하다. 변경 불가능한…
- Writing Effective Comments for Readability and Maintainability WIKI
클래스, 함수, 변수 등에 주석을 잘 다는 것은 코드의 가독성과 유지보수성을 높이는데 많은 도움이 된다.
- Optimistic Concurrency Control; Optimistic Locking WIKI
낙관락은 데이터에 대한 락을 실제로 걸지 않고, 트랜잭션이 끝날 때 버전 정보(version)를 확인하여 충돌 여부를 판단한다. 여러 클라이언트가 동시에 작업을 시도할 때 경쟁 조건을 해결하는 방법 중 하나이다. (타임 스탬프를 활용하기도 하는데, 시간은 지속적으로 흐르기 때문에 부정확할 가능성이 더 크다.)
- Don’t Mock What You Don’t Own WIKI
Don’t Mock What You Don’t Own 는 내가 소유하지 않은 것을 Mocking 하지 말라는 의미인데, TestDoubles 의 주요 가치가 Design Feedback 이라는 사고방식에서 나온 것이다. 예를 들어 무언가를 위조하기 위해서 고통이 수반된다면, 더 나은 테스트더블 라이브러리를 사용하는 것이…
- Autowiring in Spring Integration Tests with Kotest WIKI
testImplementation ( "org.springframework.boot:spring-boot-starter-test" ) testImplementation ( "io.kotest:kotest-runner-junit5:$kotestVersion" ) testImplementation ( "io.kotest.ex…
- The Essence of Performance Testing WIKI
성능 테스트는 시스템이 주어진 조건에서 얼마나 효율적이고 안정적으로 동작하는지 검증하는 과정이다. 이를 통해 시스템의 처리 속도, 안정성, 확장성, 그리고 자원 사용 효율성을 평가할 수 있다.
- Design to Performance; Redis Single-Threaded Architectures WIKI
Redis(Remote dictionary server) 는 High Performance Key-Value Based In-memory NoSQL Database 이다.
- Functional DistributedLock WIKI
Concurrency Issue 해결을 위해서 Distributed Lock 을 사용하곤 한다. 보통은 AOP Based Distributed Lock 을 사용하는데 이 경우 Controller 의 Handler Method 에 @DistributedLock 어노테이션을 추가하여 전체적으로 적용된다.
- K6 Performance Testing WIKI
성능 테스트(Performance Testing)는 시스템, 애플리케이션, 또는 소프트웨어가 특정 조건 하에서 얼마나 효과적으로 작동하는지 평가하는 소프트웨어 테스트의 한 유형이다. 주로 응답 속도, 처리량(Throughput), 자원 사용량(Resource Usage), 안정성(Stability) 등과 같은 비기능적 요…
- Fire and Forget WIKI
Fire and Forget 패턴은 Async Programming 에서 사용된다. 어떤 작업을 실행하고 그 결과에 대한 응답을 기다리지 않고 바로 다음 코드를 실행하는 것을 의미한다. 이 패턴은 주로 성능 향상이나 비동기 작업을 수행할 때 사용되며, 작업의 완료나 결과에 대한 처리가 필요하지 않을 때 유용하게 사용된다.…
- Back-of-the-Envelope Estimation in System Design WIKI
Understanding QPS, RPS, and Throughput for Effective System Design Interviews
- Message Inversion WIKI
Message Inversion 은 생산된 이벤트의 순서와 소비된 이벤트의 순서가 일치하지 않는 현상을 말한다. 즉, A → B 순서로 발생한 메시지가 B → A 순서로 소비되는 상황을 의미한다.
- From Abstraction To Essence WIKI
처음에는 잘 추상화된(abstracted) Framework, Programming Language 를 잘 사용하기 위한 공부 위주로 하게 된다. 나중에는 이 추상화 뒷면엔 어떤 본질이 숨겨져 있는지, 본질을 찾기 위한 공부를 해야 한다. 본질에 대한 공부는 내 머릿속에 점으로 이뤄진 파편화된 지식들을 선으로 이어주는 역…
- Interface; Data Transfer Object, Business Object WIKI
DTO does not have any behavior except for storage, retrieval, serialization and deserialization of its own data (mutators, accessors, serializers and parsers).
- AI-Driven Modern Test Driven Development WIKI
Kent Beck said "Immediate feedback for interface design decisions"
- Design Driven Testing WIKI
Design Driven Testing 은 코드를 작성하기 전에 설계와 테스트 케이스를 먼저 작성하고 아래 테스트 유형을 사용하여 설계의 품질을 검증 하고, 테스트가 설계 결정과 설계 명세에 대한 문서화가 되도록 하는 개발 방법론이다.
- Test Harness WIKI
Test Harness 란 테스트를 실행하고 검증하는데 필요한 모든 요소들을 포함하는 테스트 실행 환경을 의미한다. 자동화 테스트 및 통합 테스트를 지원하며 관련된 도구로는 JUnit 등이 있다.
- Cache Hierarchy; Why Cache Layers Exist Between CPU and Memory WIKI
일반적인 시스템에서 Memory 의 속도는 CPU 100분의 1에 불과한다. CPU 는 한 번에 한 가지 일만 하기 때문에, CPU 가 명령어를 실행하는 속도를 끌어 올려야 성능이 향상될 것이다. 따라서, 더 이상 CPU 는 느릿느릿한 메모리와 직접 상호작용하지 않는다.
- Data Beat Opinions WIKI
의견 보다 데이터(Data Beat Opinions)는 구글의 핵심 운영 원칙 중 하나이다. 대부분의 사람들이 데이터라고 생각할 것도 구글에서는 데이터로 인정되지 않는다고 한다. 의사 결정 과정에서 고려되려면 데이터는 핵심 기준 몇 가지를 충족 시켜야 한다.
- Designing Context Structures for Suspend/Resume in Multitasking WIKI
Concurrency in Modern Programming - From Processes to Coroutines
- VirtualThread; Provide High-throughput not Low-Latency WIKI
The thread is Java's unit of concurrency ;
- BROADEN YOUR HORIZONS WIKI
개발자로써 만 6년차를 앞두고, 사이드프로젝트를 찾아나섰다. 너무 만들고 싶은 제품이기도 했으며 직접 경험해본 도메인이고, 나에게도 필요하지만 사람들이 필요로하는 제품일 것이라는 확신이 든다. 이번에도 운이 좋았다. 좋은 사람들, 똑똑한 사람들과 함께 일한다는 것은 너무 즐거운 일이다.
- Throughput and Latency understood by Delivery Services WIKI
처리량(Throughput)과 지연시간(Latency) 를 이해하기 가장 쉬운 예시는 Delivery Services 생각해보면 된다. 대한민국의 대표 배달 앱 '배달의 민족'을 생각해보자. 알뜰 배달과, 한집 배달이 있다.
- Debounce with Options - Leading, Trailing WIKI
If trailing is enabled, the debounce will invoke after the delay just like classic implementation. If leading is enabled, it will invoke at the beginning. If both are enabled then…
- FencedLock WIKI
Distributed System 에서 Shared Resources 를 보호하기 위해 Distributed Lock Mechanisms 을 사용한다. 일반적으로 Redis 의 lock/tryLock 을 사용하는데, STOP THE WORLD 가 발생하는 경우에는 Lost Update(write-write-conflict…
- DataDrivenTest WIKI
Data Driven Testing 은 테스트를 수행할 때 입력 데이터와 예상 결과를 외부 소스(예: 엑셀 파일, CSV 파일, 데이터베이스, XML 등)에서 불러와 테스트 케이스에 적용하는 소프트웨어 테스트 기법이다. 또는 미리 정의된 입출력 값 Set 을 사용하여 동일한 테스트를 반복해서 빠르게 실행하는 것을 의미하기…
- The History of Ventilation and Temperature Control WIKI
사람들이 처음으로 실내에 불을 들여오면서 연기를 빼낼 구멍의 필요성을 인식했고, 환기의 필요성도 생겼다. 고대 이집트에서는 실내에서 작업하는 석공들이 야외에서 작업하는 사람들보다 호흡기 문제가 많았고, 이는 실내의 먼지 때문이라고 여겼다. 로마인들은 난방 시스템을 개발해 실내 화재의 필요성을 없앴고, 창문 면적에 따른 자…
- Carrying Capacity WIKI
Growth Dynamics 의 핵심 개념인 Carrying Capacity 는 제품을 만드는 PO, PM, Developer 들이 꼭 알아야 하는 개념이다. 이 값을 알면 우리 서비스가 도달할 MAU 를 예측할 수 있다.
- Tests Enable of Fearless Refactoring WIKI
In the world of software development, change is inevitable. As systems grow and evolve, so too must the code that powers them. This is where refactoring comes into play – the art o…
- A Guide to IT Contracting - Checklists, Tools, and Techniques WIKI
A Guide to IT Contracting - Checklists, Tools, and Techniques
- Mastering Developer's Guide to Seamless Social Logins WIKI
Integrating Google, Apple, and Kakao with OpenIDConnect and OAuth
- THE LAWS OF IDENTITY WIKI
Technical identity systems must only reveal information identifying a user with the user's consent.
- Three Questions to Build a Data Analysis Hypothesis WIKI
Three Questions to Build a Data Analysis Hypothesis :
- ABSTRACTION WIKI
ABSTRACTION 란 복잡한 자료, 모듈 시스템 등으로 부터 핵심적인 개념, 기능등을 간추려 내는 것을 의미한다. 이에 반대되는 개념인 명세화(specification) 는 일반적인 개념이나 추상적인 생각을 구체적인 사실로 분해하거나 분석하는 과정이다. 대표적으로 수학의 함수는 무수한 계산 과정을 한 기호로 추상화한…
- ReplayAttacks WIKI
ReplayAttacks 은 인증 과정에서 이전에 유효했던 데이터를 가로채서 나중에 이를 재사용함으로써 불법적인 액세스를 시도하는 공격이다. 주로 네트워크 환경에서 발생하며, 공격자는 인증 요청 또는 통신 데이터를 가로챈 후, 이를 그대로 재전송하여 합법적인 사용자로 가장할 수 있다.
- Quality of Service WIKI
QoS(Quality of Service) is a mechanism to control the quality and performance of data transmission and processing in the data distribution service.
- How to Implementation High Order Functions? WIKI
A higher-order function is a function that takes functions as parameters, or returns a function.
- CONNECTED SERVICE WIKI
A connected service is a system that connects a vehicle to app to provide various functions and services.
- Critical Thinking in the DNA of Software Engineers WIKI
Critical thinking the awakening of the intellect to the study of itself.
- Provisioning WIKI
Provisioning 은 시스템이나 서비스를 사용 가능한 상태로 설정하는 준비 과정을 의미한다. 예를 들어 차량(Vehicle)과 관련된 시스템/서비스를 개발하는 경우 차량이 사용 가능한 상태가 되어야 한다. 이것을 Vehicle Provisioning 이라 할 수 있다.
- Cross-Origin Resource Sharing WIKI
CORS(Cross-Origin Resource Sharing) 는 웹 브라우저에서 실행되는 스크립트가 다른 출처(도메인, 프로토콜, 포트)의 리소스에 접근할 수 있도록 허용하는 보안 메커니즘이다.
- Backend For Frontend WIKI
Backends for Frontends Pattern 이란 Architecture 를 Frontend Friendly 하게 변경하는 것을 의미한다.
- Developer Experience WIKI
개발자 경험(Developer Experience) 은 개발자의 업무 만족도와 생산성이 올라가기 때문에 중요하다. DevX 는 개발자 마다 다르기 때문에 주관적이다.
- Trustworthy Conversations in the Digital Worlds WIKI
Certificate Authority, Public Key Infrastructure, Asymmetric Cryptography
- Strategies for Handling Network Blips; Ensuring Resilience in Distributed Systems WIKI
Fault Tolerance; Retry Mechanism, Circuit Breaker, Timeout, Fallback, Graceful Degradation
- Characterization Test WIKI
Golden Master Testing(also known as Snapshot Test, Approval Test) is Testing Techniques Used When Refactoring LegacyCode
- Data-driven, Data-informed or Data-inspired WIKI
비지니스에서 Data 는 강력한 무기가 될 수 있다. Data 를 활용하는 접근법으로는 크게 3가지가 있다.
- DEPENDENCY WIKI
A Dependency occurs when one component (the dependent) requires another component (the dependency) to perform its tasks.
- Experience of Software Architectures WIKI
Correlation between DomainPurity and Productivity, Protocol, Mixed Architectures
- Integration Testing WIKI
단위 테스트가 비지니스 로직을 테스트하기에는 좋지만, 시스템이 데이터베이스, 메시지 버스 등의 외부와 어떻게 통합되는지 확인하기에는 충분하지 않다. 따라서 통합 테스트가 필요하다.
- Functional Architectures WIKI
The Essence Of Diverse Architectures, Type Driven Development, Output Based Testing
- Chatting System Design WIKI
먼저 요구사항/기능을 잘 정의 해야 한다. 어떤 Chatting Application 인지에 따라서 요구사항과 기능이 완전히 다르다. 만약, 면접에서 두리뭉실하게 Chat Application System Design 을 해보라는 질문을 받는다면 목적 이 무엇인지를 명확하게 물어보면 좋을 것 같다.
- Managed Service WIKI
Managed Service 란 Authentication, Systems management, DB Backup and Recovery, Data storage, warehouse and management, Monitoring 등 에 대한 리소스 관리를 외부 공급업체(e.g AWS) 등에 위임하는 것을 의미한다. 직접…
- Test Patterns For Standard Fixtures Reuse WIKI
Object Mother, Test Data Builder, Fixture Monkey, EasyRandom
- Detroit Versus Mockist WIKI
단위 테스트에서는 고전파(Detroit) 와 런던파(Mockist) 로 나뉜다. 고전파의 대표적인 책은 Test Driven Development - Kent Beck 이며, 런던파의 대표적인 책은 Growing Object-Oriented Software, Guided by Tests - Steve Freeman 이 있…
- Design by Contracts WIKI
A contract is a set of expectations on an element, library, or service. By “contract”, we mean what is "promised" by the creators of this solution in documentation, comments, or by…
- Content Delivery Network WIKI
A Content Delivery Network(CDN) is a globally distributed network of proxy servers, serving content from locations closer to the user. Generally, static files such as HTML/CSS/JS,…
- No Silver Bullet in Software Test WIKI
Pesticide Paradox 은 벌레를 예방하고 잡으려고 사용하는 모든 방법은 그 효과가 미치지 않는 더 미묘한 벌레를 남긴다라는 의미이다. 소프트웨어 테스트에는 은 탄환은 없다( No Silver Bullet ). 따라서, 버그 수를 최소화하기 위해서는 모든 테스트 전략을 효과적으로 결합 하여 사용하는 것이 현명한…
- PropertyBasedTest WIKI
목록이 입력으로 주어질때, 요소의 순서가 알고리즘에 영향을 미치는 경우 일반적으로 예시 기반 테스트(Example-Based Test) 를 사용한다. 예시 기반 테스트란 가능한 입력 중에서 하나의 특정 입력만 골라서 하는 테스트 를 의미한다. 특정 테스트 케이스를 위해 데이터를 만들어서(data point) 테스트를 진행…
- SpecificationBasedTest WIKI
소프트웨어 요구사항(requirements) 은 어떤 기능이 무엇을 해야 하는지를 설명하는 텍스트 문서를 의미하며, 이것이 테스트를 작성함에 있어서 가장 중요한 요소이다.
- RateLimit - 429 Too Many Requests WIKI
API 로 요청/명령을 과도하게 하는경우 ' 429 Too Many Requests ' 또는 ' Limit Exceeded(한도 초과) ' 와 같은 응답을 받는 경우가 있다. 이 경우는 보통 API 에 RateLimit 이 걸려 있을 것이다.
- Drawbacks of Distributed Lock WIKI
분산 락을 사용하면 데이터가 특정 시간(락의 대기 시간(wait time)과 임대 시간(lease time))에 의존하게 된다. 따라서, 필수적으로 처리해야 할 데이터가 처리되지 않는 상황이 발생할 수 있다. 또한, 락이 해제될 때 두 개의 데이터가 락을 경합하면 순서대로 처리되지 않을 가능성도 있다.
- Test Pyramid WIKI
The "Test Pyramid" is a metaphor that tells us to group software tests into buckets of different granularity
- HealthCheck WIKI
Spring 과 K8S 를 사용하는 환경에서 애플리케이션이 사용 가능한지 상태 확인 을 위해서 Liveness, Readiness 개념을 적용하면서 Health Check Endpoint 를 Helm 에 설정하곤 한다.
- Combined Charging System WIKI
The Combined Charging System, or CCS , is one of three fast-charging plugs in the U.S. and it’s the most popular charging plug after Tesla with thousands of public stations through…
- Point of Interest WIKI
POI(Point of Interest) 란 지도 상에서 관심 지역 정보 를 의미한다. 강남역, 백화점, CGV 등 .. POI 를 지도에 사용하는 목적은 목적지를 쉽게 검색 할 수 있도록 하기 위함이다.
- Persistence WIKI
Data Persistence is a means for an application to persist and retrieve information from a non-volatile storage system
- Don't use natural keys WIKI
Vehicle identification number(VIN; also called a chassis number or frame number) 혹은 주민등록번호와 같은 자연키(natural key)를 데이터베이스의 기본키로 사용해서는 안된다. 아무리 국가 정책이더라도 정책은 변경 가능성을 내포하고 있기 때문이다.
- Device Authorization Grant WIKI
OAuth 2.0 Device Authorization Grant 란, 디바이스 권한 부여를 의미한다. 브라우저가 지원되지 않거나, 장치의 키보드 입력 기능이 제한된 경우 OAuth 를 사용하여 장치에 로그인하는 데 사용된다.
- Digital Twin WIKI
디지털 트윈(Digital Twin) 이란 물리적인 물체를 정확하게 반영하도록 설계된 가상 모델을 의미한다. 쉽게 말하면, 현실 세계를 디지털 환경에 복제하는 기술 을 의미한다.
- Abstraction of the Linux message traffic path WIKI
A way to speak to other programs using standard Unix file descriptors.
- Atlassian JIRA APIs WIKI
Atlassian no longer supports Jira REST Java Client library. If you have any questions about it, post them in the Atlassian Community.
- Secure Shell WIKI
Tunneling 은 데이터 스트림을 인터넷 상에서 가상의 파이프를 통해 전달시키는 기술을 의미하며, 패킷내의 데이터를 캡슐화 시켜서 전송한다. 터널링을 보안 채널이라고도 부른다.
- Polymorphism WIKI
Polymorphism is the provision of a single interface to entities of different types.
- User feedback is important than premature optimization WIKI
“The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature optimization is the root of all e…
- Feign Client Exception Handling with ErrorDecoder WIKI
서버로 부터 받은 response 의 status 값에 따라 Feign Client Exception Handling 이 가능하다.
- Data Anonymization WIKI
Data anonymization is the process of protecting private or sensitive information by erasing or encrypting identifiers that connect an individual to stored data.
- Encapsulation WIKI
In software systems, encapsulation refers to the bundling of data with the mechanisms or methods that operate on the data. It may also refer to the limiting of direct access to som…
- Service Mesh Architecture WIKI
여러 Microservice 들이 있을때, 서비스끼리 직접 통신(call by direct) 하는 것이 아니라, Proxy 를 통해서( call by proxy ) 하게 된다. 이때 주로 사용되는 proxy 중 하나는 Envoy Proxy 이다. Envoy Proxy 는 고성능 프록시 사이드카이다.
- Background, Foreground State in App WIKI
Apple Push Notification Service(APNs)는 Apple이 iOS, watchOS, tvOS, macOS 등의 운영 체제에서 사용되는 디바이스들에 푸시 알림을 보내는 시스템이다. 이 시스템은 앱 개발자가 자사 애플리케이션을 통해 사용자들에게 중요한 정보나 업데이트를 제공하는 데 사용된다.
- Envoy Proxy WIKI
기존의 대표적인 프록시 솔루션으로는 nginx, haproxy, apache 서버등이 있는데, 이러한 프록시들은 보통 TCP/IP 레이어에서 L4 로 작동을 하였다. 그러나 마이크로 서비스에서는 조금더 복잡한 라우팅 요건이 필요한데 예를 들어서 HTTP URL에 따른 라우팅에서 부터, HTTP Header를 이용한 라우팅…
- Object Calisthenics WIKI
객체지향 설계와 구현은 수학 공식을 외워서 문제를 푸는 것과 달리 이론을 안다고 해도 이 이론을 설계와 구현에 녹여내려면 지속적인 수련이 필요한 영역이다. 여기서 수련이라는 의미는 어느 누구나 야구공을 던지는 이론은 다 알고 있지만 이론을 안다고 누구나 다 프로선수 처럼 공을 던질 순 없고 지속적인 훈련(수련)을 통해서만…
- Elegant Object WIKI
이 책의 목표는 코드의 유지보수성(maintainability) 을 향상시키는 데 중점을 둔다. 유지보수성은 코드를 이해하는데 걸리는 시간으로 측정할 수 있다. 객체지향에서는 객체의 역할을 이해할 수 있어야 한다. 코드의 품질이 향상된 다는 것은 대부분의 프로젝트에서 비용 절감을 의미한다. 이것이 핵심이다.
- Meaning of Real Object Oriented WIKI
진정한 객체지향에서 인스턴스화(instantiation)란 더 작은 객체들을 조합(compose) 해서 더 큰 객체를 만드는 것을 의미한다. 객체들을 조합해야 하는 단 하나의 이유는 새로운 계약을 준수하는 새로운 엔티티(entity)가 필요하기 때문이다.
- Merge commit with semi-linear history WIKI
Merge commit with semi-linear history 는 rebase 를 사용하며 merge 커밋을 남기는 전략이다.
- Spring Cloud OpenFeign WIKI
Feign is a Declarative REST Client. To use Feign create an interface and annotate it.
- De-Identification WIKI
“De-identification” is the general term for the process of removing personal information from a record or data set. De-identification protects the privacy of individuals because on…
- The Fundamental Test-Driven Development Cycle WIKI
MANAGING THE DEVELOPMENT OF LARGE SOFTWARE SYSTEMS - Winston Royce 의 Figure-4 Model 은 일반적인 개발 방식이며 익숙하다.
- Observability WIKI
Observability pillars include logs, metrics, and traces. Modern observability also includes metadata, user behavior, topology and network mapping, and code-level details.
- Volatile Solves Memory Visibility and Atomic Solves Concurrency WIKI
Shared Multiprocessor Architecture :
- Polymorphism Functions WIKI
reader 인터페이스의 계약(interface contract)을 구현한 모든 타입을 다 파라미터로 받을 수 있는 함수를 다형성 함수(polymorphism function) 라고 한다. 이 함수는 구체적 타입에 대해서는 전혀 알지 못한다. 따라서 완전히 디커플링 되어 있으며, 이는 Go에서 할 수 있는 최상위 디커플링…
- Event Driven System WIKI
EDA(Event Driven Architecture) 의 핵심은 당연, Event 이다. Application 에서 발생하는 Event 의 종류를 두 가지로 나눌 수 있다.
- Universally Unique Identifier WIKI
A UUID; Universally Unique Identifier , is a 128-bit identifier that is guaranteed to be unique across both time and space. It is often represented as a 36-character hexadecimal st…
- Empty Interface and Generics WIKI
interface {} 메서드가 zero 인 인터페이스를 Empty Interface 라고 한다. 비어있는 인터페이스는 모든 유형의 값을 보유할 수 있다. (모든 유형은 최소한 0개의 메소드를 구현한다.)
- Explained Concurrency WIKI
Do not communicate by sharing memory; instead, share memory by communicating
- Dissection Status Management WIKI
Service Application 을 개발하다보면 상태(status) 관리가 엄청 중요하다. 상태 관리를 잘 하기 위한 몇가지 생각을 적어본다.
- Protobuffer WIKI
gRPC 는 HTTP/2 위에서 Protocol Buffers(protobuf) 를 사용해 직렬화된 바이트 스트림으로 통신하므로 JSON 기반의 통신보다 속도가 빠르다. Protocol Buffers are language-neutral, platform-neutral extensible mechanisms for ser…
- Pointers and Dereferencing WIKI
Pointers reference a location in memory where a value is stored rather than the value itself. By using a pointer (*int), the zero function is able to modify the original vari‐ able…
- Architecture Decision Records WIKI
Architecture Decision Records 에는 상태, 컨텍스트, 결정사항, 결론 이라는 4가지 핵심 섹션이 존재한다.
- Defensive Copy WIKI
Legacy Code 나 신뢰할 수 없는 코드로부터 불변성을 유지시키기 위해서는 Copy on Wirte 만으로 해결할 수 없다. 이때 사용되는 기술이 방어적 복사(defensive copy) 이다. 방어적 복사는 데이터를 변경할 수도 있는 코드와 불변성 코드 사이에 데이터를 주고 받기 위한 원칙이다.
- Difference Between Method And Function WIKI
What's the difference between a method and a function? 에 따르면 A function is a piece of code that is called by name. A method is a piece of code that is called by a name that is asso…
- Timeline Cutting WIKI
Timeline Diagram 은 시간에 따라 어떤 Action 들이 일어나는지를 Diagram 으로 표현한 것이다. 분산 시스템을 이해하는데 도움이 되는 기술이다.
- Side Effect WIKI
부수 효과(side effect)란 함수에서 결괏값을 주는 것 외에 하는 모든 행동을 의미한다. 부수 효과는 일반적으로 해당 메서드 밖에 있는 상태를 변경하거나, I/O 를 수행하는 것으로 정의된다. 부수 효과만을 위해 실행되는 메서드를 프로시저(procedure) 라고 부른다.
- Testing in a Reactive World WIKI
Reactor Core Test Examples 와 reactor-test/test 를 통해서 다양한 테스트 방법을 확인할 수 있다.
- Debugging in a Reactive World WIKI
fun main () { val seconds = LocalTime . now (). second val source : Mono < Int > source = if ( seconds % 2 == 0 ) { Flux . range ( 1 , 10 ) . elementAt ( 5 ) } else if ( seconds %…
- Sometimes communication is more important than development WIKI
사내 dogfooding 을 진행하면서 다시금 커뮤니케이션(communication) 의 중요성에 대해서 깨달았다.
- Google Firebase Network Latency Increased Error WIKI
2023-09-21 Google Firebase 에 큰 장애가 발생했다. FE(Google FrontEnd) 와 Firestore API 간의 통신에 문제가 있어서 클라이언트 요청 전달 과정에서 트래픽이 원활하지 못해 지연이 발생한 이슈이다.
- Preventing log loss with non-blocking mode WIKI
Blocking mode 의 문제점은 stdout, stderr 쓰기가 호출되면 애플리케이션 코드가 차단(blocking) 되어 애플리케이션이 작동하지 않고 상태 검사 실패 및 작업 종료로 이어질 수 있다는 것이다.
- Netty ByteBuf WIKI
Java NIO provides ByteBuffer as its byte container. Netty’s alternative to ByteBuffer is ByteBuf . ByteBuf is Netty’s data container.
- Exception Handling in Kotlin Coroutine WIKI
별도의 Root CoroutineScope 를 가지는 Coroutine 에서 예외를 throw 하는 경우 :
- Meaning of Data Oriented WIKI
데이터 지향(data oriented)의 중요한 원칙은, 데이터를 데이터 그대로 사용하는 것이다. 데이터를 그대로 사용했을때의 장점은 데이터를 여러가지로 해석할 수 있다는 것 이다.
- Aggregate Massive Data With Bloom Filters WIKI
Bloom filters used in variety cases. AdPlacement, Fraud Detection in Finance
- RELIABILITY WIKI
신뢰성(reliability) 은 의도한 기능을 올바르고 일관되게 수행하는 능력 이다. Reliability depends on multiple factors, of which resiliency is one of the most impactful. 탄력성(resiliency) 은 인프라 또는 서비스 중단을 복구, 수요를…
- Process, Thread, Coroutine WIKI
Process 는 Heap, Stack 등 프로세스가 관리하는 메모리 영역을 PCB 에 이전 정보를 저장해 두고, 새로운 프로세스의 메모리 영역을 사용한다. 이렇게 프로세스 끼리 메모리 영역을 교체하는 것을 Context Switching 이라고 한다.
- How to disable Spring Security Auto Configuration in Spring Webflux WIKI
Spring Security Dependency 가 있는 경우 테스트를 수행하게 되면 인증된 사용자 Mocking Data 를 담아서 보내야 한다. 그렇지 않으면 401 UnAuthorized Error 가 발생한다. Spring Security Dependency 를 제거하거나 ReactiveSecurityAutoCon…
- Debugging to analyze suspend mechanisms WIKI
Coroutine 은 suspension point(중단 지점) 에서 중단(suspend) 될 수 있고, 다시 해당 suspend point 에서 재개(resume) 할 수 있다.
- MetadataLock WIKI
Metadata is “the data about the data.” Anything that describes the database is metadata. Thus column names, database names, user names, version names, and most of the string result…
- Effective Final with Lambda Capturing WIKI
Lambda Capturing 은 람다 바디 외부에 선언된 변수를 람다 바디 내부에서 사용하는 것을 의미한다. 이때 제약조건이 있는데 변수가 final 이거나 Effective Final (사실상 final 로 간주되는 변수) 이어야 한다. 그렇지 않을 경우 concurrency 문제가 생길 수 있어서 컴파일러가 알려준다…
- Anonymous Class with Super Token Types WIKI
Deserialize Generic 에서 Super Type Tokens 라는 개념을 잠깐 살펴봤는데, 이 개념의 핵심은 anonymous inner classes 를 활용하여 컴파일 시간동안 타입 정보를 보존 하는 것이다.
- Deserialize Generic WIKI
com.fasterxml.jackson 을 사용하여 serialize/deserialize 를 수행한다. Generic Type 의 경우 어떻게 deserialize 할 수 있는지 알아보자.
- Server-Side Request Forgery WIKI
서버 측 요청 위조(Server-Side Request Forgery, SSRF) 공격은 공격자가 서버를 속여 무단 요청을 보내도록 유도하는 수법이다.
- Over The Air WIKI
OTA(Over The Air)는 무선 통신을 통해 소프트웨어, 펌웨어, 설정 등을 무선으로 업데이트하거나 배포하는 기술 및 프로세스를 나타내는 용어이다. 주로 이용되는 분야는 모바일 기기, 자동차, 스마트 홈 기기, 산업용 장비 등 다양한 분야에 걸쳐서 사용된다.
- Mobility Language Dictionary WIKI
PBV(Purpose Build Vehicle) 목적 기반 모빌리티라고 부른다. 단순한 이동 수단을 넘어 목적지로 이동하는 동안 탑승객에게 필요한 맞춤 서비스를 제공한다. 대표적인 예로 로보택시 나, 로보마트가 있다.
- Write Ahead Logging WIKI
미리 쓰기 로그는 크래시 및 트랜잭션 복구에 사용되는 추가 전용 보조 디스크 상주 구조이다. 변경 사항은 데이터베이스에 기록되기 전에 안정적인 저장소에 기록되어야 하는 로그에 먼저 기록된다.
- Reactive Streams Pub/Sub Model WIKI
Publisher 는 발행자인데 subscribe 메서드가 있는것이 의아할 수 있다. Kafka 의 Pub/Sub Model 과 비교해보자.
- Lazy Write WIKI
JPA 에서 쓰기 지연 저장소의 개념은 주로 트랜잭션 관리와 관련이 있다. JPA 는 영속성 컨텍스트라는 개념을 통해 엔티티(Entity)를 관리한다. 이 영속성 컨텍스트는 변경된 엔티티를 데이터베이스에 반영할 때 쓰기 지연 저장소를 사용하여 효율적으로 처리한다.
- Security Properties Of Hash Functions WIKI
역상 저항성(pre-image resistance)은 주어진 출력을 입력으로 바꾸는 역함수를 누구도 만들 수 없다는 성질이다.
- DogFooding WIKI
"Dogfooding"은 소프트웨어 개발 및 제품 관련 용어로, 회사 내부에서 개발한 제품을 직접 사용하는 것을 의미한다. 다시 말해, 회사의 직원들이 개발한 소프트웨어나 제품을 자신들이 실제로 사용하는 것을 의미한다.
- Authorization Code Flow with Proof Key for Code Exchange WIKI
OpenIdConnect, Authorization Code Grant with PKCE
- Internationalization with Language Translation Tables WIKI
Stackoverflow MySQL Language translation query
- If you know this, you can solve concurrency WIKI
따라서, 공유 자원(shared resources) 이 어떤 것인지를 파악하는 것이 가장 중요하다.
- Reactive Relational Database Connectivity WIKI
Picking a database driver and create a R2dbcEntityTemplate instance :
- Functor and Monad in Functional Programming WIKI
RxJava was designed and built on top of very fundamental concepts like functors , monoids and monads. RxJava, working on top of similarly imperative language, the library has its r…
- Idempotency with Redis WIKI
Idempotency Key that resolve consistency issues with retries 에 멱등성이 무엇인지, Stripe 와 Toss 는 어떻게 사용하고 있는지 정리하였다.
- Multithreading WIKI
A thread is a sequence of control within a process. A single-threaded process follows a single sequence of control while executing. An MT process has several sequences of control,…
- Traffic Shadowing WIKI
Traffic Shadowing 은 Production 환경에서 원본 트래픽을 복제하여 아직 공개 되지 않은 테스트 서버에 미러링을 수행하는 것이다. 이렇게 하면 테스트 서버에서 내가 만든 API 들이 실제 트래픽과 동일한 요청을 받기 때문에 Production 에 배포했을 때 어떤 문제가 생길지 미리 알 수 있다.
- Netty PrematureCloseException WIKI
Calling REST Services(server to server 통신) 에서 Reactor Netty 의 WebClient 를 사용 중이었고, Bean 으로 등록해서 사용 중이었다.
- Reason of kernel memory increasing WIKI
Docker, Kubernetes with Linux Kernel OOM Killer 글의 Debugging 파트에서, 수정된 소스로 배포 후 Datadog Monitoring 을 통해 container.memory.kernel 값이 급격하게 증가하지 않게 된 것을 확인하였다. 즉, Pod Restart/Killed 가…
- Docker, Kubernetes with Linux Kernel OOM Killer WIKI
사내에서 Kubernetes 환경에서 OOM Error 를 마주하였다. ArgoCD 를 통해 Admin 서버가 몇번씩 주기적으로 재시작되고 있음을 확인했고, Datadog Metrics 를 통해서 메모리 사용량을 체크하였다.
- Linux Memory Allocation and Overcommit Concepts WIKI
Original. How to Check Memory Usage Per Process on Linux
- VEHICLE SIGNAL SPECIFICATION WIKI
The Connected Vehicle Systems Alliance (COVESA) 에서 Vehicle Signal Specification (VSS) 를 제공하고 있는데, Automotive Data 에 대한 Standardized Spec 을 정의할 수 있다.
- Coroutines with WebFlux WIKI
Spring Coroutines Docs - Kotlin Coroutines are Kotlin lightweight threads allowing to write non-blocking code in an imperative way. On language side, suspending functions provides…
- JVM Optimization with warm up WIKI
A JIT compiler compiles bytecode to native code for frequently executed sections. This is in contrast to ahead-of-time (AOT) compilation, where the source code is compiled into mac…
- Structured Concurrency WIKI
Structured Concurrency The core concept is the encapsulation of concurrent threads of execution by way of control flow constructs that have clear entry and exit points and that ens…
- Event-driven Architecture, State machines WIKI
The code of nanomsg to use state machines internally, passing asynchronous events around instead of using random callbacks between the components. To solve The Callback Hell Proble…
- Mechanism of Context, Distributed Tracing with MDC WIKI
Mechanism that transport contextual metadata in Project Reactor
- Advanced Message Queuing Protocol WIKI
AMPQ(Advanced Message Queuing Protocol)는 단일 수신자 메시징 패턴 구현에 자주 사용된다. 메시지가 제대로 전송되었는지 확인(acknowledge)도 가능하다.
- ForkJoinFramework WIKI
ForkJoin framework, problems or tasks are recursively broken down into sub-tasks . Tasks are solved with the help of worker threads provided by a thread pool. Each worker thread wi…
- Datadog Log Collection with Kubernetes WIKI
Preprocessing of JSON logs occurs before logs enter pipeline processing. Preprocessing runs a series of operations based on reserved attributes, such as timestamp, status, host, se…
- Schema Registry WIKI
Asynchronous Messaging Pattern 을 사용하는 경우 메시지나, 데이터 타입의 신뢰성과 안전한 비동기 메시징을 구현하기 위해서 Schema Based Serialize & Deserialize 를 도입하는게 좋다. 여기서 말하는 Schema 란 통신에 참여하는 주체들이 주고받는 데이터를 정의하고 검증할…
- Synchronous Messaging Pattern WIKI
동기 메시징 패턴(Synchronous Messaging Pattern)은 마이크로 서비스간 묵시적인 의존성(dependency) 이 생긴다.
- Networking Infrastructure Abstraction with Overlay Network WIKI
오버레이 네트워크(overlay network)는 물리 네트워크 위에서 가상 네트워크를 구축하는 기법을 의미한다. 오버레이 네트워크를 사용하면 컨테이너간 통신이 가능하게 된다.
- Cloud Native WIKI
Cloud Native 란 Microservices 를 느슨하게 결합하여, 크기 조절이 가능하고 탄력적이며 관리, 관찰이 용이한 소프트웨어 애플리케이션을 만드는 것을 의미한다.
- Entity Logging WIKI
import javax.persistence.Entity ; import javax.persistence.GeneratedValue ; import javax.persistence.GenerationType ; import javax.persistence.Id ; @Entity public class Entity { @I…
- Dependency for Reactive, Kotlin, WebFlux 3.x with LINE WIKI
Hibernate Reactive, Vert.x and Kotlin JDSL
- ExecutorService WIKI
public interface Executor { /** * Executes the given command at some time in the future. The command * may execute in a new thread, in a pooled thread, or in the calling * thread,…
- Towards a Higher than the Developer WIKI
개발자는 설계를 한다. Such as Class Design, User Interfaces and Source codes. 따라서, 내가 알고 있는 것(= 계속 유지해야 할 부분) 에 대한 전문성을 유지 해야 한다.
- Huffman Coding Algorithms WIKI
Huffman Coding is lossless data compression algorithm . It is an algorithm that gives short binary codes to characters with high frequency of appearance of characters.
- Run-Length Encoding WIKI
Run-Length Encoding (RLE) is a way to compress data without losing any information (lossless compression). It replaces consecutive repeating characters with a single character and…
- Jakarta and RFC7807 with Spring Boot 3.0+ WIKI
The Eclipse Foundation is set to become the new steward of enterprise Java, taking over from Oracle, which no longer wants to manage Java EE. - Oracle Chooses Eclipse Foundation as…
- Projection for Avoid LazyInitializationException WIKI
To avoid the LazyInitializationException, you can either make sure to access the lazily loaded property or collection while still within the Hibernate session or transaction, or yo…
- Open Session In View Pattern WIKI
OSIV stands for Open Session In View, and it is a design pattern used in Hibernate to manage database transactions and sessions.
- Decision Algorithm and Parametric Search WIKI
파라메트릭 서치(Parametric Search)는 Parametric 이라는 단어를 보면 알 수 있듯이 매개 변수를 이용한 탐색 기법이라는 것을 알 수 있다. 파라메트릭 서치(Parametric Search) 는 최적화 문제 를 결정 문제 로 바꾸어 해결하는 기법이다. 즉, 결정 알고리즘(Decision Algorith…
- Binary Search WIKI
이진 탐색(binary search)은 반으로 쪼개서 찾고자 하는 값이 해당되지 않는 범위는 날리고, 다시 쪼개진 반에서 이분 검색을 실시한다. 이분 검색을 실시하기전에 오름차순 정렬이 되어있어야 한다.
- The Future of Developers WIKI
With AI such as chatGPT becoming an issue, the time has come for developers to prepare for a second job change.
- Aspect Oriented Programming WIKI
Cross-cutting concerns are aspects of a software system that affect multiple components or layers but do not necessarily fit into the primary functional decomposition of an applica…
- Code Generator Library, CGLIB WIKI
kotlin 의 경우에 모든 클래스들이 default 로 final 이기 때문에 AOP 이슈가 생길 수도 있다. 항상 그럼 상속 가능하게 open 을 붙여주는 것도 엄청 귀찮을 것이다.
- DynamicProxy WIKI
Java 에서 Proxy 인스턴스를 런타임에 만들 수 있는 방법을 제공하는데 이를 DynamicProxy 라 한다. 즉, 애플리케이션 실행 중(runtime)에 인스턴스를 동적으로 만든다는 것이다.
- Thoughts of Objects to Reduce Dependencies Between Packages WIKI
패키지간 의존성을 줄이기 위한 객체에 대한 고찰 및 생산성과 안정성에 대한 트레이드오프
- Distributed UniquenessKey WIKI
분산환경에서 UniqueID 를 어떻게 생성할까? ID Generator 는 필수 불가결(mission-critical) 컴포넌트 이므로 아주 높은 가용성을 제공해야 한다.
- Replication WIKI
Replication 이란 마스터(master)와 슬레이브(slave)를 정해두면 마스터에 쓴 내용을 슬레이브가 폴링(polling) 해서 동일한 내용으로 자신을 갱신하는 기능이다. 슬레이브는 마스터의 레플리카(replica, 카피)가 되는 것이다. 이렇게 해서 동일한 내용의 서버를 여러 대 마련할 수 가 있다.
- Branch By Abstraction WIKI
"Branch by Abstraction" is a technique for making a large-scale change to a software system in gradual way that allows you to release the system regularly while the change is still…
- Demilitarized Zone WIKI
DMZs function as a buffer zone between the public internet and the private network. The DMZ subnet is deployed between two firewalls. All inbound network packets are then screened…
- Layered Architecture with Sinkhole WIKI
Layered Architecture 를 사용해본 사람은 알겠지만 특별한 비지니스로직이 많이 없는 CRUD 의 경우에는 각 Layer 에서 별도의 로직 처리 없이 Object Converting 만 하여 요청을 처리하고 응답을 내주곤 한다.
- Normalization WIKI
Database normalization is a process of organizing data in a database in a way that reduces redundancy and dependency between data.
- Caching Strategy and Eviction Policies WIKI
대용량 아키텍처에서 성능(처리량)을 높이기 위해 적절한 Cache Strategy 와 함께 Cache Layer 를 도입하는 것은 효과가 좋다.
- Circuit Breaker with Fallback Improving Resiliency WIKI
Circuit Breaker 패턴은 호출 당하는 서비스에서 응답이 늦거나 (미흡한 예외 처리로 인한) 예외가 발생하여 생기는 문제를 다른 마이크로서비스에게 전파되지 않도록 하기 위함이다. 즉, MSA 에서 시스템의 안정성과 복원력을 향상시키기 위한 패턴이다. 서비스 응답이 늦는 경우(Timeout), 지속적인 호출이 쌓이…
- Query Offloading WIKI
Software 에서 Offload Processing 이란 기본적으로 시간이 오래걸리는 작업을 다른 방식으로 처리하는 것을 의미하는 것 같다.
- Storage Estimation with Quantitative Analysis WIKI
음식 주문앱, 택시 호출 서비스 등과 같은 곳에서 실시간 위치 검색 서비스를 사용 중이다. 이러한 서비스를 구현하기 위해 지리 공간 인덱스(Geo-spatial Index)에 대한 백엔드 인프라 설계가 필요하다.
- Clean Architecture WIKI
Entities 는 기업의 업무규칙(고수준 정책) 들을 정의하는 Layer 이며, Use Cases 는 애플리케이션 기능(사용 사례) 을 정의하는 Layer 이다.
- Distributed Caching in Microservices WIKI
Cache locality refers to the principle that computer programs should try to maximize the use of data already present in the cache, rather than frequently accessing data from main m…
- Difference Stack and Heap WIKI
In computer science, the terms "stack" and "heap" refer to two different types of memory allocation methods used by programs.
- ParameterizedTypeReference WIKI
The purpose of this class is to enable capturing and passing a generic Type. In order to capture the generic type and retain it at runtime, you need to create a subclass (ideally a…
- Token Bucket to Control Communication Volume WIKI
토큰 버킷 알고리즘은 분산 시스템에서 속도 제한에 일반적으로 사용되는 방법이다. 특정 기간 내에 처리할 수 있는 요청 수를 제한(rate limit)하여 요청 처리 속도를 제어할 수 있는 간단한 알고리즘이다.
- Offload Processing WIKI
Offloading processing is the practice of delegating certain tasks or operations to a separate thread pool or executor service in order to free up the main event loop and maintain g…
- Replenishing Optimization WIKI
You might also have noticed that some operators have variants that take an int input parameter called prefetch. This is another category of operators that modify the downstream req…
- Hot, Cold Sequence WIKI
Flux < String > coldPublisher = Flux . fromIterable ( Arrays . asList ( "blue" , "green" , "orange" , "purple" )) . map ( String: : toUpperCase ); // This will only emit data when…
- Reactive Streams Specification WIKI
Reactive Streams 란 비동기 스트림 처리(asynchronous stream processing) 과 논-블러킹(non-blocking) 과 배압(backpressure) 처리를 위한 JVM, Javascript 환경에서의 표준이다.
- Marble Diagram WIKI
아래로 내려오는 점선 화살표는 입력, 출력을 의미한다. 아이템들이 Observable 에 의해 방출될 때 onNext() 가 호출되며, 파이프( | )에서는 onComplete() 가 호출된다. X 에서는 onError() 가 호출된다.
- MySQL RDS vs MySQL Aurora WIKI
Amazon Web Services (AWS) provides two managed relational database services: Amazon RDS for MySQL and Amazon Aurora MySQL. Both provide managed relational databases based on the My…
- Debounce; Throttle WIKI
Debouncing 은 여러 요청을 하나의 그룹(grouping)으로 묶어서 처리 하는 것을 의미한다. 보통 연이어 요청이 오는 경우 마지막 요청(또는 제일 처음)만 허용한다.
- Message Delivery in Event Driven Architecture WIKI
Transactional Outbox, Polling Publisher, Message Broker
- Service Discovery WIKI
Service discovery is a technique for identifying and locating services in a distributed system environment. It enables services to be automatically located, registered and connecte…
- Reduce Dependency WIKI
There are several techniques that can be used to reduce dependencies and enforce a clear separation of responsibilities:
- Character of Architectures WIKI
Clean Architecture and Hexagonal Architecture are both architectural patterns that aim to separate the concerns of software systems into isolated, independent, and interchangeable…
- Antifragile WIKI
In the context of Microservices Architecture (MSA), "antifragile" refers to a system's ability to withstand and even benefit from change, uncertainty, and stress. An antifragile MS…
- Gateway in Microservices WIKI
In Microservice Architecture (MSA), a gateway is a single entry point for all incoming requests to the microservices. It acts as a reverse proxy, routing requests from clients to t…
- Distributed Tracing WIKI
분산 추적(distributed tracing)은 MSA 환경에서 수 많은 마이크로서비스들 간의 트랜잭션 로그를 추적, 모니터링 하는 것을 의미한다.
- Defensive/Offensive Programming WIKI
모든 가능성을 올바른 방식으로 처리하는 것을 Defensive Programming 이라고 한다. 하지만 모든 상황을 안전하게 처리하기 힘들 수도 있다. 이때 Offensive Programming 방법을 사용한다. Kotlin 의 require, check 등을 활용하여 문제가 발생했을때 개발자에게 알려주는 방식이다.
- Intention Revealing Interface WIKI
클라이언트 개발자가 객체를 효과적으로 사용하는 데 알아야 할 정보를 인터페이스로부터 얻지 못한다면 세부적인 측면을 이해하고자 객체 내부를 깊이 파고들 수 밖에 없다. 이 경우에는 캡슐화를 통해 얻을 수 있는 대부분의 가치를 잃어버리고 만다.
- Aliasing Bug by Reference Of Collections And Objects WIKI
Aliasing occurs when the same memory location is accessed through more than one reference.
- Acknowledgement WIKI
The most important part of Messaging is messages themselves and their reliable delivery and processing . Acknowledgement 는 메시지의 안정적인 처리를 위해 고안된 매커니즘이다.
- Parallel Change WIKI
인터페이스를 변경해야 하는 경우 병렬 변경(Parallel Change) 기법을 사용한다. 확장과 축소 리팩터링 이라고도 한다. 확장과 축소 리팩터링은 새 인터페이스를 추가하고, 예전 인터페이스를 사용하는 부분을 새 인터페이스를 사용하게 변경한 후, 아무도 예전 인터페이스를 사용하지 않을 때 예전 인터페이스를 제거하는 단…
- Value semantics WIKI
In computer science, having value semantics (also value-type semantics or copy-by-value semantics) means for an object that only its value counts, not its identity. Immutable objec…
- Prerequisites for Refactoring WIKI
MartinFowler - 리팩터링을 하고 싶다면, 필수 전제조건은 탄탄한 테스트가 있어야 한다. 좋은 테스트 커버리지는 우리가 설계 개선을 위해 수행하는 리팩터링이 시스템의 동작을 우연히 변경하는 일이 없음을 보장해 준다.
- Continuation Passing Style WIKI
Debugging to analyze suspend mechanisms 에서 코루틴들이 중단-재개 되면서 함수 내에 사용되는 지역변수 정보들을 컨티뉴에이션에 저장하고 가져다 사용하는 것을 확인했다. Continuation 의 경우 실제 Function 에서 Thread Stack 영역에 물고 있어야 하는 정보를 저장하는…
- Callback and Reactive Streams WIKI
Client side 에서는 View 를 Rendering 하는 과정에서 Main Thread 가 Block 되지 않아야 한다.
- OpenAPI Specification implementation by Swagger and RestDocs WIKI
The OpenAPI Specification (OAS) defines a standard, language-agnostic interface to RESTful APIs which allows both humans and computers to discover and understand the capabilities o…
- Remove high coupling between Contexts through Event WIKI
public class Order { public void cancel ( RefundService refundService ) { // 주문 로직 verifyNotYetShipped (); this . state = OrderState . CANCELED ; // 결제 로직 this . refundStatus = Sta…
- Anticorruption Layer WIKI
위 그림에서 PaymentAdapter 처럼 외부 시스템의 모델이 도메인 모델을 침범하지 않도록 만들어주는 계층을 Anticorruption Layer 라고 부른다.
- BoundedContext WIKI
처음에 도메인 모델을 만들 때 단일 도메인을 만들어 도메인 모델을 완벽하게 표현하려는 시도는 올바르지 않다. 한 도메인은 여러 하위 도메인으로 구분된다. 따라서 하위 도메인마다 같은 용어라도 의미가 다르고 같은 대상이더라도 지칭하는 용어가 다르기 때문에 한 개의 모델로 여러 하위 도메인을 모두 표현하려고 시도하면 적합하지…
- BigDecimal WIKI
자바의 float 과 Double 은 값의 정확성을 보장할 수 없다. 그 이유는 자바는 IEEE 754 부동소수점 방식을 사용하기 때문에 정확한 실수를 저장하지 않고 근사치 값을 저장한다.
- Message and Internationalization WIKI
Localization is sometimes written in English as l10n, where 10 is the number of letters in the English word between l and n. Localization refers to the adaptation of a product, app…
- Automotive Sensor and Telsa Vision WIKI
LIDAR is an acronym for Light Detection and Ranging . LIDAR normally measures a distance to an object by calculating the time taken by a pulse of light to travel to an object and b…
- RelaxedMockk WIKI
A relaxed mock is the mock that returns some simple value for all functions. This allows you to skip specifying behavior for each case, while still stubbing things you need. For re…
- Validation WIKI
검증은 Infrastructure, Domain, Application, Interfaces 계층 어느곳에서나 존재할 수 있다. 컨트롤러에서는 요청 파라미터가 적절한지 검증할 수 있으며, 도메인 레이어에서는 비지니스 업무 규칙에 적합한지 검증할 수 있고, 인프라스트럭쳐 레이어에서는 외부 통신의 결과가 적절한지 검증할 수…
- Architecture, Stability, and Productivity WIKI
아키텍처(architecture) 란 서비스의 구조 를 의미합니다. 따라서, 아키텍처는 중요합니다.
- Jdk Vendors WIKI
오라클(Oracle)이 2010년에 Sun Microsystems 을 인수한 후 현재는 Oracle JDK 라는 이름이 되었다. Java SE 10 이후 부터는 6개월 마다 새 릴리즈가 나오고 있다.
- First Class Collection WIKI
Collection 을 Wrapping 하면서, 컬렉션 외에 다른 멤버 변수가 없는 상태를 일급 컬렉션이라고 한다. Wrapping 함으로써 다음과 같은 이점을 가지게 된다.
- Exploring Java Hidden Costs WIKI
As Java 8 features comes to Android, it’s important to remember that every standard library API and language feature comes with an associated cost. Even as devices get faster and h…
- LazyConnectionDataSourceProxy WIKI
Proxy for a target DataSource, fetching actual JDBC Connections lazily. This DataSource proxy allows to avoid fetching JDBC Connections from a pool unless actually necessary.
- Component Scanning WIKI
During startup, Spring instantiates objects and adds them to the application context. Objects in the application context are called “Spring beans” or “components”.
- Reactor Pattern WIKI
The reactor pattern, illustrated in Figure 3-2 in its most basic form, approaches both concurrency and parallelism. In the typical imple‐ mentation of the pattern, asynchronously r…
- Duality in Reactive WIKI
In category theory, a branch of mathematics, duality is a correspondence between the properties of a category C and the dual properties of the opposite category Cop.
- Configuring a Load Test Environment with k6 + grafana + influxdb WIKI
k6 + grafana + influxdb 를 사용하여 부하 테스트 환경 구성하기
- Kafka - Pretending to know a little WIKI
한 개 파티션이 하나의 컨슈머에만 연결될 수 있다는 제한은 컨슈머 그룹 내에서만 제한이 되기 때문에 한 개 파티션을 서로 다른 컨슈머 그룹에서 공유할 수 있다.
- Docker Container WIKI
애플리케이션이 배포되는 환경을 서버에 직접 설치하여 구성할 경우, snowflake server 이슈에 직면합니다. 서비스가 점차 확장되면서 기존에 사용하던 서버와 새로 구축한 서버간에 설정의 차이가 발생하고, 관리자의 인적요소에도 영향을 받을 수 있습니다. 그리하여 기존에는 스크립트를 활용한 자동화 방식부터, kicks…
- Companion Object WIKI
Java 에서는 static field, method 들이 존재했지만 코틀린에서는 static 이 사라졌다. 대신 static 처럼 사용할 수 있는 companion object 가 존재한다.
- Utility Class in Kotlin WIKI
public final class JavaUtility { private JavaUtility () {} public static String getMethodName () { // ... } } 이러한 패턴은 코틀린에서 권장되지 않는다.
- Spring Security WIKI
final class ThreadLocalSecurityContextHolderStrategy implements SecurityContextHolderStrategy { private static final ThreadLocal < SecurityContext > contextHolder = new ThreadLocal…
- Standard Gradle WIKI
Build tools are programs that automate the creation of executable applications from source code.
- Backpressure WIKI
Backpressure in software systems is the capability to overload the traffic communication.
- Concurrency Resolution WIKI
경쟁 상태란 두 개 이상의 스레드가 공유 데이터에 액세스할 수있고, 동시에 변경을 하려고 할 때 발생하는 문제이다. 다수의 프로세스 혹은 쓰레드가 동기화 없이 공유 자원(shared resources) 에 접근하여 값을 변경하려는 현상을 의미한다.
- HTTP API Response Specification WIKI
API 응답 체계는 시스템 전체가 일관되고 명확한 형태를 가지면, 어떤 구조든지 문제가 되지 않는다. 즉, API 응답이 명시적이고 일관되는 것이 가장 중요하다.
- Template Method WIKI
템플릿(Template) 이라는 단어에서 알 수 있듯이, 템플릿 메서드 패턴은 어떤 작업 알고리즘의 골격을 정의한다. 공통 기능과 세부기능을 갖도록 구현할 수 있으며, 세부 기능은 서브 클래스마다 달라질 수있다. 즉, 템플릿 메서드를 이용하면 알고리즘의 구조를 그대로 유지하면서 특정 단계만 서브 클래스에서 새로 정의하도록…
- Surrogate Key WIKI
대체키(Surrogate key)란 자연키에 대한 대체용으로 인공적이거나 합성적인 키를 말하며, 주로 주민등록번호 같은 중요한 자료를 숨기기 위해 대체키로 사용하거나, 여러 개의 컬럼을 합성하여 검색 시 속도 향상을 위해 사용한다.
- Domain Service WIKI
When a significant process or transformation in the domain is not a natural responsibility of an ENTITY or VALUE OBJECT, add an operation to the model as standalone interface decla…
- Development Design Documents WIKI
개발을 시작하기 전에, 개발 디자인 문서를 작성하고 팀원들과 공유, 리뷰하는 과정을 거치면 좋은 방향성을 잡을 수 있다. 또한 인수인계 과정에서도 코드와 개발 디자인 문서를 함께 전달하면 비교적 빠른 인수인계가 가능할 것이다.
- HTTP Headers WIKI
요청과 응답 양쪽에 모두 사용하는 헤더 필드, 헤더가 사용되고있는 컨텍스트에 따라 request header 또는 response header 로 분류된다. entity header 는 아니다.
- Incident, Defect tracking WIKI
시스템에 장애가 발생하면, 장애 보고서를 작성하게 된다. 그 후, 장애를 해결하고, 재발을 방지하기 위한 과정을 거치게 된다.
- Memory Leak WIKI
Memory Leak 이란 heap memory 에 할당된 객체들이 GC(Garbage Collector)에 의해 제거되지 않아, 불필요한 객체들이 메모리에 계속 남아있는 현상을 의미한다.
- TCP Performance WIKI
흐름 제어(Flow Control)는 송신자가 수신자에게 처리하지 못할 만큼의 많은 데이터를 전송하는 것을 미리 방지하는 매커니즘이다. 수신자가 데이터를 받지 못하는 경우는 보통 수신자가 다른 데이터를 처리하고 있거나, 밀려 있는 데이터가 많아서 버퍼 공간을 충분히 지정해주지 않는 경우다. 이러한 문제를 해결하기 위해 양…
- AWS Elastic Beanstalk WIKI
웹 애플리케이션을 서비스 할 때, NodeJS, Django 등의 플랫폼도 설치해야하고, 지속적으로 버전도 업데이트 해줘야하는 불편함이 있다. 또한 서버에 소스를 업로드 했는데 문제가 생기면 긴급하게 이전 버전으로 되돌려야 한다.
- Git Internal WIKI
objects 디렉터리는 실제 파일 안의 내용을 SHA-1 로 해시한 값에서 앞의 2자리를 폴더명으로, 나머지 38 자리를 파일 명으로 두어 식별자 형태로 사용한다.
- TCP Health Check WIKI
$ sar -n DEV,TCP,ETCP 5 Linux 5.3.0-1032-aws ( ip-192-168-0-207 ) 08/13/20 _x86_64_ ( 2 CPU ) 23:17:08 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 23:17:13…
- Web Page Test WIKI
CDN 덕분에 가까운데서 keep-alive 설정으로 connection 을 재사용하고 캐싱으로 요청 수를 최소화하여 gzip 압축을 통해 각 리소스의 전송 인코딩을 최적화하고 이미지를 압축하여 패킷 사이즈를 줄여 네트워크 비용을 줄일 수 있다.
- Internet Gateway vs NAT Gateway WIKI
Gateway 란, 서로 다른 통신망 혹은 프로토콜 간 네트워크 통신을 가능하게 하는 구성요소를 의미한다. 내부망에서 외부망간에 통신을 할 때는 서로 다른 통신망이므로 gateway 가 이를 중계한다.
- Reverse Proxy WIKI
WAS(Web Application Server) 는 애플리케이션 로직을 처리하는데 특화되어있다. WebServer 와 WAS 를 분리하는 이유는 WAS 에서 너무 많은 역할/책임을 담당하게 되면 가장 비싼 애플리케이션 로직이 정적 리소스 때문에 수행이 어려울 수 있다.
- Coroutines WIKI
코루틴은 컴퓨터 프로그램 구성 요소 중 하나로 비선점형 멀티태스킹(non-preemptive multitasking)을 수행하는 일반화한 서브루틴(subroutine)이다. 코루틴은 실행을 일시 중단(suspend) 하고, 재개(resume)할 수 있는 여러 진입 지점(entry point)을 허용한다.
- Docker Container WIKI
애플리케이션이 배포되는 환경을 서버에 직접 설치하여 구성할 경우, snowflake server 이슈에 직면한다. 서비스가 점차 확장되면서 기존에 사용하던 서버와 새로 구축한 서버간에 설정의 차이가 발생하고, 관리자의 인적요소에도 영향을 받을 수 있다. 그리하여 기존에는 스크립트를 활용한 자동화 방식부터, kickstar…
- HTTP status codes used by world-famous APIs WIKI
Used by either one of them : 200, 201, 202, 204, 301, 302, 303, 304, 307, 308, 400, 401, 402, 403, 404, 405, 406, 408, 409, 410, 411, 412, 413, 416, 420, 422, 429, 500, 501, 502, 5…
- Collision Domain WIKI
Collision Domain 이란, Half Duplex 로 다중접속환경(Multiple Access)를 구성했을 경우, 데이터를 동시에 전송했을 때 충돌이 일어날 수 있는 영역을 의미한다. 따라서 허브를 통해 MA 를 만들었을 경우, 허브는 1계층 장비이기 때문에 신호 증폭, 즉 Collision Domain 을 확장…
- The Road to the New Kotlin Compiler K2 WIKI
Kotlin Compiler 는 source code 를 JVM, JS, Native 라는 세가지의 대상 플랫폼에 사용할 수 있도록 각각의 machine code 로 컴파일 한다.
- Reactive Manifesto WIKI
소프트웨어 아키텍처란 소프트웨어를 구성하는 요소와 그 구성요소 간의 관계를 정의한 것이다. 또한 아키텍처를 정의하는 과정은 시스템 구축을 위한 여러 가지 비기능 요건(성능, 가용성, 보안, 유지보수성, 확장성 등)을 만족하는 다양한 해결 방법을 찾는 과정이다.
- Fault Tolerance WIKI
아마존 부사장인 버너 보겔스(Werner Vogels)는 소프트웨어는 모두 실패한다라고 말한바 있다. 실패에 빠르게 대응할 수 있도록 설계해야 한다는 말이다. 이를 내결함성(fault tolerance)이라고 한다.
- Business Agility WIKI
아마존, 넷플릭스, 우버 등 성공한 유니콘 기업들의 공통점은 자신만의 특화된 서비스를 제공하기 위해 빠르게 실행하며 사용자들의 피드백을 반영해 끊임없이 개선한다는 점이다. 이러한 특징을 비지니스 민첩성(business agility)이라고 한다.
- Execution of Java Program WIKI
컴파일이란 고수준 프로그래밍 언어(High-Level Programming Language, HLL)로 작성된 프로그램을 소스 코드에서 객체 코드(Object Code)로 변환하는 것을 의미한다.
- Environment Settings WIKI
이직을 하게 되면 대부분의 회사에서 첫날은 환경설정과 온보딩 등을 진행할 것이다. 본인만의 환경 설정 가이드가 있다면 쉽고 빠르게 환경 설정을 끝낼 수 있을 것이다.
- Async Annotation WIKI
public class Async { static ExecutorService executorService = Executors . newFixedThreadPool ( 5 ); public void asyncMethod ( final String message ) throws Exception { executorServ…
- Fundamental Object-Oriented Programming WIKI
OO design is more important than any particular implementation technology (such as J2EE, or even Java). And now important than even Spring or Hibernate. Good Programming practices…
- Software Development Methodology WIKI
대부분의 경우 테스트 가능한 애플리케이션을 목표로 할 경우 훌륭한 애플리케이션 코드를 작성하게 된다. - Rod Johnson
- Dependency Injection WIKI
IoC(Inversion Of Control)는 제어의 역전 이라고 한다. 제어의 역전이란 프로그램의 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것 을 의미한다.
- Concurrency WIKI
동시성 이슈란 코드 측면에서는 여러 스레드가 동시에 같은 인스턴스의 필드 값을 변경 하면서 발생하는 문제를 의미하며, 데이터베이스 측면에서는 스레드간 공유되는 컬럼의 값을 변경 하면서 발생하는 문제를 의미합니다. 핵심은 멀티 스레드 환경에서 공유 자원(shared resources) 을 변경 함으로써 발생되는 문제를 동시…
- DDD Meaning WIKI
DDD 는 도메인을 구성하는 각 하위 도메인(애플리케이션의 문제 공간(problem space)을 가리키는 DDD 용어)마다 도메인 모델을 따로 정의합니다. 하위 도메인은 비즈니스 능력과 같은 방법(비즈니스를 분석하고 상이한 전문 영역을 식별)으로 식별하므로 십중팔구 비즈니스 능력과 유사한 하위 도메인이 도출됩니다. 가령…
- The server setting guide using Apache and Tomcat in CentOS7 MEDIUM
CentOS7 에서 Apache, Tomcat 을 사용하여 운영 서버 환경을 설정하는 방법에 대해서 배워 보겠습니다.
- SI, Agency 에서 첫 시작을 하고 있는 개발자들을 위하여 MEDIUM
SI, Agency 회사에서 2년간 근무하면서 경험한 다양한 내용들을 공유하고자 합니다. SI, Agency 에서 첫 시작을 하고 있는 개발자들(혹은 시작 예정인 개발자들)이 웹 애플리케이션을 개발하거나 배포할 때 꼭 지켜야할 것들과 조언을 드리고자 글을 작성하게 되었습니다.
- DB 조건절에 Null 허용 컬럼 사용 시 주의할 점 MEDIUM
쿼리 조건절에 Null 허용 컬럼에 대한 존재여부를 판단하는 조건을 넣을 때 주의해야할 점에 대해서 배워보겠습니다.
- 웹은 어떻게 동작할까? (How Does The Web Work?) MEDIUM
본 게시글은 원작자(Chuck choi) 께 원문 How Does The Web Work ? 게시글 번역 허락을 구하고 작성한 글입니다. 번역 과정에서 원문 내용에 대한 첨삭이 일어났으므로 원문 내용과 다른 부분이 있을 수 있습니다. 또한, 본 게시글에 사용된 이미지의 사용 권한은 원작자에게 있습니다.
- Clean Code Guide For Beginners MEDIUM
클린 코드란 읽고 이해하기 쉬운 코드베이스 를 의미합니다. 우리는 개발 과정에서 개발만 하는것이 아닌 유지보수 활동도 같이합니다. 개발하는 동안 혹은 서비스 오픈 후에도 요구사항은 계속 바뀌며, 바뀐 요구사항을 적용하기 위해 자신의 코드를 수정하는 행위 자체가 유지보수하는 것입니다. 따라서, 유지보수성을 생각하는 개발자라…
- 시퀀스를 사용하여 경쟁 상태 피하기 MEDIUM
테이블의 PK 를 인조키로 잡고, PK 생성 방식을 MAX+1 이나 SEQUENCE 로 사용하는데, 두 방식의 차이점에 대해서 알아보고 경쟁 상태를 피하기 위해서 어떤 방식을 사용해야 하는지 배워보겠습니다.
- DB 인코딩이 US7ASCII 인 경우에 한글 처리 방법 MEDIUM
DB 인코딩이 US7ASCII 인 경우에 “뷁, 퉭” 과 같은 특이한 한글들은 물음표(?)로 저장이 되는데, 올바르게 한글로 DB 에 저장되게끔 인코딩 하는 방법에 대해서 배워보겠습니다.
- 화폐혁명을 읽고 정리한 글 MEDIUM
2021년 상반기 부터 비트코인 열풍이라고 할 정도로 많은 사람들이 암호화폐에 관심을 가졌습니다. 저 또한 관심이 생겨서 화폐혁명 이라는 책을 읽고 암호화폐와 가상화폐 그리고 블록체인에 대한 내용을 정리하여 공유해드리고자 합니다.
- 자바, 올바르게 정규식 패턴 사용하기 MEDIUM
자바에서 정규식을 사용할때 java.util.regex.Pattern 을 자주 사용합니다. Pattern 클래스를 이용한 정규식을 잘 못사용하면 성능이 많이 떨어질 수 있습니다. 따라서, 올바른 Pattern 클래스의 사용법에 대해서 배워보겠습니다.
검색어에 해당하는 글이 없습니다.
