본문 바로가기
(트랜잭션) CAP theorem -> ACID vs BASE DBs Consistency : 일관성 Availablity : 가용성 Partition tolerance : 분할내성 위의 세가지 조건을 모두 만족하는 분산 컴퓨터 시스템은 존재하지 않음을 증명하는 정리이다. 분산 컴퓨팅 시스템에서는 분할내성을 필수로 충족해야 하는데, 이러한 경우 일관성을 가져가거나 가용성을 가져가거나 둘 중 하나만 충족할 수 있다. 일관성을 가져가는 ACID (산성?) 데이터베이스 관계형 데이터베이스(RDB) 가용성을 가져가는 BASE (염기성?) 데이터베이스 NoSQL (몽고DB, Redis, DynamoDB, Couchbase) AWS에서는 ... ACID : AWS RedShift BASE : Amazon DynamoDB (?) Amazon MemoryDB for Redis (Redi.. 2024. 3. 15.
[책] 마이크로 서비스 아키텍처 구축 가이드 장점 시스템 빠른 변경 독립적 배포 업무단위 장애 차단 특징 서비스는 비즈니스 기능 단위로 나누어야 한다 서비스 간 임의적인 접근이 불가능하도록 격리 서비스 독립 실행 및 API 통신 서비스 독립 개발 및 배포 ! 서비스 간 데이터베이스 분리 필요 내용 시스템 레벨 다이어그램 → 기능 레벨 다이어그램 구성 필요 서비스는 지속 전달, 지속 배포 가능한 시스템으로 구성되어야 함. 백엔드는 REST API 형식으로 프론트엔드는 SPA (싱글 패이지 앱)으로 구성 순환 참조를 제거하기 (서비스 장애 간 영향을 받지 않도록) 마이크로서비스 아키텍처 구조 2023. 8. 28.
[linux] 서버를 원격으로 접속 목적 및 배경 집에서 사용하지 않는 게이밍 노트북을 서버로 사용 해당 컴퓨터를 리눅스 (우분투) 설치 후 iptime 포트포워딩 해 둔 상태 버전 확인 cat /etc/issue Ubuntu 22.04.1 LTS IP 주소 확인 hostname -I 포트포워딩 주소 *3가지 나타남 서버 세팅 과정 요약 iptime 포트포워딩 (내용 생략) 원격 서버 접속 방법 원격 서버에 비밀번호 없이 자동 접속 설정 원격에 zsh + “Oh My Zsh” 설치 원격 서버 접속 방법 터미널 접속 $ ssh -p @ vscode 접속 vscode extension → ssh 설치 → ssh 실행 입력하거나 호스트 추가 (호스트 추가하기) SSH 호스트 구성을 누르고 가장 위의 /Users//.ssh/config 파일 수정.. 2023. 8. 28.
[linux] 서버 - 로컬 파일 통신 (scp) 서버에서 로컬로 다운로드 $ scp user@127.0.0.1:/app/data/test.txt ./download/test.txt $ scp -r user@127.0.0.1:/app/data/test ./download/test 로컬에서 서버로 업로드 $ scp test.txt user@127.0.0.1:/app/data/test.txt $ scp -r test/ user@127.0.0.1:/app/data/test 2023. 8. 28.
[linux] SSH 키를 이용한 깃허브 로그인 안전하게 SSH 키를 등록해놓고 github와 통신하기위함 1) 만들어진 키 있는지 확인 cat ~/.ssh/id_rsa.pub → 없다고 나오면 새로 만들어야함 2) (없으면) 공개키 만들기 ssh-keygen 옵션 필요하면ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ssh-keygen -t ed25519 -C "your_email@example.com" 종료할때까지 엔터 누르기 (저장하는 위치도 물어보고, 패스워드도 물어보는데 안하는게 편함) 3) 잘 만들어졌는지 확인 cat ~/.ssh/id_rsa.pub → 있다고 나올 것임 4) 공개키 복사 명령어로 복사하기(윈도우) clip < ~/.ssh/id_ed25519.pub (맥) pbcopy < ~.. 2023. 8. 28.
[python - OS] 디렉토리 제어하기 폴더에 있는 목록 불러오기 glob 사용 import glob images = glob.glob('{YOUR_PATH}/*.jpg') os.walk 사용 import os for (roots, directories, files) in os.walk('{YOUR_PATH}'): for file in files: file_path = os.path.join(roots, file) print(file_path) 폴더 만들기 import os os.makedirs(path, exist_ok=True) # exist_ok를 지정하면 폴더가 존재하지 않으면 생성하고, 존재하는 경우에는 아무것도 하지 않습니다. 파일 옮기기 겸 이름 바꾸기 import os src=r'C:\\Test1\\test1.txt' des=r.. 2023. 8. 26.
[linux] zip & nohup 리눅스에서 압축파일 다루기 zip / unzip 하위 디렉토리 압축 zip -r compressed.zip /path/to/dir zip 내용 추가 zip compressed.zip path/to/file 현재 폴더에 압축 해제 unzip compressed.zip 특정 폴더에 해제 unzip compressed.zip -d /path/to/put background에서 실행되도록 하는 명령어 (끄지마!) nohup # 켜기 nohup python app.py > app_gradio.nohup & # 'app'이 들어간 목록 확인 ps -fu annmunju | grep app # annmunju 10000 16782 33 14:07 pts/16 00:00:07 python app.py # 끄기 kill.. 2023. 8. 26.
[온라인 : 기본 알고리즘] 다이나믹 프로그래밍 # 피보나치 수열 def fibo(x): if x == 1 or x == 2: return 1 return fibo(x-1) + fibo(x-2) # 피보나치 수열 : 메모리제이션 방식 d = [0] * 100 def fibo_top_down(x): if x == 1 or x == 2: return 1 if d[x] != 0: return d[x] d[x] = fibo(x - 1) + fibo(x - 2) return d[x] # 피보나치 수열 : 바텀업 방식 d = [0] * 100 d[1] = 1 d[2] = 1 n = 99 for i in range(3, n+1): d[i] = d[i - 1] + d[i + 2] print(d[n]) 2022. 4. 15.
[온라인 : 기본 알고리즘] 그래프 탐색 ## DFS def dfs(graph, v, visited): # 현재 노드 방문처리 visited[v] = True print(v, end=' ') # 현재 노드와 연결된 다른 노드를 재귀적으로 방문 for i in graph[v]: if not visited[i]: dfs(graph, i, visited) graph = [ [], [2, 3, 8], #1과 연결된 [1, 7], #2와 연결된 [1, 4, 5], #3과 연결된 [3, 5], #4와 연결된 [3, 4], #5와 연결된 [7], [2, 6, 8], [1, 7] ] # 각 노드의 방문 정보 visited = [False] * 9 dfs(graph, 1, visited) ## BFS from collections import deque def.. 2022. 3. 1.
728x90