EKS + Fluent bit + OpenSearch 구성을 통한 로그 수집 TECH by Sangmi Park 2024년 02월 08일 1-a. EFK (ElasticSearch + Fluented + Kibana)란? EFK란 ElasitcSearch + Fluentd bit + Kibana의 조합을 일컬음보통 지속적으로 유입되는 로그 데이터를 수신하고 이 데이터를 차트와 그래프로 시각화 하거나 분석할때 사용하는 솔루션2021년 9월, Elastic의 라이선스 변경으로 인해 AWS에서는 ElasticSearch에 대한 업데이트 제공을 중단함. 기존 ElasticSearch를 포크(Fork)하여 OpenSearch라는 오픈 소스 서비스를 개시하고,Elastic에서 함께 지원하던 시각화 도구인 Kibana는 OpenSearch Dashboard 라는 서비스로 지원 1-b. OpenSearch + Fluent bit + OpenSearch Dashboard Fluent bit : 데이터(로그)를 수집해서 Opensearch로 전달OpenSearch : Fluentd로부터 받은 데이터를 검색 및 집계하여 필요한 정보 획득OpenSearch Dashboard: Opensearch의 빠른 검색능력을 통해 데이터 시각화 및 모니터링 1-c. Fluentd / Fluent bit / LogStash 장단점 장점단점Fluentd– 다양한 데이터 소스에서 로그를 수집하고 대용량 데이터 처리를 지원하는 포괄적인 로그 수집기– 풍부한 플러그인과 커뮤니티 지원이 제공됨– 일부 환경에서 성능이 떨어질 수 있으며, 메모리 사용량이 크고 설정이 상대적으로 복잡함Fluent bit– 경량화 되어 자원 소모가 적고, 빠른 처리 속도 제공– 컨테이너 환경에 적합하고 메모리 효율성이 뛰어남– 로그 처리 파이프라인이 다른 컴포넌트와 비교했을 때,일부 기능이 제한적일 수 있음LogStash– 다양한 데이터 입력과 출력 플러그인 지원– ElasticSearch와의 연동이 강력하며, 데이터 처리 파이프라인 구축이 상대적으로 용이– 자원 소모가 크고, 처리량이 많은 시나리오에서성능에 제약이 있을 수 있음 2-a. 사전 준비사항 1) 로그를 생성할 애플리케이션 생성git clone https://github.com/GoogleCloudPlatform/microservices-demo.git cd microservice-demo 2) 애플리케이션 yaml 파일 클러스터에 적용kubectl apply -f ./microservice-demo/release/kubernetes-manifests.yaml 3) 배포 확인kubectl get pod -A -n logging 2-b. Elasticsearch(Amazon OpenSearch Service) 생성 https://docs.aws.amazon.com/ko_kr/opensearch-service/latest/developerguide/createupdatedomains.html 를 참고하여 Elasticsearch 생성 2-c. AWS IRSA (IAM Role for Service Account) 설정 Kubernetes Service Account와 AWS IAM 역할을 연결하여 AWS 리소스에 대한 접근 권한을 부여하는 접근제어 방식1) EKS OIDC Identity Providers 생성 IAM > Access Management > Identity Providers > Add Provider → 공급자 유형 : OpenID Connect → 공급자 URL EKS > Clusters > 클러스터 선택 > Overview > OpenID Connect provider URL → 대상 : sts.amazonaws.com 2) IAM Policy 생성 IAM > Access Management > Policies > Create policy{ "Version": "2012-10-17", "Statement": [ { "Action": [ "es:ESHttp*" ], "Resource": "${OPENSEARCH_ARN}", "Effect": "Allow" } ]}→ ${OPENSEARCH_ARN} : 생성한 OpenSearch의 ARN 정보로 교체 3) IAM Role 생성 IAM > Access Management > Policies > Create role→ 신뢰할 수 있는 엔터티 유형 : 사용자 지정 신뢰 정책{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "${IDENTITY_PROVIDER_ARN}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${IDENTITY_PROVIDER}:aud": "sts.amazonaws.com", "${IDENTITY_PROVIDER}:sub": "${SERVICE_ACCOUNT_NAME}", } } } ] } → ${IDENTITY_PROVIDER_ARN} : 위에서 확인한 EKS OpenID Connect provider ARN 값→ ${IDENTITY_PROVIDER}:aud : 위에서 확인한 EKS OpenID Connect provider→ ${IDENTITY_PROVIDER}:sub : 생성할 Service Account 이름 2-d. RBAC (Role-Based Access Control) 설정 Kubernetes Service Account에게 클러스터 수준의 리소스 접근을 제어할 권한 부여1) Service Account 생성apiVersion: v1 kind: ServiceAccount metadata: name: fluent-bit annotations: eks.amazonaws.com/role-arn: ${IAM_ROLE_ARN} namespace: logging 2) Cluster Role 생성apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: fluent-bit-read rules: - apiGroups: - "" resources: - namespaces - pods verbs: - get - list - watch 3) Cluster Role Binding 생성apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: fluent-bit-read roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: fluent-bit-read subjects: - kind: ServiceAccount name: fluent-bit namespace: logging 2-e. Fluent-bit ConfigMap 생성 apiVersion: v1 kind: ConfigMap metadata: labels: k8s-app: fluent-bit name: fluent-bit-config namespace: logging data: fluent-bit.conf: | [SERVICE] Flush 1 Log_Level info Daemon off Parsers_File parsers.conf HTTP_Server On HTTP_Listen 0.0.0.0 HTTP_Port 2020 @INCLUDE input-kubernetes.conf @INCLUDE filter-kubernetes.conf @INCLUDE output-opensearch.conf input-kubernetes.conf: | [INPUT] Name tail Tag kube.* Path /var/log/containers/*.log Parser docker DB /var/log/flb_kube.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10 filter-kubernetes.conf: | [FILTER] Name kubernetes Match kube.* Kube_URL https://kubernetes.default.svc:443 Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token Kube_Tag_Prefix kube.var.log.containers. Merge_Log On Merge_Log_Key log_processed K8S-Logging.Parser On K8S-Logging.Exclude On output-opensearch.conf: | [OUTPUT] Name es Match * Host ${OPENSEARCH_ENDPOINT} Port 443 TLS On AWS_Auth On AWS_Region ${AWS_REGION} Index ${INDEX_NAME} Replace_Dots On Suppress_Type_Name On parsers.conf: | [PARSER] Name docker Format json Time_Key time Time_Format %Y-%m-%dT%H:%M:%S.%L Time_Keep On→ [INPUT] Path /var/log/containers/*.log : 수집할 로그가 위치한 경로→ [OUTPUT] Host ${OPENSEARCH_ENDPOINT} AWS_Region ${AWS_REGION} Index ${INDEX_NAME} : Daemonset 컨테이너의 환경 변수에서 설정데몬셋(DaemonSet)과 ${OPENSEARCH_ENDPOINT} 변수를 사용하여 각 노드가 자체의OpenSearch 인스턴스로 로그 데이터를 전송하도록 구성하면, 각 노드가 독립적으로 로그 데이터를 처리하므로써 장애상황이 발생하여도 다른 노드는 정상적으로 로그 데이터를 전송하고 처리할 수 있습니다. 이로 인해 단일 포인트 오브 실패를 피할 수 있으며, 클러스터의 안정성과 로그 데이터의 신뢰성을 향상시킬 수 있음 2-f. Fluent-bit Daemonset 생성 apiVersion: apps/v1 kind: DaemonSet metadata: labels: k8s-app: fluent-bit-logging kubernetes.io/cluster-service: "true" version: v1 name: fluent-bit namespace: logging spec: selector: matchLabels: k8s-app: fluent-bit-logging template: metadata: annotations: prometheus.io/path: /api/v1/metrics/prometheus prometheus.io/port: "2020" prometheus.io/scrape: "true" labels: k8s-app: fluent-bit-logging kubernetes.io/cluster-service: "true" version: v1 spec: containers: - env: - name: OPENSEARCH_ENDPOINT value: ${OPENSEARCH_ENDPOINT} - name: AWS_REGION value: ${AWS_REGION} - name: INDEX_NAME value: ${INDEX_NAME} name: fluent-bit image: amazon/aws-for-fluent-bit:2.28.0 imagePullPolicy: Always ports: - containerPort: 2020 volumeMounts: - mountPath: /var/log name: varlog - mountPath: /var/lib/docker/containers name: varlibdockercontainers readOnly: true - mountPath: /fluent-bit/etc/ name: fluent-bit-config serviceAccountName: fluent-bit terminationGracePeriodSeconds: 10 tolerations: - effect: NoSchedule key: node-role.kubernetes.io/master operator: Exists - effect: NoExecute operator: Exists - effect: NoSchedule operator: Exists volumes: - hostPath: path: /var/log name: varlog - hostPath: path: /var/lib/docker/containers name: varlibdockercontainers - configMap: name: fluent-bit-config name: fluent-bit-config→ ${OPENSEARCH_ENDPOINT} : OpenSearch endpoint url (https:// 포함 X)→ ${AWS_REGION}→ ${INDEX_NAME} : 수집된 로그 데이터를 OpenSearch로 전송하기 전 어떤 인덱스 이름에 해당 로그를 저장할 지 정의→ image: amazon/aws-for-fluent-bit:2.28.0→ serviceAccountName: fluent-bit : 위에서 생성한 IAM Role에 설정값으로 지정 3. OpenSearch 동작 확인 1) OpenSearch 접속 2) 인덱스 패턴 생성메뉴 > Management > Stack Management > Index Patterns > Create index patternStep 1 of 2 위에서 설정한 Index Name (eks-log)를 검색하면 일치하는 소스가 조회됨 로그데이터에 time이라는 필드에 이벤트 시간 정보가 포함되어있다면 OpenSearch에서 @timestamp 필드에 매핑하게 되어정확한 시간 순서로 이벤트를 확인할 수 있음 3) 로그 적재 확인 방금 읽은 인사이트를 실무에 직접 적용하고 싶으시다면?지금 바로 베스핀글로벌에 문의하세요. 베스핀글로벌 문의하기 2024년 02월 08일
베스핀글로벌, 김포국제공항에 AI 챗봇 서비스 공급 “24시간 응답 가능, 공항에 대해 무엇이든 물어보세요!” by Sangmi Park 2024년 01월 26일 연합뉴스 / 2024-01-26 / 홍국기 기자 / [기사 전문 보기] 베스핀글로벌의 대화형 AI 플랫폼 ‘헬프나우’, 김포국제공항 AI 챗봇 서비스에 적용AI 챗봇 서비스, 365일 24시간 내내 즉각적이고 정확한 정보 전달 가능… 새로운 차원의 이용객 경험 향상 기대헬프나우, NLU 엔진과 LLM 연동 및 RAG 등 최신 AI 기술 탑재… 생성형 AI 통해 가장 정확하고 빠르게 맞춤형 응답 제공 <이미지: 한국공항공사가 관리·운영하는 김포국제공항의 AI 챗봇 시범 서비스에 베스핀글로벌의 헬프나우(HelpNow)가 적용되었다.한국공항공사 챗봇 서비스 화면 캡처.> 멀티 클라우드 운영 관리 전문 기업 베스핀글로벌(https://www.bespinglobal.com/)이 한국공항공사가 관리∙운영하는 김포국제공항의 챗봇 시범 서비스에 적용되도록 자사의 대화형 AI 플랫폼 ‘헬프나우(HelpNow)’를 성공적으로 공급했다고 26일 밝혔다.이번에 선보인 김포국제공항의 챗봇은 ▲공항 이용 ▲항공사 ▲출입국 ▲주차 ▲상업 시설 등 공항 이용객이 자주 묻는 질문에 대해 최적의 답변을 제공한다. 예를 들어 이용객이 현재 김포국제공항의 주차 가능 여부를 질문할 경우, 실시간 주차 상황을 알 수 있는 링크를 알려준다. 이처럼 챗봇 서비스는 AI 기술을 기반으로 즉각적이고 정확한 공항 관련 정보를 365일 24시간 내내 지원함으로써, 이용객들의 공항 이용 경험을 혁신적으로 개선할 것으로 기대된다.헬프나우는 대화형 AI 서비스 구축과 운영을 위한 통합 플랫폼이다. 구글 다이얼로그플로우(Dialogflow), AWS 렉스(Lex), 마이크로소프트 Azure 루이스(Luis), IBM 왓슨(Watson) 등 자연어 이해(NLU) 엔진을 통해 사용자의 언어를 신속하게 이해하고, 오픈AI의 GPT-4, 구글 PaLM2, 네이버 하이퍼클로바X 등 가장 우수하고 뛰어난 LLM(대규모 언어 모델)을 선별 연동하여 단순 문답 방식(FAQ)이 아니라 사람과 실제로 대화하는 것과 같은 고품질의 대화를 경험할 수 있도록 한다.또한 헬프나우는 사전 정보를 생성형 AI에 학습시킨 뒤, LLM과 RAG(검색 증강 생성)기술을 통해 데이터베이스에서 질문과 관련된 정보를 검색, 질의와 가장 유사한 내용의 답변을 찾아 전달한다. 생성형 AI, 보유 데이터, LLM과 보유 데이터의 결합 등 답변의 범위를 선택하여 설정하는 것도 가능하다.헬프나우 PS를 담당하는 베스핀글로벌의 박승호 이사는 “산업을 막론하고 많은 기업들이 고객 경험 향상을 위해 생성형 AI 기반의 챗봇 서비스를 빠르게 도입하고 있다. 한국공항공사 역시 김포국제공항 이용객들의 편의성을 크게 향상시키기 위해 헬프나우를 선택했다”고 설명하며 “헬프나우는 고객이 보유한 데이터와 최신 AI 기술을 활용하여 가장 탁월하고 정확한 답변을 지원한다. 헬프나우를 통해 AI 챗봇을 도입한다면 고객 경험 개선은 물론, 기존 챗봇과는 차별화되는 새로운 기준을 제시할 수 있을 것”이라고 덧붙였다. RAG(Retrieval Augmented Generation, 검색 증강 생성): 텍스트 생성 작업을 수행할 때 정보 검색 결과를 기반으로 텍스트를 생성하는 자연어 처리 방법론. 문의하기 2024년 01월 26일
제3자배정 유상증자 신주발행 공고 by Sangmi Park 2023년 12월 07일 제3자배정 유상증자 신주발행 공고 베스핀글로벌 주식회사(이하 “회사”)는 2023년 12월 5일 개최한 회사의이사회에서 회사 정관 제9조 규정에 의하여 제3자 배정 유상증자를 결의하였기에 상법 제418조 제4항에 의거 공고합니다. 1. 신주식의 종류와 수: 보통주식 40,000주1. 신주식의 발행가액 : 1주당 금 100,000원 (1주 액면금액: 금 10,000원)1. 청 약 기 일 : 2023년 12월 22일1. 납 입 기 일 : 2023년 12월 22일1. 납 입 은 행 : 신한은행 역삼동기업금융센터지점1. 신주식 인수 방법 : 정관 제9조에 따른 제3자 배정신주를 배정받은 제 3자주식수금액 (원)뉴베리 글로벌 리미티드(Newberry Global Limited)보통주식40,000주4,000,000,000원합 계40,000주4,000,000,000원 2023년 12월 7일베스핀글로벌 주식회사서울특별시 서초구 강남대로 327, 13층, 14층, 15층, 16층(서초동, 대륭서초타워) 대표이사 장인수 2023년 12월 07일
베스핀글로벌, 커넥티비티 클라우드 기업 ‘클라우드플레어’와 한국 총판 계약 체결 by Sangmi Park 2023년 11월 27일 ETNEWS / 2023-11-27 / 박두호 기자 / [기사 전문 보기 베스핀글로벌, 클라우드플레어와 국내 최초 총판 계약… 체결 계기로 국내 기업 대상 클라우드 및 네트워킹 보안 솔루션 공급 확대 기대베스핀글로벌, 커넥티비티 클라우드 선도 기업인 클라우드플레어와 협력 바탕, 고객을 위한 클라우드 네이티브 통합 보안 솔루션 더욱 강화 <이미지: 베스핀글로벌, ‘클라우드플레어’와 한국 총판 계약 체결. 왼쪽은 베스핀글로벌 장인수 한국 대표, 오른쪽은 클라우드플레어 김도균 지사장.> 멀티 클라우드 운영 관리 전문 기업 베스핀글로벌(https://www.bespinglobal.com/)이 커넥티비티 클라우드 선도 기업 클라우드플레어(https://www.cloudflare.com/ko-kr/)와 한국 총판 계약을 체결했다고 27일 밝혔다.양사는 이번 계약 체결을 계기로 국내 클라우드 보안 사업 활성화를 위한 협업을 더욱 공고히 할 계획이다. 두 기업의 상호 협력은 국내 기업들이 강력한 클라우드플레어 글로벌 네트워크를 통해 안전하게 비즈니스를 진행하는 데 큰 보탬이 될 것으로 보인다.클라우드플레어의 총판 역할을 맡게 된 베스핀글로벌은 국내 클라우드플레어 고객들을 대상으로 판매와 기술 지원을 한층 더 강화하게 된다. 클라우드플레어의 플랫폼과 베스핀글로벌이 갖춘 클라우드 보안 역량의 결합을 통해 더욱 강력한 클라우드 네이티브 통합 보안 환경 구현이 가능해질 것으로 기대된다.베스핀글로벌은 업계 최초로 클라우드 보안 전담 사업 본부를 설치하였고 국내 기업 중 가장 많은 클라우드 보안 인력을 보유하고 있다. 수년 전부터 클라우드 네이티브 통합 보안의 필요성을 꾸준히 강조하면서 다양한 방안과 솔루션을 제시해왔다. 클라우드플레어를 비롯한 글로벌 보안 기업들과 연대하여 ‘클라우드 보안 얼라이언스’를 조직, 지난 5월 클라우드 네이티브 보안 컨퍼런스를 개최하여 국내 시장에 보안 산업 활성화와 인식 전환에 대한 목표를 함께 공유한 바 있다.클라우드플레어는 더 나은 인터넷 구축을 돕는다는 사명을 갖고 있는 글로벌 커넥티비티 클라우드 선도 기업이다. 지능적이고 프로그래밍이 가능한 글로벌 클라우드 네트워크를 기반으로 고객으로 하여금 더 안전하고 더 빠르고 더 안정적인 운영을 지원하며 고객 데이터에 대한 가시성 역시 더욱 향상시킨다. 클라우드플레어의 네트워크는 현재 국내를 포함해 전 세계 100개국 300개 도시를 아우르고 있다.클라우드플레어 김도균 한국 지사장은 “대내외 모두로부터 인정받는 클라우드 보안 역량을 보유한 베스핀글로벌과 협업하게 되어 기쁘다. 이번 총판 계약 체결을 통해 베스핀글로벌의 전문성과 클라우드플레어의 글로벌 네트워크와 기술력을 결합하여 국내 기업들에게 더욱 강력하고 효과적인 보안 솔루션을 제공할 수 있게 됐다”고 말했다.베스핀글로벌 장인수 한국 대표는 “베스핀글로벌은 클라우드 전문 역량을 바탕으로 시장과 기업에 가장 필요한 클라우드 네이티브 보안 기술과 전략을 제공하고 있다. 클라우드플레어와 협업함으로써 고객에게 더욱 강력하고 세계적인 수준의 클라우드 보안 방안을 제시할 수 있을 것으로 기대한다”고 전했다. 문의하기 2023년 11월 27일
구글OTP PC/모바일 동시에 사용하는 방법 ARTICLE by Sangmi Park 2023년 11월 21일 안녕하세요~ 베스핀글로벌 D&A실 김경진님이 작성해 주신 ‘구글 OTP PC/모바일 동시에 사용하는 방법’에 대해 알아보겠습니다. 목적 AWS 콘솔 접속 보안에 PC/모바일에서 자유롭게 사용하게 위해크롬 브라우저에 확장 프로그램(extention)으로 설치되므로 좀 더 빠르고, 편하게 콘솔 로그인 가능하다.핸드폰 분실, 교체 등의 사유로 구글OTP 사용이 불가한 경우에 대비가 가능하다. 방법 다음의 스텝으로 진행하면 된다.크롬 확장 프로그램 인증 도구 (Authenticator) 를 설치하고 등록한다.AWS IAM에서 MFA 디바이스에서 QR코드 또는 Secret Key를 백업한다.모바일 구글OTP에 QR코드 또는 Secret key를 이용하여 등록한다.완료되면 PC/모바일 중 사용하기 편한 OTP 번호를 입력하여 콘솔 로그인한다.(제약 사항) 크롬 브라우저면 가능하다. 3. 크롬에 인증 도구 (Authenticator) 설치 1) 크롬 브라우저에서 다음의 링크에서 크롬 확장 프로그램 인증 도구 (authenticator)를 Chrome에 추가한다.https://chrome.google.com/webstore/detail/authenticator/bhghoamapcdpbohphigoooaddinpkbai 2) 확장 프로그램 추가를 선택한다. 3) 크롬 우상단의 확장프로그램을 선택하여 인증 도구를 고정시킨다. 4) 고정되면 크롬 우상단에 아래와 같은 인증 도구 아이콘이 생긴다. (설치 완료) 4. AWS 콘솔에서 IAM MFA 디바이스 관리 1) AWS 콘솔 로긴하여 IAM > Users 에서 적용할 사용자를 확인하여 Security credentials 탭으로 이동한 후, Assigned MFA deivce / Manage 를 선택한다. 2) Virtual MFA device 선택 후, 다음을 클릭한다. 3) Show QR Code 를 눌러 QR 코드를 표시한다. 4) QR코드를 모바일 카메라 등으로 사진 찍어 두거나 또는 캡쳐하여 PC에 보관한다. (백업용)※ QR코드 대신 다음의 secret key 를 이용해도 무방하다. 5) 설치한 인증도구의 QR 코드 스캔을 클릭하여 계정을 추가한다. 6) 기존 AWS IAM 의 QR 코드를 아래와 같이 선택한다. 7) 등록이 정상적으로 완료되면 아래와 같이 OTP 코드가 확인된다. 8) AWS IAM MFA 디바이스 세팅에서 위에 OTP 코드를 순차적으로 입력한다. 9) 등록이 잘되었는지 확인하고, 콘솔 로그인 해본다. ※ QR코드 추가에 문제 발생시 대신 다음의 secret key 를 이용해도 무방하다. 5. 모바일 구글OTP에 추가 모바일 Google OTP 앱을 실행하여,아래 + 메뉴을 선택한다.사진 찍어 둔 QR 코드를 모바일 구글OTP로 스캔하거나, 설정키를 입력하여 등록한다.정상 등록확인 후, 콘솔 로그인해 본다.<끝> 방금 읽은 인사이트를 실무에 직접 적용하고 싶으시다면?지금 바로 베스핀글로벌에 문의하세요. 베스핀글로벌 문의하기 2023년 11월 21일
Slack Bolt를 활용한 Python Chatbot 가이드 TECH by Sangmi Park 2023년 11월 15일 Slack Bolt 란? Bolt는 Slack 고유의 SDK로서 여러 최신 API들을 담고 있는 라이브러리를 제공합니다.왜 Slack bolt를 사용하는지?Slack bolt는 기존에 사용하던 slack_sdk를 기반으로 만들어진 SDK로 slack_sdk의 기능을 모두 사용할 수 있고, 기존에 코드로 구현하기 복잡했던event 트래깅 혹은 websocket mode들을 간단하게 구현 할 수 있다는 장점이 있습니다. 또한 Slack에서 직접 개발 업데이트를 제공해주어 신규 API에 대한 빠른 대응을 준비할 수 있습니다. 1. Slack App 생성 Slack Bolt를 활용하여 Python Chatbot을 개발하기에 앞서 Slack에 메세지를 보내거나 읽어오는 역할을 수행할 Slack App을 생성해야 합니다. 1-1. Slack Workspace 로그인 Chatbot을 연동하려고 하는 Slack WorkSpace에 로그인 한 후 Slack API 페이지로 이동합니다.https://api.slack.com/apps/ 1-2. Slack App 생성 Slack Api 페이지에서 신규 Slack App을 생성합니다.‘Create New App’을 클릭Create an app 팝업이 뜨면 ‘From scratch’ 선택App Name에 chatbot으로 사용할 App명을 지정Chatbot을 활용하려고 하는 Workspace를 선택Create App을 클릭하여 신규 Slack App을 생성 1-3. App/Bot Token 생성 Python에서 신규 생성한 Bot을 사용하기 위해서는 인가된 접근임을 증명할 Token이 필요합니다.Token은 신규 생성한 Bot Page에서 생성 할 수 있습니다. Token을 신규 생성한 후 유출되지 않도록 주의 해야합니다. 1-3-1. App Token 생성 Slack API 페이지에서 신규 생성한 App을 선택합니다. Setting > Basic Information > App-Level-Tokens 에서 App Token을 생성합니다.생성하려는 App Token의 Scope는 ‘connections:write’를 선택합니다. 3. 생성된 Token을 안전한 곳에 저장합니다. 1-3-2. Bot Token 생성 Features > OAuth & Permissions > Scopes > Bot Token Scopes에서 ‘chat:write’ 권한을 추가해 줍니다. 추가한 Scopes를 Workspace에 적용시키려면 Install이 필요합니다.Features > OAuth & Permissions > OAuth Tokens for Your Workspace 에서 ‘Install to Workspace’ 버튼을 클릭, 권한을 허가 해줍니다. 권한을 허용하면 Features > OAuth & Permissions > OAuth Tokens for Your Workspace 에서 신규 생성된 Bot Token을 확인 할 수 있습니다.해당 토큰을 안전한 곳에 저장합니다. 1-4. Slack App Socket mode 활성화 Slack에서 보내는 메시지를 신규로 만든 Slack App이 실시간으로 체크해서 반응 할 수 있도록 구성하기 위해서는 여러 방법이 있지만 이 가이드에서는 SocketMode를 사용합니다.Settings > Socket Mode > Connect using Socket Mode 에서 Enable Socket Mode 버튼을 활성화 합니다. 2. Python Slack Chatbot 작성 2-1. Python 환경 구성 Python3와 pip가 설치 되어 있다는 가정하에 설명 하겠습니다.만약 설치가 되어 있지 않다면 OS 환경에 맞춰서 python3 최신버전과 그와 연동되는 pip를 설치해주세요. 2-1-1. slack_bolt SDK 설치 pip를 사용하여 slack chatbot을 구성할 서버에 slack_bolt 라이브러리를 설치하여 줍니다.(문서작성 기준 최신버전 사용 slack_bolt v1.18.0) 2-1-2. Chatbot python 파일 작성 app.py 파일을 생성합니다.아래의 테스트 코드를 작성합니다.SLACK_BOT_TOKEN 과 SLACK_APP_TOKEN 에 위에서 저장했던 Token 값을 넣어줍니다. 3. python3 로 app.py를 실행합니다. 4. Bolt App이 실행되고 있다는 문구가 뜨면 성공적으로 연동 된 것 입니다. 3. Slack Chatbot 테스트 이제 생성한 Slack App과 Python Chatbot을 활용하여 여러 Event를 처리할 수 있습니다.Slack API에는 많은 Event들이 존재하는데, 다양한 Event에 대한 정보는 Slack 공식 Document를 참고하여 주세요. https://api.slack.com/apis/connections/events-api 3-1. Chatbot Event Subscriptions 등록 Slack App에서 Event에 대한 정보를 Python Chatbot으로 Route 하기 위해서는, 어떤 Event를 Route 할 것인지에 대한 설정이 필요합니다.Slack에서 Event에 대한 구독을 등록함으로써 Python으로 작성한 Chatbot에 Event가 Route 되게 됩니다.Slack API 페이지에서 생성한 Slack App을 선택합니다. 2. Features > Event Subscriptions 에서 Enable Event를 활성화 합니다. 3. Subscribe to bot events에 Add Bot User Event를 선택하여 아래의 event들을 구독합니다. message.channels : 해당 App 이 추가된 public channel의 메시지를 Listen 합니다.message.groups : 해당 App 이 추가된 private channel의 메시지를 Listen 합니다.message.im : 해당 App 이 추가된 DM의 메시지를 Listen 합니다.message.mpim : 해당 App 이 추가된 Multi-person DM의 메시지를 Listen 합니다.4. 변경사항 저장을 위해 Save Change를 클릭합니다. 변경한 내용을 WorkSpace에 반영하기 위해서 Basic Information > Building Apps for Slack > Install your app 에서‘Reinstall to Workspace’를 클릭해 Reinstall 작업을 진행합니다. 3-2. Python Chatbot Event Handler 작성 Event 구독을 완료 하였기 때문에 이제 Python으로 작성한 Chatbot의 Websocket을 실행 시키게되면 Event 발생 시 지정한 Handler가 호출 되게 됩니다. Chatbot을 활용할 채널에 추가하고 메시지를 보내 작성한 Chatbot이 동작하도록 코드를 작성하겠습니다. 3-2-1. Message Event Route Handler Message Event는 Chatbot이 속한 Channel에서 누군가 메시지를 보냈을 때 발생하는 이벤트 입니다.테스트에서는 해당 이벤트를 Route하여 Chatbot이 응답하는 처리를 진행해 보겠습니다. Slack App을 만든 Workspace에서 임의의 채널에 Chatbot App을 초대 합니다. 2. Python Chatbot Code를 아래와 같이 수정합니다. python3로 app.py를 실행합니다. Chatbot을 초대한 채널에 ‘hello’ 메시지를 보냅니다.정상적으로 Chatbot이 응답하는지 확인합니다. 방금 읽은 인사이트를 실무에 직접 적용하고 싶으시다면?지금 바로 베스핀글로벌에 문의하세요. 베스핀글로벌 문의하기 2023년 11월 15일
가트너가 말하는 비즈니스 성장을 돕는 클라우드 파트너 고르는 방법 by Sangmi Park 2023년 11월 03일 가트너가 말하는 비즈니스 성장을 돕는 클라우드 파트너 고르는 방법 여러분의 클라우드 도입은 IT 트랜스포메이션으로 이어지고 있나요?가트너는 클라우드 도입을 넘어 IT 트랜스포메이션의 중요성을 강조하며 클라우드 MSP의 역량을 확장시켰습니다. 가트너가 이야기하는 IT 트랜스포메이션의 정의와 클라우드 MSP의 역량, 그리고 비즈니스 성장을 돕는 클라우드 파트너를 찾기 위한 체크리스트까지. 백서를 통해 확인해 보세요! 글로벌 IT 기업들의 경쟁력, 가트너 매직 쿼드런트 클라우드 전환을 넘어 IT 트랜스포메이션으로 7년 연속 매직 쿼드런트 등재, 베스핀글로벌의 역량 IT 트랜스포메이션 파트너를 찾기 위한 체크리스트 ▶︎ 더 읽어볼만한 연관 콘텐츠 가트너 매직 쿼드런트 2023 무료 리포트 클라우드에 대해 더 알고 싶으세요?지금 바로 베스핀글로벌 전문 컨설턴트에게 문의하세요. 클라우드와 클라우드 도입에 대해 클라우드 전문가가 차근차근 설명해 드립니다.▶︎ Contact us최신 클라우드 트렌드와 뉴스를 한번에 보고 싶다면?업계 관계자들이 주목하는 뉴스레터 ‘베스픽’을 구독해 주세요.▶︎ 베스픽 구독하기 컨텐츠 다운로드아래 내용을 입력하시면 전체 내용을 다운로드 받으실 수 있습니다. 2023년 11월 03일
베스핀글로벌 이커머스 마켓플레이스 by Sangmi Park 2023년 11월 02일 베스핀글로벌 이커머스 마켓플레이스 디지털 전환이 가속화되면서 이커머스 시장도 빠르게 커지고 있습니다. 이커머스는 소비자의 일상에 깊숙히 관여하고 있는 산업인 만큼, 이커머스 기업이라면 시장 트렌드에 민감하게 반응하고 IT 신기술을 적극적으로 활용하는 것이 중요합니다.다양한 리테일 및 이커머스 파트너를 보유한 베스핀글로벌이 최근의 이커머스 트렌드와 이커머스 솔루션을 정리했습니다. 본 백서를 통해 이커머스 구축부터 마케팅, 결제, 보안 등 각 분야별로 빠르게 도입할 수 있는 전문 솔루션을 확인해 보세요. <Contents> 2023년 e-Commerce 트렌드 e-Commerce Customer Journey e-Commerce Marketplace Map e-Commerce 솔루션 소개 ▶︎ 더 읽어볼만한 연관 콘텐츠클라우드 비용부터 보안까지 CMaaS로 클라우드 360도 관리하기클라우드 기업 CISO가 말하는 2023 사이버 보안 트렌드 클라우드에 대해 더 알고 싶으세요?지금 바로 베스핀글로벌 전문 컨설턴트에게 문의하세요. 클라우드와 클라우드 도입에 대해 클라우드 전문가가 차근차근 설명해 드립니다.▶︎ Contact us최신 클라우드 트렌드와 뉴스를 한번에 보고 싶다면?업계 관계자들이 주목하는 뉴스레터 ‘베스픽’을 구독해 주세요.▶︎ 베스픽 구독하기 컨텐츠 다운로드아래 내용을 입력하시면 전체 내용을 다운로드 받으실 수 있습니다. 2023년 11월 02일
제3자배정 유상증자 신주발행 공고 by Sangmi Park 2023년 09월 18일 제3자배정 유상증자 신주발행 공고 베스핀글로벌 주식회사(이하 “회사”)는 2023년 9월 4일 개최한 회사의이사회에서 회사 정관 제9조 규정에 의하여 제3자 배정 유상증자를 결의하였기에 상법 제418조 제4항에 의거 공고합니다.1. 신주식의 종류와 수: 보통주식 270,000주1. 신주식의 발행가액 : 1주당 금 100,000원 (1주 액면금액: 금 10,000원)1. 청 약 기 일 : 2023년 10월 5일1. 납 입 기 일 : 2023년 10월 5일1. 납 입 은 행 : 신한은행 역삼동기업금융센터지점1. 신주식 인수 방법 : 정관 제9조에 따른 제3자 배정신주를 배정받은 제 3자주식수금액 (원)뉴베리 글로벌 리미티드(Newberry Global Limited)보통주식270,000주27,000,000,000원합 계270,000주27,000,000,000원 2023년 9월 18일베스핀글로벌 주식회사서울특별시 서초구 강남대로 327, 13층, 14층, 15층, 16층(서초동, 대륭서초타워) 대표이사 장인수 2023년 09월 18일
[MySQL] Online DDL 별 적용 가능한 알고리즘 (8.0 이상) TECH by Sangmi Park 2023년 08월 03일 ALTER TABLE 명령을 실행하면 MySQL 서버는 다음과 같은 순서로 스키마 변경 알고리즘을 찾음. ALGORITHM=INSTANT로 스키마 변경이 가능한지 확인 후, 가능하다면 선택ALGORITHM=INPLACE로 스키마 변경이 가능한지 확인 후, 가능하다면 선택ALGORITHM=COPY 알고리즘 선택 알고리즘의 우선순위가 낮을수록 MySQL 서버는 스키마 변경을 위해 더 큰 잠금과 많은 작업을 필요로 하고, 서버의 부하도 많이 발생시킴. INSTANT : 테이블의 데이터는 전혀 변경하지 않고, 메타데이터만 변경하고 작업을 완료함. 테이블이 가진 레코드 건수와 무관하게 작업 시간은 매우 짧음. 스키마 변경 도중 테이블의 읽고 쓰기는 대기하게 되지만 스키마 변경 시간이 매우 짧기 때문에 다른 커넥션의 쿼리 처리에는 크게 영향을 미치지 않음.INPLACE : 임시 테이블로 데이터를 복사하지 않고 스키마 변경을 실행. 하지만 내부적으로는 테이블의 리빌드를 실행할 수도 있음. 레코드의 복사 작업은 없지만 테이블의 모든 레코드를 리빌드해야 하기 때문에 테이블의 크기에 따라 많은 시간이 소요될 수 있음. 하지만 스키마 변경 중에도 테이블의 읽기와 쓰기 모두 가능. INPLACE 알고리즘으로 스키마가 변경되는 경우에도 최초 시작 시점과 마지막 종료 시점에는 테이블의 읽고 쓰기가 불가함. 하지만 이 시간은 매우 짧기 때문에 다른 커넥션의 쿼리 처리에 대한 영향도는 높지 않음.COPY : 변경된 스키마를 적용한 임시 테이블을 생성하고, 테이블의 레코드를 모두 임시 테이블로 복사한 후 최종적으로 임시 테이블을 RENAME해서 스키마 변경을 완료. 이 방법은 테이블 읽기만 가능하고 DML은 실행할 수 없음. 서비스 영향을 최소화하면서 가능한 알고리즘을 확인해 보는 방법 ALGORITHM=INSTANT 옵션으로 스키마 변경을 시도실패하면 ALGORITHM=INPLACE, LOCK=NONE 옵션으로 스키마 변경을 시도실패하면 ALGORITHM=INPLACE, LOCK=SHARED 옵션으로 스키마 변경을 시도실패하면 ALGORITHM=COPY, LOCK=SHARED 옵션으로 스키마 변경을 시도실패하면 ALGORITHM=COPY, LOCK=EXCLUSIVE 옵션으로 스키마 변경을 시도>> 1, 2번으로 되지 않는다면 DML을 멈춘 다음 스키마 변경을 해야 하는 작업임. 스키마 변경 작업의 진행 상황은 performance_schema.events_stages_current 테이블을 통해 확인 mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATEDFROM performance_schema.events_stages_current;>> WORK_COMPLETED / WORK_ESTIMATED * 100 : 진행률 Online DDL 별 적용 가능한 알고리즘 방금 읽은 인사이트를 실무에 직접 적용하고 싶으시다면?지금 바로 베스핀글로벌에 문의하세요. 베스핀글로벌 문의하기 2023년 08월 03일