본문 바로가기

분류 전체보기411

[Java] 올바른 Collection 선택하기 🙋 들어가며 물건을 담을 수 있는 그릇의 종류는 다양합니다. 데이터 세계에서 그릇을 자료 구조(Data Structure)라고 표현합니다. 자바에서도 다양한 자료 구조를 제공합니다. 이번 글을 통해서 상황에 맞게 사용하는 방법을 알아보겠습니다. 🗂️ Java Collection Framework 자바에서 제공하는 다양한 자료 구조들의 모음을 Collection이라고 부릅니다. 다양한 인터페이스와 클래스들의 집합이며, 자바에서는 Collection 외에도 배열이라는 구조도 제공합니다. Collection 인터페이스를 상속받는 주요 인터페이스는 다음과 같습니다. List 인터페이스 Set 인터페이스 Queue 인터페이스 Map 인터페이스는 구조상의 차이로 별도로 정의되지만 동일하게 Java Collectio.. 2023. 8. 9.
[Backend] DB 인덱스 이해하기 🙋 들어가며 처음 자료구조를 공부할 때 우리는 배열을 가장 먼저 접합니다. 배열에서 데이터가 어디에 있는지 나타낼 때 인덱스라는 용어를 사용하는데, 데이터베이스에서도 이 인덱스라는 용어를 사용합니다. 이번 글을 통해서 인덱스가 무엇이고 어떻게 사용하는지 알아보겠습니다. 📚 인덱스란? 저번에 읽었던 책에서 찾고 싶은 내용이 있을 때 어떻게 찾을까요? 맨 앞에 있는 목차혹은 끝에 있는 찾아보기를 참고할 것 같습니다. 이렇게 빠르게 찾기 위해서 도움을 주는 페이지를 인덱스라고 합니다. 페이지라고 표현한 이유는 DB에서 인덱스는 하나의 자료구조이기 때문입니다. 기본적으로 인덱스는 키를 정렬해서 보관합니다. 🤔 왜 빨라질까? 인덱스를 둔다는 것은 원하는 데이터가 어디에 있는지 마킹해두는 것입니다. 마킹을 기반으로.. 2023. 8. 4.
[Security] 시큐리티 파헤치기 (2) : RequestCacheAwareFilter, RequestCache 🙋 들어가며 스프링 시큐리티 필터에는 다양한 필터들이 존재합니다. 오늘은 그중에서 인증, 인가를 위해서 가로채진 요청을 어떻게 다시 수행하는지 알아보겠습니다. ↩️ RequestCacheAwareFilter 이름에서 어떤 역할을 하는지 대략적으로 알 수 있습니다. 대충 요청에 대한 캐시를 알고 있는 필터 같습니다. 동작을 이해하기 위해서는 내부적으로 무엇을 가지고 있는지 알아야 합니다. 🏛️ 시큐리티 아키텍처 시큐리티는 결국 인증과 인가를 위한 프레임워크입니다. 인증을 위한 Authentication Manager와 인가를 위한 Access Decision Manager가 핵심입니다. 요청한 자원이 인증이 필요하다면 요청을 가로채 인증한 뒤 다시 원래 요청으로 되돌아가야 합니다. 시큐리티는 Reques.. 2023. 8. 2.
[Security] 시큐리티 파헤치기 (1) : DelegatingFilterProxy 🙋 들어가며 이전에 Spring Security를 너무 가볍게 공부한 것 같아서 A-Z로 다뤄보려고 합니다. 이번 편에서는 DelegatingFilterProxy에 대해서 이야기해 보겠습니다. 👩‍💼 DelegatingFilterProxy Security에서 빼놓을 수 없는 객체입니다. 이름에서 역할이 잘 명시되어 있습니다. 이름 그대로 Filter를 위임(deleagte)하는 대리자(proxy)입니다. 🤷 왜 위임하나요? 전체적인 흐름을 이해하고 왜 위임하는지 알아보겠습니다. 먼저 클라이언트의 요청이 들어오면 서블릿 컨테이너는 필터 체인을 생성합니다. 이후 요청이 필터와 서블릿을 통과하면 스프링 내부로 진입하게 됩니다. 필터 체인 : HttpServletRequest를 처리하는 서블릿과 필터를 포함하는.. 2023. 8. 2.
[Backend] 트랜잭션, 격리 수준 🙋 들어가며 데이터를 다룰 때 트랜잭션이라는 용어가 자주 등장합니다. 이번 글에서 우리는 자주 언급되는 트랜잭션이 무엇이고 특징이 어떤 것들이 있는지 알아보고, 주의할 점은 어떤 것들이 있는지 알아보겠습니다. 🤔 트랜잭션이란? 트랜잭션은 특별한 작업의 단위를 의미합니다. 어떤 특징이 있어서 단순한 작업과 다르게 표현을 하는 것일까요? 👀 특징 트랜잭션을 이야기할 때는 ACID라고 부르는 특징을 이해해야 합니다. ACID를 지키고 있는 단위를 우리는 트랜잭션이라고 부르는 것입니다. 🎭 루미큐브 루미큐브는 가장 유명한 보드게임 중 하나입니다. 이 게임은 트랜잭션의 특징과 아주 비슷합니다. 다음은 규칙입니다. 🎯 루미큐브 규칙 4가지 색을 가진 1부터 13까지 숫자가 존재한다. 필드에 제출된 숫자들은 같은 색.. 2023. 7. 27.
[Java] Hash란? (feat. Hash Collection) 🙋 들어가며 해시 브라운으로 더 유명한 해시(Hash)는 개발자라면 들어봤을 법한 이름입니다. 이번 글을 통해서 해시는 어떤 것이고 왜 사용하는지 또, 어떤 문제가 있는지 알아보겠습니다. 그리고 Java에서 제공하는 다양한 Hash Collection에 대해서도 간단히 알아보겠습니다. 🥔 Hash란? 해시란 고정된 크기로 값을 바꾸는 함수나 알고리즘 을 말합니다. 그 결과 만들어진 값을 해시 코드(hash code) 혹은 해시 값(hash value)이라고 부릅니다. 🤔 고정된 크기? 해시가 어떤 것인지 알았다면 이번에는 왜 사용하는지 에 초점을 맞춰보겠습니다. 힌트는 앞서 언급한 고정된 크기에 있습니다. 보통 책에는 어느 페이지에 어떤 내용이 있는지 담겨있는 목차가 존재합니다. 우리가 1,000 페이지.. 2023. 7. 21.