WebFlux 적용하기 (1) Java I/O 와 NIO(New I/O, Non-Blocking I/O)
2023. 2. 14. 19:10
Spring Boot/WebFlux
내 프로젝트를 WebFlux 로 Async-Non Blocking 하게 만들어보자! WebFlux 는 Reactive Programming 을 지원하는 프레임워크로, 디폴트로 Netty 라는 NIO 클라이언트 서버 프레임워크를 사용합니다. Webflux 적용하기 첫 번째 포스팅으로 Java I/O 와 NIO 를 알아보도록 하겠습니다. 느린 Java 의 I/O 자바에 New I/O 가 추가 된 이유는 무엇일까요? 그 이유는 기존 I/O 의 속도가 느리기 때문입니다. Java 의 I/O 가 어떤 이유로 느린지, 그리고 NIO 는 어떤 점을 개선했는지 알아봅시다. Java I/O 의 동작 원리(파일 읽기) 프로세스는 커널에 read() 시스템 콜을 통해 버퍼를 채우도록 요청합니다. read() 가 호출되면 커..
[Spring Boot] Tomcat 알아보기 (3) Tomcat Thread Pool
2023. 1. 30. 16:09
Spring Boot
스프링은 어떻게 동시에 수많은 요청을 처리할까요? 지난 포스팅에서는 Servlet Container 와 Java Thread Pool 에 대해 알아보았습니다. 더보기 [Spring Boot] Tomcat 알아보기 (1) Servlet 과 Servlet Container [Spring Boot] Tomcat 알아보기 (2) Java Thread Pool 이번 포스팅에서는 동시 요청을 처리하는 Tomcat 의 Thread Pool 에 대해 알아보겠습니다. Tomcat 의 Thread Pool 지난 포스팅에서 알아본 것처럼, Spring 에서 클라이언트의 요청은 Tomcat 과 같은 Servlet Container 가 처리합니다. Tomcat 의 Thread Pool 의 구조는 Java Thread Pool ..
[Spring Boot] Tomcat 알아보기 (2) Java Thread Pool
2023. 1. 19. 22:47
Spring Boot
스프링은 어떻게 동시에 수많은 요청을 처리할까요? 지난 포스팅에서는 동시 요청 처리에 대해 알아보기 전에 Tomcat 의 Servlet Container 역할을 살펴보았습니다. 더보기 [Spring Boot] Tomcat 알아보기 - (1) Servlet 과 Servlet Container 이번 포스팅에서는 Thread Pool 의 개념과 Tomcat 에서 유사하게 사용되는 Java 의 Thread Pool 클래스에 대해 알아보도록 하겠습니다. Tomcat 알아보기 두 번째 포스팅 Java Thread Pool 입니다. Thread Pool Java 에서 유저 수준 스레드는 커널 수준 스레드에 매핑됩니다. (참고) [Java] JVM 알아보기 - (6) Thread, Java Thread Model 그렇..
[Spring Boot] Tomcat 알아보기 (1) Servlet 과 Servlet Container
2023. 1. 17. 13:46
Spring Boot
스프링 부트는 어떻게 동시에 수많은 요청을 처리할까요? Tomcat 알아보기 첫 번째 포스팅으로 Servlet 과 Servlet Container 에 대해 알아보겠습니다. Servlet 자바 docs 에서 정의하는 서블릿은 다음과 같습니다. A servlet is a small Java program that runs within a Web server. Servlets receive and respond to requests from Web clients, usually across HTTP, the HyperText Transfer Protocol. 서블릿은 웹 서버 내에서 실행되는 작은 자바 프로그램입니다. 서블릿은 일반적으로 HTTP 를 통해 웹 클라이언트의 요청을 수신하고 응답합니다. 우리는 웹..
[Spring Boot] DTO 는 왜, 언제 사용할까?
2023. 1. 3. 23:19
Spring Boot
오늘은 Spring Boot 프로젝트를 시작할 때마다 고민의 대상이 되는 DTO 에 대해 알아보도록 하겠습니다. 매번 DTO 의 필요성에 대해 깊이 고민하지 않고 사용해서 그 기준을 잡기가 어려웠는데요. 이번 포스팅을 통해 DTO 의 책임과 역할을 이해하고 저만의 사용 가이드라인을 만들어보도록 하겠습니다. DTO (Data Transfer Object) 우선, DTO 의 정의를 간략하게 알아보겠습니다. DTO는 프로세스 간에 데이터를 전달하는 용도의 객체입니다. 비즈니스 로직을 포함하지 않는 데이터를 전달하기 위한 단순한 객체 를 뜻합니다. MVC 패턴에서는 주로 Client 와 Controller 사이에서 DTO 가 사용됩니다. 저는 보통 Controller 에서는 DTO 로 데이터를 전달받고, 애플리..
[Spring Boot] Maven Multi Module
2022. 12. 16. 01:41
Spring Boot
안녕하세요. 이번 포스팅에서는 메이븐으로 멀티 모듈 프로젝트를 구성하는 방법에 대해 알아보겠습니다. 먼저 Maven과 Multi Module이 무엇인지 알아보고, 그 후에 인텔리제이 IDE 를 사용하여 프로젝트를 구성해보겠습니다. Apache Maven 우리는 소스 코드를 작성하고 코드를 실행하기 위해 JAR 나 WAR 등의 파일을 만든다. 이처럼 소스 코드 파일 및 리소스를 컴퓨터에서 실행 가능한 산출물(Artifact)로 만드는 일련의 과정을 Build 라고 한다. 빌드는 전처리, 컴파일, 패키징, 테스팅, 배포 등의 여러 과정으로 이루어지지만 개발자들은 Maven 과 같은 Build Tool 을 사용하여 한 번의 클릭으로 실행 파일을 얻을 수 있다. Project Object Model (POM) ..
[Java] JVM 알아보기 - (6) Thread, Java Thread Model
2022. 12. 5. 14:11
Java
내가 만든 자바 코드가 어떤 과정으로 실행되는지 알아보기 위한 "JVM 알아보기" 마지막 포스팅입니다. 이번 포스팅에서는 Thread 와 Java Thread Model 에 대해 알아보겠습니다. Thread 우리가 자바 프로그램을 실행하면 JVM 프로세스가 실행되고, JVM 프로세스 안에서 GC 를 포함한 여러 개의 스레드가 실행된다. 그리고 각 스레드마다 Java Stack, PC Register, Native Method Stack 이 존재한다. 이렇게 자바는 동일한 메모리를 읽지만 각각 작업을 수행하는 스레드들, 즉 멀티 스레드를 통해 동시에 여러 작업을 수행한다. 자바는 왜 프로세스를 여러 개 추가하지 않고 스레드라는 개념을 만든 것일까? 그 이유는 프로세스를 생성하려면 많은 시간과 자원이 필요하..
[Java] JVM 알아보기 - (5) JVM GC 유형, G1 GC
2022. 11. 29. 22:06
Java
내가 만든 자바 코드가 어떤 과정으로 실행되는지 알아보기 위한 "JVM 알아보기" 다섯 번째 포스팅입니다. 이번 포스팅에서는 JVM GC의 여러 유형에 대해 살펴보고, 그 중 G1 GC 에 대해 자세히 알아보겠습니다. 지난 포스팅에서 이야기한 것과 같이 GC 에는 여러 유형이 있다. 그 중 몇 가지를 알아보도록 하자. Serial GC 직렬 GC 단일 스레드로 작동하는 가장 간단한 GC 다. 따라서 다중 스레드 프로그램에서는 사용하지 않는다. 단일 스레드를 사용하면 여러 스레드 간에 통신 오버헤드가 없기 때문에 효율성이 높다. Young 영역의 GC 는 지난 포스팅에서 설명한 방식과 같고, Old 영역의 GC 는 Mark-and-Sweep-Compact 알고리즘을 사용한다. 메모리가 적고 CPU 코어의 ..