세 가지 타입 시스템과 런타임 — JVM, CPython, Go 컴파일러
Java 는 강타입 + JVM 바이트코드 + JIT 의 적응형 최적화. Python 은 동적 타입 + 인터프리터 + 선언적 type hint. Go 는 정적 + structural typing + 단일 컴파일러. 타입 시스템 결정이 런타임 매커니즘을 결정한다.
Java 는 강타입 + JVM 바이트코드 + JIT 의 적응형 최적화. Python 은 동적 타입 + 인터프리터 + 선언적 type hint. Go 는 정적 + structural typing + 단일 컴파일러. 타입 시스템 결정이 런타임 매커니즘을 결정한다.
CPython 의 GIL 은 멀티스레드 CPU bound 를 차단하고 우회법을 강제한다. Java 는 OS 스레드 1:1 의 비용을 Java 21 virtual thread 로 우회해 thread-per-request 를 살렸다. Go 는 처음부터 M:N 스케줄러로 goroutine 을 경량화했다. 세 모델이 같은 백엔드 워크로드에서 다른 결정으로 이어진다.
세 언어 모두 GC 를 쓰지만 우선순위가 다르다. Java 는 generational + region(G1/ZGC), Python 은 reference counting + cyclic detector, Go 는 concurrent tri-color mark-sweep. 각 GC 가 무엇을 포기했는지가 운영 특성을 가른다.
함수에 객체를 넘기는 동작을 ‘참조 전달’ 이라 부르지만 메모리에서는 모두 값 복사다. Java reference value 복사, Python call by sharing, Go 구조체 헤더와 escape analysis. 무엇이 복사되느냐가 다를 뿐 메커니즘은 같다.
실무에서 깊이 다루기 어려웠던 Kafka와 Hexagonal Architecture를 채팅 시스템 개인 프로젝트로 직접 설계하고 구현한 과정의 기록.
Spring MVC는 요청당 스레드를 할당한다. I/O 대기가 길어지면 스레드가 묶인다. WebFlux는 이벤트 루프 기반 논블로킹 모델로 이 문제를 해결한다. MVC와의 구조적 차이, Reactor 패턴, 선택 기준을 정리한다.
철도산업정보센터 주최 공공데이터 활용 대회. 지하철 역의 숨은 휴식 공간을 알려주는 Android 앱을 3주간 3명이 만든 기록.