반응형

1.streamlit 이란?

파이썬 웹 프레임워크 라이브러리

데이터 사이언스와 머신러닝에 유용한 커스텀 웹 앱을 쉽게 만들어 줄 수 있다고 한다.

시각화와 차트 제공을 위한 다양한 서드파티 모듈이 있다

참고) 공공 데이터  https://www.data.go.kr/index.do

2. 왜 streamlit 을 선택할까 ?

아직 잘은 모르겠지만 내가 봤을때, 데이터 레포트를 웹 페이지로 만들고 싶은데 웹 서버 구축에 대한 부담 없이 텍스트와 마크다운 수준의 코드 만으로 띄우고 싶을때 쓰면 좋을 것 같다.

 

3. streamlit 따라 해보기

a. lib 설치

$ pip install streamlit

 

 

b. app 코드 작성하기

# import module
import streamlit as st
import pandas as pd

# Title
st.title("This is Title line")

# Header
st.header("This is a header")

st.text("This line belongs to a text")



# Markdowns
st.markdown("### This is a markdown")
st.markdown("## This is a markdown")
st.markdown("# This is a markdown")

#Select the subject from the Selectbox
subject = st.selectbox("Subjects: ",['English', 'Hindi', 'Math',
                       'Science'])
# Print the subject
st.write("Your Subject is: ", subject)



# Reading the CSV file
df = pd.read_csv("Startups_Expense.csv")
# Putting title
st.title("View of the Data shown below:")
# To visualize the data
st.write(df)

 

 

c. 실행하기

$ streamlit run app.py

 

 

 

 

d. 그 외 컴포넌트를 알아보려면?

https://streamlit.io/components

 

Components • Streamlit

Streamlit is an open-source Python framework for machine learning and data science teams. Create interactive data apps in minutes.

streamlit.io

 

반응형
반응형

1.네트워크 통신 확인이란?

  • 데이터 엔지니어 포지션이라면 파이프라인 설계나 시스템을 연동할 때 네트워크 방화벽 체크는 필수다.
  • 자주 사용하는 네트워크 통신 확인 하는 방법을 소개한다.

 

2.네트워크 통신 확인

 

telnet 으로 ACL 확인

$ telnet [IP] [port]

 

 

프록시 확인

$ traceroute -p 8020 jssvs-server.home.io
$ traceroute -p [포트] [ip]

 

curl 명령어를 이용한 확인

$ curl -v [ip]:[port]

$ curl -vvv -x [proxy ip] [ip]:[port]

 

 

ping 명령어를 이용한 확인

$ ping [IP]:[port]
반응형

'System' 카테고리의 다른 글

ssh로 서버 접속하기  (1) 2024.03.04
반응형
 

1. 문제 소개

 

2. 코드

def solution():
    N = int(input())
    cnt = 1
    iter = 1
    while iter < N:
        iter = (cnt * 6) + iter
        cnt += 1

    print(cnt)




if __name__ == '__main__':
    solution()

3. 코멘트

  • 육각형 벌집은 1개에서 7 번 -> 19번 -> 37번 .. 이렇게 증가하는데 6의 배수로 증가한다.
  • 이 규칙을 알면 몇 번째 벌집 안에 있고, 총 몇번 이동해야 하는지 구할 수 있다.
반응형
반응형

1. ssh 로 서버 접속하기란?

  • SSH 는 컴퓨터와 서버 간의 안전한 원격통신을 제공해주는 프로토콜. 즉 통신을 어떻게 하겠다는 약속이다.
  • SSH 는 암호화, 인증, 원격제어, 파일전송이 특징이다.
  • pem 키를 생성해서 ssh 명령어 프로그램을 이용해 서버에 접근할 수 있다.

 

** AWS 를 예로 vpc 를 생성하면 public / private subnet 으로 네트워크를 외/내부 망으로 구분할 수 있다.

** 보안 네트워크 아키텍쳐를 따라 private zone 에 서비스/작업 서버를 두고 public zone 에 bastion 서버를 구성해서 접근 한다.

2. SSH 접속

** 사전 조건 - 접속하는 서버 측에 22번 포트의 방화벽 오픈 룰이 구성되있어야 한다.

 

1) 명령어 라인을 이용한 방법

 

ssh -i [pem 키 ] [서버]@[호스트]

$ ssh -i ~/.ssh/sample-key.pem ec2-user@----.ap-northeast-2.compute.amazonaws.com

 

 

2) config 파일을 이용한 방법

# vi ~/.ssh/config 파일을 생성 및 수정

Host dev-bastion
    HostName ---.ap-northeast-2.compute.amazonaws.com
    User ec2-user
    IdentityFile ~/.ssh/sample-key.pem

 

$ ssh dev-bastion

 

 

 

** 그 외에 pem 키를 서버측의 authorized_keys 에 등록하는 방법도 있다.

 

** Tip)  alias 로 미리 명령어를 등록해두면 편하다.

반응형

'System' 카테고리의 다른 글

네트워크 통신 확인하기  (0) 2024.03.14
반응형

1. 문제 소개

 

2. 코드


def set_test_case():
    T = int(input())
    rectangles = []
    for i in range(T):
        in_temp = input().split(" ")
        r = [int(in_temp[0]),int(in_temp[1])]
        rectangles.append(r)

    return rectangles

def solution():
    size = 10
    max_size = 100
    area = 0

    matrix = [[0 for i in range(max_size)] for j in range(max_size)]
    rectangles= set_test_case()

    # 색종이 영역 마킹
    for rectangle in rectangles:
        for j in range(rectangle[0],rectangle[0]+size):
            for k in range(rectangle[1],rectangle[1]+size):
                matrix[j][k] = 1

    # 색종이 영역 완전 탐색 = 배열 요소 1은 1X1 의 넓이로 본다.
    for i in range(max_size):
        for j in range(max_size):
            if matrix[i][j] == 1:
                area+=1

    print(area)

if __name__ == '__main__':
    solution()

3. 코멘트

  • 처음에는 색종이의 꼭지점 좌표를 이용해, 겹치는 영역 또는 빈 영역이 발생할 수 있는 경우의 룰(특징)을 정의해서 사각형을 계산해 답을 도출 하는 방법으로 고민했다. ( CCW, 컨벡스헐 알고리즘을 적용해서 풀 수 있다는 피드백) 
  • 내가 생각한 방식은 꽤 복잡하고, 주어진 조건(도화지 크기, 색종이 수 제한) 과 1초라는 제한 시간은 완전 탐색 방식으로 푸는게 간단하다는 스터디원의 풀이를 보고 나도 다시 풀었다. 
  • 방법은 간단하게 도화지 크기 (100 * 100)의 2차원 배열을 만들고, 색종이의 영역 만큼 마킹을 한 후 마킹된 원소를 넓이로 보고 답을 출력한다.
  • 오랜만에 알고리즘 스터디를 해서 너무 재밌었다. 생업 때문에 자주는 아니더라도 꾸준히 모였으면 좋겠다.
  • 이 글을 보고 알고리즘 스터디에 관심이 있는 분들은 언제든지 연락을... :) 
 
반응형
반응형

1. 문제 소개

  • 자료 구조 큐를 이용해야 하는 문제다.

 

2. 코드

from collections import deque

def set_test_case():
    in_line = input().split(" ")
    n,m = int(in_line[0]),int(in_line[1])

    in_line = input().split(" ")
    pop_list = [int(x) for x in in_line]

    return n,m,pop_list

def pop_simulate(q,v):
    dir= 1 if q.index(v) > len(q)//2 else - 1
    turn=0

    while(True):
        if q[0] == v:
            q.popleft()
            break
            
        else:
            q.rotate(dir)
            turn += 1
    return turn

def solution():
    n,m,pop_list = set_test_case()
    turns = []
    q = deque([i for i in range(1,n+1)])

    #q.rotate(1) # to right
    
    for v in pop_list:
        result = pop_simulate(q,v)
        turns +=[result]
    print(sum(turns))


if __name__=="__main__":
    solution()

 

3. 코멘트

  • pop 할 원소의 위치가 큐 길이의 중앙 값을 기준으로 비교 후에 왼쪽으로 이동시킬 지 , 오른쪽으로 이동시킬 지 방향을 구한다.
  • 2초 제한과 50의 테스트케이스 정도는 시뮬레이션 방식으로 통과가 가능할 것 같아, 간단한 시뮬레이션을 구현했다.
  • 그 동안 프로젝트 때문에 알고리즘 스터디를 오랜만에 참여했다. 앞으로는 더 열심히 하자. 
 
반응형
반응형

디비랩 리얼포스

지난 주 이제는 정말 가족같이 편해져버린 오래된 지인들과 일본여행을 다녀왔다.

그리고 여행에서 “엔저니까..” 라는 이유로 함께 구매한 키보드 세개를 기념샷으로 올려봤다.

 

9월 부터 열심히 달렸던 프로젝트가 11월 13일에 쉼표를 찍었다. 마침표가 아니라 쉼표다. 주말에도 공부하고, 열심히 일했던 것 같다. 마지막 발표가 있던 주말에는 새벽 3시까지 보고서 PT를 수정했다.

고생했던 순간들을 이 블로그에 남겨서 티도 내고 싶지만.. 빅데이터 워크로드를 쿠버네티스로 이전했던 주제의 후기를 남기고 싶다. (혹시 누군가에게는 도움이 될 것 같다.)

 

나는 관리형 쿠버네티스 eks위에 emr on eks, airflow on eks 를 구축했는데, 아직까지는 만족 스럽다.

보름정도 지나서 airflow의 한 차례 첫 장애를 맞았지만 해결할 수 있었다.

 

나의 경우처럼 회사에서 망분리 환경이나 제한된 aws 역할을 갖고 있고, 운영중인 서비스별로 CI/CD 구성이 덜 되있다고 한다면 더 효과를 볼 수 있을지도 모른다. 쿠버네티스의 알려진 장점도 분명이 있다. 하지만 나의 경우에는 결과적으로 각 서버에 터미널로 접속할 일이 줄었고, 워크로드에 따라 스케일 인/아웃, 그리고 서비스 버저닝과 롤백 등의 여러 이점들이 작업시간을 단축해줬다. 앞으로 신규 서비스나 오픈소스를 서버에 올릴 때 EC2를 발급받지 않아도 되고 말이다. 특히 고성능 오토스케일러인 카펜터(karpenter)는 정말 필수적으로 함께 사용해야 한다. Spot,on-demand 인스턴스를 할당할때 놀라운 성능을 보여준다.

 

단점은 단축된 작업시간이 쿠버네티스 운영과 공부, 트러블 슈팅으로 쓰다보니 아직은 도입 전과 후의 고생의 총양이 같다고 할 수있다. 쿠버네티스 버전 업그레이드 시 데이터 플레인쪽의 수동 업그레이드 작업은 덤이다.

데브옵스 조직이 많이 생겨나고 있는 시대에 데이터 엔지니어가 쿠버네티스 운영 경험이 필요할까? 싶다. 그래도 뭐.. 알아두고 익혀둬서 나쁠 건 없다. 아직은 재미있어서 같이 하고 있다.

 

앞으로는 짧은 시간동안 몰입했던 여러 기술들을 정리하고 기술 페이지 쪽에 하나하나 포스팅 해보려고 한다.

 

가족들과 프로젝트 진행에 큰 도움을 준 협력사분들과 부사수에게 감사하다.

 

앞으로는 적당히 바쁘고 싶다.

 

 

 
반응형
반응형

kubectl 명령어 정리 배경

  • 자주 쓰는 것들을 정리해둔 내용인데, 혹시 누군가에게 도움이 될까봐 올려둔다.
  • 개인적인 팁은 kubectl 을 k 라는 alias 로 설정해서 쓰면 편하다
  • 쿠버네티스 리소스 관리 유틸리티인 k9s 를 쓰면 더 편리 할 수 있다. (  URL - https://k9scli.io/ )

 

 

kubectl 명령어 모음

# 네임스페이스 생성
$ kubectl create namespace argocd

# 네임스페이스 를 지정하여 yaml 적용하기
$ kubectl apply -n argocd -f argo-cd.yaml



# 포트 포워드 터널링
$ kubectl port-forward svc/서비스이름 [로컬 포트 : 서비스 포트]

$ kubectl port-forward svc/argocd-server -n argocd 8080:80
$ kubectl port-forward --namespace=ingress-nginx service/ingress-nginx-controller 8080:80


# 이벤트 및 파드 로깅
$kubectl get events

$kubectl get ing

$kubectl get svc,pod,ing


# 애플리케이션 로깅
$ kubectl logs -n [네임스페이스] deployment.apps/파드이름
$ kubectl logs -n airflow deployment.apps/airflow-webserver

# 서비스 어카운트 정보 
$ kubectl get sa
$ kubectl get sa -n kube-system
$ kubectl describe sa [] -n []


# yaml 형식으로 출력하기
$kubectl get sa ebs-csi-controller-sa -n kube-system -o yaml >> sa.yaml

$ kubectl get po -A
# A 옵션을 주면 네임스페이스 전체에 있는 파드가 다 뜬다.


# 파드 서비스 진입
$ kubectl exec [파드이름] /bin/sh
$ kubectl exec [파드이름] -it -- bash
# ssh 진입
$ kubectl exec bdp-web-7849b96cf5-2xzlq -n airflow -it -- bash


# watch를 이용한 모니터링
$ watch -d kubectl get deploy, svc, pods

 

 

kubectl alias 설정

$echo "alias k='/home/ec2-user/bin/kubectl'" >> ~/.bash_profile

$ source ~/.bash_profile
반응형
반응형

1.목표 (What & Why)

  • 지난 번 포스팅에 이어 쿠버네티스 기반 서비스로 동작하도록 구성해본다
  • 쿠버네티스 클러스터, kubectl 을 통한 통신이 준비되어있어야 한다.
  • 순수 애플리케이션 Deploy → 도커 기반의 컨테이너 Deploy → 쿠버네티스 기반 Pod Deploy 를 통해 컨테이너 오케스트레이션을 조금은 이해해본다.

2.과정 (Step)

  • 쿠버네티스 deployment yaml 을 작성한다.
  • Pod 를 배포하고 동작을 확인한다.
  • replica 수를 조정하여 Pod scaling 을 확인해본다.

3.방법 (How)

  • Deployment 를 생성한다.
$ vi deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: common-api-deployment
  labels:
    app: fastapi

spec:
  replicas: 1
  selector:
    matchLabels:
      app: fastapi
  
  template:
    metadata:
      labels:
        app: fastapi
    spec:
      containers:
      - name: containers
        ports:
        - containerPort: 9000
        image: AWS 계정.dkr.ecr.ap-northeast-2.amazonaws.com/demoapp:latest

 

  • kubectl 로 deployment 를 생성한다. 
$ kubectl apply -f deployment.yaml
  • watch 를 통해 Pod, Node, Deployment를 모니터링 할 수 있다.
watch -d kubectl get pod,deploy,node

  • replicas를 수정한다.

  • 서비스를 확인한다.

4. 정리 (summary) 

  • 컨테이너 기술을 이용한다는 건, 의존성과 애플리케이션을 패키징해서 어디서 수행하던 프로그램의 실행과 결과를 보장하게 한다는 것이다.
  • 철학적으로는 격리된 서비스의 실행환경을 만드는 것이고, MSA 를 지향하는 요즘 트렌드에 방향성이 같은 기술이라고 생각한다.
  • 쿠버네티스는 좀 더 나아가서 컨테이너의 무중단 배포, 고가용성 보장과 노드 스케일링, 보안 등의 기능 지원으로 컨테이너 기술의 힘을 더 강하게 해준다. -> 컨테이너 오케스트레이션 이라고 한다.
  • 쿠버네티스는 공부할 것이 많다.
  • 다음에는 시간이 될 지 모르겠지만, emr on eks 의 구성과 karpenter 기반의 spark workload 실행을 포스팅 해보고 싶다. ( 요즘 회사에서 하고 있는 기술이기도 하다. ) 

 

반응형
반응형

2015년쯤 신한 데이터 시스템이라는 곳에서 짧게 첫 직장 생활을 하다 패기와 도전 정신으로 넷마블 인턴십에 지원했다. 당시 너무 오래전 일이라 직급은 기억나지 않지만 ( 아마도 CTO분이셨겠지.. ) 대회의실에 100명이 넘는 모든 인턴을 모아두고 정규직 전환을 뽑는 기준에 대해 얘기했다.  

 

“우리는 일 잘하는 사람, 머리 좋고 똑똑한 사람을 뽑지 않아요.” 

“함께 일하고 싶은 사람을 뽑을겁니다.”

 

그리고 기억에 남는 합격자가 있다. 

동료들의 어려움과 기술적 고민을 해결해 주다 본인의 프로젝트를 완료하지 못한 분이었는데 모두의 예상을 깨고 합격했다. 

 

그것은 단순히 배려와 희생이 아니다.

 

그런 사람과 일했을 때, 딱딱한 업무가 재밌고 즐거운 분위기가 되거나, 어떤 어려움에 부딪혀도 이겨낼 수 있을 것 같다는 믿음이나 신뢰가 될 수 있다. 

 

음.. 사실 오늘 쓰고 싶은 얘기는 다음부터다.

 

얼마 전 내가 리딩하게된 프로젝트 킥오프에 여러 도움을 주시는 다양한 전문가분들이 함께하게 됐다. 

그중에는 aws 인프라 업무를 담당해 주시는 외주 협력사 A님이 있다. 작년에 입사하셔서 우리 회사에 도움을 주시는 분이다

 

킥 오프 회의가 끝나고, A님이 따로 내게 했던 질문들이 매우 놀랍다.

“그래서..  목표가 000로 수정된 거죠?”

“실제 운영환경은 DEVOPS 계정에서 수행되는 걸까요?”

“제가 다음주에는 일주일 동안 휴가인데 일정을 제가 좀 수정할까요?” —> ‘물론 당연히 그러지 마시라고 했다..’

“팀장님의 00이런 의견이 00런 의미였나요??”

..등등..

 

 

심지어 내가 듣고 놓쳤던 회의 내용까지 나에게 상기시켜 줬다..

이런 질문들로 관심과 열정을 보인 A님이 더 고맙고, 함께 오래 일하고 싶은 마음이 드는건 당연하다.

 

이 글을 읽는 당신도 누군가에게 함께 일하고 싶은 동료로 기억될 수 있으면 좋겠다.

 

 

 

== 비하인드 ==

작년에 EKS 클러스터를 구성하면서 도움을 많이 받았던 동료 K 님이 있다. K님 역시 함께 일하고 싶은 동료였다.

K님을 팀에 모셔 오기 위해 추천도 써봤지만, 최종 면접에서 떨어졌고, 더 좋은 곳으로 가셨다.

A님은 K님과 사수 부사수 관계였다.

 

역시.. 좋은 사수 밑에는 좋은 부사수가 있나 보다.. 

 
반응형

+ Recent posts