2022/10 19

[Blockchain] MerkleTree 코드 분석 및 구현 with Java

최근 개인 프로젝트를 진행하면서 Merkle Tree를 직접 구현해서 사용할 일이 생겼다. 파일 공유 서비스를 만들고 있는데 기존에 있었던 Merkle Tree 의 개념은 대용량 파일을 전송할때 응용해볼까 생각하고 있고 그 외에 개인적으로 MerkleTree 개념 자체를 새롭게 응용해서 FileTree라는걸 만들어볼까 생각하고 있다. 우선 개념부터 살펴보자. Merkle Tree는 일종의 해쉬 트리라고도 말할 수 있는데 개념이 워낙 간단해서 그냥 각 트리의 노드에 Hash값을 저장하는데 left와 right 자식의 Hash값을 더하여 Hash한 값을 그 부모가 다시 갖고 있는 구조이다. 즉 이렇게 거슬러 올라가면 root에 가서는 한개의 Hash 값이 나올 것이고 이 값은 leaf부터 hashing을 하..

블록체인 2022.10.27

[Java] 함수형 인터페이스

함수형 인터페이스는 오직 1개의 추상 메소드를 갖는 인터페이스를 말한다. Java8 부터 인터페이스가 구현체는 물론 Default Method 까지 포함할 수 있다고 한다. 그런데 이러한 요소들이 얼마나 있는지와는 관계없이 추상 메서드가 딱 하나 있다면 그걸 함수형 인터페이스라고 부른다고 한다. @FunctionalInterface 어노테이션을 사용해서 조건에 맞는지 검사할 수 있다. 또한 Java에서 기본적으로 제공하는 Functional Interface가 있다고 한다. 사실 실제로 Functional Interface 를 직접 만들어서 사용하는 경우는 드물고 이미 만들어져있는걸 주로 사용한다고 한다. 어디선가 한번쯤은 들어밨을 법한 Functional Interface들은 아래와 같다. 1. Pre..

Java lang 2022.10.24

대용량 파일 전송에 UDP가 적합하지 않은 이유

최근에 파일 공유 서비스를 만들고 있는데 클라이언트 단에서 파일을 암호화한 뒤 그 CipherText를 다른 Client에게 전송하는 기능을 구현할 일이 생겼다. 물론 CipherText자체가 꽤나 짧은 String이라서 전송하는 Data의 사이즈가 문제되진 않을 것이라고 생각했다. 하지만 추후에 대용량 파일 전송도 염두에 두고 있었기 때문에 TCP와 UDP 중 어느 것을 쓸지 고민하고 있었다. (물론 TCP를 당연히 써야겠다고 생각했지만 UDP를 쓸 순 없을까 고민하고 있었다.) 물론 File 전송은 비디오나 오디오가 아니기 때문에 전송에 있어서 확실한 보장이 필요하다. 그래서 대충은 결국은 TCP를 써야겠다고 생각하고 있었다. 실제로 TCP의 예로써 File전송이 언급되곤 한다. 하지만 개인적인 취향..

개발 정보 2022.10.24

개발자의 성장

최근 개발자의 성장에 대한 이야기가 많이 나오는 것 같다. 개발 유튜버들의 주제에서도 언급되고 트위터에서도 많은 의견이 오고 갔다. 개인적인 생각을 이야기하자면, 개발자의 성장이 업무 시간 외의 투자를 의미한다면 동의할 수 없다는 쪽이다. 일을 끝내고 퇴근한 뒤 해결하지 못했던 문제에 대해 고민하고 몰랐던 내용에 대해 공부하는 것은 좋지만 그것을 의무로 느껴서 반드시 해야한다고 스스로를 몰아붙일 이유는 없다고 생각한다. 종종 주변에서 일하고 계신 현직자분이나 아직 학생인 친구들의 이야기를 들어보면 개발자라는 직업과 본인의 정체성을 동일시하는 경우가 있는 것 같다. 인생에 있어서 직업이 큰 비중을 차지하는 것도 맞는 말이고 개인의 정체성 형성에 큰 영향을 끼치는 것 또한 마찬가지이지만 그것을 자신의 정체성..

생각들 2022.10.20

[Python3] python3의 itertools.groupby 사용

문제가 풀리지 않아서 솔루션을 찾아보던 중 처음보는 function을 사용하는 솔루션을 보게 되었다. groupby 라는 function 인데 이런걸 본적이 있나 싶었다. 검색을 해보니 pandas 에서 사용하는 groupby 가 가장 먼저 나왔다. 하지만 좀 더 찾아보니 pandas 의 groupby가 아니라 itertools 의 groupby 였다. pasdas groupy는 같은 값을 하나로 묶어 통계 또는 집계를 위해 사용한다고 한다. 만약 도시 별로 가격 평균을 구한다고 가정하면 아래와 같은 코드가 나올 수 있겠다. object.groupby('city').mean() 자세한 내용은 다음 링크에서 찾아볼 수 있다. https://ponyozzang.tistory.com/291 itertools의..

[C++] 임시 객체란 무엇인가? Temporary Object?

최근에 공부를 하던 중 교수님게서 C++ lock guard의 특정 동작에서 발생하는 버그를 말씀해주시면서 임시 객체라는 표현이 등장했다. 임시 객체라는 표현이 들어본 것 같으면서도 정확히 뭔지는 모르고 있다는 생각이 들었다. 예상하기론 다른 동작을 위해 생성되어 잠시 동안만 존재하고 희생적으로 사용되는 객체일 수 있겠다는 추측을 했다. 추측을 하고 났으니 이제 정확한 개념에 대해서 알아보자. 임시 객체는 실행 도중에 잠깐만 사용되는 객체이다. 소스 코드에도 없는 힙 이외의 공간에 생성된다고 한다. 그런데 임시 객체는 성능 저하를 유발하는 원인이 되기 때문에 Call by reference를 해서 임시 객체를 만들어주지 않는 것이 좋다고 한다. 참고로 이 예제는 C++을 예시로 들어 설명하고 있는 예제를..

C & C++/C++ 2022.10.19

[BOJ] 백준 2529 부등호 - Java 풀이

최근에 백준을 풀던 중 꽤 흥미로운 문제를 발견했다. 시간이 오래걸리기도 했는데 과정에서 꽤 재미를 느꼈다. 또한 배울점이 많은 코드라는 생각이 들어서 첨부했다. 조금 어렵다는 생각이 들기도 했는데 문제 자체가 굉장히 흥미로워서 그냥 붙잡고 불었다. 원래 좀 어려운 문제를 만나면 약간의 스트레스가 생기기 마련인데 이 문제는 그냥 재밌는 문제다. 다른 분들도 이 문제는 꼭 답지 보지 말고 풀어봤으면 한다. 백트래킹 문제인데 부루트포스도 같이 사용해서 풀 수 있는 문제이다. 문제는 아래와 같다. 문제 링크: https://www.acmicpc.net/problem/2529 자 간단하게 dfs 순회하면서 모든 가능한 경우의 대해서 돌아보면 된다. 물론 백트래킹 특성에 따라서 특정 조건에 따라서 가지치기하는 조..

[GDSC] GDSC 1기 합격 후기 (Google Developer Student Clubs)

우리 학교에서 진행하는 GDSC 1기에 합격했다. 면접을 보고 나서 떨어졌다고 생각했는데 며칠 뒤 Lead 님으로부터 온 메시지를 받고나서야 붙었다는걸 실감했다. GDSC에서는 스터디, 프로젝트 진행과 솔루션 챌린지를 하게 된다고 한다. 솔루션 챌린지에 대한 정보가 없었는데 찾아보니 지정된 몇가지 이슈에 대한 프로젝트를 진행한다고 한다. 환경, 에너지 등등 다양한 이슈가 주제로 나올 수 있다고 한다. 무엇보다 좋았던 것은 기술에 대해 자유롭게 말할 수 있는 공간이 생긴 점이다. 의견을 말하고 피드백을 받을 수 있는 공간이 필요했었는데 GDSC가 그 역할을 해줄 수 있다는 생각이 들었다. 다른 개발자들은 어떤 것을 공부하고 있고 기술에 대해 어떻게 생각하는지 항상 궁금했었다. 평소 기술에 대한 최신 정보를..

반응형