- 안정 해시 설계 2starryeye안정 해시에 대해 더 깊게 알아보자. (Consistence Hashing, 일관된 해싱) 안정 해시 알고리즘은 MIT에서 처음 제안 되었다. 안정 해시 알고리즘의 기본 절차는 다음과 같다. 1. 서버와 키를 균등 분포 해시 함수를 사용하여 해시 링에 배치한다. 2. 키의 위치에서 링을 시계 방향으로 탐색하다 만나는 최초의 서버가 키가 저장될 서버이다. 위 절차는 문제점이 있다.. 1. 서버가 추가되거나 삭제되는 상황에서 각 서버에 매핑될 파티션 크기를 균등하게 유지할 수가 없다.. -> 서버가 하나 제거된다면 제거된 서버의 매핑 공간은 다음 서버에 추가되므로 -> 서버간 매핑 공간은 불균형을 이루게 된다. 2. 키의 균등 분포를 달성하기 어렵다. -> 서버가 추가되거나 삭제되는 상황이 지속되면.. ->..
- 2022-09-03 03:16:00
- 안정 해시 설계 1starryeye수평적 규모 확장성을 달성하기 위해서는 트래픽 또는 데이터를 서버에 균등하게 나누는 것이 중요하다. 이를 위한 보편적 기술! 안정 해시! (Consistence Hashing, 일관된 해싱이라 부르기도 함) 안정 해시에 대해 알아보기 전, 해시 키 재배치 문제에 대해 알아보자. N개의 캐시 서버가 있으면, 가장 쉽게 떠오르는 부하 분산 방법은 아래의 해시 함수를 이용하는 것이다. serverIndex = hash(key) % N 위 방법은 서버 개수가 고정되어 있고 데이터 분포가 균등하다면 잘 동작한다. 하지만... 서버가 추가되거나 삭제된다면? N이 바뀌니까.. index가 확 바뀌고.. 대부분의 데이터가 재배치된다.. 데이터가 재배치 되면서 균등하지 않게 배치가 될 가능성이 존재한다. 이는 곧바로 대..
- 2022-09-03 02:50:42
- MyBatis 1starryeyeMyBatis는 JdbcTemplate보다 더 많은 기능을 제공하는 SQL Mapper이다. 가장 큰 장점 SQL을 XML에 편리하게 작성할 수 있다. 동적 쿼리를 편리하게 작성할 수 있다. MyBatis 공식 사이트 MyBatis – 마이바티스 3 | 소개 MyBatis – 마이바티스 3 | 소개 마이바티스는 무엇인가? 마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 JDBC로 처리하는 상당부분의 코드와 mybatis.org MyBatis 스프링 공식 메뉴얼 https://mybatis.org/spring/ko/index.html mybatis-spring – 소개 MyBatis-Spring 은 무엇일까? 마이바티스 스프링 연..
- 2022-08-23 01:35:34
- [Java 정리] Thread 6starryeye이미 알던 지식이지만, 기본으로 돌아가서.. Java의 관점에서 한번 정리해보자. volatile 멀티 코어 프로세서 환경에서는 코어마다 별도의 캐시(레지스트리)를 가지고 있다. 코어는 메모리에서 읽어온 값을 캐시에 저장하고 캐시에서 값을 읽어서 작업한다. 다시 같은 값을 읽을 때는 캐시에 존재하지 않을 경우에만 메모리에서 읽어 온다. 그러면.. A코어에 의해 메모리에 저장된 변수의 값이 변경 되었는데.. B코어의 캐시에 저장된 값이 갱신 되지 않았다면.. 데이터가 다르므로.. 프로그램은 예상치 못한 흐름으로 동작한다. 해결법은.. 변수 앞에 volatile 키워드를 붙이면 코어가 변수의 값을 읽을 때 항상 메모리에서 읽어오게 된다. 따라서.. 캐시와 메모리간의 값의 불일치가 해결된다. volatile은..
- 2022-08-22 03:07:37
- [Java 정리] Thread 5starryeye이미 알던 지식이지만, 기본으로 돌아가서.. Java의 관점에서 한번 정리해보자. Lock과 Condition을 이용한 동기화 java.util.concurrent.locks 패키지가 제공하는 lock 클래스들을 이용한 동기화 방법에 대해 알아보자. (JDK1.5) ReentrantLock 클래스 재진입이 가능한 lock, 가장 일반적인 배타 lock이다. 앞서 wait(), notify() 메서드 처럼.. 특정 조건에서 lock을 풀고 나중에 다시 lock을 획득하여 이후의 임계영역 작업을 수행할 수 있다. ReentrantReadWriteLock 클래스 읽기를 위한 lock과 쓰기를 위한 lock을 제공한다. 읽기를 위한 lock이 이미 걸려있는데 다른 쓰레드가 읽고 싶으면 읽기 lock을 중복해서 ..
- 2022-08-22 02:20:02
- [Java 정리] Thread 4starryeye이미 알던 지식이지만, 기본으로 돌아가서.. Java의 관점에서 한번 정리해보자. 쓰레드의 동기화 멀티쓰레드 프로세스의 경우 여러 쓰레드가 같은 프로세스 내의 자원을 공유해서 작업하기 때문에 서로의 작업에 영향을 주게된다. 따라서, 한 쓰레드가 특정 작업을 끝마치기 전까지 다른 쓰레드에 의해 방해받지 않도록 하는 것이 필요하다. 그래서 도입된 개념이 임계 영역(Critical section)과 락(lock)이다. 공유 데이터를 사용하는 코드 영역을 임계 영역으로 지정해놓고, 공유 데이터(객체)가 가지고 있는 lock을 획득한 단 하나의 쓰레드만 이 영역 내의 코드를 수행할 수 있도록 한다. 그리고 해당 쓰레드가 임계 영역 내의 모든 코드를 수행하고 벗어나서 lock을 반남해야만 다른 쓰레드가 반납된 lo..
- 2022-08-22 01:21:50
- [Java 정리] Thread 3starryeye이미 알던 지식이지만, 기본으로 돌아가서.. Java의 관점에서 한번 정리해보자. 쓰레드의 실행 제어 메서드 쓰레드 상태를 다시 한번 보고 들어가자.. 상태 설명 NEW 쓰레드가 생성되고 아직 start()가 호출되지 않은 상태 RUNNABLE 실행 중 또는 실행 가능한(실행 대기) 상태 BLOCKED 동기화 블럭에 의해 일시정지된 상태 (lock이 풀릴 때까지 기다리는 상태) WAITING 쓰레드의 작업이 종료되지는 않았지만 실행가능하지 않은 일시정지 상태이다. TIMED_WAITING WAITING와 동일하나 일시정지 시간이 지정된 경우의 일시정지 상태이다. TERMINATED 쓰레드의 작업이 종료된 상태 sleep() 일정 시간 동안 쓰레드를 멈추게 한다. public static native vo..
- 2022-08-19 23:20:31
- [C++] templatestarryeye다 아는 내용이지만 다시 정리 해보자.. C++의 템플릿 사용자가 원하는 타입을 넣어주면 알아서 코드를 찍어내는 틀이다. class template 클래스 템플릿 std::vector와 비슷한 역할을 하는 myVector 라는 클래스로 설명하겠다.. template class myVector { T* data; int capacity; ... } 위 코드에서 template 라는 부분은.. 템플릿 문장이다. 아래에 정의되는 myVector라는 클래스에 대해 템플릿을 정의하고, 템플릿 인자로 T를 받게 되며, T는 반드시 어떤 타입 이름임을 명시한다. template 위 처럼 쓰기도 하는데 template 와 기능상 정확히 동일하다. 과거 C++에서는 template 인자로 class 키워드를 사용했지만,..
- 2022-08-14 23:56:37
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)