전체 글(194)
-
Spring WebFlux
Bloking I/O Block I/O는 어플리케이션에서 I/O 요청을 한 후, 완료되기 전까지는 Application이 Block 되어 다른 작업을 수행할 수 없습니다. 이는 해당 자원이 효율적으로 사용되지 못하고 있음을 의미합니다. 하지만 실제 어플리케이션들은 Blocking 방식임에도 불구하고 마치 Block이 안 되듯이 동작하는 것처럼 보입니다. 이것은 Single Thread 기반이 아닌 Multi Thread를 기반으로 동작하기 때문입니다. Block 되는 순간 다른 Thread가 동작함으로써 Block의 문제를 해소하였습니다. 그러나 Thread 간 전환에 드는 비용이 존재하므로 여러 개의 I/O를 처리하기 위해 여러 개의 Thread를 사용하는 것은 비효율 적으로 보입니다. Synchron..
2020.09.13 -
SQL IN과 OR의 비교
OR 어떠한 논리합 관계도 표현이 가능합니다. IN 하나의 컬럼이 여러개의 =조건을 가지는 경우에만 가능합니다. IN -> OR(가능) IN SELECT * FROM TAB1 WHERE COL IN (1, 5, 7)OR SELECT * FROM TAB1 WHERE (COL = 1 OR COL = 5 OR COL = 7)OR -> IN(불가능) OR SELECT * FROM TAB1 WHERE (COL1 = 1 OR COL = 2 OR NAME LIKE '3%')IN을 사용할 수 있는 경우라면 OR보다 IN을 사용하는 것이 좋습니다. IN은 경우에 따라서 서브쿼리를 이용하여 보다 유연한 확장이 가능합니다. IN은 반드시 하나의 컬럼이 비교되어야 하지만 OR는 여러 개의 컬럼이 올 수 있으므로..
2020.09.11 -
Tim sort
Tim sort란 Tim sort란 2002년 소프트웨어 엔지니어 Tim Peters에 의해 만들어진 정렬 알고리즘입니다. Tim sort는 Insertion sort와 Merge sort를 결합하여 만든 정렬 알고리즘입니다. Tim Sort 알고리즘의 최선 시간 복잡도는 O(n), 평균은 O(nlogn), 최악의 경우는 O(nlogn)입니다. Tim sort는 안정적인 두 정렬 방법을 결합했기에 안정적이며, 추가 메모리는 사용하지만 기존의 Merge sort에 비해 적은 추가 메모리를 사용하여 다른 정렬 알고리즘의 단점을 취대한 극복한 알고리즘입니다. 참조 지역성 원리 Tim sort의 기본 원리에 앞서 참조 지역성의 원리를 설명하는 이유는 알고리즘의 실제 동작 시간에 영향을 미치는 요소이고 Tim s..
2020.09.11 -
HATEOAS
HATEOAS란 HATEOAS(Hypermedia As The Engine Of Application State)란 REST Api를 사용하는 클라이언트가 전적으로 서버와 동적인 상호작용이 가능하도록 하는 것을 의미합니다. 이러한 방법은 클라이언트가 서버로부터 어떠한 요청을 할 때, 요청에 필요한 URI를 응답에 포함시켜 반환하는 것으로 가능하게 할 수 있습니다. 예를 들어, 사용자 정보를 생성(POST)하는 요청 이후, 이를 조회, 수정, 삭제할 때, 이러한 모든 동작을 URI를 이용해 동적으로 알려준다는 의미입니다. 위와 같이 각 기능마다 URI를 링크시킴으로써, 동적인 API 제공이 가능하도록 합니다. HATEOAS의 장점 요청 URI가 변경되더라도 클라이언트에서 동적으로 생성된 URI를 사용함으로..
2020.09.11 -
Spring boot 와 Spring Legacy 비교
Pre-set 설정 빌드 도구로 maven을 사용한다고 가정했을 때, Spring Legacy 프로젝트는 다양한 라이브러리를 pom.xml에 추가하고 추가적인 설정또한 xml로 작성해야합니다. 예를 들어 DB 연결이 들어간다면, pom.xml에 jdbc 관련 라이브러리르 추가하고 ORM을 mybatis를 쓴다면 함께 추가해야 합니다. 하지만 Spring Boot는 많은 사람들이 사용하던 설정을 Pre-set으로 구성해서 제공하므로 https://start.spring.io/에서 원하는 의존성 기능들을 추가한 뒤 다운로드 받고 import하면 빠르게 설정 내용을 프로젝트에 적용할 수 있습니다. WAS Spring Legacy 프로젝트를 진행하게 되면 WAS를 설치하고, 설정하는 등 초기에 적지 않은 시간을..
2020.09.10 -
Reactive Stream
Reactive Stream이란 계속적으로 들어오는 스트림 데이터를 효율적으로 처리하기 위해서는 비동기 시스템이 효과적입니다. 비동기 처리를 하면서 가장 중요한 문제는 데이터 처리가 목적지의 리소스 소비를 예측가능한 범위에서 신중하게 제어할 수 있어야 하는 것입니다. 비동기는 네트워크를 통한 서버간의 협업 또는 단일 서버에서 컴퓨팅 리소스를 동시에 사용할 때 주로 사용됩니다. Reactive Stream의 주된 목적은 비동기의 경계를 명확히 하여 스트림 데이터의 교환을 효과적으로 관리하는 것입니다. 즉, 비동기로 데이터를 처리하는 시스템에 어느 정도의 데이터가 들어올지 예측가능하도록 하는 것입니다. Reactive Stream에서는 BackPressure이 이를 달성할 수있게 해주는 중요한 부분입니다. ..
2020.09.09