전체보기(194)
-
Java 17
switch의 pattern matching Java의 표현력을 향상시키기 위해 아래와 같은 예시로 switch문의 pattern matching 기능을 강화했습니다. static record Human (String name, int age, String profession) {} public String checkObject(Object obj) { return switch (obj) { case Human h -> "Name: %s, age: %s and profession: %s".formatted(h.name(), h.age(), h.profession()); case Circle c -> "This is a circle"; case Shape s -> "It is just a shape"; c..
2022.08.23 -
서버 가상화란
서버 가상화의 개념 서버 가상화는 하나의 물리적 서버 호스트에서 여러 개의 서버 운영 체제를 게스트로 실행할 수 있게 해주는 소프트웨어 아키텍처입니다. 서버는 물리적 시스템으로부터 추상화된 서버 소프트웨어를 통해 물리적 영역을 벗어난 하나의 '가상 시스템'이 됩니다. 게스트 서버는 해당 컴퓨팅 및 메로리 리소스에서 단독으로 실행되고 있다고 스스로 인식하지만, 실제로는 서버 하드웨어의 가상 모방 서버에서 실행됩니다. 서버 가상화의 장점 하드웨어 비용과 공간의 절감 서버 가상화를 이용하면 여러 개로 운영되던 서버를 통합해 관리 포인트를 축소할 수 있습니다. 그리고 장비의 노후화로 인한 파트 교체나 장애 처리에 있어서 훨씬 수월하고 빠른 대응을 할 수 있습니다. 또한, 새로운 서버가 필요할 경우..
2022.07.29 -
String Pool
String의 생성방식 new 연산자를 이용한 방식 new를 통해 String을 생성하면 Heap Memory 영역에 존재하게 됩니다. 리터럴을 이용한 방식 String Pool이라는 영역에 존재하게 됩니다. String Pool의 개념 String Pool이란 Java Heap Memory에 있는 String 데이터 저장소입니다. 위의 그림을 통해 다음과 같은 사실을 알 수 있습니다. 리터럴로 생성한 String 객체는 String Pool에 들어갑니다. 리터럴로 생성한 객체의 값(ex. "Cat")이 이미 String Pool에 존재한다면, 해당 객체는 String Pool의 reference를 참조합니다. new 연산자로 생성한 String 객체는 같은 값이 String Pool에 존재하더라도 별개..
2022.07.22 -
Netty
Netty란 기존의 소켓 프로그래밍은 클라이언트가 접속하게 되면 스레드를 할당해야하는데, 많은 클라이언트가 접속을 하게 될 경우 그 숫자만큼 스레드를 생성해야해서 리소스가 낭비되고 문맥 교환이나 입출력 데이터에 관련한 무한 대기 현상이 발생하는 문제가 있었습니다. 이러한 네트워크 문제를 해결하기 위해 만들어진 방법이 NIO(Non-Blocking Input Output)입니다. 그리고 이러한 NIO 방식으로 동작하는 네트워크 프레임워크가 바로 Netty입니다. Selector는 시스템 이벤트 통지 API를 사용하여 하나의 스레드로 동시에 많은 IO를 담당할 수 있습니다. 즉, 적은 수의 스레드로 더 많은 Connection을 취할 수 있어서 메모리 관리에 이점이 생기고 컨텍스트 스위치에 대한 오버헤드가 ..
2022.05.26 -
Ajp Protocol packetSize 제한 오류
최근 Tomcat과 Apache를 연동하는 도중에 Apache에서 다음과 같은 에러 메시지가 나타났습니다. [Fri May 13 19:09:51 2022] [79415:140343571771968] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (1409): (node2) wrong message size 65536 [Fri May 13 19:09:51 2022] [79415:140343571771968] [error] ajp_get_reply::jk_ajp_common.c (2289): (tomcat) Tomcat is down or network problems. Part of the response has already been sent to t..
2022.05.19 -
Spring Security - Rest API에 csrf protection을 사용하지 않는 이유
CSRF란 CSRF 링크 Rest API 에서 csrf를 disable하는 이유 CSRF의 취약점은 공격자가 사용자가 의도하지 않는 요청을 수행하게 하는 취약점입니다. 즉 공격자는 사용자가 가지고 있는 권한 범위 내에서 악의적인 행위를 할 수 있습니다. 일반적으로 해당 권한은 쿠키와 세션을 이용해서 인증을 하고 있기 때문에 발생하는 일입니다. 하지만 Rest API를 이용한 서버라면, session 기반 인증과는 다르게 stateless하기 때문에 서버에 인증 정보를 보관하지 않습니다. 일반적으로 jwt 같은 토큰을 사용하여 인증하기 때문에 해당 토큰을 Cookie에 저장하지 않는다면 csrf 취약점에 대해서는 어느 정도 안전하다고 말할 수 있습니다.
2022.05.02