본문 바로가기

포스트464

[Linux] apt와 apt-get 차이점 apt는 Advanced Packaging Tool의 약자로 우분투 같은 데비안 계열의 리눅스에서 사용하는 패키지 관리자다. 우분투 같은 데비안 계열의 리눅스에서 패키지를 설치할 때 apt install 혹은 apt-get install 을 사용한다. 어떤 글에서는 apt install을 사용하도록 설명되어 있고, 또 다른 글에서는 apt-get install을 사용하라고 설명되어 있다. apt와 apt-get은 어떤 차이일까? apt vs. apt-get 결론적으로 말하면 apt와 apt-get은 큰 차이가 없다. 그냥 내키는 대로 사용하면 된다. 원래 우분투를 비롯한 데비안 계열의 리눅스에서는 apt-get이나 apt-cache 같은 툴이 사용되어왔다. 오랜기간 사용되다보니 다양한 기능들이 추가되어 .. 2022. 6. 2.
[Linux] CentOS Failed to download metadata for repo ‘appstream’ 해결방법 CentOS에서 패키지 관리자인 yum이나 dnf를 사용하다가 'Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist'를 만나게 되는 경우가 있다. $ sudo yum update -y CentOS Linux 8 - AppStream 35 B/s | 38 B 00:01 Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist CentOS를 위한 패키지 저장소의 주소가 잘 못되었거나 주소에 접속할 수 없기 때문.. 2022. 5. 26.
[Java] ConcurrentModificationException 원인과 해결방법 자바 언어로 프로그래밍을 하다보면 가끔씩 ConcurrentModificationException을 만나게 된다. ConcurrentModificationException의 발생 원인과 해결방법에 대해서 간단하게 소개하겠다. ConcurrentModificationException ConcurrentModificationException은 몇 가지 상황에서 발생할 수 있는데, 가장 흔한 것이 컬렉션을 순회하면서 순회하는 대상 컬렉션에 수정을 가하는 경우다. 다음 코드를 실행하면 ConcurrentModificationException이 발생한다. List list = new ArrayList(); list.add("str1"); list.add("str2"); list.add("str3"); for (S.. 2022. 5. 26.
[Linux] CentOS 6,7,8 지원 종료 및 CentOS Stream 소개 CentOS는 'Community Enterprise Operating System'의 약자로 RHEL(RedHat Enterprise Linux)를 완벽하게 호환하는 오픈소스 리눅스 프로젝트다. RHEL의 안정성을 그대로 가져오면서도 무료로 사용할 수 있어 수 많은 개발환경과 서비스 환경에 설치되어 사용되고 있다. CentOS는 독립적인 오픈소스 프로젝트로 운영되어 오다가 2014년 RedHat에 인수된다. 상용 리눅스 RHEL을 만드는 RedHat에 인수되면서 CentOS가 언젠가는 서비스 종료되는게 아니냐는 우려가 있었는데 결국 2020년 CentOS의 서비스 정책이 변경되었다. 이제 CentOS 6, CentOS 7, CentOS 8 같은 버전들의 배포판은 사라지고 CentOS Stream이라는 .. 2022. 5. 25.
[Linux] OOM Killer 소개 및 사용법 OOM은 Out Of Memory의 약자로 직역하면 메모리 부족이다. 애플리케이션이 서버에서 동작하면서 대량의 메모리를 이용하게 될 경우 시스템 메모리가 부족해질 수 있다. 그러면 운영체제의 설정에 따라 대량의 메모리를 사용하는 애플리케이션이 강제로 종료될 수 있다. OOM Killer 시스템 메모리가 부족해지면 리눅스 커널은 시스템의 정상적인 동작을 보장하기 위해 메모리를 흥청망청쓰는 애플리케이션을 강제 종료하게 된다. 리눅스 커널이 메모리를 확보하기 위해 실행하는게 OOM Killer다 OOM Killer는 점수를 매겨 가장 높은 점수를 받은 프로세스부터 강제 종료한다. 이를 OOM Scoring이라고 한다. 특정 프로세스의 OOM Killer 점수는 /proc/${pid}/oom_score 파일을 .. 2022. 5. 23.
[Linux] rsync 명령어 사용법 rsync는 'Remote Sync'의 줄임말로 파일과 디렉토리를 동기화하기 위한 프로토콜이자 리눅스의 유틸리티 명령어다. rsync 명령어를 이용해 로컬에 있는 파일이나 디렉토리를 원격 호스트로 보내거나 원격에 있는 파일, 디렉토리를 로컬로 복사해 올 수 있다. rsync 명령은 데이터 전송시 네트워크 대역폭을 최소화 하는 'delta encoding algorithm'을 구현해 rcp나 scp보다 빠르고 효율적으로 데이터를 동기화 한다. 즉 파일의 전체 데이터를 복사하는 대신 변경사항만 동기화해서 빠르게 복사할 수 있다는 것이다. rsync 설치 대부분의 리눅스 배포판이나 OSX에는 기본 설치가 되어 있다. 하지만 일부 리눅스를 최소 설치 옵션으로 설치했다면 rsync가 포함되지 않았을 수 있다. 이.. 2022. 5. 16.
[Java] 메모리 가시성(Visibility) 소스코드의 특정 블럭을 동기화시키고자 할 때, 항상 메모리 가시성(Memory Visibility) 문제가 발생한다. 특정 변수의 값을 사용하고 있을 때 다른 스레드가 그 변수의 값에 접근하지 못하도록 막아야 하는 ‘상호배제’도 중요하지만 값을 수정한 다음 동기화 블록을 빠져나가고 나면 다른 스레드가 변경된 값을 즉시 사용할 수 있어야 하는 ‘가시성(Visibility)’도 중요하다. 메모리 가시성(Memory Visibility) 싱글 스레드 환경에서는 프로그램의 코드가 특정 변수에 값을 수정한 다음 다시 그 변수의 값에 접근해보면 이전에 수정한 값을 다시 가져올 수 있다. 멀티 스레드 환경에서는 반드시 수정한 값을 읽는 것이 보장되지는 않는다. 공유 변수에 대해서 어떤 스레드가 값을 수정했을 때, 그.. 2022. 5. 15.
[Python] 파이썬으로 JSON 데이터 다루기 REST API를 사용하는 파이썬 프로그램을 작성할 때 JSON 데이터를 다루는 경우가 많다. 파이썬은 JSON 데이터를 다루기 위해 json 모듈을 내장하고 있다. 이번 포스트에서는 json 모듈을 이용해 JSON 데이터를 다루는 방법에 대해 정리해보겠다. json.loads() - JSON 문자열 파싱 json 모듈의 loads() 함수를 이용해 JSON 문자열을 파싱해 사용할 수 있다. import json json_data = ''' { "mentor": { "Name" : "Tom", "Age" : 20 }, "mentee" : { "Name" : "Eric", "Age" : 13 } } ''' json_obj = json.loads(json_data) print(json_obj) print(".. 2022. 5. 14.
[Linux] rlogin 명령어 설치 및 사용법 rlogin은 Remote Login의 약자로 호스트에 원격으로 로그인할 때 사용하는 명령이다. 호스트로 로그인 할 때, 아이디와 패스워드 등을 이용하는게 아닌 IP나 도메인 이름을 이용해 신뢰 관계를 맺는다. 특정 호스트에서 편하게 원격 로그인을 할 수 있지만 ip spoofing에 취약하다. rlogin을 비롯한 rsh, rcp 같은 r-계열의 명령에서는 두 호스트가 신뢰하고 있다는 것을 /etc/hosts.equiv, $HOME/.rhosts 등에 정보를 기록해 두는 것으로 표현한다. (/etc/hosts.equiv는 시스템 전체에 영향을 주는 파일이고, $HOME/.rhost 는 각 사용자별로 설정하는 파일이다) rlogin, rsh 설치 및 설정 $ sudo yum install rsh-serv.. 2022. 5. 13.