Computer 80

[Python] 인스턴스 변수 vs 클래스 변수

Generally speaking, instance variables are for data unique to each instance and class variables are for attributes and methods shared by all instances of the class: https://docs.python.org/3/tutorial/classes.html#class-and-instance-variables 인스턴스 변수 : 각 인스턴스의 고유한 데이터 클래스 변수 : 모든 클래스 인스턴스에 공유되는 데이터 및 메소드 class Foo: classVar = 0 def __init__(self, classVar, instanceVar): self.instanceVar = instanc..

python 2020.08.07

[Storj] 데이터 감사

데이터가 업로드 될 때 데이터의 95%는 검사된 노드, 5%는 검사되지 않은 노드에 저장됩니다. (검사되었다는 것은 무엇을 의미하는가?) Satellite는 storagenode가 데이터를 잘 가지고 있는지 주기적으로 감사합니다. (주기는 어느정도?) audit observer는 segment들을 순회하며 해당 세그먼트들을 가지고 있는 노드들로 찾아가는 경로를 저수지 샘플링(reservoir sampling) 방식으로 선정합니다. metainfo단위로 segment를 한번 순회하고나면 저수지(reservoir)에 있는 segment들을 무작위로 감사 큐에 넣습니다. - https://github.com/storj/storj/blob/master/satellite/audit/chore.go#L45 audi..

BlockChain/Storj 2020.05.20

CMake 시작하기

Step 1) CMake 기본기 실행파일 빌드하기 대부분의 CMake 프로젝트는 소스 코드파일로 부터 실행파일을 빌드하는 것 입니다. 아래 CMakeLists.txt 파일로 실행파일을 빌드할 수 있습니다. cmake_minimum_required (VERSION 2.6) project (Tutorial) add_executable(Tutorial tutorial.cxx) 변수 정의 및 파일 템플릿 CMakeLists.txt 파일에서 변수를 정의하면 파일 템플릿에서 그 변수를 사용할 수 있습니다. 다음 예제들은 CMakeLists.txt 파일에서 버전 변수를 정의하고 헤더 파일 템플릿에서 버전 변수를 사용하여 헤더 파일을 만든 후 소스 코드에서 버전값을 사용하는 방법을 보여줍니다. 이 방법으로 소스 코드 ..

Linux 2019.06.16

Log Structured Merge(LSM) Tree

LSM의 Write Log Structured Merge Tree에서는 Update에 대해 Update-in-Place가 아닌 Append 방식으로 수행합니다. 분산된 Record들에 대해 Position을 찾은 후 Update 하는 과정을 제거함으로서 Write 성능을 개선했습니다. 실제로 Sequential I/O는 Random I/O 대비 Memory에서도 10배 가까이 빠른 성능을 보입니다. Append Write는 Sequential Disk I/O 입니다. Sequential Write을 사용하는 데이터 관리 구조는 Logging / Journaling / Heap file이 있습니다. 이 구조들은 Sequential Write를 사용함으로서 실제 Write 성능이 이론적인 Disk Write..

CS/Data Structure 2019.05.07

gRPC 메소드 종류

gRPC에서 사용 가능한 서비스 메소드 종류 1. Simple req/resFormat : rpc 메소드명(req_TYPE) returns (res_TYPE) { }- client가 server로 stub을 사용하여 request를 보내고 response를 기다립니다.2. Server-side StreamingFormat : rpc 메소드명(req_TYPE) returns (stream res_TYPE) { }- client가 server로 요청을 보내 stream을 얻습니다. - 이 stream을 통해 server에서 돌아오는 메시지 시퀀스들을 읽습니다. - 메시지가 끊길 때 까지 stream을 읽습니다. - response type 이전에 stream 키워드를 명시해 줍니다.3. Client-side..

카테고리 없음 2019.03.07

PKIX Path Building Failed

tomcat에 인증서 경로를 넣어주면 문제없겠다고 생각했었는데 jvm에 인증서를 등록해야 한다더라. jvm에 인증서를 등록한다는 개념조차 없었는데 하하 jvm 또는 java에 인증서를 등록한다 라고 표현하는 것 같다.일단 에러를 해결하기 위한 마법의 명령어를 제시하자면 다음과 같다.keytool -import -trustcacerts -alias letsencrypt -file [공개키경로(pem형식)] -keypass [비밀번호] -keystore ${JAVA_HOME}/jre/lib/security/cacerts -storepass changeit 나의 경우 jre/lib/security/cacerts 경로를 주면서 등록했는데 용어 정리도 할 겸 여기서 의문점 몇가지 1. cacerts 파일은 뭐지?..

Network 2018.07.19

리버스 프록시 뒤에서 동작하는 https

보통 리버스 프록시 환경을 구축할 때 프록시 서버로는 apache나 nginx 같은 것을 사용하고 그 뒷단에 웹 서버를 비롯하여 다양한 애플리케이션 서비스를 올린다.이렇게 하면 애플리케이션 서비스의 서버 정보를 감출 수도 있고 요청을 분산시켜서 로드밸런싱 기능을 구현할 수도 있다.리버스 프록시 환경에서는 일반적으로 프록시단 까지만 암호화 연결(https)을 적용하고 프록시 뒷단으로는 암호화 되지 않은 트래픽(http)로 통신하는 것으로 구현한다.프록시 뒤로 지나가는 트래픽에 대해 보안이 적용되지 않았다는 점이 마음에 걸리긴 하지만 이렇게 하면 프록시 뒷단까지 암호화 연결을 적용하는 것에 비해서 부하는 적게 들것 같다. 그렇다면 어떤 경우에 프록시 뒷단의 암호화가 필요할지 궁금해서 검색을 한 결과 다음과 ..

Network 2018.07.12