커리어 이야기

 

  • 이것만은 기억하자!
    • 남과 비교하지 말고 앞으로 2-30년을 보자
    • 하나를 하기로 하면 적어도 6개월은 파자.
      • 너무 빨리 포기하지 말자. 잘하는 사람들과 비교 금물. 어제의 나와 오늘의 나를 비교하자.
      • 뭐가 잘 안 되면 오히려 천천히 가자
    • 공부를 위한 공부를 하기보단 일을 시작해보자.
      • 어디건 일을 시작하고 발전하자.
      • 면접 실패를 감정적으로 받아들이지 말자.
    • Love Myself!
  • 커리어를 점진적 발전이라는 관점에서 보기
    • 커리어가 평생 직장이란 것이 존재하던 세상에서는 Waterfall(폭포수)였으나 이제는 계속해서 배우고 변해야 하는 Scrum으로 변화하였다. 
      • 어디서 시작하건 자신에 대해 배우며 계속해서 변화하고 성장하는 것이 중요하다. 
      • Growth Mindset
  • 새로운 시작(ex) 첫 직장에서의 일과 같은.. ) - 처음 90일이 중요하다. (The First ninety days)
    • 자기 검열하지 말고 매니저 스타일을 파악하고 피드백을 요청하기
    • 과거 상처를 갖고 시작하지 않기
    • 남과 비교하지 않기
    • 열심히 일하되 너무 서두르지 않기
  • 새로운 기술의 습득이 아닌 결과를 내는데 초점 맞추기
    • 아주 나쁘지 않은 환경에 있단 전제
    • 자신이 맡은 일을 잘 하기 위해 필요한 기술 습득
      • 예를 들어 자동화하기 혹은 실행시간 단축
    • 자신이 맡은 일의 성공/실패를 어떻게 결정하는지 생각
      • 매니저와의 소통이 중요
      • 성공/실패 지표에 대해 생각
    • 일을 그냥 하지 말고 항상 '왜' 이 일이 필요하고 큰 그림 생각
      • 질문하기

SQL 소개

 

  • 구조화된 데이터를 다루는 SQL. 데이터 규모와 상관없이 쓰인다.
  • 모든 대용량 데이터 웨어하우스는 SQL 기반이다.
    • Redshift, Snowflake, BigQuery, Hive, SparkSQL ...
  • 데이터 분야에서 일하고자 하면 반드시 익혀야 할 기본 기술이다.
  • 관계형 데이터베이스
    • 대표적 관계형 데이터베이스
      • MySQL, Postgres, Oracle, ...
      • Redshift, Snowflake, BigQuery, Hive ...
    • 관계형 데이터베이스는 2단계로 구성된다.
      • 가장 밑단엔 테이블들이 존재
      • 테이블들은 데이터베이스라는 폴더 밑으로 구성
    • 테이블(=스키마) 구조
      • 테이블들은 레코드들로 구성
      • 레코드는 하나 이상의 필드로 구성
      • 필드는 이름과 타입으로 구성됨

관계형 데이터베이스 예제 : 웹 서비스 사용자 / 세션 정보

 

  • 데이터
    • 사용자 ID : 보통 웹서비스에서 등록된 사용자마자 유일한 ID 부여
    • 세션 ID
      • 사용자가 외부 링크(보통 광고)를 타고 오거나 직접 방문해서 올 경우 세션 생성
      • 즉, 하나의 사용자 ID는 여러 개 세션 ID를 가질 수 있음
      • 보통 세션의 경우 세션을 만들어낸 소스를 채널이란 이름으로 기록해둠
        • 마케팅 관련 기여도 분석을 위함
      • 세션 생성 시간도 기록
  • 위의 데이터를 통해 다음과 같은 다양한 데이터 분석과 지표 설정 가능
    • 마케팅 관련
    • 사용자 트래픽 관련
    • etc

 

  • ex) 사용자 ID 100번이 총 3개의 세션을 갖는 예제
    • 100번 ID를 가진 사용자의 웹 서비스 이용 경로
      • 09:30 AM : 구글 광고 타고 방문
      • 09:31 AM : 상품 광고 클릭
      • 09:33 AM : 상품 리뷰 페이지 클릭
      • 09:45 AM : 페이스북 광고 타고 방문
      • 09:47 AM : 다른 상품 광고 클릭
      • 10:30 AM : 네이버 광고 타고 방문
      • 10:35 AM : 상품 구매

 

위의 데이터에 대해 생성될 수 있는 데이터베이스와 테이블은 다음과 같다.

 

  • raw_data 데이터베이스
    • user_session_channel
      • 컬럼 타입
        userid int
        sessionid varchar(32)
        channel varchar(32)
      • channel 값 ex) instagram, facebook, naver, etc...
    •  session_timestamp
      • 컬럼 타입
        sessionid varchar(32)
        ts timestamp
  • marketing 데이터베이스
  • ...
  • SQL(Structured Query Language) 소개
    • 1970년대 초반 IBM이 개발한 구조화된 데이터 질의 언어
      • 주로 관계형 데이터베이스에 있는 데이터(테이블)를 질의하는 언어
    • 두 종류의 언어로 구성된다.
      • DDL(Data Definition Language) : 테이블 구조 정의어
        • CREATE TABLE / DROP TABLE / ALTER TABLE
        • --ex
          
          CREATE TABLE raw_data.user_session_channel(
              userid int,
              sessionid varchar(32),
              channel varchar(32)
          );
      • DML(Data Manipulation Language) : 테이블 조작 정의어
        • SELECT FROM / INSERT INTO / UPDATE SET / DELETE FROM
        • -- ex
          
          SELECT * FROM raw_data.user_session_channel LIMIT 10; -- 10개의 데이터를 읽어와라
          
          SELECT COUNT(1) FROM raw_data.user_session_channel;
          
          SELECT COUNT(1) FROM raw_data.user_session_channel;
          WHERE channel='Facebook'; -- channel 이름이 Facebook인 경우만 고려
          
          SELECT COUNT(1) FROM raw_data.user_session_channel;
          WHERE channel like '%o%'; -- channel 이름에 o나 O가 있는 경우만 고려
          
          SELECT channel, COUNT(1) --channel별 레코드 수 카운트하기
          FROM raw_data.user_session_channel
          GROUP BY channel;
        • 세션에 대한 모든 정보를 읽어오려면 user_session_channel과 session_timestamp를 조인해야 한다.
        • SELECT *
          FROM raw_data.user_session_channel usc
          JOIN raw_data.session_timestamp ts ON usc.sessionID = ts.sessionID;

 


SparkSQL 소개

 

  • SparkSQL과 Spark Core의 차이점
    • 구조화된 데이터 처리를 위한 Spark 모듈
    • 대화형 Spark shell 제공
    • 하둡 상 데이터를 기반으로 작성된 hive 쿼리의 경우 변경없이 최대 5~10배까지 빠른 성능을 가능하게 해준다.
    • 데이터 프레임을 SQL로 처리 가능
      • RDD 데이터, 외부 데이터는 데이터프레임으로 변환 후 처리 가능
      • 데이터프레임은 테이블이 되고 그 다음부터 SQL 함수 사용 가능
  • Spark의 일반적 사용법 이해
    • 외부 데이터베이스 연결
      • 외부 데이터베이스 기반 데이터 프레임 생성
        • SparkSession의 read 함수를 사용해 테이블 혹은 SQL 결과를 데이터프레임으로 읽어옴
      • Redshift 연결 
        • SparkSession을 만들 때 외부 데이터베이스에 맞는 JDBC jar 지정
        • SparkSession의 read 함수 호출
          • 로그인 관련 정보와 읽어오고자 하는 테이블 혹은 SQL 지정
          • 결과가 데이터 프레임으로 리턴됨
        • 데이터 프레임 기반 테이블 뷰 생성 : 테이블이 만들어짐
          • createOrReplaceTempView : sparkSession이 살아있는 동안 존재
          • createGlobalTempView : Spark 드라이버가 살아있는 동안 존재
        • SparkSession의 sql 함수로 SQL 결과를 데이터 프레임으로 받음

'AI > KDT 인공지능' 카테고리의 다른 글

[07/27] NLP : 텍스트 전처리  (0) 2021.07.28
[07/22] Spark 3  (0) 2021.07.22
[07/20] Spark  (0) 2021.07.20
[07/19] 12주차 강의 개요  (0) 2021.07.19
[06/28] 심층학습 기초2  (0) 2021.06.28

빅데이터 기술이란?

 

  • 빅데이터의 정의
    • 서버 한 대로 처리할 수 없는 규모의 데이터 - 존 브라우저
    • 기존의 소프트웨어로는 처리할 수 없는 규모의 데이터 
      • 기존 소프트웨어 오라클이나 MySQL과 같은 관계형 데이터베이스
        • 분산 환경을 염두에 두지 않음
        • Scale-up 접근 방식
    • 4V
      • Volume : 데이터의 크기가 대용량인가?
      • Velocity : 데이터의 처리 속도가 중요한가?
      • Variety : 구조화 / 비구조화 데이터 모두 다루는가?
      • Veracity : 데이터의 품질이 좋은가?

Spark 소개

 

  • 하둡의 등장과 소개
    • 대용량 처리 기술이란? 
      • 분산 환경 기반 (1대 혹은 그 이상의 서버로 구성) - 분산 컴퓨팅과 분산 파일 시스템 필요
      • Fault Tolerance - 소수의 서버가 고장나도 동작해야함
      • 확장 용이 - Scale Out
    • 하둡 등장
      • Doug Cutting이 구글랩 발표 논문들 기반으로 만든 오픈소스 프로젝트
        • Google File System (2003)
        • MapReduce : Simplified Data Processing on Large Cluster (2004)
      • 처음 시작은 Nutch라는 오픈소스 검색엔진 하부 프로젝트
        • 2006년 아파치 톱레벨 별개 프로젝트로 분리돼 나옴
      • 크게 두 개의 서브 시스템으로 구현됨
        • 분산 파일 시스템 - HDFS (Hadoop Distributed File System)
        • 분산 컴퓨팅 시스템 - MapReduce
          • 새로운 프로그래밍 방식으로 대용량 데이터 처리 효율을 극대화하는데 맞춤
          • 문제점
            • 작업에 따라 프로그래밍이 너무 복잡해짐
            • Hive처럼 MapReduce로 구현된 SQL 언어들이 다시 각광받게 됨
              • SQL on Hadoop
            • 기본적으로 배치 작업에 최적화 (not realtime)
    • 하둡 발전
      • 하둡 1.0은 HDFS위 MapReduce라는 분산 컴퓨팅 시스템이 도는 구조. 다른 분산 컴퓨팅 시스템은 지원하지 못함
      • 하둡 2.0에서 아키텍처가 크게 변경.
        • 하둡은 기반 분산처리 시스템이 되고 그 위 애플리케이션 레이어가 올라가는 구조
        • Spark는 하둡 2.0위 어플리케이션 레이어로 실행
        • 구조
          • MapReduce / Spark / Tez / ...
          • Yarn(하둡 2.0에서 분산 컴퓨팅 시스템 이름)
          •             HDFS2
    • HDFS - 분산 파일 시스템
      • 데이터 블록 단위 저장 (128MB)
      • 블록 복제 방식 (Replication)
    • 분산 컴퓨팅 시스템
      • 하둡 1.0 : 하나의 잡 트래커와 다수의 태스크 트래커로 구성. 잡 트래커가 일을 나눠 다수 태스크 트래커에 분배
      • 하둡 2.0 : 클라이언트, 리소스 매니저, 노드 매니저, 컨테이너로 역할 세분화. Spark 지원
  • Spark 소개
    • 하둡 뒤를 잇는 2세대 빅데이터 기술
      • 하둡 2.0을 분산환경으로 사용 가능.
      • Scala로 작성됨
    • Map Reduce의 단점 대폭 개선
      • Pandas와 굉장히 흡사하나 다수 서버 분산환경 버전이라는 것만 다름
    • 현재 Spark 버전 3. 이번 강좌에서 사용할 버전.
      • 머신러닝 관련 많은 개선이 있었음. GPU 지원 포함.
    • Spark vs MapReduce
      • Spark는 메모리 기반 MapReduce는 디스크 기반
      • Spark는 하둡 이외 다른 분산 컴퓨팅 환경 지원 MapReduce는 하둡 위에서만 동작
      • Spark는 Pandas와 유사 MapReduce는 키-밸류 기반 프로그래밍
      • Spark는 다양한 방식 컴퓨팅 지원(배치 프로그래밍, 스트리밍 프로그래밍, SQL, 머신 러닝, 그래프 분석)
    • Spark 3.0 구성
      • Spark Core : Pandas와 유사
      • Spark SQL : 데이터 처리를 SQL로
      • Spark Streaming : real time으로 streaming data를 처리해줌.
      • MLib (Spark.ML) : 머신러닝 라이브러리도 돌아감!
      • SparkGraph : 그래프 형태 프로세싱 기능
    • Spark 프로그래밍 개념
      • RDD (Resilient Distributed Dataset)
        • 로우레벨 프로그램이 API로 세밀 제어 가능. 퍼포먼스 향상
        • 그러나 코딩 복잡도 증가
      • Dataframe & Dataset(판다스 데이터프레임과 유사)
        • 하이레벨 프로그램이 API로 점점 많이 사용하는 추세
        • SparkSQL을 사용하면 이를 쓰게 됨
      • 보통 Scala, Java, Python 중 하나 사용

판다스와 비교

 

  • 판다스
    • 파이썬으로 데이터 분석을 하는데 가장 기본이 되는 모듈 중 하나
    • 소규모 구조화된 데이터(테이블 형태 데이터)를 다루는데 최적
      • 데이터 크기가 제약이 됨 (한 대의 서버로 다뤄야 하기 때문)
      • 병렬 처리 지원 X
      • 작은 데이터에선 pandas 큰 데이터에선 Spark
    • 데이터 구조
      • excel의 column이 pandas의 series
      • series들이 모여 DataFrame

Spark의 데이터 구조

 

  • Spark 세션
    • Spark 프로그램의 시작.
    • Spark이 제공해주는 다양한 기능 사용.
    • from pyspark.sql import SparkSession
      
      spark = SparkSession \ 
          .builder \
          .appName("Python Spark create RDD example") \
          .config("spark.some.config.option", "some-value") \
          .getOrCreate()
      sc = spark.sparkContext
      # spark와 sc를 이용해 RDD와 데이터프레임을 조작하게 된다.
  • 데이터 구조
    • 크게 3가지 자료구조
      • RDD(Resilient Distributed Dataset)
        • 로우레벨 데이터. 클러스터내 서버에 분산된 데이터 지칭
        • 레코드별 존재, 구조화된 데이터나 비구조화된 데이터 모두 지원
        • 변경 불가능한 분산 저장된 데이터.
          • 다수의 파티션으로 구성되고 Spark 클러스터내 서버들에 나눠 저장됨
          • 로우레벨 함수형 변환 지원 (map, filter, flatMap 등)
        • RDD가 아닌 일반 파이썬 데이터는 parallelize 함수로 RDD 변환
          • py_list = [
                (1, 2, 3, 'a b c'),
                (4, 5, 6, 'd e f'),
                (7, 8, 9, 'g h i')
            ]
            rdd = sc.parallelize(py_list)
      • DataFrame
        • RDD 위 만들어지는 하이레벨 데이터. RDD와는 달리 필드 정보를 갖고 있다.
        • PySpark에서는 Dataframe 사용
        • 변경 불가능한 분산 저장 데이터
        • 관계형 데이터베이스 테이블처럼 컬럼으로 나눠 저장
          • pandas와 거의 유사
          • 다양한 데이터소스 지원 : 파일, Hive, 외부 데이터베이스, RDD 등
        • 스칼라, 자바, R, 파이썬과 같은 언어 지원
        • 데이터 프레임 생성 방법
          • RDD를 변환해 생성 : RDD의 toDF함수 사용
          • SQL 쿼리 기반 생성 
            • df = spark.read.format("jdbc") \
                  .option("url", "jdbc:postgresql://localhost:5432/databasename") \
                  .option("dbtable", "tablename") \
                  .option("user", "username") \
                  .option("password", "password") \
                  .option("driver", "org.postgresql.Driver") \
                  .load()
              df.printSchema()
            • tablename 자리에 SELECT 사용 가능
        • 외부 데이터를 로딩해 생성
          • createDataFrame
    • Dataset
      • Dataset은 Dataframe과 달리 타입 정보가 존재하며 컴파일 언어에서 사용 가능

Spark 개발 환경

 

  • 개인컴퓨터에 설치하고 사용하는 방법
    • 노트북 등을 설치하려면 복잡
    • spark-submit을 이용해 실행 가능
  • 각종 무료 노트북 사용 방법
    • 구글 colab 이용
    • 데이터브릭(Databrick) 커뮤니티 노트북 사용
    • 제플린 무료 노트북 사용 : https://app.zepl.com/register
      • 주피터같은 웹기반 노트북. 파이썬, 스칼라, SQL 등 다양한 코드 작성, 실행, 결과확인 (시각화 포함), 수정을 손쉽게 반복, 다른 사람과 공유할 수 잇음
      • 주피터와 차이점
        • Spark 기본 지원. 파이썬과 스칼라와 SQL 지원.
        • 인터프리터는 플러그인 구조로 만들어져 있어 다른 모듈과 연동이 쉬움
        • 그 이외 대동소이 (시각화 지원, 노트북 공유 용이)
  • AWS EMR 클러스터 사용
    • 프로덕션 환경에 가까음

'AI > KDT 인공지능' 카테고리의 다른 글

[07/22] Spark 3  (0) 2021.07.22
[07/21] Spark 2  (0) 2021.07.21
[07/19] 12주차 강의 개요  (0) 2021.07.19
[06/28] 심층학습 기초2  (0) 2021.06.28
[06/24] 심층학습 기초  (0) 2021.06.24

데이터 팀의 역할과 구성원은 누구인가?

 

  • 데이터 팀의 미션
    • 신뢰할 수 있는, 신속히 사용 가능한 데이터를 바탕으로 부가가치 생성
      • 신뢰
        • 데이터의 품질이 보장되지 않으면 데이터를 이용하는 일들이 전부 보장되지 않는다.
      • 신속 
        • 필요할 때 이용 가능 = 데이터가 빠르게 이용 가능해야 한다.
      • 부가가치
        • 데이터는 본업이 아니다. 그러나 데이터를 기반으로 수요를 올리거나, 회전율을 높여 부가가치를 생성해낼 수 있다.
  • 데이터 팀 목표
    • 고품질의 데이터를 제공해 정책 결정에 사용 => 결정과학(Decision Science)라고 부르기도 함.
      • 데이터 참고 결정(data informed decisions) vs 데이터 기반 결정(data driven decisions)
      • = 데이터를 참고하겠다 vs 데이터가 말하는대로 가겠다
      • 기본적으로 전자가 좋다!
    • 고품질 데이터가 필요할 때 제공해 사용자 서비스 경험 개선
      • 데이터 기반 알고리즘을 통해 개선.
      • 하지만 사람의 개입/도움이 필요 (human-in-the-loop)
  • 데이터 활용 순서
    1. 사이트의 방문 트래픽과 외부 데이터가 생성됨 (이메일, 마케팅 등등)
    2. 데이터 팀(데이터 엔지니어들)이 모아진 데이터를 데이터 웨어하우스에 모아 놓음
      • 데이터 웨어하우스
        • 회사에 필요한 모든 데이터를 모아놓은 중앙 데이터베이스
          • 데이터의 크기에 맞게 DB 선택
          • 크기가 커지면 AWS RedShift, 구글 클라우드 BigQuery, 스노우 플레이크나 오픈소스 기반 하둡/스팍 사용 추천 : 모두 SQL 지원.
          • 프로덕션용 DB와 별개의 DB임. 
      • 데이터 파이프라인 = ETL(Extract, Transform, Load) 시스템을 통해 데이터 형태를 원하는 form으로 변환 후 웨어하우스에 적재
        • Airflow 오픈소스 프로젝트. 파이썬 3 기반. (에어비앤비, 우버, 리프트, 쿠팡 등에서 사용)
        • AWS와 구글클라우드에서도 지원
        • 흔한 데이터 소스의 경우 SaaS(Softare as a Service) 사용 가능 (ex)FiveTran, Stitch Data, ...)
    3. 비즈니스 인사이트를 도출해 냄 (데이터 분석팀 / 데이터 애널리스트 팀) - 시각화 작업
      • 데이터 분석이란?
        • 회사와 팀별 중요 지표(metrics) 정의. 대시보드 형태로 시각화(visualization)
        • 이외 데이터와 관련한 다양한 분석/리포팅 업무 수행
      • 시각화 대시보드란?
        • 중요한 지표를 시간의 흐름과 함께 보여줌.
          • 3A(Accessible, Actionable, Auditable)가 중요
            • Accessible : 쉽게 접근 가능해야 한다.  
            • Actionable : 지표를 보고 무슨 일을 해야할 지 분명히 드러나야 좋은 지표다.
            • Auditable : 지표가 맞게 계산되고 있는지 감사할 방법이 있어야 한다.
        • 널리 사용되는 대시보드
          • 구글 클라우드 룩커(Looker)
          • 세일즈포스의 태블로(Tableau)
          • 마이크로소프트 파워 BI(Power BI)
          • 오픈소스 아파치 수퍼셋(Superset)
    4. (개인화 등을 통한) 제품 서비스 개선.
  • 데이터 팀에서의 역할
    • 데이터 엔지니어
      • 데이터 인프라(데이터 웨어하우스와 ETL) 구축
      • 데이터 분석가, 과학자들과 협업을 통해 필요한 툴이나 데이터 제공
    • 데이터 분석가
      • 데이터 웨어하우스의 데이터 기반 지표를 만들고 시각화 (대시보드)
      • 내부 직원들의 데이터 관련 질문 응답
      • 필요한 스킬셋 - SQL, 통계적 지식, 비즈니스 도메인에 관한 깊은 지식, 보통 코딩을 하진 않음
    • 데이터 과학자
      • 과거 데이터 기반 미래를 예측하는 머신러닝 모델을 만들어 고객들 서비스 경험 개선(개인화/자동화/최적화)
      • 테스트는 가능하면 A/B 테스트를 수행하는 것이 더 좋음
        • A/B 테스트란?
          • 온라인 서비스에서 새 기능 임팩트를 객관적으로 측정하는 방법
          • 새로운 기능을 런치함으로 생기는 위험부담을 줄이는 방법.
            • 먼저 5% 사용자에게만 런치하고 나머지 95%의 사용자와 매출액과 같은 중요 지표를 가지고 비교
            • 5% 대상으로 별 문제가 없으면 점진적으로 10%, 20% 정도로 런치 비율을 늘린 후 최종적으로 100%로 런치
          • 기존 기능에 노출된 그룹(control) 새로운 기능에 노출된 그룹(test) 2개 그룹으로 나눠 시간을 두고 관련 지표 비교
          • 가설과 영향받는 지표를 미리 정하고 시작하는 것이 일반적
      • 필요한 스킬셋 - 머신러닝/인공지능에 대한 깊은 지식과 경험, 코딩 능력(파이썬, SQL), 통계 지식, 수학 지식, 끈기와 열정. 박사 학위가 도움이 됨.
      • 머신러닝 모델링 사이클
        • 가설 - (데이터 수집 - 분석 - 모델 개발 - 모델 런치 - 테스트 시작) - 비즈니스 개선(매출증대, 경비 절약)
        • 괄호로 묶은 부분을 짧은 사이클로 구성하여 점진적으로 개선함. (폭포수보단 애자일)
    • 작은 회사에선 한 사람이 몇 개의 역할을 동시 수행하기도 함

데이터 팀 조직 구조

 

  • 중앙집중 구조 : 모든 데이터 팀원들이 하나의 팀으로 존재
    • 일 우선 순위는 중앙 데이터팀이 최종 결정
    • 데이터 팀원들간 지식, 경험 공유가 쉬워지고 커리어 경로가 잘 보임
    • 현업 부서들 만족도는 상대적으로 떨어짐
  • 분산 구조 : 데이터 팀이 현업 부서별로 존재
    • 일 우선 순위는 각 팀별로 결정
    • 데이터 일을 하는 사람들간 지식/경험 공유가 힘들고 데이터 인프라나 데이터 공유가 힘들어짐
    • 현업부서들 만족도는 처음엔 좋지만 많은 수 데이터 팀원들이 회사를 그만두게 됨
  • 중앙집중과 분산 하이브리드 모델
    • 가장 이상적 조직 구조
    • 데이터 팀원들 일부는 중앙에서 인프라적 일 수행, 일부는 현업팀 파견식으로 일하되 주기적으로 일 변경
    • 데이터 팀 안에서 커리어 경로가 만들어짐

모델 개발시 고려할 점

 

  • 데이터 과학자는 복잡하더라도 cross validation의 결과가 좋은 모델을 만드려한다. 그래서 모델을 다 만들고 나서는 신경을 꺼버린다. 그러나 엔지니어들은 모델에 대한 테스트를 제대로 하지 않게 된다. 모델을 제대로 알지도 못하고, 해봤자 자신한테 더 도움되는 것은 없기 때문에.
  • 즉, 모델을 production에 어떻게 이양(serve)할 건지를 고려해야 한다.
  • 모델 개발 시 꼭 기억할 포인트
    • 모델 개발부터 최종 런치까지 책임질 사람이 필요하다.
    • 모델 개발 초기부터 개발/런치 과정을 구체화하고 소통
      • 모델 개발 시 모델을 어떻게 검증할 것인가?
      • 모델을 어떤 형태로 엔지니어들에게 넘길 것인가?
        • 피쳐 계산을 어떻게 하고, 모델 자체는 어떤 포맷인가?
      • 모델을 프로덕션에서 A/B 테스트할 것인가?
        • 한다면 최종 성공판단 지표가 무엇인가?
    • 개발된 모델이 바로 프로덕션에 런치간으한 프로세스/프레임워크가 필요
      • ex1) 트위터 : 데이터 과학자들에게 특정 파이썬 라이브러리로 모델 개발 정책화
        • 툴을 하나로 통일하면 제반 개발과 런치 관련 프레임워크 개발이 쉬워진다.
      • ex2) AWS의 SageMaker : 머신러닝 모델개발, 검증, 런치 프레임워크
        • 검증된 모델을 버튼 클릭 하나로 API 형태 런치 가능
        • Google Cloud와 Azure도 비슷한 프레임워크 지원
    • 피드백 루프가 필요
      • 운영에서 생기는 데이터를 갖고 개선점 찾기
        • 검색이라면 CTR(Click Through Rate, 결과가 10개있으면 몇 개를 클릭한 비율. 3개 클릭했음 30% 정도밖에 안 되는 것일 듯.) 모니터링하고 모든 데이터 기록
      • 주기적으로 모델 재빌딩
 

Machine learning is going real-time

[Twitter thread] After talking to machine learning and infrastructure engineers at major Internet companies across the US, Europe, and China, I noticed two groups of companies. One group has made significant investments (hundreds of millions of dollars) in

huyenchip.com


데이터 일 관련 교훈

 

  • 데이터를 통해 매출이 생겨야 함.
    • 어느 조직이건 회사에서 존재 이유는 매출 창조 혹은 경비 절감이다.
  • 데이터 조직의 수장의 역할이 중요하다.
    • 다시 한 번 데이터 인프라 구성이 첫 번째라는 점을 명심하되 단기적으로 좋은 결과를 낼 방법을 찾아야 한다.
  • 데이터 인프라가 무조건 첫 번째다.
    • 데이터 인프라 없이는 데이터 분석이나 모델링은 불가능하다. (성장한 회사 기준)
    • 고려점
      • 클라우드 vs 직접 구성
      • 배치 vs 실시간
  • 데이터 품질이 아주 중요.
  • 항상 성공 척도(지표)를 처음부터 생각.
    • 나름 가설을 세우는 것이 인사이트를 키우는데 큰 도움이 됨
    • 지표 계산에 있어 객관성이 중요
      • 계산된 지표를 아무도 못 믿으면 큰 문제
      • 지표를 어떻게 계산할 것인지, 이걸 다른 사람들에게 어떻게 설명할지 고려
  • 가능한 간단한 솔루션으로 시작. 반복 기반의 점진적 개발 방식(애자일)을 채택하자.

'AI > KDT 인공지능' 카테고리의 다른 글

[07/21] Spark 2  (0) 2021.07.21
[07/20] Spark  (0) 2021.07.20
[06/28] 심층학습 기초2  (0) 2021.06.28
[06/24] 심층학습 기초  (0) 2021.06.24
[06/23] 다층 퍼셉트론  (0) 2021.06.23

소프트웨어 패키징

 

소프트웨어 패키징이란? 모듈별 생성한 실행 파일들을 묶어 배포용 설치 파일을 만드는 것.

 

  • 패키징 시 고려사항
    • 운영체제, CPU, 메모리 등에 필요한 최소 환경 정의
    • UI는 시각적 자료와 함께 제공, 매뉴얼과 일치시켜 패키징.
    • 소프트웨어는 단순 패키징하여 배포하는 것으로 끝나는 것이 아닌 하드웨어와 함께 관리될 수 있도록 Managed Service 형태로 제공
    • 고객의 편의성을 고려한 안정적 배포가 중요.
    • 패키징 변경 및 개선에 대한 관리 고려
  • 작업 순서
    • 기능 식별 - 모듈화 - 빌드 진행 - 사용자 환경 분석 - 패키징 및 적용 시험 - 패키징 변경 개선 - 배포

릴리즈 노트 작성

 

릴리즈 노트란 개발 과정에서 정리된 릴리즈 정보를 소프트웨어 최종 사용자 고객과 공유하기 위한 문서.

 

  • 릴리즈 노트 항목
    • 헤더 : 릴리즈 노트 이름, 소프트웨어 이름, 릴리즈 버전, 릴리즈 날짜, 릴리즈 노트 날짜, 릴리즈 노트 버전 등
    • 개요 : 소프트웨어 및 변경사항 전체에 대한 간단한 내용
    • 목적 : 해당 릴리즈 버전에서 새로운 기능이나 수정된 기능 목록과 릴리즈 노트의 목적에 대한 간략한 개요
    • 문제 요약 : 수정된 버그에 대한 간략한 설명 또는 릴리즈 추가 항목에 대한 요약
    • 재현 항목 : 버그 발견에 대한 과정 설명
    • 수정/개선 내용 : 버그를 수정 / 개선한 내용 간단히 설명
    • 사용자 영향도 : 사용자가 다른 기능들을 사용하는데 있어 해당 릴리즈 버전에서의 기능 변화가 미칠 수 있는 영향에 대한 설명
    • SW 지원 영향도 : 릴리즈 버전에서 기능 변화가 다른 응용 프로그램들을 지원하는 프로세스에 미칠 수 있는 영향에 대한 설명
    • 노트 : SW / HW 설치 항목, 업그레이드, 소프트웨어 문서화에 대한 참고 항목
    • 면책 조항 : 회사 및 소프트웨어 관련 참조 사항
    • 연락처 : 사용자 지원 및 문의 응대를 위한 연락처 정보
  • 릴리즈 노트 작성 순서
    • 모듈 식별 - 릴리즈 정보 확인 - 릴리즈 노트 개요 작성 - 영향도 체크 - 정식 릴리즈 노트 작성- 추가 개선 항목 식별

디지털 저작권 관리(DRM; Digital Right Management)

 

저작권이란? 창작자가 가지는 배타적 독점적 권리. 타인의 침해를 받지 않을 고유한 권리.

 

  • 디지털 저작권 관리 흐름도
    • https://lipcoder.tistory.com/entry/2-3-3%EC%9E%A5-%EB%94%94%EC%A7%80%ED%84%B8-%EC%A0%80%EC%9E%91%EA%B6%8C-%EA%B4%80%EB%A6%ACDRM
    • 클리어링 하우스(Clearing House) : 저작권 사용 권한, 라이선스 발급, 사용량에 따른 결제 관리 수행
    • 콘텐츠 제공자 : 콘텐츠 제공 저작권자
    • 패키저 : 콘텐츠를 메타 데이터(속성 정보 설명 데이터)와 함께 배포 가능 형태로 묶어 암호화하는 프로그램
    • 콘텐츠 분배자 : 암호화된 콘텐츠를 유통하는 곳이나 사람
    • 콘텐츠 소비자 : 콘텐츠를 구매해서 사용하는 주체
    • DRM 컨트롤러 : 배포된 콘텐츠 이용 권한을 통제하는 프로그램
    • 보안 컨테이너 : 콘텐츠 원본을 안전하게 유통하기 위한 전자적 보안 장치
  • 디지털 저작권 관리 기술 요소
    • 암호화 : 콘텐츠 및 라이선스 암호화, 전자 서명을 할 수 있는 기술
    • 키 관리 : 콘텐츠를 암호화한 키에 대한 저장 및 분배 기술
    • 암호화 파일 생성 : 콘텐츠를 암호화된 콘텐츠로 생성하기 위한 기술
    • 식별 기술 : 콘텐츠에 대한 식별 체계 표현 기술
    • 저작권 표현 : 라이선스 내용 표현 기술
    • 정책 관리 : 라이선스 발급 및 사용에 대한 정책 표현 및 관리 기술
    • 크랙 방지 : 크랙에 의한 콘텐츠 사용 방지 기술
    • 인증 : 라이선스 발급 및 사용 기준이 되는 사용자 인증 기술

소프트웨어 설치 매뉴얼 작성

 

  • 설치 매뉴얼 포함 항목
    • 목차(전체 설치 과정 순서대로 요약 후 관련 내용 시작 페이지 함께 기술) 및 개요(설치 매뉴얼 주요 특징, 구성과 설치 방법, 순서 등의 내용 기술)
    • 서문
      • 문서 이력, 설치 매뉴얼 주석, 설치 도구 구성, 설치 환경 체크 항목 기술
    • 기본 사항
      • 소프트웨어 개요, 설치 관련 파일, 설치 아이콘, 프로그램 삭제, 관련 추가 정보
  • 설치 매뉴얼 작성 방법
    • 설치 화면 및 UI, 설치 이상 메시지, 설치 완료 및 결과, FAQ, 설치 시 점검 사항, network 환경 및 보안, 고객 지원 방법, 준수 정보 및 제한 보증 등에 대한 내용 기술
  • 설치 매뉴얼 작성 순서
    • 기능 식별 - UI 분류 - 설치 파일 / 백업 파일 확인 - Uninstall 절차 확인 - 이상 Case 확인 - 최종 매뉴얼 적용

소프트웨어 사용자 매뉴얼 작성

 

  • 사용자 매뉴얼 포함 항목
    • 목차(매뉴얼 전체 내용 순서대로 요약 후 관련 내용 시작 페이지 함께 기술) 및 개요(소프트웨어 주요 특징, 메뉴얼 구성과 실행 방법, 사용법, 항목별 점검 기준, 항목별 설정 방법 등에 대한 내용 기술)
    • 서문 
      • 문서 이력, 주석, 기록 보관 내용 
    • 기본 사항
      • 소프트웨어 개요, 소프트웨어 사용 환경, 소프트웨어 관리, 모델, 버전별 특징, 기능, 인터페이스 특징, 소프트웨어 구동 환경
  • 사용자 매뉴얼 작성 방법
    • 사용자 화면 및 UI, 주요 기능 분류, 응용 프로그램 및 설정, 장치 연동, Network 환경, Profile 안내, 고객 지원 방법, 준수 정보 및 제한 보증
  • 작성 순서
    • 기능 식별 - 사용자 화면 분류 - 사용자 환경 파일 확인 - 초기화 절차 확인 - 이상 Case 확인 - 최종 매뉴얼 적용

소프트웨어 버전 등록

 

형상 관리란? 소프트웨어 개발 과정에서 소프트웨어 변경 사항을 관리하기 위해 개발된 일련의 활동

 

  • 형상 관리 기능
    • 형상 식별 : 형상 관리 대상 수정 및 추적이 용이하도록 하는 작업
    • 버전 제어 : 소프트웨어 업그레이드나 유지 보수 과정에서 생성된 다른 버전 형상 항목 관리, 이를 위해 특정 절차와 도구 결합시키는 과정
    • 형상 통제(변경 관리) : 식별된 형상 항목에 대한 변경 요구를 검토하여 현재 기준선이 잘 반영될 수 잇도록 조정하는 작업
    • 형상 감사 : 기준선 무결성을 평가하기 위해 확인, 검증, 검열 과정을 통해 공식적으로 승인하는 작업
    • 형상 기록(상태 보고) : 형상 식별, 통제, 감사 작업 결과를 기록 * 관리하고 보고서를 작성하는 작업
  • 주요 용어
    • 저장소(Repository) : 최신 버전 파일들과 변경 내역에 대한 정보들이 저장되어 있는 곳
    • 가져오기(Import) : 버전 관리가 되고 있지 않은 아무것도 없는 저장소에 처음으로 파일 저장
    • 체크아웃 : 프로그램을 수정하기 위해 저장소에서 파일을 받아온다.
    • 체크인 : 체크아웃한 파일의 수정을 완료 후 저장소의 파일을 새로운 버전으로 갱신한다.
    • 커밋 : 체크인 수행할 대 이전 갱신된 내용이 있는 경우 충돌을 알리고 diff 도구를 이용해 수정 후 갱신 완료
    • 동기화(Update) : 저장소에 있는 최신 버전으로 자신의 작업 공간 동기화
  • 소프트웨어 버전 등록 과정
    • Import - Check-out - Commit - Update - Diff

소프트웨어 버전 관리 도구

 

  • 공유 폴더 방식 : 버전 관리 자료가 로컬 컴퓨터의 공유 폴더에 저장돼 관리되는 방식
    • 종류 : SCCS, RCS, PVCS, QVCS
  • 클라이언트/서버 방식 : 버전 관리 자료가 중앙 시스템(서버)에 저장되어 관리되는 방식
    • 종류 : CVS, CVSNT, Clear Case, CMVC, Perforce
      • SVN(Subversion)
        • 모든 개발 작업은 trunk 디렉터리에서 수행. 추가 작업은 branches 디렉터리 안에 별도의 디렉터리를 만들어 작업 완료 후 trunk 디렉터리와 병합한다.
        • 주요 명령어
          • add : 새로운 파일이나 디렉터리를 버전 관리 대상으로 등록. 
          • commit : 버전 관리 대상으로 등록된 클라이언트 소스 파일을 서버 소스 파일에 적용
          • update : 서버 최신 commit 이력을 클라이언트 소스 파일에 적용. commit 전 매번 update를 수행해 클라이언트에 적용되지 않은 서버 변동 내역을 클라이언트에 적용
          • checkout : 버전 관리 정보와 소스 파일을 서버에서 클라이언트로 받아온다.
          • lock/unlock : 서버 소스 파일이나 디렉토리를 잠그거나 해제
          • import : 아무것도 없는 서버 저장소에 맨 처음 소스 파일을 저장하는 명령. 한 번 사용하면 다시 사용하지 않음.
          • export : 버전 관리에 대한 정보를 제외한 순수 소스 파일만을 서버에서 받아온다.
          • info : 지정 파일에 대한 위치나 마지막 수정 일자 등에 대한 정보 표시
          • diff : 지정 파일이나 경로에 대해 이전 리비전과 차이 표시
          • merge : 다른 디렉터리에서 작업된 버전 관리 내역을 기본 개발 작업과 병행
  • 분산 저장소 방식 : 버전 관리 자료가 하나의 원격 저장소와 분산된 개발자 PC 로컬 저장소와 함께 저장되어 관리되는 방식
    • 종류 : GNU arch, DCVS, Bazaar, Mercurial, TeamWare, Bitkeeper, Plastic SCM 등
    • Git
      • 리누스 토발즈가 리눅스 커널 개발에 사용할 관리 도구로 개발한 이후 주니오 하마노에 의해 유지 보수되고 있음. 브랜치를 이용해 기본 버전 관리 틀에 영향을 주지 않으며 다양한 형태의 기능 테스팅 가능. 파일 변화를 스냅샷으로 저장하는데, 스냅샷은 이전 스냅샷의 포인터를 가져 버전 흐름을 파악할 수 있음.
      • 주요 명령어
        • add : 작업 내역을 지역 저장소에 저장하기 위해 스테이징 영역에 추가.
        • commit : 작업 내역을 지역 저장소에 저장.
        • branch : 새로운 브랜치 생성. 
        • checkout : 지정한 브랜치로 이동.
        • merge : 지정한 브랜치 변경 내역을 현재 HEAD 포인터가 가리키는 브랜치에 반영함으로써 두 브랜치 병합
        • init : 지역 저장소 생성
        • remote add : 원격 저장소에 연결
        • push : 로컬 저장소 변경 내역을 원격 저장소에 반영
        • fetch : 원격 저장소 변경 이력만을 지역 저장소로 가져와 반영
        • clone : 원격 저장소 전체 내용을 지역 저장소로 복제
        • fork : 지정한 원격 저장소의 내용을 자신의 원격 저장소로 복제

빌드 자동화 도구

 

빌드란 소스 코드 파일들을 컴파일한 후 여러 개 모듈을 묶어 실행 파일로 만드는 과정.

이러한 빌드를 포함하여 테스트 및 배포를 자동화하는 도구가 빌드 자동화 도구이다.

 

  • Ant, Make, Maven
  • Jenkins : Java 기반 오픈 소스 형태, 가장 많이 사용되는 빌드 자동화 도구.
    • 서블릿 컨테이너에서 실행되는 서버 기반 도구 
    • 대부분 형상 관리 도구와 연동 가능.
    • Web GUI 제공으로 쉬운 사용.
    • 여러 대 컴퓨터를 이용한 분산 빌드나 테스트 가능
  • Gradle : Groovy(동적 객체 지향 프로그래밍 언어)를 기반으로 한 오픈 소스 형태 자동화 도구. 안드로이드 앱 개발 환경에서 사용.
    • 플러그인을 설정하면, Java, C/C++, Python 등의 언어도 빌드 가능.
    • 실행할 처리 명령들을 모아 태스크로 만든 후 태스크 단위로 실행.
    • 이전 사용한 태스크 재사용하거나 다른 시스템 태스크를 공유할 수 있는 빌드 캐시 기능 지원. 빌드 속도 향상 가능.

'그 외 공부 > 정처기-실기(완)' 카테고리의 다른 글

10장 응용 SW 기초 기술 활용  (0) 2021.07.07
9장 소프트웨어 개발 보안 구축  (0) 2021.07.06
8장 SQL 응용  (0) 2021.07.06
7장 어플리케이션 테스트 관리  (0) 2021.07.05
6장 화면 설계  (0) 2021.07.02

+ Recent posts