1. 시험 환경

Ubuntu: 24.04 LTS

Java: 17.0.11 설치하기

 

2. 설치

1) sudo 권한으로 apt 업데이트하고 openjdk v17을 설치

$ sudo apt update
$ sudo apt install openjdk-17-jdk

 

2)  설치한 java 버전을 확인

$ java -version

 

3) 설치된 java 경로를 확인

    - default : /usr/lib/jvm/java-17-openjdk-amd64/bin/java

 

4) environment 파일에서 JAVA_HOME 환경변수를 설정

$ sudo vi /etc/environment
 
1
2
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"

 

5)  source 명령어를 실행하고, 변경값이 적용되었는지 확인

$ source /etc/environment
$ echo $JAVA_HOME
1
/usr/lib/jvm/java-17-openjdk-amd64

 

- 설치 취소할 경우: "apt remove" 명령어를 사용

 $ sudo apt remove openjdk-17-jdk

 

 

 

 

참고: https://languagestory.tistory.com/154

wsl2를 통해 ubuntu를 설치해서 사용하다보면 다음과 같은 오류가 발생하는 경우가 있다.

이럴때는 wsl2에서 systemd를 활성화해주면 된다.

System has not been booted with systemd as init system (PID 1). Can't operate. 
Failed to connect to bus: Host is down

 

1. 파워쉘에서 wsl 버전 확인

 

2. ubuntu에서 wsl.conf 파일을 아래와 같이 수정

sudo nano /etc/wsl.conf

 

 

3. pstree 확인: systemd 활성화 전에는 ubuntu 시스템이 init으로 관리하고 있음.

즉, 저 화면이 나오면 systemd가 작동이 안되고 있다는 뜻!

 

4. ubuntu에서 exit로 종료하고 파워쉘에서 ubuntu 종료된 것 확인하기


   

- 만약에 종료가 20초가 지나도 안된다면 아래 명령어로 종료시키기

 

5. ubuntu 재실행 후 pstree 확인

 

6. 잘 실행되는지 확인해보기

 

 

 

참고: https://m.blog.naver.com/xell00/223158675748

DBMS 무료 툴인 DBeaver은 효율적이고 ssh 적용이 가능하다.

 

Tool 설치

  • https://dbeaver.io/download/
    • 환경에 맞는 파일을 다운로드 한다.
    • windows installer로 설치
    • 설치 안내 마법사: 다음 클릭 -> 사용권 계약 확인: 동의함 클릭 -> 다음클릭 -> 구성 요소 선택: DBeaver Community, include java 선택 후 다음클릭 -> 설치 위치 선택: 다음클릭 -> 설치 클릭 -> 설치 완료

데이터베이스 연결

  • PostgreSQL과 연동하기

1. 데이터베이스 클릭 > 새 데이터베이스 연결 클릭

 

2. 연결하고자하는 DB 클릭

 

3. 데이터베이스 정보 입력

  • Host와 port 입력: postgreSQL이므로 5432
  • Database는 작성하지 않아도 됨
  • username과 password 입력

 

4. 연동 완료

'Language & OS > DB' 카테고리의 다른 글

minio  (0) 2024.02.22
SQL과 NoSQL의 차이  (0) 2023.01.13
[DB] docker container를 활용해 MongoDB에 데이터 입력하기  (0) 2022.11.22
[DB] mongoDB 기본 개념  (1) 2022.11.18

 

error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.

    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.

    See /usr/share/doc/python3.12/README.venv for more information.

pip install ipython을 하려고 하니까 위와 같은 에러가 나왔다.  아래 코드를 시도해보고 안되면 아래 순서대로 하기

sudo apt install ipython3

 

 

1. 가상환경에서 ipython을 설치해줬다.

python3 -m venv .venv
sudo apt install python3.12-venv  (생략해도 됨)

2. 가상환경을 활성화 해준 후 다운 받고 가상환경에서 빠져나오기

source .venv/bin/activate
python3 -m pip install ipython
 deactivate

3. 작동되는지 확인

ipython 
ipython3

설명

  • 오픈 소스로 제공되는 분산 스토리지 솔루션
  • 파일이나 블록 스토리지를 지원하지 않고 오브젝트 스토리지 형태로 제공되며 Amazon S3 클라우드 스토리지 서비스와 완벽하게 호환되기 때문에 AWS S3 SDK를 사용할 수 있음.
  • 파일에 대한 직접적인 수정은 불가능하며 항상 덮어쓰는 overwrite 방식이 사용됨
  • S3 스토리지로 마이그레이션 하더라도 애플리케이션 코드를 수정할 필요가 없음
  • 노드 연결을 통한 용량 확장 가능
  • 파이썬에서 boto, minio 등의 s3호환 라이브러리를 사용하여 코드에서 직접 파일에 접근 가능

 

  • 데이터 중복 수준을 설정할 수 있고, 설정된 중복 수준으로 데이터 및 패리티 블록으로 분산 저장한다.
  • web UI를 제공해서 편리하게 관리할 수 있다.
  • 고가용성이다. 스토리지 클러스터를 구축하여 데이터의 용량과 처리 능력을 확장하고 데이터를 분산하여 저장 및 복제한다.
  • kubernetes 환경에서 손쉽게 설치가 가능함
  • 전송 중인 데이터를 암호화하거나 데이터를 암호화하여 보관할 수 있다.

 

Minio를 사용하게 된 목적은 서버와 user마다 경로를 수정(상대경로)해야하는 불편함을 개선하고자 사용했다. 

Minio로 절대경로를 사용함으로써 모든 서버와 user에서 동일한 경로에서 진행이 가능해 훨씬 편리해졌다. 또한 데이터 전처리 및 분석으로 발생하는 데이터를 로컬에 저장하여 DB에 따로 저장해야하는 번거로움을 없애고 바로 minio에 업로드하여 처리 시간을 줄일 수 있었다. 

 

구축

  • 설치: 독립환경을 위해 docker 사용

1. docker-compse.yml 파일 작성

  •  다중 디스크 사용 (권장 사항: 데이터 안정성 및 속도를 위해 디스크 4개 사용
  • version: '3'
    services:
      minio:
        image: quay.io/minio/minio:latest
        command: server /data{1...4} --console-address ":9001"
        container_name: minio
        environment:
          MINIO_ROOT_USER: 사용자 지정
          MINIO_ROOT_PASSWORD: 사용자 지정
          MINIO_PROMETHEUS_JOB_ID: minio-job
          MINIO_PROMETHEUS_URL: "http://~~~~~~~~"
          CONSOLE_DEV_MODE: "on"
        restart: always
        #shm_size: '1gb'  # default는 64MB
        ports:
          - "9002:9000"    # minio 서비스 포트
          - "9001:9001"    # minio 콘솔 포트
        volumes: 
         - /mnt/bay0/minio_disk1:/data1  # 버킷 데이터 저장소 위치
          - /mnt/bay1/minio_disk2:/data2  # hdd2
          - /mnt/bay2/minio_disk3:/data3  # hdd3
          - /mnt/bay3/minio_disk4:/data4  # hdd4
          - ./minio:/root/.minio # 컨테이너 실행 데이터 위치

2. 컨테이너 실행

docker-compose up -d​

 

3. web UI 접속

  • http://localhost:9001로 접속하면 아래와 같이 웹 화면을 확인 가능 (접속 계정은 docker-compose.yaml 파일에 기재한 정보로 로그인)
  • 1. 내부용 TLS 자체서명 인증서 생성
    • https://github.com/minio/certgen/releases/ 설치 후 인증서 생성=>(certgen -host "127.0.0.1, localhost")
    • 생성된 두개의 파일을 minio의 실행데이터폴더의 cert 폴더에 저장(구현한 서버 환경에서는 /home/keti/docker/minio/minio/certs/ 경로로 두개파일 저장)
    • 파일 저장후,  도커 컨테이너 다시 시작 및 적용 
  • 적용 후 서버에서 http://localhost:9001 접속 or 포트포워딩 후, 웹 url 접속
  • 버킷 생성 - 좌측 메뉴에서 Buckets 클릭, 우측 상다 create bucket 클릭
  • 버킷 이름과 추가 설정 후 버킷 생성
  • 사용자 생성 - 좌측 메뉴에서 Identity -> user 이름과 비밀번호, 기타 권한 옵션 설정 후 유저 생성
  • 접근키 생성- 좌측 메뉴에서 Access Keys (코드에서 버킷에 저장된 파일 다운로드/업로드, minio간의 동기화에 사용됨)
  • 자동으로 생성된 Access key와 Secrete key 메모장에 복사 후 저장 및 관리
  • 버킷별 정책생성(삭제주기등등)
    • 별도의 클라이언트를 통하여 파일 접근가능
    • cyberduck(https://cyberduck.io/)
    • 다양한 프로토콜 지원(ftp, s3, nextcloud 등등), 필요시 사용

'Language & OS > DB' 카테고리의 다른 글

DBeaver 설치 및 사용방법  (0) 2024.05.20
SQL과 NoSQL의 차이  (0) 2023.01.13
[DB] docker container를 활용해 MongoDB에 데이터 입력하기  (0) 2022.11.22
[DB] mongoDB 기본 개념  (1) 2022.11.18

 

from collections import Counter

def solution(v):
    ans = []
    v1 = sum(v,[])
    v_x = v1[0::2]
    v_y = v1[1::2]

    counts_x = Counter(v_x)
    for element, value in counts_x.items():
        if value%2 != 0:
            ans.append(element)

    counts_y = Counter(v_y)
    for element, value in counts_y.items():
        if value%2 != 0:
            ans.append(element)
            
    return ans

실무하면서 로컬에서 파일을 복사하려면 cp를 사용했으나, 로컬에서 서버, 서버에서 서버, 서버에서 로컬로 파일을 복사할 때는 rsync를 많이 사용했었다. 오랜만에 하려고 하니까 매일 쓰던 것도 기억이 가물가물해서 메모해 두려고 한다!

 

rsync 명령어
  • 원격 또는 로컬 간에 파일이나 디렉토리를 복사하는 리눅스의 기본 내장 명령어
  • 로컬 to 로컬, 서버 to 서버, 로컬 to 서버, 서버 to 로컬 다 가능!
# < 원격에 디렉토리 복사>
# rsync [User]@[IP Address]:[File Name] [Path1:가져올 위치] [path2: 저장할 위치]

rsync -avzhP test-directory twpower@192.168.1.2:/home/s~~ ./


# 디렉토리 내 파일들과 하위 디렉토리들 복사
# rsync [Directory Name]/ [User]@[IP Address]:[Path]

rsync -avzhP test-directory/ twpower-private-server:~
rsync -avzhP test-directory/ twpower@192.168.1.2:~


# 원격에 있는 파일 로컬로 가져오기
# rsync [User]@[IP Address]:[File Name] [Path]

rsync -avzhP twpower-private-server:~/test.txt .
rsync -avzhP twpower@192.168.1.2:~/test.txt .

# 전송시 파일명 변경도 가능

rsync -avzhP twpower-private-server:~/test.txt ./test-renamed.txt
rsync -avzhP twpower@192.168.1.2:~test.txt ./test-renamed.txt

# 원격에 있는 디렉토리 로컬로 가져오기
# rsync [User]@[IP Address]:[Directory Name] [Path]
# 디렉토리 자체가 복사된다.

rsync -avzhP twpower-private-server:~/test-directory .
rsync -avzhP twpower@192.168.1.2:~/test-directory .


# 디렉토리 내 파일들과 하위 디렉토리들 복사
# rsync [User]@[IP Address]:[Directory Name]/ [Path]

rsync -avzhP twpower-private-server:~/test-directory/ .
rsync -avzhP twpower@192.168.1.2:~/test-directory/ .

# 만약 포트가 포함되어 있을 경우(기존 원격에서 쓰던 폴더명 그대로 사용하고 싶을 경우, 현재있는 디렉토리에 폴더명과 파일 그대로 생성)
# rsync -e 'ssh -p [포트번호]' -avzh [User]@[IP Address]:[Directory Name]/ [Path]

 rsync -e 'ssh -p 8888' -avzh srjung@bigsoft.iptime.org:/home/srjung/Fun-DataAnalysis ./

환경변수 설정

쉘 확인

$ echo $SHELL
/usr/bin/zsh

환경변수 추가

~/.zshrc  ~/.bashrc파일에 해당 내용추가

export PATH=$HOME/anaconda3/bin:$PATH

환경변수 적용

$ source ~/.zshrc
$ source ~/.bashrc

conda init

$ conda init zsh

현재 실행 중인 터미널을 재실행 시켜야 한다.

설치 완료 확인

$ conda --version
conda 4.9.2

 

참조: https://velog.io/@tube-jeonghoon/Ubuntu%EC%97%90-anaconda-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

포트번호 확인

$ netstat -nap | grep {포트번호}
  ex) netstat -nap | grep 8080

삭제하기

fuser -k -n tcp {포트번호}

 

python경로가 온전치 못해 발생하는 에러. 검색해도 안나와서 오래걸렸다..

아래 두 줄 명령어 순서대로하면 해결됨

 

PYTHON_BIN_PATH="$(python3 -m site --user-base)/bin"
PATH="$PATH:$PYTHON_BIN_PATH"

+ Recent posts