(DB) 분산 DB, 파티셔닝 (partitioning ), 샤딩 (sharding)
파티셔닝(단편화) 란? 저장해야 하는 정보가 많은 대규모 시스템의 경우 하나의 DB에 모든 정보를 저장해서는 제대로 된 응답성을 기대할 수 없다. read가 많이 발생하든, write가 많이 발생하든 DB 저장하는 정보가 많을 수록 스캔 속도도 느려지고, 요청이 많은 경우 큐에 작업이 쌓이면서 응답도 느려진다. 그래서 DB를 여러대 운용해서 응답을 ...
파티셔닝(단편화) 란? 저장해야 하는 정보가 많은 대규모 시스템의 경우 하나의 DB에 모든 정보를 저장해서는 제대로 된 응답성을 기대할 수 없다. read가 많이 발생하든, write가 많이 발생하든 DB 저장하는 정보가 많을 수록 스캔 속도도 느려지고, 요청이 많은 경우 큐에 작업이 쌓이면서 응답도 느려진다. 그래서 DB를 여러대 운용해서 응답을 ...
- 제휴사 API 서버 <> Npay 서버 연결 작업을 각자 진행한 후, 이를 하나로 통합하는 과정에서 비즈니스 로직 코드 중복이 발생함. 코드 중복을 해결하면서 제휴사 마다 다른 구현 사항을 고려하여 처음 설계한 아키텍쳐는, PointChangeService라는 abstract class에 공통 로직을 작성하고, 각 제휴사 마다 다른...
상황은 이렇다. 전환 진행 중인 유저가 중복으로 전환을 요청하면 튕겨내주도록 코딩했고, 사파리나 IE 등에서는 실제로 중복 요청을 잘 막아 주었다. 예상 시퀀스 그런데 크롬에서는 브라우저 2개 띄워놓고 각각 1번 씩 “전환” 버튼을 눌러 요청(a, b)하면, a 요청에 대한 응답이 돌아오고 나서 b 요청도 정상적으로 처리가 되는 것이었다. 크...
AOP(Aspect Oriented Programming)는 언제 유용한가? 가끔 AOP를 쓰지 말아야 할 곳에 AOP를 쓰는 경우를 보게 된다. 어떤 기능은, 쓸 수 있다고 쓰는게 아니라, 쓰는게 효용이 있을 때 확실한 근거를 가지고 올바르게 써야한다. AOP를 쓰기 전에 이런 물음을 던져보아야 한다. ‘어떤 기능이 현재 클래스의 관심 밖이라면...
기본 Hystrix 라이브러리는 직접 HystrixCommand를 상속받아 정의해서 써야 하므로 약간 번거롭다. Spring을 쓰고 있다면 @HystrixCommand 애너테이션으로 이런 번거로운 설정을 대신하는 라이브러리를 도입할 수 있다. 아래 dependency를 추가하도록 하자. <dependency> <groupId>o...
class PointChangeController { private final ApplicationContext context; void method() { // common logic 1 PointChangeService pointChangeService = context.getBean( ...
포인트 읽기 - 포인트 차감 순으로 Mysql DB 작업이 발생하는 상황이었다. @Transactional public foo bar() { // SELECT MemberRestMileageInfo member = getMemberMileageByKey(memberKey); ... // UPDATE memberIn...
H2 세팅 build.gradle 설정 runtimeOnly 'com.h2database:h2' // runtimeOnly 'com.h2database:h2:1.4.193' 반드시 버전을 명시해줄 것. 버전 명시하지 않을 시 최신 버전이 설치되는데, 콘솔에서 connect해보면 자동으로 db 파일을 생성할 수 없어서 에러가...
ParameterizedTypeReference Response 받을 때, Generic 타입으로 매핑하여 받고 싶은 경우가 있다. // err! DefaultResponseWrapper<UserInfoResponse> userInfoResponseWrapper = restTemplate.postForObject( userInfo...
beanvalidation.org/2.0/spec/#builtinconstraints https://www.baeldung.com/javax-validation @Size, @Past, @Min(1) @Pattern 등 애너테이션이 어떤 제약조건을 가지고 있는지 확인하려면 그냥 애너테이션 소스 확인해보면 된다. 참고로 @Ema...