전체 글
-
?? : DB 의 인덱스 가 뭔가요?ETC 2022. 11. 16. 10:09
인덱스란 인덱스란 임의의 규칙대로 부여된 임의의 대상을 가리키는 무언가 를 의미. 데이터 베이스에서의 인덱스는 대용량 데이터 에서 원하는 데이터를 빠르게 찾기위해 사용된다. 데이터 조회의 성능을 향상 시키기 위해 사용 조회만 향상시키기 위해 insert, update,delete 의 성능을 희생 대용량일시 효과가 더욱 좋다. index 또한 하나의 데이터베이스 객체이며 DB 에 따라 다르지만 스키마 객체 이거나 테이블 내의 객체로 존재하게된다. index 는 항상 최선의 정렬을 유지하며 index 를 사용하기위한 저장 공간이 필요로 한다. → 데이터베이스 크기의 약 10% 정도 차지 인덱스 = 정렬 인덱스가 적용되어있다 라고하는건 결국 데이터베이스안의 데이터들이 정해진 방식으로 정렬이 되어있다는 말이다...
-
그놈의 REST 한 APIETC 2022. 9. 27. 00:48
HTTP API HTTP API는 서로 정해둔 스펙으로 데이터를 주고받으며 통신하는것을 의미한다. 가장 중요한 특징으로 기능에대해 GET, POST, PUT, DELETE 등 메소드를 통해 여러 행동을 정의하게된다. 회원에 대한 API 를 예로 보면 http://server.com/users 위와 같은 API 스팩이 있을때 GET http://server.com/users //전체 유저 조회 GET http://server.com/users/k4keye //특정 유저 조회 POST http://server.com/users {id="k4keye"&pwd="pwd"} //특정 유저 생성 PUT http://server.com/users/k4keye {id="k4keye"&pwd="new pwd"} //특정..
-
HashMap 내용물 이해하기ETC 2022. 9. 10. 00:47
Map Map이라고 하는 것은 Key 와 Value를 연결하는 자료구조로 특징적인 부분은 Key와 Value 중 하나만 존재하지 않고 Key는 중복되지 않지만 Value는 중복될 수 있다는 특징이 있다. Java에서 Map은 인터페이스이며 내부적으로 구현이 되어있는 것은 아니다. 구현체로 가장 보편적인 것은 HashMap이다. public interface Map { int size(); boolean isEmpty(); boolean containsKey(Object key); boolean containsValue(Object value); V get(Object key); ... } HashMap public static void main(String[] args){ HashMap map = new..
-
@RequestBody 동작 이해하기Spring-Boot 2022. 9. 8. 19:53
API 의 Body 를 통해 JSON 데이터를 받기위해 @RequestBody 를 사용하여 받는다. 이는 JSON,XML 과 같은 HTTP 데이터 형식을 JSON 으로 변환한다. 스프링 내부에서 HttpMessageConverter을 통해 알맞는 오브젝트로 변환된다. 일단 간단한 API를 작성해서 확인해보자 @PostMapping("/request-body") public String requestBodyTest(@RequestBody RequestBodyTestDto requestBodyTestDto){ return requestBodyTestDto.getParamString(); } public class RequestBodyTestDto{ private String name; private int ..
-
그놈의 ECIES암호 2022. 9. 6. 09:03
TL;DR 엘리스는 자신의 개인키와 밥의 공개키로 대칭키를 만든다. 대칭키로 암호문을 생성하고 암호문의 무결성을 검사할수있는 값을 만들어 암호문과 함께 보낸다. 밥은 자신의 공개키와 엘리스의 개인키로 대칭키를 만든다. 암호문의 무결성을 검사한다. 대칭키로 엘리스의 암호문을 해독한다. Elliptic Curve Integrated Encryption Scheme ECIES 는 Hybrid Encryption Scheme 중에 하나로 Elliptic Curve 즉 타원곡선을 사용하는 암호를 의미하며 Encryption Scheme는 데이터를 암호화하여 전송하기위한 모든 과정을 나타내는 의미를 가진다. 즉 ECIES는 타원곡선을 활용하여 임의의 대칭키를 생성하고 상대의 공개키로 암호화해 전송후 이를 복호화해 ..
-
Hilt 사용Android 2022. 9. 5. 00:19
개요 기존의 DI를 구성하기위해 구글에서 제공한 Degger2를 사용하여 의존성 주입을 하였지만 높은 학습비용 및 많은 보일러플레이트 코드를 생성한다는 단점때문에 조금더 편한 DI 프레임워크가 나오게된다 이게 Hilt이다. Hilt는 Dagger를 쉽게 사용할수있도록 도와주는 도구이다. 💡Dagger 은 칼 종류이고 Hilt는 칼집 으로 네이밍 하였다. 프로젝트 세팅 의존성 추가 프로젝트 레벨 buildscript { repositories { } ext{ hiltVersion = '2.38.1' } dependencies { classpath "com.google.dagger:hilt-android-gradle-plugin:${hiltVersion}" } } 앱 레벨 plugins { id 'kotli..
-
RVA to RAW 쉽게 계산하기ETC 2022. 9. 4. 12:16
파일에서는 Offset로 위치를 표현하고 메모리에서는 address(VA) 로 위치를 표현하는데 위의사진에서는 파일과 메모리에서의 위치가 차이가난다. 그래서 메모리에서의 값을 확인한후 그위치를 수정하고자할때는 그위치의 Offset값을 구하여만 한다. RAW = RVA - VirtualAddress(VA) + PointerToRawData RAW은 파일에서의 주소 이다. RVA 는 메모리에서의 주소이다 VirtualAddress(VA) 은 메모리에서의 섹션시작위치이다. PointerToRawData 은 파일에서의 섹션 시작위치이다 위에서 RVA는 VA - ImageBase 로 구할수있는데 여기서 ImageBase 는 위에 사진에서의 메모리 시작 address를 보면 0부터 시작안하고 010000000 로시..
-
블록체인 확장성에 대한 문제 와 Rollupblock Chain/ETC 2022. 9. 3. 18:11
The Blockchain Trilemma 이 개념은 블록체인의 3가지 요소인 확장성, 보안성, 탈중앙성 을 모두 최대로 만족하기 어렵다. 따라서 3가지 요소중 하나를 포기하여 나머지 요소를 얻어야 한다. 시간이 지날수록 블록체인 네트워크 활동에 엄청난 수요가 생겼고 이로인해 가스 요금으로 인한 비용이 많이 발생한다.(확장성 문제) 또한 확장성에 대한 여러 문제중 가장 거론되는 문제는 거래 처리속도에 대한 문제이다. 이더리움 기준 평균 15개 정도의 거래를 처리할수있으며 비자 같은경우는 45000건의 처리가 가능한것에 비해 굉장히 부족한 처리 속도를 가지고있다. 지금의 블록체인의 디자인은 네트워크 전체 속도가 개별 노드의 처리속도 보다 높아질수없으며 개별 노드가 한번에 더 많은 일을 처리하여 속도를 올릴..