Programmers Weekly Challenge 12주 후기

12주의 Programmers Weekly Challenge 가 끝났습니다. ​ 취업 하자마자 위클리 챌린지가 시작 된 덕에, 매주 월요일에는 점심 식사를 빠르게 마친 후 프로그래머스에 새로 공개된 문제를 푸는 재미로 한주를 시작했었는데. 문제를 기다리던 즐거움이 사라진다는게 상당히 아쉽습니다. 한편으로는 취업한지 어느 덧 12주가 흘러가서. 12주동안 스스로의 성장에 대해도 되돌아보는 시간도 되었습니다. ​ 갑자기 2,4,6,7 주차 총 4개의 문제가 사라져 버려서 프로그래머스에 문의도 해 보았는데요 내부 사정이라고만 답을 해 주었습니다. 아무래도 라이선스 문제가 있지 않았을까 추측이 되지만 정확한 이유는 모르겠습니다. ​ 그래도 다행인건 문제 풀이를 했던 코드들은 모두 남아 있습니다. 문제까지 남기지..

Development/DevLife 2021.10.30
SSH를 이용한 Proxy, Dynamic Port Forwarding (SOCKS)

Intro Dynamic Port Forwarding 을 이용하면 ssh client의 로컬에 SOCKS 프록시 서버로 동작하는 소켓을 만들 수 있습니다. 클라이언트가 해당 포트에 접속하면, 그 연결은 리모트(ssh server) 머신으로 포워딩 되며, 목적지의 dynamic port로 전달 됩니다. 이 때, SOCKS proxy를 사용하는 모든 어플리케이션은 해당 SSH 서버에 접속되며, 서버는 모든 트래픽을 실제 목적지로 전달 합니다. Linux, macOS 등 Unix 시스템에서는 아래와 같은 방법으로 dynamic port forwarding(SOCKS)을 생성 할 수 있습니다. ssh -D [로컬아이피:]로컬포트 [USER아이디@]SSH서버 실습 바로 실습 해 보겠습니다. 아래의 주소의 curl..

Development/DevOps 2021.10.28
JAVA로 알아보는 힙 (Heap) 자료구조

Heap Heap은 최소값 및 최대값을 최대한 빠르게 찾아내기 위해 특별히 고안된 자료 구조 입니다. 완전 이진트리(마지막 레벨을 제외하고 모든 레벨이 완전히 채워져 있는 트리의 형태)를 기본으로 하고 있으며, 그 목적에 걸맞게 두개의 타입으로 나뉩니다. Max-Heap Max-Heap 에서 root 노드의 key는 무조건 해당 노드의 자식 노드들의 key보다 크거나 같습니다. 또한 같은 속성이 모든 sub-tree 들에게도 재귀적으로 적용됩니다. 간단히 말해 Max-Heap 트리에서 자식 노드에 딸린 트리 하나 하나가 모두 Max-Heap의 조건을 만족합니다. Min-heap Min-Heap 에서는 반대로 root 노드의 키값이 모든 자식들의 키 보다 작거나 같습니다. 또한 재귀적으로 자식 트리들 하나..

Development/Problem Solving 2021.10.16
Github / Gitlab SSH 공개 키 등록하기

Git CLI와 GUI 저는 MacOS에서 Github repository에 접근 할 때 Github Desktop을 사용 하고 있습니다. ​ Github Desktop의 완성도는 꽤나 괜찮은 편입니다. TypeScript로 작성 되어 있으며, Release Note를 확인해 보시면 거의 1주일에 한번 꼴로 꾸준히 업데이트가 됩니다. 심지어는 Microsoft에 인수된게 무색하게 발빠르게 Apple M1 칩셋에 대응도 했습니다. https://github.com/shiftkey/desktop/ Linux 버전의 Fork도 있어서 한번 테스트 해 보려 합니다. 이렇게 빠르게 치고 올라온 배경에는 Github Desktop이 완전한 Open Source 라는 강점이 있습니다. 반면 atlassian의 Sou..

Development/Git 2021.09.25
나만의 라이브러리 만들어 jitPack으로 배포하고 Maven/Gradle 에서 사용하기

Intro 나만의 유틸리티 / 모듈 프로젝트를 배포 해야 하는 이유 중복 코드 프로젝트를 진행하다 보면 여러 프로젝트 에서 공통으로 사용되는 유틸리티성 클래스를 만들 때가 있습니다. Apache의 Commons같은 경우가 재 사용 가능한 자바 기반의 컴포넌트들을 아놓은 통합 프로젝트로서 그런 용도로 사용됩니다. 하지만 모든 사용자에게 맞는건 아니여서 누구든 자주 사용하던 자신만의 유틸성 클래스를 꼭 만들게 되는데요. 여기저기 사용 된다고 해서 한번 만든 유틸성 클래스를 여러곳에 복사해서 붙여넣으면, 작업하다가 어디에선가 문제가 발견되었을때 여태까지 해당 클래스를 사용한 모든 클래스를 하나 하나 열어 코드를 일일히 찾아서 바꿔줘야 하는 번거로움이 있습니다. 자신만의 하나의 유틸리티성 통합 프로젝트를 만들어..

Development/DevOps 2021.09.12