동시성 컬렉션

동시성 컬렉션이 필요한 이유 – 스레드 안전성 문제 java.util 패키지의 ArrayList, LinkedList, HashSet, HashMap과 같은 일반적인 컬렉션들은 스레드 세이프(Thread Safe)하지 않다. 즉, 여러 스레드가 동시에 접근할 때 데이터 손상이나 예상치 못한 결과를 초래할 수 있다 SimpleList SimpleListMain BasicList의 add() 메서드…

생산자 – 소비자 문제와 BlockingQueue

문제 정의 생산자 – 소비자 문제는 한정된 크기의 버퍼를 통해 데이터를 주고 받는 멀티스레드 환경에서 발생하는 동시성 문제이다 핵심 문제 해결 방안의 진화 단순 synchronized (문제 발생) sleep()으로 대기 (더 심각한 문제) wait/nofity 사용 (비효율 존재) Lock + Condition으로 개선…

내장 톰캣 – 빌드와 배포

내장 톰캣(Embedded Tomcat)은 애플리케이션에 톰캣 서버를 라이브러리 형태로 포함하여 빌드하고 배포하는 방식이다. 이를 통해 애플리케이션 단독으로 실행 가능한 패키지를 만들 수 있다 Jar 파일 빌드의 기본 원칙 이 buildJar 태스크를 실행하면 build/libs 디렉토리에 embed-0.0.1-SNAPSHOT.jar와 같은 형태로 JAR 파일이 생성된다 jar…

내장 톰켓(Embedded Tomcat)을 활용한 웹 애플리케이션 구동

내장 톰캣을 라이브러리 형태로 애플리케이션에 포함하여, main() 메서드 실행만으로 웹 서버를 직접 구동할 수 있게 해주는 기능이다. 이를 통해 개발자는 별도의 WAS 설치나 복잡한 설정 없이 순수 자바 코드로 서블릿 및 스프링 MVC 애플리케이션을 편리하게 실행할 수 있다. 스프링 부트가…

외장 서버(WAR) 방식의 단점과 내장 서버(JAR)의 등장

전통적인 웹 애플리케이션 개발 방식은 톰캣 같은 WAS를 별도로 설치하고 WAR 파일을 배포하는 외장 서버 방식이었다. 이 방식은 복잡한 설치 및 배포 과정, 개발 환경 설정의 어려움, 버전 관리의 불편함 등 여러 단점을 가졌다. 이러한 불편함을 해결하기 위해 WAS를 애플리케이션…

스프링 컨테이너와 서블릿 컨테이너

스프링 애플리케이션의 핵심인 스프링 컨테이너를 서블릿 컨테이너(WAS) 위에 수동으로 구축하는 과정은 스프링 MVC의 동작 원리를 이해하는 데 중요하다. 이 과정에는 스프링 컨테이너 생성, 컨트롤러 빈 등록, 그리고 서블릿 컨테이너에 DispatcherServlet을 등록하여 스프링 MVC와 연동하는 작업이 포함된다. 스프링 MVC는 이러한 복잡한…

웹 애플리케이션 서버와 서블릿 컨테이너

과거 웹 애플리케이션 개발은 WAS(웹 애플리케이션 서버)를 직접 설치하고 WAR 파일을 배포하는 방식이었지만, 스프링 부트의 등장으로 WAS가 애플리케이션 내부에 포함(내장 톰캣)되어 JAR 파일 하나로 쉽게 실행하는 방식으로 발전했다. 이러한 변화는 개발 편의성을 극대화하며, 서블릿 컨테이너의 초기화 과정을 자바 코드로 직접…

Kotlin – Scope Function

코틀린을 배우기 위해서 인프런에서 강의를 구매하고 코틀린과 친해지고 기본기를 다지기 위해서 공부하는 중이다. 글 내용은 Kotlin의 Scope Function이고 최태현님의 자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide) 강의에 소금을 조금 친 내용이다 코드를 간결하게 해주는 Scope Function 코틀린의 Scope Function은 일시적인…

Kotlin – 여러 가지 면모

코틀린을 배우기 위해서 인프런에서 강의를 구매하고 코틀린과 친해지고 기본기를 다지기 위해서 공부하는 중이다. 글 내용은 Kotlin의 이모저모(사물의 이런 면 저런 면)이고 최태현님의 자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide) 강의에 소금을 조금 친 내용이다 Type Alias 함수 타입 축약 기존…

도메인 모델과 애그리거트 설계

도메인 모델 설계 시, 관련된 엔티티들을 묶어 애그리거트(Aggregate)로 정의하면 데이터 변경의 일관성을 유지하고 모델의 복잡성을 줄일 수 있다. 애그리거트는 도메인 주도 설계(DDD)의 핵심 구성 요소 중 하나로 여러 객체를 하나의 논리적인 단위로 취급하여 변경 시 전체 데이터의 일관성을 보장하는 데…