Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
알림 서비스가 분산 시스템을 사용하는 이유 애플리케이션으로 알림을 보내는 대표적인 서비스는 FCM(andriod)과 ARNs(IOS)이 있다.애플리케이션뿐만 아니라 이메일이나 slack 메시지 등 알림 서비스는 다양한 매체에 적용된다. 이러한 알림 서비스에서는 가장 중요한 것이 알림 데이터 손실을 방지하는 것이다.만약 단일 시스템을 사용한다면 single point of failure(단일 장애지점)이 되기 때문에 리스크가 크다.따라서 메시지를 보내는 앞단에 메시지 큐(Apache Kafka, RabbitMQ 등)를 적용하게 된다. 이러한 메시지 큐들도 결국 단일 장애지점을 피하기 위해 분산 시스템이 사용된다. 분산시스템의 Trade-off 그런데 여러 서버를 배치하는 분산 시스템에서는 정확히 한..
커스텀 명령어리눅스 쉘에 커스텀 명령어를 만들어보자. 리눅스 명령어에는 타입이 존재한다. 위와 같이 type 명령어를 통해서 명령어의 타입을 확인할 수 있다.cd와 같이 기본적인 셀 자체 내장의 명령어는 shell builtin으로으로 출력되지만외부 명령어인 mv, cp는 명령어 파일이 저장된 위치가 출력된다. 명령어 파일의 디렉터리모든 것이 파일인 리눅스에서는 명령어도 결국 파일로 이루어진다. 파일을 실행하기 위해서는 경로와 이름을 사용해서 실행한다.Ex) ./myfile 하지만 환경 변수인 PATH에 경로 정보를 등록하면 파일을 실행하기 위한 경로를 생략할 수 있다.따라서 경로 지정이 명령어 실행 시 현재 폴더에 해당 파일이 없다면, PATH에 등록된 정보를 통해 실행 가능한 명령어인지 확인하..
URL 링크 단축이란? 아래와 같이 긴 URL은 공유 시, 텍스트 크기가 굉장히 길어지는 단점이 있다.https://www.google.com/search?q=%EB%A7%81%ED%81%AC+%EB%8B%A8%EC%B6%95&oq=%EB%A7%81%ED%81%AC+%EB%8B%A8%EC%B6%95&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIGCAEQRRg90gEINzcxNmowajGoAgCwAgE&sourceid=chrome&ie=UTF-8 🔎 링크 단축: Google 검색 www.google.com 이런 URL은 메시지나 SNS 공유를 위해 사용하기에는 불편하고 보기도 좋지 않다.이를 위해 최근에는 아래와 같이 같은 링크를 단축된 길이의 URL로 변환해서 공유를 하는 경우가 많다. ..
리눅스 계열의 OS를 사용하면 apt, yum, dnf와 같은 명령어를 사용해 패키지를 다운로드한다.이때 각 명령어가 어떻게 다른지 확인해 보자. 리눅스 배포판일단 리눅스는 각 배포판에 따라서 사용되는 패키지 다운/설치 명령어가 다르다.대표적으로는 데비안 계열과 레드헷 계열이 있다. 1. 데비안 계열의 경우데비안 계열의 대표적인 OS가 바로 Ubuntu이다.Ubuntu에서는 .deb 형식의 컴파일된 바이너리 패키지 포맷을 사용한다. dpkg이 .deb 형식의 데비안 패키지 관리 시스템이 dpkg이다.dpkg는 .deb 패키지의 설치, 삭제, 정보 제공을 위해 사용되는 저레벨 도구이다. 문제는 우리가 사용하는 대부분의 패키지들은 다른 기본 패키지들에게 의존성을 가진다는 것이다.dpkg로 패키..
Hypervisor의 OverCommit가상화의 핵심인 하이퍼바이저는 자원을 극한으로 효율적으로 사용하기 위해 OverCommit 기능을 사용한다. VM들이 모두 같은 자원량을 나누어 사용한다고 가정해 보자.이 기능을 사용하면, 하이퍼바이저가 물리 호스트의 자원을 정확히 VM 개수만큼 N등분하지 않고 N개 이상의 VM을 동작시킨다. 사실 모든 VM이 자원을 100% 활용하지 않기 때문에, AWS와 같은 CSP 입장에서는 자원을 1:1 크기로 예약해 두면 유휴 자원이 발생한다. 이러한 자원 낭비를 막고자 물리적인 컴퓨팅 자원보다 VM들에게 더 많은 CPU와 메모리를 프로비저닝 하게 된다. 이를 Overcommit이라고 한다. CPU overcommitCPU overcommit은 CPU 자원을 물..
3Tier 기본적으로 3Tier는 Presentation, Application 그리고 Data Tier로 나뉜다.여기서 웹서비스라면 Presentation Tier는 Web server로, Application Tier는 WAS(Web Application Server)로 대표된다. Data Tier는 주로 RDBS처럼, 웹 개발 중에 자연스럽게 분리되는데 문제는 Web server와 WAS이다.검색하는 여러 장점이 있더라도 Web server와 WAS를 굳이 다른 서버로 분리할 필요가 있을까?WAS의 Nginx나 Apache가 Web server의 역할도 수행해도 문제가 없어 보이기도 한다. 실제로 PHP의 대표적인 웹 서비스 오픈소스인 워드 프레스는 web server와 WAS가 하나로 합쳐..
SQL (Structed Query Language) 구조화된 질의 언어 -ANSI SQL 표준은 널리 사용되는 모든 관계형 데이터베이스 엔진에서 지원되며, 이러한 엔진들 중 일부는 해당 엔진의 특정한 기능들을 지원하기 위해 ANSI SQL을 확장 - SQL은 데이터의 행을 추가, 업데이트 또는 삭제 트랜잭션 처리 및 분석, 애플리케이션의 데이터의 하위 집합을 검색하며 데이터베이스의 모든 자원을 관리하는 데 사용된다. 1. DDL 데이터 정의 GREATE: schema, Domain, TAble, view, index를 정의 Alter: Table에 대한 정의를 변경 Drop: schema, Domain, TAble, view, index를 삭제 2. DML 데이터 조작 select: 테이블에서 조건에 ..
기존에는 한 폴더 내의 변경 만으로도 모든 폴더가 각각 빌드되는 Workflow를 적용하고 있었다. 아무리 Public Repository는 Github Actions가 무료라도 이런 비효율성을 참을 수가 없으니 바꾸어 보자. https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore Workflow syntax for GitHub Actions - GitHub Docs A workflow is a configurable automated process made up of one or more jobs. You m..
일단 봇은 생성되어 있는 상태로 가정하고 기술하겠다. 1. 1:1 Channel 생성 슬랙에서는 1대 1 대화인 DM도 하나의 채널로 간주된다. 따라서 봇이 유저와 채널을 생성해서 메시지를 post 해야 한다. 이를 위해 conversations_open() 함수를 사용해 주자. app.client.conversations_open("Either channel or users must be provided") https://api.slack.com/methods/conversations.open#markdown conversations.open API method Opens or resumes a direct message or multi-person direct message. api.slack.com..
다른 크롤러들과는 다르게 실제 user처럼 동작시키므로 원하는 데이터를 얻기 위해서는 일일이 조작시켜 주어야 한다. 이러한 방식은 귀찮지만, python의 request로 요청을 보내는 프로그램이 크롤링으로 감지되어 요청을 거절당한다면 사용할 수밖에 없는 대안이다. 설치하기 일단 공식 홈페이지에 들어가자. https://pypi.org/project/selenium/ selenium pypi.org 최신 버전은 Python 3.7이상을 요구하고 있다. Python 3.7+ 일단 pip 혹은 conda로 selenium을 설치해 주자. pip install -U selenium 이제 크롬 드라이버를 버전에 맞게 설치해야 한다. 크롬의 설정에서 정보창에 버전을 확인해 주자. 크롬 드라이버 링크 https:/..