분류 전체보기

트라이(Trie)는 컴퓨터 과학에서 탐색 트리의 일종이다. Trie란? Trie는 문자열을 저장하고 효율적으로 탐색을 수행하기 위한 탐색 트리의 일종입니다. 검색엔진, 자연어 처리와 같은 빠른 문자열 탐색이 필요할 때 주로 쓰이는 자료구조입니다. 트라이는 문자열을 저장할 때 위 그래프처럼 문자 단위로 쪼개어 저장합니다. 위에 보이는 TRIE는 현재 CAT, CUT, CUTE, TO, B를 저장하고 있는데요, CUT과 CUTE의 경우를 보면 두 문자열이 접두사를 공유하고 있음을 알 수 있습니다. 따라서 TRIE는 접두사와 연관된 단어를 띄워주는 연관 검색어 기능에 활용할 수도 있습니다. TRIE의 시간 복잡도 만약 가장 긴 문자열의 길이가 m이라고 한다면 삽입에는 총 O(m)의 시간이 소요됩니다. 그리고 ..
· JPA
0. 이 글을 쓰게 된 이유 팀 프로젝트에서 "모임"과 관련된 기능들을 구현하는 역할을 맡아서 개발을 진행 중이었다. 구현해 둔 로직들을 다시 살펴보다가 생각지도 못했던 동시성 문제가 숨어있었다. 동시성 문제를 해결하면서 공부한 내용들과 과정을 포스팅해보고자 한다. 1. 요구사항과 해결방법 1-1. "모임 가입 요청"의 요구사항 모임이 존재하고, 모임은 제한된 인원만 참여할 수 있다. 이미 다 찬 모임에 가입하려는 경우 사용자에게 가입할 수 없음을 알린다. 이미 가입되어 있는 경우 가입 요청을 거부한다. 남은 자리에 여러 명이 동시에 가입 요청하는 경우, 가능한 요청만큼만 받아들일 수 있어야 한다. 1-2. 문제점 현재 로직으로는 동시에 여러 가입 요청이 오는 경우에 동시성 이슈가 발생한다. 1-3. 원..
· CS
이 게시글은 https://developer.mozilla.org/ko/docs/Web/HTTP/CORS 의 내용을 토대로 작성되었습니다. CORS란 교차 출저 리소스 공유 CORS는 추가 HTTP 헤더를 사용하여, 한 출저에서 실행 중인 웹 어플리케이션이 다른 출저의 자원에 접근할 수 있는 권한을 부여하도록 브라우저에게 알려주는 정책이다. 아래는 교차 출처 요청의 예시이다. domain-a.com 이라는 사이트가 보내는 Http Request의 Origin은 domain-a.com이라고 볼 수 있다. 이 사이트가 domain-b.com 이라는 Host에게 자원 요청을 하게 된다면, 이 상황을 바로 교차 출저 리소스 공유라고 한다. 보안 상의 이유로, 브라우저는 기본적으로 CORS를 제한한다. 즉 동일 ..
이펙티브 자바 골라보기 Object 클래스에서 final이 아닌 메서드(equals, hashCode, toString, clone, finalize)는 모두 재정의(overriding)를 염두에 두고 설계된 것이라 재정의 시 지켜야 하는 일반 규약이 명확히 정의되어 있다. 그래서 Object를 상속하는 클래스, 즉 모든 클래스는 이 메서드들을 일반 규약에 맞게 재정의해야 한다. 하지만 잘못 구현하면 이 규약을 준수한다고 가정하여 설계된 클래스들을 오동작하게 만들 수 있으므로, 주의를 기울여야 한다. equals()를 꼭 재정의해야 할까 가장 쉬운 방법은 아예 재정의하지 않는 것이다. 그냥 두면 해당 클래스의 인스턴스는 오직 자기 자신과만 같게 된다. 다음 상황들 중 하나에 해당한다면 재정의하지 않는 것..
· JAVA
컬렉션 프레임워크 끝내기 #List List 컬렉션은 다음과 같은 계층 구조를 가지고 있다. List 컬렉션에는 ArrayList, LinkedList, Vector와 같은 구현 클래스들이 있다. LinkedList의 경우 다중 인터페이스 구현 클래스이다. List 인터페이스와 Deque 인터페이스를 둘 다 구현하고 있음을 알 수 있다. ArrayList 대표적인 List 구현 클래스이다. 일반 배열과 ArrayList는 인덱스로 객체를 관리한다는 점이 유사하지만, 배열은 고정형 메모리를 가지고 ArrayList는 동적 메모리 구조를 가진다는 점이 다르다. 즉 ArrayList는 size를 조절할 수 있다. 초기에 사이즈를 지정하는 방법은 다음과 같다. List list = new ArrayList(30..
· Spring
Spring Security의 Form Login의 기본적인 사용과 동시성 세션 제어 이슈 해결을 함께 다루어 보았다. 시큐리티 설정하기 코드가 길기 때문에 나누어서 살펴보자. configure가 핵심적인 설정을 맡고 있다고 보면 좋을 것 같다. @Configuration @EnableWebSecurity(debug = true) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .sessionManagement() .invalidSessionUrl("/auth/invalid-session") .m..
@xftg77g
'분류 전체보기' 카테고리의 글 목록 (8 Page)