Amazon DynamoDB 는 중단없이 확장가능한 빠르고 예측가능한 성능을 제공하는 NoSQL 데이터베이스이다. DynamoDB 는 분산 데이터베이스의 운영, 스케일링과 같은 관리 측면의 짐을 덜어줌으로서 사용자들이 설정, 복제, 소프트웨어 업그레이드, 클러스터 스케일링과 같은 작업들에 신경쓰지 않도록 서비스를 제공한다. 또한, DynamoDB 는 민감 데이터를 보호하기위한 운영 측면의 복잡한 작업인 암호화를 제공한다. DynamoDB 암호화 DynamoDB 에서는 필요한 테이블을 생성하여 어떠한 양의 데이터라도 저장할 수 있으며 어떤 수준의 트래픽이라도 검색 기능을 제공할 수 있다. 다운 타임과 성능 저하가 없는 스케일 업/다운을 통하여 테이블의 처리량을 조절할 수 있다. AWS console 을 이..
JPA 를 사용할때 N+1 로 인한 성능 저하는 경계해야할 대표적인 문제중에 하나입니다. N+1 이 발생하는 경우는 여러가지가 있지만 그 중에서 referncedColmnName 과 관련된 내용을 코드 분석과 함께 알아보고자 합니다. N+1 재현 환경 Repo : https://github.com/SonUngBea/hibernate-project/tree/N%2B1/referencedName ERD DATA Student School Code Student Entity - NOTE : @ManyToOne 으로 Join 을 걸때 school 의 PK 인 id 가 아닌 name 으로 Join 을 걸었다. @Entity public class Student implements Serializable { @Id..
Object.wait() : 현재 Object Monitor 를 획득하고 있는 Thread 의 Monitor 소유권을 해제하고 Thread 를 WAITING 상태로 만든다. wait() 메서드는 synchronzied 블록 안에서만 호출 가능하다. 중요한 것은 Lock 을 해제하고 Thread 가 WAITING 상태가 된다는 것! Object.notify() : 해당 Object Montior 의 WAITING 상태인 Thread 들 중 하나를 깨운다. 깨어난 Thread 는 Lock 을 얻기 위한 경쟁 상태인 BLOCKED 상태가 된다. Object.notifyAll() : 해당 Object Monitor 의 WAITING 상태인 Thread 들 전부를 깨운다. notify() 와 마찬가지로 깨어난 ..
JPA 를 사용하여 Repository Bean 을 생성할때 class 가 아닌 interface 로 선언하여 사용하게 된다. 어떻게 interface 만으로 객체가 생성되어 빈으로 등록되는지, 함수의 구현 없이 이름을 정의하는 것 만으로 쿼리가 만들어져서 동작하는지 궁금하여 조사를 시작하게 되었다. 아래 테스트 코드에 사용된 라이브러리 버전은 아래와 같다. implementation group: 'org.springframework', name: 'spring-context', version: '5.3.19' //AOP implementation group: 'org.aspectj', name: 'aspectjweaver', version: '1.9.9.1' //JPA implementation gro..
AbstractAutoProxyCreatorSpring 에서는 AOP 기능을 수행하기위해 객체를 빈으로 등록하기 전에 Proxy 로 감싸진 클래스를 생성하여 빈으로 관리한다. 이때 사용되는 Proxy Library 가 CGLIB 와 Dynamic Proxy 이다. 이 중 CGLIB 가 만들어지는 과정을 코드 레벨로 확인한다. 테스트 코드 작성에 사용된 spring, aspectj 버전은 아래와 같다. implementation group: 'org.springframework', name: 'spring-context', version: '5.3.19' implementation group: 'org.aspectj', name: 'aspectjweaver', version: '1.9.9.1' Spring..
StringBuilder 와 StringBuffer 모두 AbstractStringBuilder 를 상속받아 메서드를 구현하고 있다. 두 클래스는 모두 String 을 만들기 위해 사용되지만 어떤 차이점으로 인해 구분되어있는지를 확인해본다. append() 함수로 알아보는 두 클래스의 차이 StringBuilder.java 의 append() 함수 @Override public StringBuilder append(String str) { super.append(str); return this; } StringBuffer.java 의 append() 함수 @Override public synchronized StringBuffer append(String str) { toStringCache = null..
BinaryMessageEncoder / BinaryMessageDecoder 예제 코드 public class BinaryMessageEncoderMain { public static final String TEST_FILE_NAME = "serizlied-object.avro"; public static void main(String[] args) throws IOException { AvroExampleDto before = AvroExampleDto.newBuilder().setTestNickName("Woongs").setTestTeamName("Platform").setTestName("Sondevv").build(); write(before); AvroExampleDto after = rea..
Primitive Types null : 값이 없음 boolean : a binary 값 int : 32-bit signed integer long : 64-bit signed integer float : single precision (32-bit) IEEE 754 소숫점 숫자 double : double precision (64-bit) IEEE 소숫점 숫자 bytes : 8-bit unsigned 바이트 배열 string : unicode characther 배열 Primitive 타입은 속성을 갖지 않는다. Primitive 타입 이름은 또한 type name 으로 정의된다. 그래서 예를들어 "string" Schema 는 {"type":"string"} 과 동일하다. Complex Types A..
Download Avro library Dependency org.apache.avro avro 1.11.0 Avro Plugin org.apache.avro avro-maven-plugin 1.11.0 generate-sources schema ${project.basedir}/src/main/avro/ ${project.basedir}/src/main/java/ org.apache.maven.plugins maven-compiler-plugin 1.8 1.8 Defining a schema Avro 의 Schema 는 JSON 으로 정의되어있다. Schema 는 Primitive type 과 Complext Type 으로 구성되어있다. {"namespace": "example.avro", "type"..
- Total
- Today
- Yesterday
- MariaDB
- HashMap
- dynamodb
- Flux
- referencedColumnName
- GlobalFilter
- reactor
- rate limit
- ConcurrentHashMap
- wait()
- msyql-connector-java
- notifyAll()
- router
- spring cloud gateway
- RoutePredication
- N+1
- RouteDefinition
- mariadb-connector-j
- custom config data convertion
- mariada-connector
- getBoolean
- ResultSet
- DyanomoDB
- Seperate Chaining
- aurora
- circurit breaker
- Lazy
- reative
- notify()
- AbstractMethodError
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |