본문 바로가기

분류 전체보기70

[Spring] Spring Batch란? 최근 회사 프로젝트에서 스프링 배치를 활용하여 모바일 Push 알림 관련 배치/온라인 작업을 진행했습니다. 비교적 간단한 작업이라 큰 어려움은 없었지만 처음 사용해보는 스킬이기 때문에 공부용으로 해당 글을 작성하게 됐습니다. Batch Application 배치 애플리케이션이란 대량의 데이터를 처리하거나 반복적인 작업을 수행하는 목적을 가지는 애플리케이션을 의미합니다. 주기적으로 반복 되는 작업을 자동으로 수행하며 일련의 단계로 구성되어 있는 작업들을 수행합니다. 위와 같은 작업들은 배치 애플리케이션으로 따로 분리해서 관리해야 하는데는 다음과 같은 중요한 이유가 있습니다. 일반적으로 사용되는 웹 애플리케이션은 실시간으로 사용자와 상호 작용 하기 위한 비즈니스 로직들을 수행합니다. 이를 위해 네트워크 I/.. 2023. 12. 18.
[Spring] Spring Security Authentication이란? Authentication public interface Authentication extends Principal, Serializable { Collection 2023. 12. 10.
[Spring] Spring Security SecurityFilter란? SecurityFilterChain 출처 웹 요청이 발생하면 서블릿은 DelegatatingFilterProxy를 통해 FilterChainProxy에 설정 된 필터들을 실행시킵니다. 하지만 각 요청에 적용 될 필터 체인에 대한 유효성 검증이 필요한데 이를 관리하기 위해서는 SecurityFilterChain을 통해 해당 요청에 적용되는 필터 체인이 있는지 결정할 수 있게끔 서포트합니다.(in order to decide whether it applies to that request.) 이를 위해 SecurityFilterChain의 표준 구현체로 DefaultSecurityFilterChain을 사용하며 발생한 요청이 RequestMatcher에 일치하면 Spring Security에 정의된 필터를 반.. 2023. 12. 3.
[Library] Assertions Assertions Assertions 는 Java 언어를 위한 라이브러리로 런타임 시점에 JDK 타입 검증 기능을 제공합니다. AssertJ에 영감을 받아 제작했습니다. 2023년 11월 27일 기준 Maven Central Repository 에 1.0.0 버전으로 배포 되어 있습니다. 시작하기 Maven io.github.ones1kk assertions 1.0.0 Gradle implementation group: 'io.github', name: 'assertions', version: '1.0.0' Gradle(short) implementation 'io.github.ones1kk:assertions:1.0.0' 먼저 위와 같이 Maven, Gradle 두 가지 Build Tool을 통해 A.. 2023. 11. 27.
[DB] 정규화(Nomalization) 정규화(Normalization) 정규화란 관계형 데이터베이스의 데이터 모델 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 의미하며 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것을 목표로 합니다. 정규화는 테이블 간의 종속성을 분석하고 데이터를 여러 테이블로 분할하여 중복을 줄이는데 중점을 두고있으며 하나의 테이블에서의 데이터의 삽입, 삭제, 변경이 정의된 관계들로 인하여 데이터베이스의 나머지 부분들로 전파되게 하는 것입니다. 출처 또한 정규화는 여러 단계로 정의되어 있는 정규형(Normal Form)이라는 규칙을 따라 데이터 모델의 정규화가 이루어지는데 각 단계는 아래와 같습니다. 먼저 다음과 같은 정규화 되지 않은 테이블이 존재한다고 가정하겠습니다. 관리자 아이디 관리자.. 2023. 11. 17.
[DB] 인덱스(Index) 인덱스(Index) 출처 인덱스란 데이터베이스 테이블 내의 특정 열에 대한 검색 및 정렬 성능을 향상시키기 위해 사용되는 자료 구조를 뜻합니다. 인덱스 구조의 유일한 목적은 데이터를 검색하는 동안 디스크의 I/O를 최소화하도록 제한하는 것에 있습니다. 즉 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 및 정렬 성능을 향상시키는 자료 구조로 인덱스가 생성되면 인덱스된 열과 연결된 테이블의 값 위치가 기록됩니다. 인덱스는 특정 열에 대한 정렬된 키와 해당 키가 위치한 데이터 블록에 대한 포인터로 구성되어 있습니다. 테이블의 다른 세부 항목들은 갖고 있지 않기 때문에 보통 테이블을 저장하는데 필요한 디스크 공간보다 작으며 관계형 데이터베이스에서의 인덱스는 테이블 부분에 대한 하나의 사본.. 2023. 11. 15.
[Algorithm] 기수 정렬(Radix Sort) 기수 정렬(Radix Sort) 출처 기수 정렬(Radix Sort)은 데이터를 구성하는 기본 요소, 즉 기수를 이용해서 정렬을 진행하는 알고리즘입니다. 기수 정렬은 비교 정렬 알고리즘과는 다르게 비교 없이 수행하는 정렬 알고리즘으로 입력 데이터를 여러 개의 버킷으로 나누고 각 버킷에 속한 데이터들을 개별적으로 정렬하는 버킷 정렬 정렬의 일종으로 취급되기도 합니다. 데이터의 각 자릿수를 기준으로 정렬을 수행하기 때문에 자릿수가 존재하지 않는 데이터를 기수 정렬로 정렬하는 것은 불가능합니다. 또한 기수 정렬은 정렬 방법의 특수성 때문에 부동소수점 실수처럼 특수한 비교 연산이 필요한 데이터에는 적용할 수 없고 길이가 다른 데이터들을 대상으로는 정렬이 불가능합니다. 예제 먼저 다음과 같이 정렬되지 않은 배열이.. 2023. 11. 11.
[DB] Lock Lock 출처 데이터베이스 락이란 여러 사용자 또는 프로세스와 같이 여러 스레드를 실행하는 환경에서 데이터 일관성과 무결성을 유지하기 위해 트랜잭션의 순차적 진행을 보장할 수 있는 직렬화 장치를 뜻합니다. 락은 상호 배제 동시성 제어 정책을 강제하기 위해 설계되며 자원에 대한 접근에 제한을 강제하기 위한 동기화 메커니즘입니다. 락은 데이터베이스 관리 시스템(DBMS) 내에서 사용되며 데이터베이스 객체에 대한 동시 엑세스 및 수정을 제어하는데 사용됩니다. Level 출처 Locking Level이 낮을수록 동시성은 좋지만 관리해야할 락의 개수가 증가하기 때문에 더 많은 리소스를 소비하게 됩니다. 반면에 Locking Level이 높을수록 적은 양의 락 리소스를 사용하지만 하나의 락으로 많은 레코드를 관리하.. 2023. 11. 9.
[Algorithm] 퀵 정렬(Quick Sort) 퀵 정렬(Quick Sort) 출처 퀵 정렬(Quick Sort)는 다른 원소와의 비교만으로 정렬을 수행하는 비교 정렬로 분할 정복(divide and conquer) 알고리즘을 기반으로 동작합니다. 분할 정복 알고리즘은 큰 문제를 작은 하위 문제로 나누고 각 하위 문제를 해결한 다음 그 결과를 결합하여 원래 문제를 해결하는 방식으로 진행합니다. 다만 동일하게 분할 정복 알고리즘을 활용하는 병합 정렬과는 다르게 분할되는 배열이 불균등합니다. 때문에 정렬 이후 데이터의 순서가 정렬 이전 원래 순서와 같음을 보장하지 못하는 불안정 정렬에 속합니다. 주어진 배열에서 임의의 한 원소를 고릅니다. 이렇게 고른 원소를 피벗(Pivot)이라 부릅니다. 피벗 앞에는 피벗보다 값이 작은 모든 원소들이 오고 피벗 뒤에는 .. 2023. 11. 8.