Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
DNS 서버 란? DNS는 IP 주소 및 기타 데이터를 저장하고 이름별로 쿼리 할 수 있게 해주는 계층형 분산 데이터베이스입니다. 즉, DNS는 컴퓨터가 서로 통신하는 데 사용하는 숫자 IP 주소로 변환되는, 쉽게 읽을 수 있는 도메인 이름의 디렉터리입니다. 예를 들어 브라우저에 URL을 입력하면 DNS는 URL을 해당 이름과 연결된 웹 서버의 IP 주소로 변환합니다. DNS 디렉터리는 정기적으로 업데이트되는 전 세계의 도메인 네임서버에 저장되고 배포됩니다. -Google Cloud- 우리가 항상 사용하는 google.com 를 웹 주소로 쿼리 하면 매칭되는 IP로 바꿔주는 것이 DNS 서버의 역할이다. 여기서 google.com. 에 마지막 .은 생략되어 있지만, 최상위 루트 도메인을 의미한다. 따라서..
Nginx 란? Nginx는 Web server는 보통 WAS(web app server)의 앞단에 위치하여, 클라이언트로부터 HTTP 요청을 받아 정적 콘텐츠를 제공한다. 만약 동적인 콘탠츠(유저별로 다른 데이터)가 필요하다면 WAS에 요청을 넘기는 역할을 수행한다. 대표적인 Web server가 Nginx와 Apache 그리고 IIS(window server)이다. Web Server의 특성상 로드 밸런싱이 떠오를 수 있다. 실제로 AWS의 ALB는 Nginx로 구현된 로드 벨런서라고 한다. 아파치와 같은 경우는 연결마다 새로운 프로세스가 스레드에 할당되는 방식이다. 따라서 많은 트래픽에는 대처하기 힘들고, 스레드의 컨택스트 전환과 같은 오버헤드로 느려지기 쉽다. 실제로 Spring boot를 사용하..
Virtual Box에 가상머신을 쓰다 보면, 항상 ip가 바뀔 수 있기 때문에 ssh 접속할 때마다 ip설정이 귀찮을 수 있다. 이를 위해 두가지 어댑터를 붙여주어야 한다. 하나는 Virtual Box 내의 사설망에서 사용되는 호스트 전용 어댑터, 다른 하나는 외부로 통신이 되는 NAT 네트워크를 붙여줄 것이다. 호스트 전용 어댑터는 host pc에서도 인식이 되기 때문에, 이 호스트 전용 어댑터의 주소를 통해 내부 NAT 네트워크로 포트 포워딩을 해줄 것이다. 우리가 사용할 호스트 전용 adapter들을 만들어주자. 이제 VM의 네트워크 설정에서 어댑터 1에 호스트 전용 어댑터를 연결해 주자. 이제 또 다른 어댑터를 활성화해 주고, 포트포워딩 설정을 해줄 것이다. 이 NAT는 Virtual Box가 ..
DHCP(Dynamic Host Configuration Protocol)는 해당 IP(인터넷 프로토콜) 주소와 기타 관련 구성 정보(예: 서브넷 마스크 및 기본 게이트웨이)를 IP 호스트에 자동으로 제공하는 클라이언트/서버 프로토콜이다. -MS- 원하는 ip 범위 내로 할당을 하고 싶다면, 직접 DHCP 서버를 설치하고 해당 네트워크 범위 내에 ip를 할당해보자. 우리가 할당할 IP는 100.100.100.200~100.100.100.220 router의 주소는 100.100.100.254이다. 아래 명령어로 isc의 dhcp 서버를 설치해 주자. sudo apt-get install isc-dhcp-server 설치 후, 일단 잘 동작하는지 확인해 보자. systemctl start isc-dhcp-..
일단 Window10에서 Ubuntu Desktop과 연결을 해보자. 호스트 전용 네트워크를 만들면 Window10 -> Ubuntu Desktop로는 되지만 반대는 안 된다. Window10은 기본적으로 방화벽이 켜져 있기 때문에, 설정을 살펴보면 들어오는 연결이 막혀 있다. 방화벽을 꺼주면 정상적으로 연결이 된다. Ubuntu server와 win 10도 동일하게 진행이 된다. 이번에는 다른 host only 어댑터끼리 가능 한지 확인해보자. 다른 host only 어댑터는 서브넷이 다르기 때문에 통신이 안 된다. (subnet이 다른 ip를 할당받은 것을 확인할 수 있다.) 호스트 전용 네트워크에서 DHCP가 자동으로 IP를 세팅해 주기 때문에, 통신이 되지 않는다. 이를 위해서 Static IP를..
Elastic Search에서 search를 진행할 때 매칭되는 것이 너무 많으면, 요청한 측에서 처리하기가 곤란할 수 있다. 이를 위해서는 페이징 기술이 필요한데, Elastic search에서는 3가지의 페이징 기능을 제공한다. 각각은 장단점이 있기 때문에 상황에 맞게 선택할 필요가 있다. 3가지의 장단점에 대한 내용은 아래의 블로그 게시글이 잘 정리하고 있으니 참조하자. https://blog.naver.com/occidere/222686762033 [Paging] Elasticsearch 의 페이징 방식 3가지 요약 Elasticsearch 의 페이징 처리 방식 3가지 1. Random access with size & from params - 매번 검색할... blog.naver.com 이번에 ..
채용 공고를 빠르게 검색하는 용도로 Elastic Search를 사용하고 있는데, 채용 공고는 몇달이나 지난 것은 의미가 없기 때문에 날짜가 가까울수록 높은 Score를 낼 수 있도록 만들어야 한다. script_score를 사용하면 부분 텍스트나 숫자로 score를 만들기 때문에, Decay functions을 사용해야 한다. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#function-decay Function score query | Elasticsearch Guide [8.11] | Elastic Keep in mind that taking the log() of ..
기존에는 한 폴더 내의 변경 만으로도 모든 폴더가 각각 빌드되는 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..
Local에 설치하거나 라이브러리를 사용하는 것이 아니라면, Elastic Search로의 endpoint URL로 직접 요청을 보내야 한다. 이를 위해서 HTTP를 사용한다. (HTTP를 편하게 작성하기 위해서 PostMan를 사용해 보자.) https://www.postman.com/downloads/ Download Postman | Get Started for Free Try Postman for free! Join 25 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster. www.postman.com 1. 보안 인증 일단 엔드포인트로의 접근을 위..
일단 봇은 생성되어 있는 상태로 가정하고 기술하겠다. 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..