@Slf4j
·
TIL
SLF4J(Simple Logging Facade for Java)SLF4J는 인터페이스고, 그 구현체로 Logback같은 로그 라이브러리를 선택하면 된다. 실무에서는 스프링 부트가 기본으로 제공하는 Logback을 대부분 사용한다. 주요 특징컴파일 타임이 아닌 런타임에 구현체가 결정됨클래스패스에 있는 구현체를 자동으로 찾아서 바인딩여러 구현체가 있을 경우 정해진 우선순위에 따라 선택구현체 교체가 용이함 (의존성 변경만으로 가능)OCP, DIP가 잘 적용되었다고 생각하는 예시 동작과정로그를 작성하면 SLF4J API를 통해 로그를 요청하게 된다.클래스패스에 사용가능한 로깅 구현체(바인딩)를 확인선택된 로깅구현체를 통하여 출력 (기본적으로 Logback 사용)
HahsMap, HashTable, ConcurrentHashMap
·
TIL
HahsMap-동기화보장안됨-null한번 허용동기화 처리를 하지 않기 때문에 데이터를 탐색하는 속도가 빠르다. 결국 HashTable과 ConcurrentHashMap보다 데이터를 찾는 속도는 빠르지만, 신뢰성과 안정성이 떨어진다. Hash Table, ConcurrentHashMap동기화 보장null 허용x성능은 ConcurrentHashMap이 더 우수 Hash Table, ConcurrentHashMap 의 차이점Hash Table메소드전체에 synchronized 키워드가 붙어 있다.  해당 키워드는 메소드 전체에 락을 건다.그래서 멀티 쓰레드 환경에서도 데이터의 무결성을 보장한다.안전하지만 성능이 느려진다. ConcurrentHashMap ConcurrentHashMap은 메소드 전체가 아닌 부..
Redis 란?
·
TIL
레디스란 무엇인가기본적으로 웹 환경에서 같은 시간에 동시다발적인 요청이 들어올 수 있다. 멀티스레드 환경에서는 여러 스레드가 한 자원을 공유하게 되면서 데이터 정합성 문제가 발생하게 된다. 해결방법으로 JPA의 비관적 락, 낙관적 락  Redis를 사용하는 방법으로 해결하고 있다.Redis는 분산 락(Distributed Lock) 방법을 이용해 동시성 문제를 제어한다. 분산 락은 이름 그대로 분산된 서버 또는 데이터베이스 환경에서도 동시성을 제어할 수 있는 방법이다. 레디스는 인메모리 데이터베이스의 한 종류이다. 그래서 기본적으로 디스크를 사용하는 데이터베이스보다 메모리를 사용하는 Redis가 더 빠르게 락을 획득 및 해제할 수 있기 때문에 사랑받는 기술중에 하나인듯하다. 왜 속도가 빠른가? 메모리 ..