-
Null Safetyλ 무μμΈκ°? κ°λ λΆν° μ€μ μμκΉμ§
1. Null Safetyμ μ μ
**Null Safety(λ μμ μ±)**λ νλ‘κ·Έλ¨μ΄ μ€νλλ λμ€μ
null(νΉμnil,Noneλ± μΈμ΄λ³ λͺ μΉμ λ€λ₯΄μ§λ§ “κ°μ΄ μμ"μ μλ―Ένλ νΉμ κ°)μ μ°Έμ‘°ν¨μΌλ‘μ¨ λ°μνλ μ€λ₯λ₯Ό **μ»΄νμΌ νμ(μ½λ μμ± μμ )**μ 미리 λ°©μ§νλλ‘ μ€κ³λ μΈμ΄μ κΈ°λ₯ λλ νλ‘κ·Έλλ° μμΉμ λ§ν©λλ€.κ°μ₯ λνμ μΈ λ¬Έμ κ° λ°λ‘ NullPointerException(NPE) μ λλ€. μλ°μ μ°½μμ μ€ ν λͺ μΈ ν λ νΈμ΄(Tony Hoare)λ 1965λ Null μ°Έμ‘°λ₯Ό λ°λͺ ν κ²μ λκ³ μ€μ€λ‘ “10μ΅ λ¬λ¬μ§λ¦¬ μ€μ(Billion Dollar Mistake)” λΌκ³ ννν μ λλ‘, nullλ‘ μΈν λ²κ·Έλ μννΈμ¨μ΄ κ°λ° μμ¬μμ κ°μ₯ ννκ³ λΉμ©μ΄ ν° μ€λ₯ μ€ νλμμ΅λλ€.
-
Spring Boot 4.0μ΄ 2025λ 11μ 20μΌ GA(General Availability, μ μ μμ λ²μ ) λ‘ μΆμλμμ΅λλ€. Spring Boot 3.5.x λλΉ κ½€ ν° λ³νκ° μμ΄, μ£Όμ μ°¨μ΄μ μ μ©μ΄ μ€λͺ κ³Ό ν¨κ» μ 리νμ΅λλ€.
λ¦΄λ¦¬μ¦ & μ§μ μ£ΌκΈ°
Spring Boot 3.5.x Spring Boot 4.0 μν μμ λ²μ GA (2025.11.20 μΆμ) OSS μ§μ μ’ λ£ 2026λ 6μ νμ¬ νμ± μ§μ μ€ β οΈ Spring Boot 3.5.xλ 2026λ 6μμ μ§μμ΄ μ’ λ£λ©λλ€. νλ‘λμ μλΉμ€λΌλ©΄ λ§μ΄κ·Έλ μ΄μ κ³νμ 미리 μΈμλλ κ²μ΄ μ’μ΅λλ€.
Java & νλ«νΌ κΈ°μ€μ
- Java μ΅μ μꡬ λ²μ : 17 (3.5μ λμΌ)
- Java 25 first-class μ§μ μΆκ° β AOT μ»΄νμΌ λ° GraalVM λ€μ΄ν°λΈ μ΄λ―Έμ§κ° Java 25 κΈ°μ€μΌλ‘ ν μ€νΈλ¨
- Jakarta EE κΈ°μ€μ΄ 11λ‘ μν₯ β Hibernate 7.x, Bean Validation 3.1, Tomcat 11 νμ
β οΈ
javax.*μν¬νΈκ° μμ§ λ¨μμλ€λ©΄ μ λΆjakarta.*λ‘ κ΅μ²΄ν΄μΌ ν©λλ€. -
1. Charset vs Collation, λκ° λ€λ₯ΌκΉ?
Character Set(λ¬Έμμ ) μ “μ΄λ€ λ¬Έμλ€μ μ μ₯ν μ μλκ°"λ₯Ό μ μν©λλ€.
utf8mb4λ μ΄λͺ¨μ§ ν¬ν¨ λͺ¨λ μ λμ½λ λ¬Έμλ₯Ό μ΅λ 4λ°μ΄νΈλ‘ μ μ₯ν©λλ€.Collation(μ½λ μ΄μ ) μ “λ¬Έμλ€μ μ΄λ»κ² λΉκ΅νκ³ μ λ ¬νλκ°"λ₯Ό μ μν©λλ€.
'A' = 'a'μΈμ§,'Γ€'κ°'a'μ κ°κ² μ·¨κΈλλμ§, νκΈμ΄ μ¬μ μμΌλ‘ μ λ ¬λλμ§λ₯Ό κ²°μ νλ κ·μΉ μ§ν©μ λλ€.ν΅μ¬ κ΄κ³: λͺ¨λ Collationμ νΉμ Charsetμ μ’ μλ©λλ€.
utf8mb4_unicode_ciλutf8mb4charsetμμλ§ μ¬μ© κ°λ₯ν©λλ€.-- charsetκ³Ό collationμ κ΄κ³ νμΈ SHOW COLLATION WHERE Charset = 'utf8mb4' AND Collation LIKE '%general%';
2. Collation μ΄λ¦μ μ΄λ»κ² μ½λ?
Collation μ΄λ¦μ μ΅λ 4κ° ννΈλ‘ ꡬμ±λ©λλ€. κ·μΉμ μλ©΄ μ²μ 보λ μ΄λ¦λ λ°λ‘ ν΄μν μ μμ΅λλ€.
-
λΆμ° μμ€ν μμ μ¬λ¬ λμ μλ²κ° λμΌν μμμ λμμ μ κ·Όν λ, λ°μ΄ν°μ μΌκ΄μ±μ μ μ§νκΈ° μν΄ μ¬μ©νλ κΈ°μ μ΄ λ°λ‘ **λΆμ°λ½(Distributed Lock)**μ λλ€.
λ¨μΌ μλ² νκ²½μμλ
synchronizedλReentrantLockκ°μ μλ° νμ€ APIλ‘ λμμ±μ μ μ΄ν μ μμ§λ§, μλ²κ° μ¬λ¬ λλΌλ©΄ κ° μλ²μ λ‘컬 λ½μ μλ‘λ₯Ό μμ§ λͺ»ν©λλ€. μ΄λ λͺ¨λ μλ²κ° 곡ν΅μΌλ‘ λ°λΌλ³΄λ μΈλΆ μ μ₯μλ₯Ό νμ©ν΄ “λκ° μμμ μ μ νλμ§"λ₯Ό κΈ°λ‘νλ κ²μ΄ ν΅μ¬μ λλ€.
1. λΆμ°λ½μ΄ νμν μ΄μ
λμΌν DB λ μ½λμ λν΄ μ¬λ¬ μΈμ€ν΄μ€κ° λμμ μμ μμ²μ λ³΄λΌ λ, **λ μ΄μ€ 컨λμ (Race Condition)**μ΄ λ°μνμ¬ λ°μ΄ν°κ° κΌ¬μΌ μ μμ΅λλ€.
CreatedFri, 13 Feb 2026 11:14:05 +0900 -
Redisλ₯Ό νμ©ν λ©μμ§ μμ€ν μ λ κΈ°λ₯μ λͺ¨λ “λ°μ΄ν°λ₯Ό μ λ¬νλ€"λ λͺ©μ μ κ°μ§λ§, **μ² ν(Philosophy)**κ³Ό λ°μ΄ν° 보쑴 λ°©μμμ κ²°μ μ μΈ μ°¨μ΄κ° μμ΅λλ€.
νλ§λλ‘ μμ½νμλ©΄: **Pub/Subμ ‘λ°©μ‘’**μ΄κ³ , **Streamsλ ‘κΈ°λ‘μ΄ λ¨λ λ‘κ·Έ’**μ λλ€.
1. Redis Pub/Sub (Publish/Subscribe)
κ°μ₯ μ ν΅μ μΈ ννμ λ©μμ§ λͺ¨λΈμ λλ€. λ°μ μκ° λ©μμ§λ₯Ό λμ§λ©΄, κ·Έ μκ° μ°κ²°λμ΄ μλ λͺ¨λ μμ μμκ² μ€μκ°μΌλ‘ μ λ¬λ©λλ€.
- νλ°μ± (Fire and Forget): λ©μμ§λ₯Ό λ³΄λΈ ν μ΄λμλ μ μ₯νμ§ μμ΅λλ€. μμ μκ° μ€νλΌμΈ μνλΌλ©΄ κ·Έ λ©μμ§λ μμν μ¬λΌμ§λλ€.
- μ€μκ°μ±: μ§μ° μκ°μ΄ κ±°μ μμ΄ μ€μκ° μλ¦Όμ΄λ μ±ν μ μ ν©ν©λλ€.
- ν¬μμ(Fan-out): νλμ λ©μμ§λ₯Ό μμ² λͺ μ ꡬλ μμκ² λμμ λΏλ¦΄ λ λ§€μ° ν¨μ¨μ μ λλ€.
2. Redis Streams
Kafkaμ μ μ¬ν κΈ°λ₯μ Redisμ ꡬνν λͺ¨λΈμ λλ€. λ¨μ μ λ¬μ λμ΄ λ°μ΄ν°μ ‘μ΄λ ₯’μ κ΄λ¦¬ν©λλ€.
CreatedThu, 12 Feb 2026 11:14:05 +0900 -
Spring Boot(λλ Java)μμ Future ν¨ν΄μ λΉλκΈ° νλ‘κ·Έλλ°μ μν ν΅μ¬ λμμΈ ν¨ν΄μ λλ€. μ½κ² λ§ν΄, **“μ§κΈ λΉμ₯ κ²°κ³Όλ₯Ό μ€ μλ μμ§λ§, λ―Έλμ μ΄λ μμ μ μμ μ΄ μλ£λλ©΄ κ²°κ³Όλ¬Όμ λκ²¨μ£Όκ² λ€”**λ μ½μ(Promise)κ³Ό κ°μ΅λλ€.
1. Future ν¨ν΄μ ν΅μ¬ κ°λ
μΌλ°μ μΈ λκΈ°(Synchronous) λ°©μμμλ μμ μ΄ λλ λκΉμ§ μ€λ λκ° μ무κ²λ λͺ» νκ³ κΈ°λ€λ €μΌ ν©λλ€(Blocking). λ°λ©΄, Future ν¨ν΄μ μ¬μ©νλ©΄ μμ μ λ³λμ μ€λ λμ λ§‘κΈ°κ³ λ©μΈ μ€λ λλ μκΈ° ν μΌμ κ³μν μ μμ΅λλ€.
μ£Όμ νΉμ§
- λΉμ°¨λ¨(Non-blocking): κ²°κ³Όκ° λμ¬ λκΉμ§ κΈ°λ€λ¦¬μ§ μκ³ λ€λ₯Έ μμ μ μνν μ μμ΄ ν¨μ¨μ μ λλ€.
- μ§μ° μ€ν: κ²°κ³Όκ° μ€μ λ‘ νμν μμ κΉμ§ λ°μ΄ν° κ³μ°μ λ―Έλ£° μ μμ΅λλ€.
- κ²°ν©μ±: μ¬λ¬ λΉλκΈ° μμ μ κ²°κ³Όλ₯Ό ν©μΉκ±°λ, μμ°¨μ μΌλ‘ μ€ννλ νλ¦μ λ§λ€ μ μμ΅λλ€.
2. Spring Bootμμμ ꡬν λ°©μ
Spring Bootμμλ μ£Όλ‘
CompletableFutureμ@Asyncμ΄λ Έν μ΄μ μ μ‘°ν©νμ¬ μ΄ ν¨ν΄μ ꡬνν©λλ€.CreatedTue, 27 Jan 2026 11:25:18 +0900