반응형

안녕하세요

Henry's Algorithm을 운영하는 개발자 헨리입니다.

 

이번에 과학기술정통부에서 주최하는 2022 오픈소스 컨트리뷰션 아카데미의 대한 기록들을 남겨보려고 합니다.

 

오픈소스 컨트리뷰션 아카데미란,

주최측에서 선정한 25개의 오픈소스 프로젝트 중 참여자가 관심있는 오픈소스를 하나 선정하여,

해당 프로젝트에 대한 경험이 있는 멘토분과 함께 오픈소스 프로젝트에 기여를 하는 활동입니다!

 

저는 Apache Zeppelin 오픈소스 컨트리뷰션에 참여하였습니다.

해당 내용에서 진행되는 것들을 모두 기록으로 남기려고 합니다.

 

오늘은 첫번째 CLI 빌드 입니다.

 

먼저 빌드하는 자원의 환경입니다.

 

1. 환경

빌드 자원: 2017 Mac Book Pro 

운영 체제: MacOS Monterey 12.3.1

상세 내용은 아래 그림과 같습니다.

 

 

그리고 다음으로 Github에서 소스를 다운로드 니다.

 

2. 소스 다운로드

 

Apache Zeppelin 프로젝트를 Mac Book Pro의 로컬 공간에 Clone 합니다.

 

https://github.com/apache/zeppelin

 

GitHub - apache/zeppelin: Web-based notebook that enables data-driven, interactive data analytics and collaborative documents wi

Web-based notebook that enables data-driven, interactive data analytics and collaborative documents with SQL, Scala and more. - GitHub - apache/zeppelin: Web-based notebook that enables data-driven...

github.com

 

 

클론이 완료되어, 로컬 공간에 프로젝트가 생성되었습니다.

 

 

그리고 세번째는 소스빌드입니다.

 

3. 소스 빌드

 

Zeppelin 프로젝트 README.md에서 친절하게 빌드할 수 있는 방법을 명시하고 있습니다.

 

소스 빌드하는 방법은

1) binary package 설치

2) 다운로드 받은 소스를 빌드

 

하이퍼링크 클릭

 

1. Binary Package 설치

 

Build from source의 하이퍼링크로 들어갑니다.

https://zeppelin.apache.org/docs/latest/quickstart/install.html

 

Apache Zeppelin 0.10.0 Documentation: Install

<!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or ag

zeppelin.apache.org

 

링크를 타고 들어가니 필요한 부분들과 목차를 친절하게 설명해주고 있습니다.

아래의 내용 중 Requirements의 내용에 따라 진행해보겠습니다.

 

 

Binary Package 설치에 앞서, 먼저 빌드에 필요한 환경의 요구사항을 살펴봅니다.

 

 

저는 OS는 Mac OSX로 충족이 되었고, JDK는 OpenJDK나 Oracle JDK가 필요합니다.

아래의 명령어로 JDK 버전을 확인해보면, 1.8 버전임을 알 수 있습니다.

 

java -version

 

그러나 추후에 maven 실행시 잡혀있는 jdk 버전을 확인해보시려면 아래의 명령어도 한번 확인해주시면 좋습니다

 

mvn -version
혹은
./mvnw -version

 

 

 

일단 저는 1.8 버전으로 충족되었습니다.

그리고 JAVA_HOME이 잘 정의가 되어있는지 확인이 필요합니다.

JAVA_HOME은 Mac Book에서는 terminal을 실행하여 아래의 명령어로 정의할 수 있습니다.

 

vi ~/.bash_profile 으로 선언
source ~/.bash_profile 으로 선언된 내용 재부팅 없이 바로 적용

 

이제 이어서 inary Package를 다운로드할 단계입니다.

 

 

Binary Package는 두 가지가 있습니다.

모든 인터프리터들이 포함되어 있는 패키지와 그렇지 않은 패키지로 구성되어 있습니다.

저는 간단하게 모든 인터프리터가 포함된 패키지로 다운로드하였습니다.

패키지를 다운로드 받았다면 Zeppelin을 소스레벨에서 빌드할 차례입니다.

스크롤을 내려 쭉 내려가니 아래의 텍스트와 하이퍼 링크가 있었습니다.

 

https://zeppelin.apache.org/docs/latest/setup/basics/how_to_build.html

 

Apache Zeppelin 0.10.0 Documentation: How to Build Zeppelin from source

<!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or ag

zeppelin.apache.org

 

먼저 How to Build 하이퍼 링크로 들어갑니다.

 

페이지에 명시되어 있는 순서대로 진행해보겠습니다.

아까전에도 보았던 빌드하기 위해 필요한 requirements이다.

여기서 확인해줘야 할 부분은 maven 버전이면 되겠네요.

 

 

Maven이 설치가 되어있는지 확인해야 합니다.

아래의 명령어로 확인 가능합니다.

 

mvn -version
혹은
./mvnw -version

 

 

 

저는 Mavn 3.6.3 버전임으로 requirements에 충족되었습니다.

그러나 Zeppelin은 3.8.1 버전만 지원하는 것으로 알고 있기 때문에 변경해주어야 합니다.(기준, 2022-07-12)

mac에서 단순 homebrew로 maven을 설치하시면 버전이 맞지 않을 수 있습니다.

아래 경로에 들어가셔서 tar 파일을 통해 다운로드 받으시고, 압축을 푸신 뒤에, 경로를 환경변수에 잡아주셔야 합니다.

 

https://archive.apache.org/dist/maven/maven-3/

 

Index of /dist/maven/maven-3

 

archive.apache.org

 

 

 

Requirements가 모두 충족되었다면

Zeppelin 소스를 빌드하는 방법은 아래 3가지 단계입니다.

 

1) 소스를 GitHub에서 클론

2) maven 명령어를 통해 빌드

3) zeppelin 데몬을 실행

 

 

1단계는 완료가 되어있는 상태이기에 바로 2단계로 진행합니다.

아래의 명령어를 실행해줍니다.

 

./mvnw clean install -DskipTests -Phadoop2 -X

 

처음에는 Dependency를 다운받느라 시간이 오래걸렸지만, 이내 빌드에 성공했습니다.

 

 

빌드 성공 후 zeppelin 데몬을 실행해줍니다.

 

./bin/zeppelin-daemon.sh start

 

 

 

기본 포트가 8080이여서 브라우저를 열고 localhost:8080으로 접속을 하시면 아래와 같은 화면이 보이실 것입니다. -> 성공

 

 

[발생했던 다양한 이슈들]

 

* 잘못된 버전의 jdk 문제

더보기

위 명령어로 특정 옵션을 주고 빌드해보니, 에러가 발생하였습니다.

 

 

No compiler is provided in this environment 라는 에러입니다.

해당 에러를 구글에 검색해보니, mvn bash에서 현재 jdk 버전이 잘못 설정되어있던 것으로 보여집니다.

저의 맥북에 여러 버전의 jdk가 존재하여 다른 경로의 jdk를 잡고 있었습니다.

 

 

아래 명령어로 현재 정의되어 있는 java_home 의 각 java 버전을 확인하였습니다.

 

usr/libexec/java_home -V

 

현재 4번째 1.8.0_131로 설정되어 있는데, 

3번째 OpenJDK로 변경해줍니다.

방법: 아래의 명령어로 profile 파일 에 JAVA_HOME을 정의.

 

vi ~/.bash_profile

 

 

 

저는 개인적으로는 보통 맨 밑에다 export로 변수를 추가해줍니다.

 

 

그리고 source ~/.bash_profile로 변경된 환경변수를 바로 적용하였습니다.

그런 뒤 다시 실행해주었습니다.

 

* 잘못된 버전의 Maven 문제(with, java_home, maven_home)

더보기

이번엔 새로운 에러

 

 

이 에러는 구글링 해보니, maven 이 pom.xml 파일을 찾지 못해 발생하는 에러입니다.

MissinProjectException 라고 합니다.

아래 명령어로 pom.xml의 경로를 명시해주어 maven을 실행 가능합니다.

 

mvn -f path/to/pom.xml <goals> ...

 

 

 

아래의 명령어를 사용하면 빌드가 정상적으로 동작합니다.

 

sudo ./mvnw -f path/to/pom.xml clean package -Pspark-3.0 -Pspark-scala-2.12 -DskipTests

 

pom.xml의 경로를 명시하여 빌드를 진행해 줍니다.

경로는 사용자의 환경에 따라 달라지겠죠?

mvnw는 따로 maven이 설치되어 있지 않아도, 프로젝트에 내장된 maven을 사용하고 싶을 때 사용하는 명령어입니다.

 

빌드를 진행하며 열심히 다운로드 받는 중이다.

 

그러나 또 다시 에러가 발생하였습니다.

 

 

다시 mvnw에 대한 java version을 출력해보니, java 버전이 11버전 이었습니다.

java -version 과 mvn -version을 모두 출력하시면서 jdk 가 동일한지 확인해주면 좋습니다.

 

vi mvnw

 

mvnw 소스에 들어가 java_home 경로를 수정하였습니다.

그리고 maven wrapper가 동작하게 해주기 위해 maven wrapper를 설정합니다.

 

그러나 나중에 알게된 사실인데,

zeppelin 빌드에 있어서 mvnw 프로그램을 별도로 수정할 필요는 없다고 합니다.

 

* 오류: 기본 클래스 org.apache.maven.wrapper.MavenWrapperMain 문제

더보기

혹시 아래와 같이 ./mvnw 프로그램을 통해 빌드하려고 할 때,

Wrapper를 찾지 못하는 경우가 있을 수 있습니다.

해당 에러는 ./mvnw 프로그램에서 maven 경로를 찾지 못하기 때문입니다.

 

 

Zeppelin은 maven 3.8.1 버전을 사용하고 있음.(현재 2022-07-12 기준)

 

https://github.com/apache/zeppelin/blob/master/.mvn/wrapper/maven-wrapper.properties

 

GitHub - apache/zeppelin: Web-based notebook that enables data-driven, interactive data analytics and collaborative documents wi

Web-based notebook that enables data-driven, interactive data analytics and collaborative documents with SQL, Scala and more. - GitHub - apache/zeppelin: Web-based notebook that enables data-driven...

github.com

 

원인: ./mvnw 에 대한 경로를 찾지 못해, 아래와 같은 메세지가 발생

 

 

해결: terminal대신 iTerm 사용하였습니다.

저의 Macbook terminal에 ./mvnw 프로그램 호출 시 실행되는 명령어는 아래와 같습니다

 

Terminal과 Iterm에서 보시면,

-Dmaven.home 경로가 다르게 적용되는 것을 알 수 있습니다.

 

terminal에서 실행 시

 

java -classpath /Users/younghunjoo/Desktop/folder/ossca/zeppelin/.mvn/wrapper/maven-wrapper.jar

-Dmaven.home=/Users/younghunjoo/maven/apache-maven-3.6.3

-Dmaven.multiModuleProjectDirectory=/Users/younghunjoo/Desktop/folder/ossca/zeppelin org.apache.maven.wrapper.MavenWrapperMain -version

 

ITerm 에서 실행 시

 

java -classpath /Users/younghunjoo/Desktop/folder/ossca/zeppelin/.mvn/wrapper/maven-wrapper.jar 

-Dmaven.home=/Users/younghunjoo/Desktop/folder/ossca 

-Dmaven.multiModuleProjectDirectory=/Users/younghunjoo/Desktop/folder/ossca/zeppelin org.apache.maven.wrapper.MavenWrapperMain -version

 

-Dmaven.home에 대한 부분이 다르게 잡히는 것을 보니,

terminal에 maven home 경로가 명시적으로 정의되었던 것으로 확인됩니다.

 

Iterm에서 실행하니 정상적으로 동작하는 명령어

 

./mvnw clean install -DskipTests -Phadoop2 -X

 

반응형
반응형

 

스타의 풀이

def solution(id_list, report, k):
    answer = [0] * len(id_list)    
    reports = {x : 0 for x in id_list}

    for r in set(report):
        reports[r.split()[1]] += 1

    for r in set(report):
        if reports[r.split()[1]] >= k:
            answer[id_list.index(r.split()[0])] += 1

    return answer

 

나의 코드

from dataclasses import dataclass
from typing import List, TypeVar

T = TypeVar('T')

@dataclass
class User:
    id: str
    targets: List[T]
    report_count: int = 0
    
    def __init__(self, id):
        self.id = id
        self.targets = list()
    
    def report_count_increment(self):
        self.report_count += 1
        
    def append_target(self, user: T):
        self.targets.append(user)
        
    def is_out(self, k: int) -> bool:
        if self.report_count >= k:
            return True
        return False
    


def solution(id_list, report, k):
    answer = []
    
    users = list()
    report = set(report)
    
    for id in id_list:
        users.append(User(id=id))
    
    for re in report:
        splited_report = re.split(' ')
        user = get_user_by_id(users, splited_report[0])
        target = get_user_by_id(users, splited_report[1])
        target.report_count_increment()
        user.append_target(target)
    
    for user in users:
        cnt = 0
        for target in user.targets:
            if target.is_out(k):
                cnt += 1
        answer.append(cnt)

    return answer

def get_user_by_id(users: List[User], id: str):
    for user in users:
        if user.id == id:
            return user

 

 

느낀 점

더보기

find처럼 특정 키워드를 가지고 인덱스를 가져오는 list.index() 메소드에 대해서 새롭게 배웠다.

반응형
반응형

 

 

지금까지 어떤 직군이 있고, 기술들이 있고, 어떤 조직 구조가 있고에 대해서 배웠다.

이제는 어떻게 커리어를 시작하고 전문성을 높일 수 있는지 배워보자.

 

 

 

 

요즘 세상에서 커리어라는 것이 어떻게 변했고,

어떤 관점을 가지고 커리어 전환, 커리어 시작을 시작하면 좋을지 생각해보자.

 

 

 

일직선으로 우상향 되는 커리어는 더 이상 없다.

이제는 up and down이 많은 다수의 커리어를 가져야 한다.

 

회사가 바뀌는 경우도 있을 것이고,

직업이 바뀌는 경우도 있을 것이다.

이제는 빠르게 변하는 사회에서 자연스러운 현상이 되었다.

 

조금 더 젊었을 때, 이것 저것 시도해봐서, 

더 나이가 들기 전에 자신감을 쌓고, 나와 더 맞는 분야를 찾고 최대한 우려먹고 또 찾게 되고 그러는 것이다.

 

불안하니까 무언가는 배워야 한다고 생각하고, 배우면서 전문성을 갖게 되면

내 미래가 보장받게 되는 것이 아닐까 하는 생각을 하게 된다.

이런 생각을 하는 다른 사람들이 굉장히 많다.

 

 

 

남들과 비교하기 시작하고 자신감이 떨어진다.

이런 것을 극복하기 위해서는 작은 성공들을 많이 하는 것이 좋고,

나와 비슷한 상황에 있는 사람들을 만나고, 같이 공부를 하는 것도 좋다.

 

 

 

 

앞으로 워터풀하게 하나의 길을 갖게 되는 것이 아니고,

회사는 5~6개 다녀야 한다고 보면서, 커리어라는 것을 빨리 시작하는 것이 중요할 것이다.

계속해서 변화하고 성장하는 것이 중요하다.

발전해서 더 좋은 환경으로 갈 것이다라는 좋은 환경으로 가라.

 

그러나 이렇게 하려면 무언가를 계속해서 배워야 한다.

 

 

이제부터 배울 것 투성이다.

그러면 배움이라는 것은 어떤 관점에서 봐야 하는가.

시간을 들이면 나아지긴 하는데,

계속 배우다 보면, 어느순간 정체기가 온다. 

 

이때

"아 이거 나랑 안맞아" 라고 생각하면,

아무것도 배울 수 없다.

 

처음에는 이 정체기가 왔을 때, 즐기려고 해야한다.

그리고 정체기를 버팀으로서 나의 지식이 확 올라가는 경험을 해야한다.

 

경험이 중요하다.

 

 

그냥 무조건 계속 공부하는 것이 아니라,

내가 여기서 무엇을 모르는지 자문자답을 해야한다.

 

action point

hadoop 세팅 방법.

spark 세팅 방법.

 

 

저거도 6개월 풀타임으로 해보고 나와 맞는지 안맞는지 경험을 해보아라.

이 도메인이 나와 맞는지 안맞는지.

 

 

 

 

가장 중요한 것은 남과 비교하지 않는 것이다.

저 사람은 나보다 앞서 수 많은 시간을 쏟았구나.

이렇게 비교를 해야한다.

 

 

인생은 시작점이 중요한 것이 아니라,

종착점이 중요하다

 

반응형
반응형

 

 

한기용 강사님이 지난 8년간 데이터 팀을 운영하면서 배웠던 점들 공유.

 

1. 데이터 팀은 영리적으로 매출을 올리는 데 이유가 있다.

 

매출과의 연관성, 비용 절감 측면에서 커뮤니케이션을 해야 한다.

가장 좋은 것이 이런 것들이 눈에 보이게 지표로 만들어서 대시보드로 제공할 수 있으면 최고다.

이것이 리더의 가장 중요한 역할 중 하나이다.

 

중앙 집중이건, 하이브리드건 데이터 팀원들을 위해 모이는 것에 힘써야 한다.

 

2. 데이터 인프라가 첫 번째 스텝이다.

 

스타트업 관점에서는 데이터 분석도 할 수 있고, 데이터 인프라도 할 수 있는

듀얼 플레이가 가능한 사람을 뽑으면 최적이다.

 

고려점은 클라우드이냐, 직접 구성이냐.

가능하면 클라우드가 좋다.

그리고 실시간은 비용이 많이 들기 때문에, 왠만하면 배치로 하는것이 좋다.

 

 

데이터의 품질이 중요하다.

데이터 청소(Garbage Data를 걸러내는 작업)

 

데이터 품질을 올리는 방법.

모니터링을 잘하는 것이 중요하다.

 

중요 데이터(매출 데이터와 같은)에 초점을 맞춰서 품질 유지를 한다.

 

3. 항상 지표를 생각한다.

성장을 하게 해주는 개발자의 좋은 습관이다.

성공의 척도가 되는 숫자가 무엇인지 알고 있고,

내가 이 일을 왜 하는지 나름대로 가설이 있어야 한다.

ex) 이런 일을 하면서 이런 효과가 있고, 이런 지표를 형성할 수 있다.

 

성패의 지표를 계산할 때, 남들도 객관적으로 볼 수 있는 지표여야 한다.

지표가 말이 안되고, 어떻게 계산되는지 불분명하면 사람들은 의심하게 된다.

지표를 보다 객관적이고 투명하게 하는 방법을 생각해보라.

 

4. 가능하면 간단한 솔루션으로 시작해라

(그냥 If 문 볓개 쓰면 될 일을 딥러닝으로 복잡하게 풀지 마라)

 

 

현업에서는 딥러닝보다 Linear Regression, Decision Tree로 푸는 상황들이 더 많다.

 

워터풀 형태로 한 큐에 끝내려고 하지 말고,

점진적으로 한 단계씩 고도화하는 방법이 더 선호된다.

 

OverEngineering 하지마라!

Done is better than perfect

 

이것은 데이터 분야에만 국한되는 것은 아니다.

 

 

반응형
반응형

 

애자일 개발방법론에 대해서 설명하며 시작한다.

(점진적으로 짧은 개발 사이클을 반복하면서 프로그램을 개선해나가는 개발 방법론)

짧은 사이클 - 스프린트(Sprint) 라고 부름.

 

데이터팀도 애자일 방법론을 따른다.

 

월요일

(그냥 월요일은 아니고, 스프린트가 새로 시작하는 월요일로 가정)

 

자기가 한 일을 팀원들에게 비주얼하게 데모한다.

잘됬던 일들, 잘되지 못한 일들 회고.

다시 생각해보아야 할 논의할 포인트 회고.

이런 회고 미팅은 팀장이 혼자 하지 않고, 팀원들끼리 한 명씩 돌아가면서 했다.

 

이후 논의할 액션 아이템을 찾아내는 것이 중요하다.

(기존 백로그에 있는 스프린트 중에 이번주에 할 일은 무엇인지 계획)

백로그 - 이미 몇몇 사람들이 중요하다고 계획해놓은 작업들.

 

 

데이터 파이프라인이 많이 생기면, ETL 들도 많아진다.

그리고 항상 실패하는 ETL들도 생겨난다.

더보기

Q. 파이프라인이 많아지면서 ETL관련 이슈가 많아진다고 설명해주셨는데,
이와 관련해서 대체로 발생하는 이슈가 뭐가 있는지 궁금합니다.

 

1> ETL은 기본적으로 외부 데이터 소스로부터 데이터를 읽어오는 경우가 대부분입니다. 그 경우 외부 소스에 문제가 생기면 딱히 대응방법이 없습니다. 대부분 문제가 해결될 때까지 기다리는 방법 이외에 다른 해법이 없습니다. 이 문제는 ETL 수에 비례해서 발생하게 됩니다.
2> 앞서 생긴 이슈들이 정말로 중요한 데이터를 읽어오는 ETL에서 발생했고 그 데이터를 기반으로 동작하는 다른 ETL이 뒤에 기다리고 있다면 문제는 더 심각해집니다. 예를 들어 마케팅 캠페인의 성과를 측정하는데 필요한 중요 데이터를 읽어오는 ETL에 문제가 발생하면 캠페인 성과를 계산하는 데이터 파이프라인이 실행이 안되게 되고 마케팅 부서로부터는 언제 성과 리포트가 나오냐는 불평이 쏟아지게 됩니다.

 

- 데이터 ETL 관련 이슈와 다양한 데이터 관련 질문을 맡을 사람들을 별도로 지정

나머지 사람들은 자기 일에 포커스를 맡는다. 한사람만 조금 고생(온콜 엔지니어)

 

이후 사후보고를 함.

 

 

 

 

JIRA - 인터페이스가 구닥다리 느낌

ClickUp - Notion 비슷한 느낌으로 애자일 스프린트 진행 가능하다.

 

이런 과정을 매일매일 스탠드업에서 팀원들에게 공유한다.

 

 

화요일

 

팀 내에서 미팅을 하는 날, 미팅을 하면 안되는 날을 정하면 조금 도움이 될 수 있다.

팀원들이 집중을 할 수 있기 때문이다.

 

수,목요일

 

 

코로나 펜데믹 이후로는 비디오콜이 큰 의미가 없다.

왠만한 것들은 다 스탠드업도 비디오콜로 하기 때문이다.

 

- 대시보드는 보며 중요 KPI 지표에 변화를 살펴보는 시간.

- A/B 테스트 중이 머신러닝 모델이 있으면 성능 리뷰 및 공유.(기존 기능과 비교) <- 중요

ex) 이 모델이 현재 5%의 사용자에게 노출되어 있는데 확대할 것인지. 아니면 중단할 것인지.)

 

금요일

 

ETL 실패 이유, 성공 이유 리뷰.

머신러닝 모델 개발 상황, A/B 테스트 진행 상황 공유

 

팀 내 중요 인력들이 행복하게 지내는지 점검.

주간 사고가 있으면 내용 디테일하게 미팅.

 

시간이 남으면 팀별로 돌아가면서 팀 상황 공유.

 

 

 

반응형
반응형

 

머신러닝 모델을 만드는 가정 하에 데이터 과학자들이 어떤 생각을 하는지 한번 살펴보자.

 

 

 

모델을 만드는 것은 시작일 뿐이다.

그것이 현업에서 어떻게 배포되고 사용되는지에 관심을 가져야지

실제로 내가 만든 머신러닝 모델에 의미가 있는 것이다.

 

 

 

 

데이터 모델 배포 잘 됬어?

 

실제 서비스 엔지니어: "뭐 잘 됬겠지?"

 

이런 마찰이 생기는 원인은 어디서 발생하는 것일까?

 

 

현재도 많은 수의 데이터 과학자들은 R로 데이터 모델을 만든다.

그러나 이것은 실제 서비스에 접붙이기가 쉽지 않다.

 

MLOpes 팀이 생기게된 개념.

(머신러닝 모델의 배포와 운영을 해주고, 그것을 자동화하는 것까지 책임지는 팀)

 

배포를 담당하는 백엔드 엔지니어는 R로 개발된 언어를 받아서

서비스의 java나 python으로 포팅을 하게 되는데, 이것은 2번 일을 하는 것과 다름이 없다.

 

백엔드 엔지니어 론치하다가 현타옴..

 

현재는 이런 모델을 만들 때, 만드는 것에서 끝나는 것이 아니라, 이것을 론치시키는 과정까지

조금 더 길게 스코프를 보는 MLOps 팀이 생기게 된다.

 

MLOps 팀은 개발된 머신러닝 모델을 받아서 이것을 배포하고 운영하는 것까지 책임지게 된다.

예전에는 이 작업을 백엔드 팀이 하고 있었다.

 

 

이런 과정을 담당해주는 프레임워크들도 생겨났다.

AWS의 sagemaker 같은 것들이 대표적이다.

 

 

트위터 같은 경우에는 데이터 과학자들에게 R 사용을 지양하게끔 했다.

파이썬의 특정 라이브러리만 사용해라. - 배포와 운영 과정을 단순화 시킴.

 

AWS - SageMaker와 같이 머신러닝 모델 개발, 검증, 배포를 하나의 프레임워크에서 수행.

 

 

 

모델 개발은 시작일 뿐이다.

운영을 통해 점진적 개선을 이루어야 하는 것이다.

운영하다보면, 예전에 개발된 모델의 성능을 개선해야 한다.(성능이 자연적으로 떨어지기 때문이다.)

반응형
반응형

 

안녕하세요

코딩교육자 헨리입니다.

 

오늘은 회사마다 다 가지고 있는 데이터 팀의 조직 구조에 대해서 공부하는 시간을 갖었습니다.

이번 수업을 듣기 전까지는 단순히 데이터 엔지니어 혹은 ML 엔지니어로 일하고 싶다는 생각뿐이었는데,

수업을 들으면서 회사 내 데이터 조직 구조에 대해 미리 질문하고 알아보는 것이 중요하겠구나 라는 것을

깨닫게 되었습니다. 데이터 조직은 중앙 집중, 분산, 하이브리드 형태의 구조가 있다고 합니다.

자세한 내용은 아래 강의 노트를 참고해주시기 바랍니다!

 

(노트 형식이기 때문에 어투가 변경될 수 있습니다.)

 

 

앞으로 배울 구체적인 내용은 아래와 같다.

  1. 3가지 데이터 팀의 조직 구조
  2. ML 모델 개발시 기억할 점
  3. 데이터 조직의 일주일 살펴보기
  4. 데이터 일을 할 때 기억할 점

 

 

3가지 데이터 팀 조직 구조에 대해서 알아보자

1. 중앙 집중 구조

2. 분산 구조

3. 하이브리드 구조

 

1. 중앙 집중 구조

 

데이터 팀의 리더가 대부분을 결정하기 때문에, 현업 부서들의 만족도는 떨어질 수 있다.

각자의 팀에 데이터 담당자가 있으면 좋을 텐데..

 

 

2. 분산 구조

데이터 분석가의 위치가 팀원에서 각 팀의 2등시민으로 전락하는 면이 없지 않다..

아무리 잘해봐야 각 팀에 데이터 인력이라는 2등시민 타이틀을 뗄 수가 없다.

그냥 필요한 데이터를 뽑아주는 사람으로 전락해버린다.

 

다른 팀에 있는 데이터 인력이 하는 일들이 중복되는 경우 발생할 수 있다.

 

많은 회사들이 중앙 집중 구조 <-> 분산 구조를 왔다 갔다 한다.

 

 

3. 중앙집중과 분산의 하이브리드 모델

 

 

1년 혹은 6개월에 한번 팀을 옮겨가며 다양한 경험을 하고, 중앙 데이터 팀 소속되어 있으면,

기간을 두고 파견을 하고 다시 돌아오고 그런 경우이다.

 

 

위 3가지 구조 중 최악의 구조는 분산 구조이다.

 

우리가 꼭 해야할 질문!

데이터 팀이 하나의 팀으로 이루어져 있는가. 아니면 분산되어 있는 구조인가.

 

그러나!

마이크로소프트에 있는 데이터 팀은

재무 팀 안에 데이터 팀을 두어서 그 안에 데이터 엔지니어, 데이터 분석가, 데이터 과학자를 만들고,

기존 엑셀로 800명이 하던 작업을 데이터 웨어하우스를 만들고, 데이터 지표를 만들고, 데이터 모델을 만들어서 5명이 4시간 만에 하는 작업으로 대폭 개선했다.

 

엑셀을 대시보드로 쓰다가, 마이크로소프트 자체 Power BI를 사용했다.

자주 들어오는 질문을 메신저를 통한 응답에서 자동 대답을 하는 챗봇을 만들어서 재무 관련 질문들의 대답 시간을 대폭 줄이게 되었다.

 

ex) 파트너사에게 어느정도 금액 이상의 선물을 받으면 법적으로 문제가 될 수 있다.

- 파트너사에게 법적 문제 없이 받을 수 있는 최대 금액은 얼마인가요? 라는 질문이 제일 많이 들어왔다고 한다ㅎ

 

 

마이크로소프트의 데이터 팀에 대한 이야기는 디지털 트랜스포메이션의 아주 좋은 한 예이다.

 

 

 

 

 

 

 

 

반응형
반응형

 

안녕하세요!

코딩교육자 헨리입니다.

 

오늘은 데이터 커리어 분야에서 새롭게 뜨고 있는 데이터 직군에 대해서

강의를 들었습니다.

데이터 엔지니어, 데이터 분석가, 데이터 과학자 이외에도 실제 서비스를 운영하면서

파생된 다양한 데이터 직군들이 있다는 것을 배우게 되었고,

제가 앞으로 나아가고 싶은 길은 왠지 데이터 엔지니어 혹은 ML 엔지니어가 아닐까 하는 생각을 하게 되었습니다.

 

 

아래부터는 강의 요약입니다.

블로그에 노트를 정리하면 쓴 글이므로, 어투가 변경될 수 있는 점 양해부탁드립니다.)

 

 

 

어떤 새로운 직군들 혹은 뜨는 서비스들이 있는가?

# ML 엔지니어 (vs. 데이터 과학자 & 데이터 엔지니어)

 - 근데 JD로 보면, 데이터 과학자 기반 위에 데이터 엔지니어가 약간 더 들어가는 느낌이다.)

# ML옵스 (MLOps)

# 프라이버시 엔지니어: 개인정보 보호

 - 데이터 팀에 속한다고 보기는 어려울 수 있지만, 개인정보 보호에 있어서, 시스템 설계 때부터 생각할 수 있게, 설계해주고, 디자인해주는 직군으로 보면 된다.

# 데이터 디스커버리 서비스

# A/B 테스트 서비스

 - SaaS 형태로 제공되기도 한다.

 

 

MLOps란 무슨일은 하는가?

 # DevOps가 하는 일은?

  -- 개발자가 만든 코드를 시스템에 반영하는 프로세스(CI/CD, deployment)

배포하고 테스트를 계속 돌리고, 배포 후에 정상 동작 모니터링하고, 이슈가 생기면 이슈 해결을 위해 일하는 팀이다.

 

  -- 시스템이 제대로 동작하는지 모니터링 그리고 이슈 감지 시 escalation 프로세스 (On-call 프로세스)

 

 

 # MLOps가 하는 일은?

  -- 앞의 DevOps가 하는 일과 동일. 차이점은 서비스 코드가 아니라 ML모델이 대상

  -- 모델을 계속적으로 빌딩하고 배포하고 성능을 모니터링

   * ML모델 빌딩과 프로덕션 배포를 자동화할 수 있을까? 계속적인 모델 빌딩(CT, Continous Training)과 배포!

   * 모델 서빙 환경과 모델의 성능 저하를 모니터링하고 필요시 escalation 프로세스 진행

 

 

MLOps 엔지니어가 알아야하는 기술

3가지 데이터 직군 도메인이 겹쳐지는 부분이다.

CI/CD - 개발이 진행될 때마다, 계속적으로 빌드하고 테스트하고 배포할 것인가.

 

 

 

프라이버시 엔지니어란 무엇일까?

 # 전체 시스템에서 개인정보 보호를 위한 가이드라인/툴을 제공

  -- 개인정보란? 개인을 식별할 수 있는 정보

 # 이는 데이터 시스템에서 더욱 중요

 # 개인 정보 보호 법안의 징벌 조항이 점점 강화되는 추세

  -- 정보 주체의 권리를 강화하는 방향으로도 변화: GDPR의 프로파일링 거부권

  -- 유럽 연합의 GDPR (General Data Protection Regulation)

GDPR : 개인이 원하면 내 정보를 사용하지 말아라 라고 요청할 수 있다. 도 GDPR 법안의 일부이다.

  -- 미국의 HIPAA (건강보험 이전 및 책임에 관한 법률)

  -- 미국 캘리포니아의 CCPR (캘리포니아 소비자 개인정보 보호 법안)

 

 

데이터 디스커러버리 (Data Discovery)란?

 

데이터가 너무 많아지고, 대시보드가 너무 많아지면, 점점 어떤 데이터 및 대시보드를 봐야할 지 혼란이 생긴다.

어떤 테이블이 있고, 어떤 테이블을 주가 가장 최근에 사용했고, 어떤 차트가 있고, 어떤 대시보드가 있고,

이런 것들을 검색해주는 서비스가 나오기 시작했다.

 

실제로 어느정도 규모가 있는 회사에는 이런 이슈가 다 있었다.

이런 이슈를 해결하기 위해 필요한 서비스가 데이터 디스커버리이다.

 

 

자 이제 지금까지 배운 것들을 요약해보자.

 

 

 

반응형

+ Recent posts