Web Development14 [Spring] @SLF4J (Simple Logging Facade for Java) 란 무엇인가 사실 로깅은 개발자가 신경써야 할 매우 중요한 파트라고 생각해왔고, 그래서 이번 기회에 Spring Boot 어플리케이션의 로깅에 대한 내용을 한 번 정리해보고자 한다. 정리하기 전에 왜 수많은 자바 서적에서 다루는 java.util.logging 을 실제 웹 어플리케이션에서는 사용하지 않는지 의문이 생겼는데, Why not use java.util.logging? 을 보고 대략적인 이유를 알 수 있었다. @ SLF4J 를 사용했을 때 생기는 일 @Slf4j 는 Lombok에서 제공하는 어노테이션으로, Lombok의 다른 기능들과 마찬가지로 개발자로 하여금 SLF4J를 사용하기 위해 작성해야 하는 코드(Boilerplate code)를 생략할 수 있게끔 해준다. 실제로 어노테이션 내부를 살펴보면, @Sl.. 2022. 10. 10. [JAVA] Atomic 변수와 동시성 제어 (AtomicInteger, AtomicLong, AtomicBoolean, AtomicReference) 얼마 전 코드에서 AtomicInteger 타입으로 선언된 변수를 발견했고, 관련 내용들을 찾아보게 되었다. 이번 글에서는 synchronized에 비해 적은 비용으로 동시성을 제어할 수 있는 Atomic 변수의 특성에 대해 알아보고자 한다. 목차 Atomic 변수란? Java에서 동시성을 제어하기 위한 세 가지 방법 Atomic 변수의 장점 : Compare-and-swap(CAS) Atomic 변수의 주요 메서드와 사용예시 Atomic 변수란? Atomic 변수는 멀티쓰레드 환경에서 동시성을 보장해준다. 흔하게 사용되는 Atomic 변수 클래스로는 AtomicInteger, AtomicLong, AtomicBoolean, AtomicReference 등이 있고, 이들은 atomic하게(동시성을 보장받.. 2022. 9. 19. [DB] 하드파싱(Hard parsing)과 소프트파싱(Soft parsing) 그리고 라이브러리 캐시(Library cache) 실제 엔터프라이즈 레벨의 어플리케이션에서는 UNION ALL로 여러번 결합된 복잡한 쿼리를 반복해서 수행해야 하는 일이 생기곤 합니다. 이 때 쿼리 자체의 길이가 길어지면서 해시 알고리즘을 통해 ID 생성에 걸리는 시간이 길어지고, 그럼으로써 파싱에 소요되는 시간까지도 덩달아 길어지는 문제가 생깁니다. 이번 포스팅을 통해 파싱이 무엇이며 어떤 종류가 있는 지와 플랜이 저장되는 라이브러리 캐시에 대해 한번 정리해보고자 합니다. 1. SQL의 특성과 Optimizer 일반적인 프로그래밍 언어와 달리 SQL은 처리 방법(절차)을 기술하지 않습니다. 다시 말해, SQL을 사용하는 개발자는 원하는 데이터만 정의할 뿐, 해당 데이터를 어떻게 찾아와야 할지는 따로 작성하지 않는데요, 아래 SQL 문을 한번 보시죠. .. 2022. 8. 21. [자료구조] 깊이 우선 탐색(DFS, Depth First Search) 이해 및 Python 구현 - CS면접 대비 그래프 G의 한 정점 v 가 주어졌을 때, v에 연결된 모든 정점들을 방문하는 방법으로 깊이우선탐색(DFS)과 너비우선탐색(BFS)가 있다. 이 글에서는 깊이우선탐색(DFS)에 대해 정리해보고자 한다. 깊이 우선 탐색(DFS, Depth First Search) [1] Graph의 정의 먼저, 깊이 우선 탐색은 그래프 자료구조를 탐색하기 위한 방법이자 그래프 자료구조의 대표적인 연산이다. 따라서 그래프 자료구조의 정의부터 살펴보자. 다소 딱딱하게 느껴지겠지만, 전공서적에 있는 정의를 그대로 가져와 써보면 아래와 같다. 그래프 G는 두개의 집합 V와 E로 구성되며 다음과 같이 정의할 수 있다. V(G) : 공집합이 아닌 정점(Vertice)의 유한 집합. E(G) : 정점 쌍들의 집합으로, 이러한 쌍을 간.. 2021. 12. 23. [자료구조] AVL Tree(AVL 트리) - CS면접 대비 이번 글에서는 AVL 트리에 관한 내용을 정리해보고자 한다. 이전 글에서 언급했던 것처럼 BST는 공백인 상태에서 이미 정렬된 수를 연속으로 삽입하는 경우 편향(skewed) 문제가 발생한다. 따라서 최악의 경우 자료 탐색에 소요되는 시간이 리스트를 순차 탐색하는 것과 같아진다. 균형 탐색 트리의 일종인 AVL 트리는 이러한 BST의 편향 문제를 해결하기 위해 고안되었으며, 동적 검색을 O(log N) 시간 내에 할 수 있고, 새로운 키를 O(log N) 시간 내에 삽입하거나 삭제할 수 있다. AVL 트리(AVL Tree) [1] AVL 트리의 정의 어떤 이진트리 노드 T의 balance factor(균형인수)를 $BF(t) = h_L - h_R$ 라 할 때, 모든 노드 T에 대해 $BF(t)$= -1,.. 2021. 12. 7. [자료구조] BST(Binary Search Tree) 이진 탐색 트리 - CS면접 대비 이번 글에서는 탐색, 삽입, 삭제 연산에서 탁월한 성능을 보이는 BST(Binary Search Tree)에 관한 내용을 정리해보고자 한다. 1부터 100까지의 수 중 임의의 수 하나를 맞히는 게임을 한다고 가정해보자. 직관적으로 생각했을 때 가운데 값인 50을 가장 먼저 말하고 맞히려는 수가 그보다 큰 경우 75를 작은 경우 25를 외치는 식으로 답을 찾는 게 가장 효율적인 방법일 것이다. 이진 탐색 트리는 이와 유사한 방식으로 자료 탐색이 가능한 이진 트리 자료구조라고 할 수 있다. 이진 탐색 트리(BST, Binary Search Tree) [1] 이진 탐색 트리(BST)의 정의 이진 탐색 트리(BST)는 이진 트리로서 공백일 수 있으며, 만약 공백이 아니라면 다음 성질을 만족한다. 모든 원소는 키.. 2021. 12. 2. 이전 1 2 3 다음 반응형