[Java] 동시성 제어가 가능한 CopyOnWriteArrayList와 일반 ArrayList의 차이점
·
JAVA
동시성 제어가 가능한 List인 CopyOnWriteArrayList를 알아보자📌 서론동시성 제어가 가능한 HashMap인 ConcurrentHashMap에 대해 공부하고 사용하다 보니 List에도 동시성 제어가 가능한 클래스가 존재할 것이라는 생각이 들었고 열심히 찾아본 결과 java.util.concurrent 패키지 내부에 CopyOnWriteArrayList라는 동시성 제어가 가능한 List가 존재한다는 것을 알아냈다. 이번 포스트를 위해 우리가 개발할 때 일반적으로 사용하는 ArrayList와 동시성 제어를 해준다는 CopyOnWriteArrayList를 스프링에서 사용해 보면서 동시성 제어가 어떻게 되는 것이고 성능은 어떨지 알아보자. SpringBootTest와 locust를 사용한 동시성..
[Java] ConcurrentHashMap의 동작원리 (CAS 기법)
·
JAVA
Java의 ConcurrentHashMap을 이해해 보자📌 서론Java에서 일반적인 HashMap을 사용하면 동시성 문제가 발생할 수 있다. HashMap은 멀티스레드 환경에서 안전하지 않기 때문에, 여러 스레드가 동시에 HashMap을 수정하려고 하면 데이터 불일치, 무한 루프, 또는 예기치 않은 결과가 발생할 수 있다. 이 문제를 해결하기 위한 방법 중 하나로 ConcurrentHashMap을 사용할 수 있다. ConcurrentHashMap은 멀티스레드 환경에서 안전하게 동작하도록 설계된 클래스다. 내부적으로 분할 잠금 메커니즘(lock stripping)과 CAS(Compare-And-Swap) 같은 비동기적인 동시성 제어 기법을 사용하여 여러 스레드가 동시에 데이터를 읽고 쓰는 상황에서도 안전..
[Java] HTTP 서버 만들기: GET, POST, PUT 요청별 처리
·
JAVA
자바로 GET, POST, PUT 요청에 대해 각각 처리가 가능한 HTTP 서버를 만들어 보자 📌 서론 저번 포스트에서 Java만을 사용하여 간단하게 HTTP 서버를 구축해 봤는데 이번에는 그 서버 코드를 고도화시켜서 GET, POST, PUT 요청에 따라 유형별로 각각 처리하도록 만들어 봤다. 이전에 작성한 HTTP 서버를 확인하려면 아래의 포스트를 보고 오는 것을 추천한다.👇🏻👇🏻 [Java] HTTP 서버 구현: postman과 자바 HttpClient를 사용한 요청 스프링을 사용하지 않고 순수 자바로 HTTP 서버를 구현해 보자 📌 서론 개발을 하다 보면 필수적으로 http 프로토콜을 사용하게 된다. 만약 스프링을 통해 백엔드 개발을 한다면 @Controller와 @Request curiousj..
[Spring] @Component와 @Bean의 차이점
·
Spring 기초/Spring 기초 지식
Spring에서 @Bean과 @Component의 차이와 최적의 활용 방법을 알아보자 아래의 포스트를 통해 @Bean과 @Component의 기본 지식을 보충하고 오시는것을 추천합니다! Spring 빈 등록: @Bean의 기본과 활용 이번 포스트에는 스프링에서 가장 중요한 빈 등록 방식 @Bean에 대해 소개한다. 📌 서론 Spring Framework에서 @Bean은 매우 중요한 개념이다. 이는 개발자가 직접 제어할 수 없는 외부 라이브러리나 복 curiousjinan.tistory.com Spring의 빈 등록: @Component 이번 포스트에서는 @Component를 사용하여 스프링 빈 등록하는 방법을 알아보자 📌 서론 Spring Framework의 @Component 어노테이션은 클래스 인스턴..
[Spring] @Bean을 사용한 스프링 빈 등록
·
Spring 기초/Spring 기초 지식
이번 포스트에는 스프링에서 가장 중요한 빈 등록 방식 @Bean에 대해 소개한다. 📌 서론 Spring Framework에서 @Bean은 매우 중요한 개념이다. 이는 개발자가 직접 제어할 수 없는 외부 라이브러리나 복잡한 구성이 필요한 객체를 스프링의 관리하에 두기 위해 사용되는 어노테이션이다. @Bean을 이해하고 올바르게 사용하는 것은 Spring 기반 애플리케이션의 효율적인 관리와 유연한 구성을 위해 필수적이다. 이를 통해 개발자는 스프링 컨테이너가 관리하는 빈(Bean) 객체를 생성하고, 이를 애플리케이션 전반에서 재사용할 수 있다. @Bean의 이해는 Spring의 의존성 주입(Dependency Injection) 기능을 깊이 이해하는 데에도 중요하며, 이는 애플리케이션의 결합도를 낮추고 유지..
[Spring] Maven이란?
·
Spring 기초/Spring 설정
Maven이 뭘까? 지금부터 알아보자 📌 서론 이전 회사에서 작업을 할 때 SpringFramework3.x.x 버전을 사용하고 Maven을 사용했던 기억이 있다. 이때 첫 프로젝트를 하면서 요즘에는 다 Gradle을 사용하는 추세로 넘어온 것 같은데 Maven을 사용해서 신기했었던 경험이 있다.(신입이었어서 그랬던 것도 있지만 프로젝트 자체가 10년이 넘었다.) 이렇게 퇴사를 하고 잊고 있다가 갑자기 요즘 Gradle을 사용해서 프로젝트의 빌드를 수행하다가 Build.gradle 파일 안에서 의존성을 추가할 MavenBom이라는 코드가 보여서 갑자기 든 생각이 Maven은 왜 만들어졌을까?라는 의문에 정리를 시작했다. 1. Maven 소개 Maven이란 무엇인가? Maven은 Apache Softwar..
Spring Boot: 필터에서 doFilter와 FilterChain이란?
·
Spring 기초/Spring 기초 지식
이번 포스트에서는 Spring Filter에 대한 심화적인 이해를 해보도록 하자 📌 서론 Spring Framework에서 필터는 웹 애플리케이션의 요청과 응답을 조작하는 강력한 도구이다. 필터는 DispatcherServlet으로 가는 요청의 사전 처리와 후처리를 담당한다. 이를 통해 요청과 응답에 대한 중앙집중식 처리가 가능해진다. 필터는 doFilter() 메서드를 통해 요청을 가로채고, 필요한 로직을 실행한 뒤, 요청을 다음 목적지(다른 필터 또는 서블릿)로 전달한다. 지금부터 필터의 핵심 메서드인 doFilter에 대해 상세히 살펴보고, 실제 HTTP 요청 처리 예시를 통해 그 사용법을 알아보자 필터에 대한 자세한 내용은 아래의 포스트를 보고오자 Spring - Filter완전 정복: 웹 애플리..
[Spring] 스프링은 추상화를 어떻게 적용했을까?
·
Spring + Java
스프링은 추상화를 어떻게 사용할까? 간단한 예시로 알아보자 📌 서론 이번 포스트는 실제로 스프링을 개발하면서 자주 사용하게 되는 기능들을 기준으로 정리하였으며 쉽게 이해하기 위해 간단한 코드로 내용을 구성하였다. 만약 추상화의 개념이 부족하다면 아래의 글을 읽어보는것을 추천한다. [Spring] 추상화란 무엇인가? 자바의 "추상화"의 개념을 알아보고 스프링을 이것을 어떻게 사용하는지 알아보자 📌 서론 항상 추상화를 사용하고 있지만 누군가 "그래서 대체 추상화가 뭔데?"라고 물어볼때마다 바로바로 떠 curiousjinan.tistory.com 1. Java의 추상화 추상 클래스와 추상 메서드 Java에서는 abstract 키워드를 사용하여 추상 클래스와 추상 메서드를 정의할 수 있다. 추상 클래스는 인스턴..