Development 46

JAVA로 알아보는 힙 (Heap) 자료구조

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

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/DevOps 2021.09.25

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

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

Development/DevOps 2021.09.12

블로그에 포스팅 읽는데 걸리는 시간 표시해주기 by reading-time.js

블로그에 포스팅 읽는데 걸리는 시간 표시해주기 by reading-time.js https://shanepark.tistory.com/224 에 이어지는 글 입니다. 이번에는 블로그에서 직접 적용을 시켜보도록 하겠습니다. ​ ​ 블로그 적용하기 전 화면입니다. 작성 일 우측에 공간이 꽤 남기 때문에 해당 공간이 넣으면 되겠습니다. 우측 상단 버튼을 눌러 블로그 관리에 들어 갑니다. ​ 그러고 나서 좌측의 꾸미기 메뉴에 보면 "스킨 편집" 버튼이 있습니다. ​ 거기에서는 html 편집 으로 들어갑니다. 이제 수정할 요소가 어느 부분에 있는지 찾아야겠죠? Mac 에서는 Command + Shift + C, 윈도우에서는 Ctrl + Shift + C 를 누르고 찾고자 하는 요소에 마우스를 올립니다. 제목이 있..

reading-time.js 활용해 읽는 시간 표시해주기

요즘 해외 뉴스나 블로그 등 에서 많이 사용 되고 있는 reading time 라이브러리 입니다. 보통 글의 header 부분의 제목 바로 다음에서 해당 article을 읽는데 대략 어느 정도가 걸리는지 시간으로 알려줌으로서 독자들이 빠르게 대강 읽을 지 혹은 천천히 꼼꼼히 읽을지를 그것도 아니면 안읽고 말지에 대해 결정하게끔 도와 줍니다. 보통 이런식으로 얼마나 걸릴지를 미리 가늠할 수 있게 해줍니다. 저도 reading-time.js 를 블로그에 도입 하고자 그 기능들을 확인 해 보고 있습니다. 함께 하나씩 따라 해 보면서 기능을 익혀보겠습니다. ​ https://github.com/michael-lynch/reading-time 일단 공식 Github repository에 들어가 정보를 수집 해 보..

티스토리 이미지 클릭시 원본 사이즈 모달 구현하기

티스토리 이미지 클릭시 원본 사이즈 모달 구현하기 ​ 티스토리는 기본적으로 lightbox를 지원합니다. 그런데 이게 지원하는 정도가 아니라 아에 해당 css와 js 파일을 뺄 수 없을 정도로 못 박아 두었습니다. 뭐 사용하기에만 편하면 된다 생각하는데, 문제는 제가 티스토리를 순수 markdown으로 작성하고, 첨부하는 이미지들도 Github에 올리고 링크를 연결하는 방식으로 올리다 보니, Tistory의 기본 lightbox가 작동하지 않았습니다. 그래서 저는 티스토리 블로그에서 이미지를 클릭 할 때 이미지를 크게 볼 수 있게끔 스스로 구현해야 했는데, 쉽게 될 줄 알았는데 꽤나 헤맸습니다. 처음에는 어차피 강제적으로 들어 가 있으니 lightbox를 사용 해 보려고 했는데 생각처럼 잘 되지 않았습니..

Development/HTML ⁄ CSS 2021.08.26 (4)

Sourcetree 에서 잘못된 비밀번호로 저장소 접근 안될때 해결방법

Sourcetree 에서 잘못된 비밀번호로 저장소 접근 안될때 해결방법 ​ 소스트리에서는 한번 입력된 비밀번호가 잘못 되어도 절대 다시 입력하라고 하지 않고, 계속해서 비밀번호가 틀렸다는 메시지만 주구 장창 띄웁니다. 심지어 8월 13일 부로 Github에서는 password authentication을 공식적으로 제거하고는 personal access token 만을 사용하도록 정책을 변경 했는데요. 이미 오래전 부터 경고해왔기 때문에 갑작스러운 일은 아닙니다. ​ 하지만 Sourcetree에서는 인증에 실패하였을때 새로 비밀번호를 입력하게끔 해주지 않기 때문에 대책이 필요합니다. 예전에도 팀원 분중 한분이 소스트리에 Gitub 비밀번호를 잘못 입력했다가 로그인 되지 않아서 지웠는데도 계속해서 비밀번호..

Development/Git 2021.08.24 (5)

docker container에서 localhost 접속하기 host.docker.internal

docker에서 컨테이너들이 실행 중인 서버를 바라 봐야 할 경우가 있습니다. Docker Compose를 이용해 여러개의 도커 컨테이너를 실행해서 하나의 어플리케이션을 담당한다고 했을때, 하나의 네트워크로 연결해 사용하게 되는데요. 정작 컨테이너에서 로컬 서버에는 어떻게 접근해야 할까요? 제 맥북에서 사용중인 Docker에는 컨테이너가 아직 PostgreSQL 하나밖에 없어서, 이 컨테이너를 이용해서 시도 해 보겠습니다. ​ 제 컨테이너 같이 DB 서버라면 사실 필요할 일은 없지만, Apache나 NginX 같은 웹 서버의 경우는 흔하게 필요한 상황이 발생 할 수 있겠습니다. ​ 일단 해당 Container로 접속 해 보겠습니다. GUI환경이라면 위에 보이는 CLI 버튼으로 쉽게 접속 해 터미널을 띄울..

Development/DevOps 2021.08.21

Mac) Oracle Cloud FreeTier 이용해 웹 어플리케이션 배포하기 6) 오라클 전자지갑 사용해 프로젝트와 연결하기

Mac) Oracle Cloud FreeTier 이용해 웹 어플리케이션 배포하기 6) 오라클 전자지갑 사용해 프로젝트와 연결하기 4) 무료 데이터 베이스 만들기 및 데이터 이관하기 에서 만든 무료 Oracle Cloud FreeTier 의 데이터베이스를 프로젝트와 연결 해 보겠습니다. 정말 많은 분들이 무료 데이터 베이스를 만드는데 관심이 있었지만 난이도가 난이도다 보니 실패한 분들이 꽤 많은 것 같았습니다. 어렵게 어렵게 성공을 했는데 도저히 프로젝트와는 어떻게 연결하는지 어려움을 겪는 분들이 상당히 많아서 이메일도 많이 받았는데요. 저도 아직 시도해본적 없는 내용을 무책임하게 관련 reference만 던져드리는 것도 죄송스럽게 생각되어서 주말을 이용해서 직접 한번 해 보았습니다. 막상 해보니 생각보다..

Development/Cloud 2021.08.21 (15)

java로 작성해보는 정렬 알고리즘과 성능 비교

java로 작성해보는 정렬 알고리즘과 성능 비교 얼마전 정렬 알고리즘을 손 코딩 해 볼 기회가 있었습니다. 갑자기 눈앞에 정렬 알고리즘을 손코딩 해야 하는데, 제한시간도 있다 보니 잠시동안 고민이 되었습니다. 당장에 간단하게 작성할 수 있는 버블정렬을 선택해 다른 문제 풀이에 쓸 시간을 조금 더 벌 것인가 아니면 자바를 처음 배울때 직접 구현해보려다가 못했던 퀵정렬을 한번 작성해 볼 것인가. 결론부터 말하자면 안전한 길을 택했습니다. 솔직히 버블정렬의 쉬운 난이도에도 불구하고 항상 실제로 코드를 구동해보고 테스트 하기 전 까지는 맞는지 문제가 있는지 확신이 서지 않았습니다. ​ ​ 과거로 돌아가, 학원에서 초급 자바시간에 정렬에 대해 배우는 기회가 있었습니다. 선택, 버블, 삽입 정렬에 대해서 간단하게 ..

피보나치 수열과 프로그래머스 땅따먹기 문제로 알아보는 Dynamic Programming (동적 프로그래밍)

피보나치 수열과 프로그래머스 땅따먹기 문제로 알아보는 Dynamic Programming (동적 프로그래밍) ​ https://programmers.co.kr/learn/courses/30/lessons/12913 자세한 문제는 programmers를 통해 확인 해 주세요. ​ 땅따먹기라고 하지만, 우리가 알고있는 땅따먹기와는 거리가 있습니다. 차라리 어렸을 적 하고 놀던 "사방치기"를 떠올리는 것이 조금 더 가깝습니다. ​ 맨 첫줄 부터 시작해서 1 2 3 5 5 6 7 8 4 3 2 1 ​ 한줄씩 아래로 내려가는데, 일단 지금 밟은 열은 다음번 행에서 또 밟을 수가 없습니다. 예를 들어 첫 줄에서 5로 시작했다면, 다음 줄에서는 8을 밟을 수 없습니다. ​ 무조건 지금 상황에서의 최선을 선택하는 "탐..

티스토리 마크다운 깃허브 스타일로 변경하기 ( Tistory Github Markdown)

티스토리 마크다운 Github 스타일로 변경하기 티스토리에는 데이터 백업 기능이 없기 때문에 제가 작성한 블로깅 내용들을 추후에 migration 시켜야 할 때를 대비해 markdwon 형식으로 작성 하며, 작성 내용들을 하나한 백업 해 두려고 하는데요. md로 작성하는 글들은 첨부 이미지들 또한 Github에 호스팅 하며 링크를 첨부해 작성 하고 있습니다. 그런 의미에서 얼마전 Typora로 블로그에 올릴 md 파일을 하나 작성했었습니다. Github markdown 스타일로 작성을 했는데, 그대로 마크다운으로 붙여넣었는데, 전혀 의도대로 렌더링이 되지 않습니다. 지금부터 Tistory의 마크다운 을 Github 스타일로 변경해보도록 하겠습니다. 블로그 관리 홈의 "꾸미기" - "스킨 편집" 으로 갑니..

Development/HTML ⁄ CSS 2021.07.31 (3)

무한깊이 그리고 너비우선탐색 BFS

무한깊이 그리고 너비우선탐색 BFS DFS는 트리나 그래프에서 한 루트로 검색하다가 특정 상황에서 최대한 깊숙히 들어가서 확인 한 뒤, 다시 돌아가 다른 루트를 탐색하는 방식입니다. 미로찾기를 생각하면 쉬운데요, 한 방향으로 끝까지 들어갔다가 막다른 길에 다다르면 (트리의 바닥에 도착) 왔던 길을 돌아가서 다른 방향으로 갑니다. 이 일을 찾는 값이 나올 때까지 혹은 모든 트리를 순회 할 때 까지 반복합니다. DFS의 가장 큰 약점은 깊이가 무한으로 이어지면 빠져나올 수 없다는 점 입니다. 미로를 가다보면 왔던길이 또 나타나는 그런 미로도 있습니다. 가끔 등산을 할때도 그런 길에 들어갔다가 왔던 길에 다시 도착하는 경험을 해본 분들이 있을텐데요, 이럴 경우는 BFS를 이용해 해결 해야 합니다. BFS는 너..

n중 for문과 깊이우선탐색 DFS

깊이우선탐색 DFS와 n중 for문 재미삼아 취미로 시간 날때마다 한 두 문제씩 풀었던 programmers의 코딩 테스트 연습이 어느덧 100문제를 넘어갔습니다. for문과 배열만 있다면 어떤 문제든 해결 할 수 있다고 말씀해주신 학원 초급 자바선생님의 말씀대로, 왠만한 문제는 머리속으로 떠올린 아이디어를 간단하게 노트에 적어 구체화 시킨 후에 그것을 IDE 상에 코드로 구현을 하면 해결되지 않는 문제가 없었습니다. 하지만 어느순간부터는 빈번히 막히는 일이 발생했고, 이제는 문제를 만났을때 "n중 for문 으로 풀어야지!" 라는 말도 안되는 해결 방안이 제시되기 시작했습니다. 그간 외면했던 DFS/ BFS를 정면으로 마주해야 하는 순간입니다. (물론 탐색하는 과정은 결국 동일합니다) DFS는 깊이우선 ..

네트워크 표준 모델 OSI 7 계층 ( OSI 7 Layer)

네트워크 표준 모델 OSI 7 계층 ( OSI 7 Layer) The Open Systems Interconnection model (OSI model) is a conceptual model that characterises and standardises the communication functions of a telecommunication or computing system without regard to its underlying internal structure and technology. Its goal is the interoperability of diverse communication systems with standard communication protocols. - https://..

반응형