Java(55)
-
Netty
Netty란 기존의 소켓 프로그래밍은 클라이언트가 접속하게 되면 스레드를 할당해야하는데, 많은 클라이언트가 접속을 하게 될 경우 그 숫자만큼 스레드를 생성해야해서 리소스가 낭비되고 문맥 교환이나 입출력 데이터에 관련한 무한 대기 현상이 발생하는 문제가 있었습니다. 이러한 네트워크 문제를 해결하기 위해 만들어진 방법이 NIO(Non-Blocking Input Output)입니다. 그리고 이러한 NIO 방식으로 동작하는 네트워크 프레임워크가 바로 Netty입니다. Selector는 시스템 이벤트 통지 API를 사용하여 하나의 스레드로 동시에 많은 IO를 담당할 수 있습니다. 즉, 적은 수의 스레드로 더 많은 Connection을 취할 수 있어서 메모리 관리에 이점이 생기고 컨텍스트 스위치에 대한 오버헤드가 ..
2022.05.26 -
Spring Security - Rest API에 csrf protection을 사용하지 않는 이유
CSRF란 CSRF 링크 Rest API 에서 csrf를 disable하는 이유 CSRF의 취약점은 공격자가 사용자가 의도하지 않는 요청을 수행하게 하는 취약점입니다. 즉 공격자는 사용자가 가지고 있는 권한 범위 내에서 악의적인 행위를 할 수 있습니다. 일반적으로 해당 권한은 쿠키와 세션을 이용해서 인증을 하고 있기 때문에 발생하는 일입니다. 하지만 Rest API를 이용한 서버라면, session 기반 인증과는 다르게 stateless하기 때문에 서버에 인증 정보를 보관하지 않습니다. 일반적으로 jwt 같은 토큰을 사용하여 인증하기 때문에 해당 토큰을 Cookie에 저장하지 않는다면 csrf 취약점에 대해서는 어느 정도 안전하다고 말할 수 있습니다.
2022.05.02 -
Java 11
추가된 기능 새로운 HTTP Client 추가 새로운 HTTP Client가 추가되었습니다. 새로운 HTTP Client는 성능적으로 개선되었고, HTTP/1.1과 HTTP/2 프로토콜을 모두 지원하고 있습니다. HttpClient httpClient = HttpClient.newBuilder() .version(HttpClient.Version.HTTP_2) .connectTimeout(Duration.ofSeconds(20)) .build(); HttpRequest httpRequest = HttpRequest.newBuilder() .GET() .uri(URI.create("http://localhost:" + port)) .build(); HttpResponse httpResponse = http..
2022.01.06 -
Spring MVC
Spring MVC란 Spring MVC란 Front Controller Pattern에 기초한 웹 MVC 프레임워크입니다. Spring MVC는 Model, View, Controller를 명확한 클래스로 분할하고 losse coupling 시켜놓아서 매우 유연하고 확장성이 좋게 만들어 놓았습니다. Spring MVC의 구성요소 DispatcherServlet Spring MVC가 Front Controller Pattern에 기반하고 있는데 바로 그 Front Controller가 DispatcherServlet입니다. DispatcherServlet은 클라이언트의 모든 요청을 접수합니다. 그리고 받아들인 요청에 대한 처리를 다른 컴포넌트들에게 보내서 위임하고 있습니다. Infrastructure C..
2021.11.02 -
Spring MVC와 WebFlux의 차이
Spring WebFlux Spirng WebFlux는 Event driven 방식이고 비동기 논블로킹 방식입니다. WebFlux는 Node.js처럼 이벤트 루프가 돌아서 요청이 발생할 경우 그것에 맞는 핸들러에게 처리를 위임하고 처리가 완료되면 callback 메소드 등을 통해 응답을 반환합니다. 그래서 이 방식의 경우 Spirng MVC에 비해 적은 스레드로 많은 사용자의 요청을 받아낼 수 있습니다. Spirng MVC Spring Mvc는 사용자의 요청이 들어왔을 때마다 Thread를 생성하여 요청을 처리합니다. 하지만 다수의 사용자 요청이 들어왔을 때, Thread를 계속 생성하는 것은 리소스가 굉장히 많이 들어갑니다. 그래서 Spring MVC의 경우 어플리케이션이 실행되면서 Thread Poo..
2021.10.29 -
G1 GC
G1 GC란 G1 GC는 대용량의 메모리가 있는 멀티 프로세서 시스템을 위해 제작되었습니다. 빠른 처리 속도를 달성하면서 pause의 최소화를 충족시키는 것이 G1 GC의 목표입니다. Heap은 동일한 크기의 영역으로 나뉘어 집합으로 분할되어 연속된 가상 메모리로 존재하게 됩니다. G1 GC는 Heap Area를 일정 크기의 region으로 구분하여 논리적으로 구분하고 있습니다. 최초 객체가 생성되면 Eden에 할당하고 Survivor로의 이동과 소멸 그리고 Old Region으로의 이동 생명주기를 가집니다. G1 GC의 수행 과정 Initial Mark Old Region에 존재하는 객체들이 참조하는 Survivor Region을 찾습니다. Root Region Scan Initial Mark에서 발견..
2021.10.14