새로운 포스트
-
Kotlin
[Kotlin] 코틀린 제대로 활용하기 1편 - 위임 프로퍼티: by 키워드로 lazy부터 맵 위임까지 이해하기
-
Kotlin
[Kotlin] 코틀린 온보딩 11편 - 널이 될 수 있는 값: null 안전성 한 번에 정리하기
-
Kotlin
[Kotlin] 코틀린 온보딩 10편 - object와 companion object: 싱글톤부터 value class까지 이해하기
-
Kotlin
[Kotlin] 코틀린 온보딩 9편 - 생성자: 정의와 초기화를 한 번에 이해하기
-
Kotlin
[Kotlin] 코틀린 온보딩 8편 - 클래스 계층 구조: 인터페이스부터 sealed class까지 한눈에 정리하기
-
Kotlin
[Kotlin] 코틀린 온보딩 7편 - 확장 함수: 바이트코드로 확장 프로퍼티까지 이해하기
-
Kotlin
[Kotlin] 코틀린 온보딩 6편 - 함수 호출: 이름 있는 인자부터 infix까지 이해하기
-
Kotlin
[Kotlin] 코틀린 온보딩 5편 - 루프와 예외 처리: for/while과 try-catch
다른 사람들이 관심있어한 포스트
-
MySQL [MySQL] 고급 최적화 (2) - 조인은 어떻게 실행되는가: Hash Join과 세 전략의 종합 비교 들어가며[이전 편: BNL, MRR & BKA]에서는 Nested Loop Join의 기본적인 한계, 그리고 그 한계를 각자 다른 방식으로 풀어낸 Block Nested Loop(BNL)와 BKA(+ MRR)를 다뤘습니다.https://dmoritle.tistory.com/266 [MySQL] 고급 최적화 (1) - 조인은 어떻게 실행되는가: BNL, MRR & BKA들어가며지금까지 이 시리즈에서는 MySQL 서버의 구조와 InnoDB의 내부 동작을 다뤘습니다. 서버 레이어의 커넥션 처리와 쿼리 처리 파이프라인, 그리고 버퍼 풀과 인덱스 구조, 로그 시스템까지 Indmoritle.tistory.com 두 전략 모두 "드리븐 테이블에 대한 접근을 어떻게 다룰 것인가"에 초점을 맞추고 있었죠. 그리고 이전 ..
-
Spring Security [Spring Security] Spring Security 환경에서 CORS 제대로 이해하고 설정하기 CORS란?CORS(Cross-Origin Resource Sharing)는 브라우저가 현재 페이지의 출처(Origin)와 다른 출처로 HTTP 요청을 보낼 때 적용되는 보안 정책이다. 여기서 Origin이란 프로토콜 + 호스트 + 포트의 조합을 말하며, 이 중 하나라도 다르면 Cross-Origin으로 간주된다. 예를 들어 프론트엔드가 http://localhost:3000, 백엔드가 http://localhost:8080이면 포트가 다르므로 Cross-Origin이다. 중요한 점은 CORS는 서버가 아닌 브라우저가 적용하는 정책이라는 것이다. 서버 간 통신이나 Postman 같은 도구에서는 CORS가 적용되지 않는다. 브라우저가 서버의 응답 헤더를 확인해서 "이 Origin에서의 요청이 허용됐는가?".. -
Hexagonal [Hexagonal] 헥사고날 아키텍처 - 왜 쓰는지부터 제대로 이해하기 들어가며헥사고날 아키텍처(Hexagonal Architecture)를 처음 접하면 흔히 이렇게 이해합니다."도메인 로직과 기술적인 구현(DB, 프레임워크)을 분리하려는 아키텍처구나."틀린 말은 아닙니다. 하지만 이것은 헥사고날 아키텍처를 적용했을 때 얻는 결과이지, 아키텍처의 목적이 아닙니다.목적을 결과로 오해하면, 구조는 따라하더라도 "왜 이렇게 해야 하는가"를 설명하지 못하게 됩니다. 어디까지 분리해야 하는지, 어떤 경우에 단순화해도 되는지 스스로 판단하기도 어려워집니다. 이 글에서는 헥사고날 아키텍처가 왜 등장했는지, 무엇을 해결하려는 것인지를 처음부터 차근차근 살펴보겠습니다. 1. 문제 제기 — 레이어드 아키텍처에서 생기는 문제헥사고날 아키텍처를 이해하려면, 그 이전에 널리 쓰이던 레이어드 아키텍..
-
Java [Java] volatile 키워드 완전 정리 - JMM부터 하드웨어 동작까지 1. Java Memory Model(JMM)과 메모리 구조Java에서 멀티스레드 프로그래밍을 이해하려면 먼저 JMM이 정의하는 메모리 구조를 알아야 한다.JMM은 메인 메모리(Main Memory) 와 작업 메모리(Working Memory) 라는 두 가지 논리적 영역을 정의한다.메인 메모리: 모든 스레드가 공유하는 영역. 인스턴스 변수, 클래스 변수 등 공유 데이터가 저장된다.작업 메모리: 각 스레드가 독립적으로 가지는 영역. 메인 메모리의 값을 복사해서 사용한다.각 스레드는 메인 메모리에 직접 접근하지 않고, 자신의 작업 메모리에 복사된 값을 읽고 쓴다. 그리고 필요한 시점에 메인 메모리와 동기화한다. 여기서 핵심은, 작업 메모리는 논리적 개념이라는 것이다. 실제 하드웨어에서는 CPU 레지스터와 캐..
-
Spring [Spring] Spring MVC + Tomcat vs Spring WebFlux + Netty, 그리고 Virtual Thread까지 Spring 기반 웹 애플리케이션의 동시성 모델을 비교하고, JDK 21의 Virtual Thread가 가져온 패러다임 변화를 정리합니다.1. 두 가지 동시성 모델Spring MVC + Tomcat: Thread-per-RequestSpring MVC는 thread-per-request 모델을 사용한다. 요청이 들어오면 Tomcat의 스레드 풀(기본 200개)에서 스레드 하나를 할당하고, 해당 스레드가 컨트롤러 → 서비스 → DB 호출까지 전부 담당한다. DB I/O 같은 블로킹 작업이 발생하면 해당 스레드는 응답이 올 때까지 대기(blocking) 상태에 놓인다. Spring WebFlux + Netty: Event LoopSpring WebFlux는 Event Loop 모델을 사용한다. Netty의 ..