분류 전체보기 248

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

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

Java) POI 활용해 DB데이터 엑셀 파일로 저장하기

사용자에게 요구 데이터를 보여 주는 방법은 여러가지가 있습니다. 보통은 웹 페이지를 통해 화면을 보여주는데요, 사용자가 해당 내용을 확인하기 위해서는 항상 해당 웹 페이지에 방문 해야만 하며, 인터넷에 연결되어있어야만 한다는 제약이 생깁니다. 그래서 파일로 조회 데이터를 저장하고자 하는 수요는 반드시 생기고, 그 수요를 충족시키기 위한 여러가지 라이브러리들이 나와 있습니다. 그 대표적으로 Apache POI가 있습니다. ​ Apache POI (Poor Obfuscation Implementation) https://poi.apache.org Apache POI는 아파치 소프트웨어 재단에 의해 운영되는 오픈소스 프로젝트 입니다. 순수 자바 라이브러리로서 Microsoft Office의 Word, Powe..

Programming/Java 2021.10.15

Linux) 특정 port 사용중인 프로세서 찾아 죽이기

Tomcat을 사용하다 보면 어플리케이션이 정상적으로 종료가 되지 않아서 포트가 충돌 나는 경우가 있습니다. 비단 Tomcat 만의 문제가 아니고 어떤 프로세스를 사용하던 특정 port를 점유 하고 종료되지 않은 경우가 종종 있는데요, 이럴 때 쉽게 해결하는 방법입니다. ​ 아래는 이클립스에서 톰캣을 실행 하려 할 때, 8080 port가 이미 점유중이라는 에러 메시지 입니다. The Tomcat connector configured to listen on port 8080 failed to start. The port may already be in use or the connector may be misconfigured. ​ port 번호로 pid 찾기 ​ 8080 port를 점유하고 있는 프로세스..

IT Computer/Linux 2021.10.14

MacOS) Monterey Public Beta 설치하기

Monterey Monterey는 Apple이 WWDC21에서 발표한 macOS Big Sur의 차기 버전입니다. 동명의 미국 California 주의 해변가에 있는 아름다운 도시의 이름을 따왔는데요, San Francisco Bay Area에서 차로 약 2시간 거리에 있는 대표 휴양지 입니다. Bir Sur 에서도 굉장히 가깝습니다. ​ https://en.wikipedia.org/wiki/MacOS_Monterey#Release_history 사실 Monterey의 첫번째 베타버전이 출시된지는 꽤나 시간이 지났습니다. 6월 7일이니 무려 4개월 전 인데요. 첫번째 베타부터 참여하기에는 불편함이 많을 것 같아 많이 기다렸는데, 이제 출시가 꽤나 임박했다는 생각이 들어 사용하기에 크게 불편함이 없을 거라..

IT Computer/Mac 2021.10.09

Ubuntu) 터치패드 및 트랙패드 활용하기 Fusuma

https://github.com/iberianpig/fusuma Fusuma를 사용하면 멀티 터치 제스처를 사용할 수 있습니다. 이 숨은 보석같은 어플리케이션만 설치하면 트랙패드 제스처를 활용해서, 뭔가를 줄이고 늘릴 수 있고, 쓸어 넘기기 등의 명령을 설정 하고 사용 할 수 있습니다. Fusuma(襖) 는 일본에서의 미닫이 문을 칭하는 말 입니다. 한국어로 발음하면 "후스마" 정도가 되겠네요. ​ 특징 RubyGems를 이용한 손쉬운 설치 YAML 포맷으로 제스처와 액션 설정 threshold 및 interval을 이용한 다양한 세부 설정 Threadhold는 임계점을 의미하는데요. 터치 감도를 설정한다고 생각하면 되겠습니다. 외부 터치패드 연결시 자동 인식 플러그인 시스템을 통한 제스처 확장 ​ 설..

IT Computer/Linux 2021.10.09

PostgreSQL) 모든 테이블에서 특정 값 찾기

How to search a specific value in all tables (PostgreSQL)? https://stackoverflow.com/questions/5350088/how-to-search-a-specific-value-in-all-tables-postgresql ​ 모든 테이블 찾기 특정 값을 검색 할 때, 모든 테이블에서 찾아봐야 할 경우가 종종 있습니다. 이번에 특정 데이터의 완전 삭제 기능을 구현하고 있었는데 모든 테이블을 FK로 연결한 건 아니라서 관련된 데이터들이 모두 삭제 되었는지가 확실하지 않았습니다. FK 와 cascade 를 활용해서 싹 다 지워버리면 편하기야 하겠지만 의도치 않은 사이드이펙트가 나올 수도 있습니다. 특정 데이터를 삭제 할 경우 관련된 데이터를 무작정..

Database/PostgreSQL 2021.10.08

Linux) SSH 비밀번호 로그인 차단하기

한창 작업을 하다가 문득 제가 집에서 돌리고 있는 컴퓨터에 얼마나 자주 접속을 하고 있는지 궁금해졌습니다. 혼자 사용하는 서버인데도 종종 너무 느려지는것도 이상하고 해서 별 생각 없이 처음으로 로그를 한번 확인 해 보았습니다. cat /var/log/auth.log 세상에나 무수히 많은 Connection 시도와 Failed password 가 수북하게 쌓여 있습니다. 루마니아 부터 시작해서 온갖 국가의 아이피로부터 시도가 되었고 아이디도 뭐 David, ftpuser, user, uknown 등등 다 넣어봤더라고요. port 번호가 다 이상한게 써있어서 저희집 공유기 port forwarding을 다 확인 해 보았는데 저런 포트는 모두 잘 닫혀 있었습니다. 그래서 다시 알아보니 잘 저기에 표시된 por..

IT Computer/Linux 2021.10.06

Linux) docker 컨테이너 자동 실행 설정 및 스케줄 등록

메모리 관리의 어려움 집에서 간단한 서버로 사용하고 있는 컴퓨터가 꼭 부팅후 3일정도만 지나면 급격하게 메모리 사용량이 늘어나고 반응속도가 굉장히 저하되고 있습니다. 특히 ssh로 접속 했을 때 타이핑도 바로바로 되지 않을 정도로 심각해서 여러가지 해결책을 모색 하고 있는데요. 일단 사양이 좋지 않은 컴퓨터인데 불구하고 Elastic Search 를 Docker로 돌리다 보니 어느 정도 감안 해야 하는 면도 있나 싶습니다. 지금까지는 3일 마다 컴퓨터를 재 부팅 해 주고 켜야 하는 도커 컨테이너들을 하나씩 일일히 켜주는 방식으로 대응 하고 있었는데요, 아무래도 번거로워서 자동화를 계획 중에 있습니다. 제 생각으로는 트래픽이 발생할 확률이 거의 없는 새벽 4시 쯔음에 해서 스케줄링에 따라 하루 한번 정도 ..

IT Computer/Linux 2021.10.03

우분투에서 아이폰 / 아이패드 미러링 하기

사실은 양방향 미러링을 하는 방법을 시도 해 보고 있었는데, 스크린 캐스트를 통해 단방향 미러링을 먼저 성공 하게 되었습니다. 반응이 굉장히 빠르기 때문에 분명 여러가지 유용하게 사용 될 것 같아 포스팅을 정리해 두려 합니다. https://rodrigoribeiro.site/2020/08/09/mirroring-ipad-iphone-screen-on-linux/ 어느 교수님이 학생들에게 좀 더 좋은 원격 강의를 제공하려고 시도하다 성공하였다고 포스팅을 해주셨고 저도 도움을 받았습니다. ​ 필요한 패키지 받기 sudo apt-get install cmake sudo apt-get install libssl-dev libavahi-compat-libdnssd-dev libgstreamer1.0-dev li..

IT Computer/Linux 2021.10.01

[Ubuntu 20.04 Git GUI 추천] 우분투 Github Desktop 설치

해당 사진은 우분투에 MacOS 테마를 설치 해 두어서 Mac 처럼 보이긴 하지만 Ubuntu 가 맞습니다. 해당 테마에 관심이 있으신 분은 Ubuntu MacOS 처럼 만들기 GTK Themes 포스팅을 참고해주세요. ​ ​ Windows나 MacOS에서는 소스트리가 Git GUI로 흔하게 사용됩니다. 아쉽게도 Linux에서는 사용 할 수 없는데요, 최근에는 m1 맥북이 나왔지만 소스트리가 적절히 대응을 해주지 못하고 있어 많이 아쉽기도 합니다. 심지어 Github Desktop의 치고나오는 속도가 상당해서 조만간 소스트리를 앞질러 줄 수 있지 않을까 기대하고 있습니다. Git Kraken, Smartgit 등은 다 유료인게 부담스러워서 쓸 수 없었고 Git-cola가 그나마 무료길래 한동안 사용했었는..

IT Computer/Linux 2021.10.01

Ubuntu MacOS 처럼 만들기 GTK Themes

개인적으로는 기본 Ubuntu Gnome 인터페이스도 마음에 듭니다. Windows 를 사용할 때는 정말 디자인이 영 마음에 들지 않았고 애니메이션이라던가 전체적으로 무거운 느낌 또한 영 별로였는데, Ubuntu를 써보니 왜 진작 하지 않았을까 생각이 들 정도로 여러모로 굉장히 만족하며 사용하고 있습니다. 퇴근후 집에서는 맥북을 사용하다 보니 MacOS 와 Ubuntu 를 번갈아가며 사용하고 있습니다. 한가지 OS 만을 알고 있을 때에 비해 뚜렷한 장점이 있기 때문에 윈도우-맥-리눅스 중 최소 2가지 OS를 최소한 접해보는건 개인적으로 좋다고 생각합니다. Windows만을 쓸 때는 윈도우의 장점이라고 딱히 내세울만한게 없었 던 것 같은데.. 뭐 가장 많이 사용되는 플랫폼이다보니 왠만한건 다 호환되고 어렸..

IT Computer/Linux 2021.09.30

Linux, sudo 없이 명령어 실행하기 (예:docker)

무심히 도커 명령어를 사용하려 할 때 마다 permission denied가 나오는 경험을 많이들 해보셨을 겁니다. 비단 docker 뿐만이 아니라, 몇몇 다른 어플리케이션도 굳이 루트 권한 없이 실행했으면 하는게 있을 텐데요, 그럴 때는 간단한 설정 하나 만으로 특정 유저에게 해당 어플리케이션의 사용 권한을 줄 수 있습니다. ​ sudo usermod -aG docker {사용자명} 위의 명령어를 입력하면 간단하게 사용자들 docker 그룹에 추가 할 수 있는데요, -a 옵션은 사용자를 추가하는 명령어 (append) -G 명령어는 그룹 옵션 입니다 (Group) ​ 현재 사용자 아이디를 굳이 직접 칠 필요도 없는데요. $USER 는 지금 접속중인 사용자를 나타냅니다. ​ 그러니 한 명령어로 나타낸다면..

IT Computer/Linux 2021.09.29

이제는 Cookie 대신 Web Storage 가 대세

이제는 Cookie 대신 Web Storage 가 대세 ​ HTML Web Storage 참고자료 : https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API 웹 스토리지를 이용하면 웹 어플리케이션은 데이터를 사용자의 브라우저에 내부적으로 저장 할 수 있습니다. HTML5 이전에는 어플리케이션의 데이터가 Cookie 에 저장되어야 했는데요, 그로 인해 매번의 서버에 대한 요청마다 포함되어야 했었습니다. 웹스토리지는 더 보안상 안전하며 훨씬 큰 데이터를 저장 할 수 있습니다. 심지어 웹사이트의 퍼포먼스에도 전혀 영향을 주지 않습니다. ​ Cookie는 브라우저마다 최대 갯수와 최대 사이즈가 미묘하게 다르기는 하지만, 일단 최대 4096 bytes의..

Ubuntu에 oh-my-zsh 설치

MacOS 이야기 MacOS 에서는 Catalina 부터 기본 쉘이 zsh(Z shell)이 되었습니다. m1 맥북을 구매해서 BigSur를 첫 OS로 사용하기 시작한 저도 자연스럽게 zsh를 이용해 왔는데요. 특히 iTerm2 를 설치하고 oh-my-zsh를 올려 사용하며 여러가지 편의성이 었었습니다. 아래 링크는 Mac 에서의 oh-my-zsh 설치에 대한 정보 입니다. oh-my-zsh 설치하기 ​ Ubuntu 이야기 Ubuntu를 설치하면 기본적으로 BASH(Bourne Again Shell)이 기본 쉘로 설치되어 있습니다. 사용하며 딱히 불편 한 점은 없었지만 전부 비슷한 환경을 꾸밀 수는 없더라도 shell 정도는 MacOS에서 사용하는 것과 같은 환경으로 맞춰야 겠다는 생각이 들었습니다. 사..

IT Computer/Linux 2021.09.26

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
반응형