분류 전체보기 (28) 썸네일형 리스트형 Docker Docker는 전통적인 하이퍼바이저 기반 가상머신(VM)과 달리, 리눅스 커널이 제공하는 다양한 기능을 조합해 호스트 커널을 공유하면서도 독립된 프로세스 환경을 제공하는 경량 컨테이너 플랫폼이다. OS 수준의 가상화(OS-level virtualization)라고 부르며, 프로세스 격리와 자원 제어만으로 빠르고 효율적인 애플리케이션 배포·운영을 가능케 한다.컨테이너 vs VM 가상머신 (VM) 컨테이너(Docker) 커널각 VM마다 별도 커널과 OS호스트 커널을 공유가동 시간수십 초 이상 (부팅 필요)수 밀리초~수 초 (프로세스로 실행)오버헤드메모리·디스크·CPU 오버헤드 큼최소한의 사용자 공간 레이어만 추가격리 수준꽉 막힌 격리네임스페이스·Cgroups 기반 격리컨테이너는 결국 “독립된 프로세스”이.. [Spring Boot] refreshVersions로 gradle 설정하기 멀티 모듈 프로젝트를 생성할 때, buildSrc를 활용한 Gradle 파일 모듈화는 거의 필수적이다.이 과정에서 더욱 편리한 관리가 가능하도록 refreshVersions을 활용한 Gradle 파일 모듈화 및 버전 관리를 적용해보자. plugins { // See https://jmfayard.github.io/refreshVersions id 'de.fayard.refreshVersions' version '0.60.5'}먼저 settings.gradle에서 rootProject.name 위에 refreshVersions 사용을 위한 plugins를 추가하자.더 자세한 내용을 보고 싶으면 해당 링크를 참조하면 된다. 추가를 하고 gradle 새로고침을 한 후 조금만 기다려보면version.. [Java] Collection 과 Collections Java에서 Collection과 Collections는 매우 유사한 이름을 가지고 있어 헷갈리기 쉽다. 하지만 두 개념은 서로 다른 역할을 하며, 이를 정확히 이해하는 것이 중요하다. 이번 글에서 Collection과 Collections의 차이를 살펴보자.Collection이란?Collection은 Java 컬렉션 프레임워크의 최상위 인터페이스로, 여러 개의 객체를 담을 수 있는 컨테이너 역할을 한다. Collection 인터페이스를 직접 구현하는 경우는 거의 없으며, 주로 이를 상속한 하위 인터페이스(List, Set, Queue 등)를 사용한다.Collection 인터페이스의 주요 메서드public interface Collection extends Iterable { int size(); .. Spring Boot - ResponseBodyAdvice를 활용한 공통 응답 처리 Spring Boot에서 API의 응답을 표준화하거나, 공통 데이터를 추가하고 싶을 때는 @ControllerAdvice를 사용하여 응답을 가로채 변형할 수 있다.이때 핵심적인 역할을 하는 것이 바로 ResponseBodyAdvice 인터페이스이다.1. ResponseBodyAdvice란?Spring 공식 문서를 보면 ResponseBodyAdvice는 다음과 같이 설명되어 있다.@ResponseBody 또는 ResponseEntity를 사용하는 컨트롤러 메서드가 실행된 후, 응답 본문이 HttpMessageConverter를 통해 작성되기 전에 이를 수정할 수 있도록 해줍니다.해당 인터페이스의 구현체는 RequestMappingHandlerAdapter 및 ExceptionHandlerException.. Spring Boot - @RestController의 동작 과정과 MessageConverter Spring Boot에서 @RestController를 사용하면 일반적인 @Controller와 달리 ViewResolver가 관여하지 않고, MessageConverter가 실행된다. 이를 통해 API의 응답이 클라이언트가 원하는 형태(JSON, XML 등)로 변환된다. @RestController와 MessageCoverter의 동작 과정1. 핸들러 메서드 실행클라이언트가 요청을 보내면, Spring MVC는 적절한 @RestController의 핸들러 메서드를 실행한다.@RestControllerpublic class ExampleController { @GetMapping("/hello") public String hello() { return "Hello, World!";.. Spring Boot - 요청 프로세스와 검증 먼저 Spring Boot의 요청 처리 프로세스를 다시 한 번 알아보자1. 사용자로부터 요청이 들어온다. 2. DispatcherServlet이 받아서 Header에 저장된 부가적인 정보를 이용해서 요청 처리를 위임할 Controller를 찾는다 (HandlerMapping)3. 요청를 위임할 HandlerAdapter를 찾아서 전달한다.※ 직접 Controller로 요청을 위임하지 않는 이유는 Controller 구현 방식이 다양하기 때문에 Adapter 패턴을 적용해 컨트롤러의 구현 방식에 상관 없이 요청을 위임한다.4. HandlerAdpater가 Controller를 호출한다. 여기까지가 스프링 부트를 공부할 때, 평범하게 알고가는 요청 프로세스이다.여기서 조금 더 자세히 알아보자. Contro.. Redis란? Redis는 Remote Dictionary Sever 의 약자로, 데이터를 드스크가 아닌 메모리에 저장하는 방식의 오픈소스 인메모리 데이터 저장소이다. Key-Value 구조를 사용하며, 초당 5만에서 25만 건의 요청을 처리할 수 있는 뛰어난 성능을 자랑한다.Redis GitHub에서 소스를 확인할 수 있다.Redis의 특징1. Key-Value 기반 구조Redis는 Key-Value Store라는 점에서 자바의 해시 테이블과 유사하다. 데이터는 메모리에 저장되므로 빠른 응답 속도와 높은 처리율을 제공한다. 그러나 메모리는 디스크보다 비싸고, 대규모 데이터를 저장하기에는 비용적인 제약이 있다.2. 데이터 지속성Redis는 메모리에 저장된 데이터를 디스크에 영구적으로 저장할 수 있는 기능을 제공한다. .. Java 런타임 데이터 영역 C/C++ 개발자는 메모리 관리 측면에서 보면 각 객체의 소유권과 라이프타임 모두 관리할 책임을 지기 때문에 잡다한 것들을 다 하는 노가다꾼이라고 할 수 있다. 반대로 자바 개발자는 가상 머신이 제공하는 가비지 컬렉터 덕분에 메모리 할당과 해제를 직접 하지 않아도 메모리 누수나 오버플로 문제를 거의 겪지 않는다. 하지만 통제권을 위임 했기에 문제가 생기면 가상머신의 메모리 관리 방식을 이해하지 못하는 한 해결하기가 상당히 어렵다. 런타임 데이터 영역자바 가상 머신은 런타임 환경에 필요한 메모리를 몇 개의 데이터 영역으로 나누어서 관리한다. 각 영역은 목적과 생성/삭제 시점이 존재한다. 어떤 영역은 가상 머신 프로세스의 시작과 동시에 만들어지며, 어떤 영역은 사용자 스레드의 시작/ 종료에 맞춰 생성/삭.. 이전 1 2 3 4 다음