JDK / JVM | JDK는 compiler·tools·runtime을 배포하고 JVM은 class-file 실행 모델을 구현한다. | Java 언어, JDK distribution, HotSpot 구현을 모두 JVM이라는 한 단어로 섞지 않는다. | Oracle · JVMS Java SE 21 ↗ |
|---|
Class loading / initialization | loading은 binary로 Class를 만들고 linking은 verify/prepare/resolve하며 initialization은 static initializer를 실행한다. | class가 load됐다는 사실만으로 static initialization이 끝났다고 보지 않는다. | Oracle · JLS 12장 · 실행 ↗ |
|---|
Visibility / atomicity / ordering | visibility는 write 관측, atomicity는 중간 상태 불가, ordering은 허용 재배치와 관측 순서의 문제다. | volatile 하나가 복합 read-modify-write 전체를 atomic하게 만들지 않는다. | Oracle · JLS 17장 · 스레드와 메모리 모델 ↗ |
|---|
Platform thread / virtual thread | platform thread는 OS thread와 밀접히 대응하고 virtual thread는 JVM이 carrier 위에 schedule하는 Java Thread다. | virtual thread를 CPU·DB connection·rate limit 증설로 번역하지 않는다. | OpenJDK · JEP 444 · Virtual Threads (Final) ↗ |
|---|
BeanDefinition / bean / target / proxy | definition은 recipe, bean은 container가 관리하는 instance, target은 실제 logic, proxy는 interceptor를 거치는 외부 reference다. | @Service annotation, 원본 class, runtime class를 같은 것으로 보지 않는다. | Spring · Spring Framework · 컨테이너와 Bean ↗ |
|---|
Starter / auto-configuration | starter는 dependency 묶음, auto-configuration은 조건 평가 후 import되는 configuration code다. | starter가 bean을 직접 실행하거나 모든 조건을 강제한다고 말하지 않는다. | Spring · Spring Boot · Auto-configuration ↗ |
|---|
Authentication / authorization | authentication은 주체 증명, authorization은 그 주체가 이 리소스에 이 행위를 할 수 있는지 판정한다. | 유효한 API key가 모든 order 접근 권한을 뜻하지 않는다. | Spring · Spring Security · Servlet Architecture ↗ |
|---|
Transaction / connection | transaction은 commit/rollback되는 작업 경계이고 connection은 DB와 통신하는 제한 자원이다. | thread, HTTP request, @Transactional method, connection lifetime이 항상 일치한다고 가정하지 않는다. | Spring · Spring · 선언적 트랜잭션 ↗ |
|---|
Flush / commit | flush는 persistence 변경을 SQL로 동기화하고 commit은 transaction 성공을 확정한다. | repository save가 즉시 flush 또는 commit을 뜻하지 않는다. | Hibernate · Hibernate ORM · Persistence Context ↗ |
|---|
Persistence context / database | persistence context는 managed entity의 identity·snapshot을 추적하는 application-side unit이고 DB가 최종 constraint와 durability를 제공한다. | first-level cache hit를 DB commit 또는 최신 외부 상태로 해석하지 않는다. | Hibernate · Hibernate ORM · Persistence Context ↗ |
|---|
Lazy / N+1 | lazy는 접근 시점까지 load를 미루는 전략이고 N+1은 한 query 뒤 반복 association query가 생기는 실행 형태다. | 모든 lazy가 N+1이거나 모든 eager가 해결책이라고 보지 않는다. | Hibernate · Hibernate ORM · Fetching ↗ |
|---|
Timeout / cancellation / deadline | timeout은 기다림 한도, cancellation은 중단 요청, deadline은 전체 작업이 끝나야 할 절대/전파 시간 경계다. | client timeout이 server side effect 취소를 증명하지 않는다. | Oracle · ExecutorService API ↗ |
|---|
Retry / recovery | retry는 같은 operation을 제한적으로 다시 시도하고 recovery는 durable state를 읽어 process restart 뒤에도 reconcile한다. | memory queue retry를 durable recovery로 부르지 않는다. | Oracle · ExecutorService API ↗ |
|---|
Idempotency / exactly-once | idempotency는 같은 logical request 반복이 허용된 동일 효과를 내도록 하는 contract다. | network와 process 실패가 있는 end-to-end 경로를 단일 lock으로 exactly-once라 부르지 않는다. | Spring · Spring · 선언적 트랜잭션 ↗ |
|---|
MVC / WebFlux | MVC는 Servlet blocking model, WebFlux는 reactive/non-blocking model이며 실제 driver와 call chain이 모델을 완성한다. | return type이 Mono라는 사실만으로 end-to-end non-blocking이라 하지 않는다. | Spring · Spring WebFlux · Reactive Core ↗ |
|---|
Liveness / readiness / startup | liveness는 restart 필요, readiness는 traffic 수신 가능, startup은 느린 시작 동안 liveness 개입을 늦추는 신호다. | 모든 dependency health를 세 probe에 똑같이 넣지 않는다. | Spring · Spring Boot Actuator · Kubernetes Probes ↗ |
|---|
Log / metric / trace / profile | log는 사건 record, metric은 집계 time series, trace는 요청 인과 경로, profile은 자원 소비 attribution이다. | 하나를 과적재해 다른 signal의 질문에 모두 답하게 하지 않는다. | Spring · Spring Boot · Observability ↗ |
|---|
Unit / integration / contract / load test | unit은 격리 규칙, integration은 실제 연결, contract는 경계 semantics, load는 명시 workload의 capacity를 묻는다. | 한 종류의 통과를 다른 종류의 증거로 확장하지 않는다. | Spring · Spring Framework Testing ↗ |
|---|