코테를 위한 Java 문법 정리
·
Coding Test
평소 C++을 코테 주 언어로 사용하는데, 백엔드 직무의 경우 Java로 코테를 응시해야 하는 경우가 있어 벼락치기용으로 Java 문법을 정리하고자 한다. (틈틈이 업데이트 중) 입출력import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt..
[C++] 트라이(Trie)
·
Coding Test/Algorithm & Data Structure
1. 트라이(Trie)트라이(Trie)는 어떤 문자열이 특정 문자열에 해당되는지 알아낼 때 효율적으로 사용할 수 있는 자료구조이다.트라이는 문자열 집합 내에서 중복되는 접두사들에 대응되는 노드들이 서로 연결된 트리이다.  루트는 빈 문자열로 시작하여, 리프 노드는 문자열이 된다. 만약 위와 같은 트라이에서 'ten'이라는 단어를 찾을 때, 루트 노드에서 시작하여 t를 찾는다. 그 후 자식 노드들 중 e를 찾고, 또 n을 찾는다.리프 노드까지 도달했다면, 해당 문자열이 우리가 찾던 문자열이 되고 탐색이 완료된다. 트라이는 모든 문자열을 O(log n)으로 탐색이 가능하여 문자열 탐색이 굉장히 빠르다는 장점이 있다.하지만, 알파벳은 총 26개이므로 문자열을 포함하는 각 노드는 26개의 자식 노드 포인터를 가..
공유 락(Shared Lock)과 배타 락(Exclusive Lock), 그리고 교착 상태(Deadlock)
·
Database
1. 들어가며 트랜잭션 격리 수준과 격리 수준에 따른 문제점1. 트랜잭션 격리성트랜잭션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말한다.트랜잭션에는 ACID라는 네 가지 특징이 있다. 그 중 격리성(Isolation)은 트랜잭션 수행leeeeeyeon-dev.tistory.com 이전에 트랜잭션 격리 수준과 그에 따른 문제점에 대해 살펴보며, 트랜잭션이 동시에 수행될 때 발생할 수 있는 문제점에 대해 알아보았다.트랜잭션들이 동시에 수행될 때, 일관성을 해치는 것을 방지하기 위해 데이터 접근을 제어하는 동시성 제어가 필요하다. 동시성 제어를 위해 데이터에 잠금을 거는 락 기법을 사용할 수 있다. 데이터베이스에 따라 다양한 락이 존재하지만 크게 공유 락과 배타 락으로 나눌 수 있다..
[Packy] Github Actions과 Flyway를 사용한 엔티티-테이블 매핑 검증 자동화
·
Github
1. 들어가며 Spring boot 프로젝트에 Flyway 도입하기 (feat. 기존 데이터가 있을 경우)Flyway란? Flyway는 데이터베이스의 형상 관리를 목적으로 하는 오픈소스 마이그레이션 툴이다. Flyway를 통해 변경 사항을 추적하고, 업데이트나 롤백을 보다 쉽게 할 수 있다. 우리가 개발하며 필수leeeeeyeon-dev.tistory.com 지금 운영하고 있는 패키 프로젝트에서는 Flyway를 사용하여 DDL 생성을 자동화하고 있다.Flyway를 사용하면 엔티티와 테이블 매핑이 일치하지 않을 때 애플리케이션 실행에 실패한다. 그렇기 때문에 테이블 컬럼을 수정하지 않아 나중에 서비스를 운영하다가 비즈니스 로직이 실패하는 문제 상황을 예방할 수 있다. 나는 해당 기능을 활용하여 개발/운영 ..
[Packy] 선물박스 열기 동시성 문제 해결 2 - Redisson으로 분산락 구현
·
Spring
1. 들어가며 [Packy] 선물박스 열기 동시성 문제 해결 1 - 분산 락을 선택한 이유1. 들어가며 패키에서는 선물박스를 받게 되면 Receiver 테이블에 받은 유저 ID와 선물박스 ID를 저장한다.지금은 하나의 선물박스를 1명만 받을 수 있지만(PRIVATE), 나중에 하나의 선물박스를 여러leeeeeyeon-dev.tistory.com 저번 포스트에서 선물박스 열기 로직에 발생할 수 있는 동시성 문제에 대해 알아보고, 이를 해결할 수 있는 방법에 대해 찾아본 뒤 최종적으로 Redis의 Message Broker 방식을 활용한 분산 락으로 해결하기로 결정하였다. 이번 포스트에서는 Redisson으로 분산 락을 구현하는 과정을 코드와 함께 살펴보자. 2. 의존성 추가Redisson 라이브러리를 bu..
[Packy] 선물박스 열기 동시성 문제 해결 1 - 분산 락을 선택한 이유
·
Spring
1. 들어가며 패키에서는 선물박스를 받게 되면 Receiver 테이블에 받은 유저 ID와 선물박스 ID를 저장한다.지금은 하나의 선물박스를 1명만 받을 수 있지만(PRIVATE), 나중에 하나의 선물박스를 여러 유저가 받을 수 있는 상황(SEMI_PUBLIC, PUBLIC)을 고려하여 다대일로 관계를 설정하였다. 만약 여러 유저가 동시에 선물박스 열기(=선물박스 받기)를 시도할 경우 어떻게 될까? 테스트 코드로 상황을 시뮬레이션 해보자. 2. 선물박스 열기 테스트 코드 작성여러 유저가 동시에 선물박스 열기를 시도하는 상황을 어떻게 구현할 수 있을까? Spring Boot에서는 내장된 서블릿 컨테이너(TomCat)에서 다중 요청을 처리한다.톰캣은 부팅할 때 스레드의 컬렉션인 Thread Pool을 생성유저..
짱정연
짱정연의 짱개발자 도전기