분류 전체보기 441

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

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

Blockchain 2022.10.27

[Java] 함수형 인터페이스

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

Java 2022.10.24

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

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

개발 정보 2022.10.24

[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가 그 역할을 해줄 수 있다는 생각이 들었다. 다른 개발자들은 어떤 것을 공부하고 있고 기술에 대해 어떻게 생각하는지 항상 궁금했었다. 평소 기술에 대한 최신 정보를..

[Gradle] 일반 Java 프로젝트 진행 중 Gradle 로 프로젝트 변환하기

아래 블로그에서 도움을 받았다. 감사합니다. 는 아니고 임의로 gradle 파일들 설정하다가 완전 꼬여버렸다. 그냥 Gradle 프로젝트 새로 파서 거기로 옮겨주자. https://pmandocom.tistory.com/102 [JAVA] IntelliJ - 일반 JAVA 프로젝트를 Gradle 프로젝트로 변환하기 & Java file out of source root 오류 해결 공식 홈페이지를 참고했다. 1. 프로젝트 폴더에 build.gradle을 생성한다. 2. build.gradle에 다음의 내용을 넣는다. plugins{ id 'java' } group 'org.example' version '1.0-SNAPSHOT' repositories { mavenCen.. pmandocom.tistory..

Java 2022.09.29

[GDSC] GDSC 1기 면접 후기 (Google Developer Student Clubs)

GDSC 1기에 서류 통과했다는 소식을 주말에 전해들었다. (참고로 GDSC는 Google Developer Student Clubs의 약자로 구글에서 진행하는 프로그램이다. 구글 기술에 관심있는 전세계 대학생들을 대상으로 진행하는 프로그램이고 자유로운 스터디와 기술 세션 등이 진행되는 프로그램이다.) 이후 면접을 진행하게 되었는데 선착순으로 면접 시간을 정할 수 있어서 오늘 오전 9시와 10시 사이로 잡게 되었다. 면접은 Lead 님께서 직접 참여하셔서 일대일로 진행했다. 분위기를 편하게 만들어주시려고 배려해주시는 점이 감사했다. 최근 근황, 관심있는 분야 등에 대해 가볍게 물어보셨다. 특히 말하는 내용을 모두 경청해주시면서 최대한 내 이야기를 할 수 있도록 이끌어주신 점이 감사했다. 평소에 말하고 싶..

[Git] Hyper-v 설정 적용 이후 Git push 에러

최근 실습때문에 Hyper-v 를 on으로 바꿀 일이 있었는데 이후에 코딩을 하던 중 git push origin main이 먹히질 않는 문제를 발견했다. 보기에는 단순히 로그인 access가 만료되었다고 떠서 다시 로그인하면 될 것 같은데 사실 문제는 그게 아니다. Hyper-v를 켜둬서 문제가 생긴거다. 왜 Hyper-v가 영향을 준건진 모르겠지만 방금 확실하게 테스트해본 결과 Hyper-v를 켜두면 git push 가 안먹히고 Hyper-v를 꺼두니 이제서야 git push 가 잘 먹힌다. 어떤 연관관계가 있을까. 지금은 모르겠다. 확실한건 도커든 뭐든 간에 뭘쓰다가 이상하다 싶으면 혹시 며칠전에 Hyper-v 관련해서 작업해본 적이 있었는지 떠올려보면 될 것 같다.

인프라/Git 2022.09.21

[SW] SOLID 원칙이란 무엇인가?

SOLID 원칙이란 무엇인가? SRP (Single responsibility principle): 단일 책임 원칙이다. 즉 클래스는 하나의 책임만 가져야 한다는 뜻이다. OCP (Open/closed principle): 개방-폐쇄 원칙이다. 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다는 뜻이다. LSP (Liskov substitution principle): 리스코프 치환 원칙으로 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다는 뜻이다. ISP (Interface segregation principle): 인터페이스 분리 원칙이다. 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다는 뜻이다. DIP ..

개발 정보 2022.09.18

[LeetCode] LeetCode 1576. Replace All ?'s to Avoid Consecutive Repeating Characters - python3

간만에 재밌는 문제를 만났다. 1576. Replace All ?'s to Avoid Consecutive Repeating Characters 문제인데 문제 자체도 재밌고 풀이 방식을 보던 중 꽤나 기발한 접근법을 보게 되어서 인상깊어서 기록해둔다. 우선 문제 링크는 아래와 같다. https://leetcode.com/problems/replace-all-s-to-avoid-consecutive-repeating-characters/ Replace All ?'s to Avoid Consecutive Repeating Characters - LeetCode Level up your coding skills and quickly land a job. This is the best place to expan..

[LeetCode] LeetCode 1572 - matrix-diagonal-sum - Python3

최근 심심해서 리트코드 문제를 몇개 풀었는데 그 중 재밌는 문제가 몇개 있어서 정리해본다. 1572번 문제이다. EASY인데 첫번째 솔루션에 비해서 코드를 꽤나 효율적으로 개선해서 정리해볼 필요가 있다고 생각해서 적어둔다. 일단 아래는 첫번째 제출한 솔루션이다. 꽤나 비효율적이라는걸 알 수 있다. 일단 for loop 이 두개 있다는것부터 비효율적이다. ''' Runtime: 207 ms, faster than 24.29% of Python3 online submissions for Matrix Diagonal Sum. Memory Usage: 14.1 MB, less than 57.39% of Python3 online submissions for Matrix Diagonal Sum. ''' class..

[Django] Django 에서 테스트 코드 부분 실행하기

만약 테스트 코드를 일부 실행하고 싶다면 아래와 같이 진행하면 된다. app 명 + 테스트 코드 디렉토리명 + 테스트 코드 .py파일명 + 테스트 코드 클래스 + 테스트 클래스 메서드 명 순으로 적어주면 된다. # Run the specified module python3 manage.py test catalog.tests # Run the specified module python3 manage.py test catalog.tests.test_models # Run the specified class python3 manage.py test catalog.tests.test_models.YourTestClass # Run the specified method python3 manage.py test c..

Python3/Django 2022.08.18

[Django] CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.

Django 를 production 상에서 운용할때는 반드시 DEBUG = False 로 두고 실행해야 한다. 그 이유는 DEBUG = True 로 두고 운용을 하게 되면 서버 운용 중 발생한 오류가 사용자에게 보이기 때문이다. 이 때문에 해커가 프로젝트의 구조를 파악할 수도 있게 된다. 그래서 반드시 DEBUG=False 로 두고 운용해야 하는데 막상 DEBUG = False 로 두고 runserver 를 돌리니 다음과 같은 에러가 발생했다. CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False. 어떻게 해결할 수 있을까? 해결법은 간단하다. 에러 로그가 하는 말 그대로 진행하면 된다 . settings.py 에 있는 ALLOWED_H..

Python3/Django 2022.08.18

[Django] drf-yasg가 적용되지 않을때 + ImportError: cannot import name 'url' from 'django.conf.urls' + frozen importlib

Django 를 사용해서 api 개발을 하던 중 api 스펙을 자동으로 생성해주는 drf-yasg 를 사용하려고 했다. 그런데 계속 frozen importlib 에러가 지속적으로 발생했고 django.conf.urls 에서 url 을 import 할 수 없다는 에러가 발생했다. 근데 당시에는 너무 바쁘고 일이 많아서 api 자동 생성을 후순위로 밀어두고 기능 개발을 빠르게 진행했었다. 그러다가 다시 api 를 살펴볼 일이 생겼는데 아예 오늘 drf-yasg 오류를 잡고 api generation을 끝내자고 생각해서 문제를 해결하게 되었다. 우선 ImportError: cannot import name 'url' from 'django.conf.urls' 는 버전 이슈다. 스택오버플로우를 참고한 결과 아..

Python3/Django 2022.08.18

[Github] private repository 에 push하기 + ssh-keygen

private repository 에서 작업하면서 인증키를 등록해놓은 상태여서 push 하는데 문제가 없었다. 다만 문제는 근 몇주간 클라우드 세팅때문에 코드 작업을 거의 진행하지 못했는데 갑작스레 인증키가 invalid 하다는 에러가 떠서 push 가 되지 않았다. 우선 아래와 같은 명령어를 입력해주자. $ ssh-keygen 이후 passphare 등을 묻지만 그냥 엔터로 입력하고 지나가도 무방하다. 그리고 나서 키가 생성되는 위치와 함께 키 생성이 완료됬음을 알 수 있다. 그리고 cat 명령어를 통해 id_rsa.pub 키를 알아낸다. 자 이제 이 pub 키를 github 에 가서 등록해줘야지만 private repository 에 push 를 할 수 있다. 그리고 이후 아래와 같은 과정을 거쳐서 ..

인프라/Git 2022.08.18

[Dev] 10월 4일 페이스북 대규모 장애 원인 간단 정리

2020년 10월 4일 페이스북은 물론이고 인스타그램, 왓츠앱 모두가 한꺼번에 접속되지 않는 문제가 발생했다고 한다.  장애 원인은 간단하게 정리할 수 있었다.  페이스북의 라우트가 라우터에서 즉 쉽게 말해 네트워크 상에서 없어졌기 때문이다. 즉 페이스북으로 무언가를 보내는 길 자체가 사라졌기 때문에 전 세계 어느 곳에서도 페이스북을 이용할 수 없게 된 것이다.  기업이 커지게 되면 하나의 작은 망을 구축해서 쓰게 되는데 페이스북도 마찬가지로 모든 서버들이 하나의 단일 지점을 기준으로 외부와 소통하고 있던 상태였다. 그런데 이 연결지점인 라우터가 자신이 facebook이라는 것을 외부로 알려주는 것을 중단했기 때문에 발생한 문제이다.  내부 개발자가 실수로 설정 정보에 라우터의 정보를 삭제하는 설정까지 ..

개발 정보 2022.07.29

[NCP] NCP 서버 생성 중 오류 발생 대응

NCP 사용 중 아래 에러가 발생했다. 관련 조치를 정리해둔다.   서버 생성 중 오류가 발생하였습니다. 점검 및 조치 방법은 설명서를 참고해주세요. 서버 강제 정지를 원할 경우 콘솔의 강제정지 버튼을 눌러주세요.  xentools version 이슈 -> 해결방법은 Xentools Re-install하면 된다고 합니다. 리눅스에서 Xentools를 재설치 하라고 합니다. 잘못된 fstab 설정 오류 ->   mount -av명령으로 /etc/fstab내용 진단 해서 해결할 수 있다고 합니다. window update 및 file system checkgin kernel 업데이트 오류 resolv.conf 오류

Cloud/NCP 2022.07.22

[NCP] Naver cloud platform 기초 학습 내용 정리 (입문)

NCP VPC 정의 VPC(Virtual Private Cloud)는 퍼블릭 클라우드 환경에서 사용할 수 있는 고객 전용 사설 네트워크임. 다른 네트워크와 논리적으로 분리되어 있어 IT 인프라를 안전하게 구축하고 간편하게 관리할 수 있음. 기존의 데이터 센터 네트워크와 유사하게 구현가능 기능 다른 네트워크의 간섭없이 완전히 분리된 네트워크 사용가능 VPC내부에 서브넷 생성 가능 Access Control을 통해 네트워크 접근을 제어하여 강력한 보안을 제공함. (ACG는 서버 단계의 접근을 제어하고 Network ACL은 서브넷 단계의 접근을 제어함) Cloud Connect와 Managed IPsec VPN을 통해 외부 네트워크와 안전하게 통신 가능 VPC내부에서 통신이 가능함. VPC Peering을 ..

Cloud/NCP 2022.07.21
반응형