2019년 9월 26일 목요일

폴 스미스와 유발 하라리의 조언.

폴 스미스

1. 가정하지 마라. (당연하다는 것을 당연하다고 받아들이지 마라.)
2. 모든 것에서 영감을 찾을 수 있다.
3. 표절하지 마라. (영감과 표절은 다르다.)
4. 고민해라.

"Never assume.
Keep your eyes open.
Don't copy.
Get inspired."

원글: https://brunch.co.kr/@voiz/22


유발 하라리

• 오직 모든 것이 변한다는 사실만 유효하다. (예전보다 더 빠르게.)
• 특이점(Singularity, 과학 기술이 폭발적 성장단계로 도약해, 인간 본연의 생물학적 조건을 뛰어넘는 새로운 문명을 낳는 시점)이 온다.
• 변화에 대응하는 능력을 길러야 한다. 새로운 것을 배우고, 익숙하지 않은 상황에서도 균형을 유지하는 능력을 길러야 한다. 때론 가장 잘 아는 영역을 포기해야 하며 전혀 알지 못하는 분야를 편안하게 받아들여야 한다.
• 우리는 특정 정보를 아는 것보다 ㅡ
 1) 정보가 합리적인지를 판단할 수 있는 능력
 2) 무엇이 중요하고 무엇이 그렇지 않은지를 알 수 있는 능력
 3) 수많은 작은 정보를 모아 세상에 대한 폭넓은 관점을 가지는 능력
이 더 중요해진다.

오늘날 우리가 익혀야 할 것은 4C.
1. Critical Thinking
2. Communiation
3. Collaboration
4. Creativity

원글: https://ppss.kr/archives/175097


2019년 9월 17일 화요일

JPA 코드 없이 적는 기본 개념

JPA는 Java의 객체를 table/relationship에 직접 매핑해보자는 시도에서 출발한다. 이런걸 ORM이라고 한다. JPA 이전에 ORM은 이러한 프레임워크를 나타내는데 쓰이는 일반적인 용어였다.

JPA를 쓰면 애플리케이션의 클래스를 데이터베이스의 테이블에 매핑할 수 있다. (쿼리를 작성해 날리는 방식인 JPQL도 엔티티 간 매핑을 알고있는 상태에서 수행되기 때문에 SQL과 차이가 있다.) 객체 모델을 중심으로 사고할 수 있는 것이다.

JPA는 스펙이고, JPA 스펙을 구현하기 위해선 ORM 구현체(Provider)가 필요하다. 여기서 주로 쓰이는 구현체가 바로 그 Hibernate다. (Hibernate가 JPA를 위해 만들어진 것은 아니다. 특정 부분에선 JPA가 제공하는 기능 외의 기능들을 Hibernate가 제공하기도 한다.) 그리고 Hibernate 대신에 다른 JPA 구현체를 사용할 수도 있다.
 → 서블릿과 JSP가 웹 개발을 위한 자바 스펙인 것처럼, JPA는 ORM을 위한 자바 스펙인 것이다. 이와 유사하게 톰캣, 제티가 서블릿/JSP 스펙을 구현한 서버인 것처럼 Hibernate가 JPA 스펙을 구현하고 있다.

출발은 엔티티다.
데이터베이스 테이블에 저장하고 싶은 클래스 타입에 @Entity를 붙여주면, 클래스 타입에 맞는 테이블이 데이터베이스에 생성되는 방식이다. 인자없는 기본 생성자는 습관적으로 만들어주는 것이 좋다. 마지막으로 객체마다 ID를 설정해 주어야 한다. ID에 해당하는 필드엔 @Id, @GeneratedValue 어노테이션을 붙여준다.

일반적으론 JPA 조차도 쌩으로 쓰진 않는다. Spring Data JPA 라이브러리를 통하게 되는데 Spring Data JPA는 JPA를 더 쓰기 편하게 만들어 놓은 라이브러리다. JPA의 EntityManager를 직접 다루지 않고도 Spring Data JPA의 Repository를 통해 더 쉽게 데이터를 다룰 수 있게 된다.

특별한 관계를 갖지 않는 엔티티의 CRUD는 JpaRepository<T, ID>를 상속받고 @Repository 어노테이션을 붙이는 것만으로 끝이난다. 더 할게 없다. (조금만 살펴보면 JpaRepository는 PagingAndSortingRepository를 상속받고, PagingAndSortingRepository는 다시 CrudRepository를 상속받는 것을 알 수 있다.)

관계 설정도 어노테이션 방식으로 처리된다.
@OneToMany, @ManyToOne, @ManyToMany
관계 설정의 방식, mappedBy 속성의 사용 방식에 따라 조인 테이블의 생성 유무 등 테이블이 생성되는 방식이 조금씩 바뀐다.

• 자주 쓰이는 설정값
/src/main/resources/application.properties
# 세션 메트릭을 보여준다.
spring.jpa.properties.hibernate.generate_statistics=true

# 쿼리를 표시한다.
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

• 사용상 주의점
JPA가 만능은 아니다. 특정 작업에선 SQL과 비교했을 때 성능 저하가 생길 수 있다. 통계, 집계, 배치와 같은 작업은 JPA보다 SQL을 쓰는 것이 낫다고 알려져 있다.

2019년 9월 16일 월요일

C# Event vs Delegate, 이벤트와 델리게이트 차이점.

이벤트는 델리게이트와 동일하게 +, -의 조합 연산자를 지원하고, 실제 동작도 거의 같아 보이지만 이벤트엔 컴파일러가 적용하는 몇가지 사양이 있고, 속성에 대한 두가지 접근자가 추가된다는 차이점이 있다.

디자인 상 가장 큰 차이점은 이벤트는 인터페이스 내부에 선언할 수 있지만 델리게이트는 선언할 수 없다는 점이다. 이는 프로퍼티를 인터페이스 내부에 선언할 수 있지만 필드는 선언할 수 없는 C#의 디자인과 관련이 있다. 어떤 얘기인가 하면,

public event EventHandler SomeEvent;

코드는 다음과 같이 변환된다.

private EventHandler _SomeEvent;

public event SomeEvent {
    add { _SomeEvent += new EventHandler(value); }
    remove { _SomeEvent -= new EventHandler(value); }
}

위 코드 변환의 영향으로 이벤트는 클래스 내부에서만 호출할 수 있게 된다. 반면 델리게이트는 public인 경우 클래스 외부에서도 제약없이 호출할 수 있다.

차이점이 있다 하더라도 이 둘은 거의 같다. 알다시피 EventHandler도 델리게이트다. (.Net에서 이벤트는 event 키워드만 붙이면 어떤 형식의 delegate도 허용하긴 하지만 표준은 아래의 형식을 따르는게 맞다.)

public delegate void EventHandler(object sender, EventArgs e);
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);

개인적인 생각으론 통지 구조를 인터페이스에 드러내거나 publish 동작을 클래스 내부에 감추는 목적으로 이벤트와 델리게이트를 구분해서 쓰면 될 것 같다.

2019년 9월 4일 수요일

2019.09.04 AWS 웨비나 세션 4 정리(?)

.. 세션 3은 잘 못들었는데 세션 2와 유사한 내용의 발표였음. RedShift 솔루션 위주로 설명이 진행됨.

■ 세션 4. Amazon의 머신러닝 솔루션: Fraud Detection & Predictive Maintenance

• AWS ML Stack
- 전세계 모든 데이터 과학자와 개발자가 손쉽게 활용할 수 있는 편리한 인공지능 & 머신러닝 환경을 제공
- AI Services + ML Services + ML Frameworks & Infrastructure.
- AWS 클라우드 환경에서 제공되는 여러 서비스와 연계해 시스템을 구축할 수 있다. 타사 솔루션 대비 비용을 효율적으로 가져갈 수 있다고 함.

• Fraud Detection using Machine Learning (SageMaker 기반 솔루션)
# 잠재적 사기 행위의 탐지 및 검토 활동을 플래그 하는 아키텍처 구축 방법
# KB 국민은행의 인공지능을 활용한 금융사기 방지 시범과제 사례.
- Lambda를 이용해 프로세싱 파이프라인을 만들 수 있고, QuickSight를 이용해 예측된 결과를 시각화할 수 있다. (Lambda가 트리거 역할.)

• Predictive Maintenance using Machine Learning
# 장비의 이상 동작, 멈춤, 고장에 관한 잠재적 징후를 탐지하고 예방 및 조치에 권장하는 작업을 제공하는 아키텍처 구축 방법
- 센싱 데이터 기반으로 설비의 예기치 않은 고장을 탐지, 예측.
- RUL(remaining useful life) 예측.
- Fraud Detection 솔루션과 마찬가지로 CloudWatch Events로, 트리거는 Lambda가..
# 'turbofan degradation dataset'이 기본으로 제공됨. 데이터 성격이 맞으면 이걸 그냥 쓰면되고 성격이 다르면 이 모델을 시작점으로 해서 customization이 가능하다.
- 현재 Apache MXNet Gluon dataset 기반으로 만들어져 있다고 하는데 MXNet Gluon이 뭔진 잘 모르겠다. 업무 절차는 SageMaker notebook instance로 모델 트레이닝을 한 뒤에 SageMaker MXNet 모델로 모델을 생성한 다음에 S3 버킷에 놓고 돌리는 방식.

후반부엔 데모까지 있었으나 전반적으로 잘 와닿진 않았다. 실제로 써봐야 알겠는데, 난이도가 좀 있어 보인다.

2019년 9월 3일 화요일

2019.09.04 AWS 웨비나 세션 1, 2 정리

들을 때마다 느끼는데 AWS 소속 아키텍트 분들은 설명 참 잘하신다. 스케일 예측이 안되거나 덩치가 너무 커져버린 경우엔 매니지드 클라우드 서비스는 거의 필수적인게 되버린 것 같다. 다행스럽게도(?) 우리 회산 아직 해당 사항 음슴.

■ 세션 1. 클라우드 기반 데이터 분석 및 인공 지능을 위한 비즈니스 혁신


... 초반 30분 못들음.

• Amazon Athena
- 표준 SQL을 사용해 Amazon S3에 저장된 데이터를 간편하게 분석할 수 있는 대화식 쿼리 서비스. 서버리스 서비스라 관리할 인프라가 없고, 실행 쿼리에 대한 비용만 지불하면 된다.

• Amazon Kinesis
- 실시간 데이터를 Data Lake로 전달하는 역할. 슈퍼셀에선 Kinesis를 이용해 일 450억건의 게임 사용자 실시간 데이터를 수집한다. Netflix는 1000개 이상의 Kinesis 샤드를 통해 일 수십억건의 VPC Flow Logs를 분석하고 있다.

• 하이퍼 커넥트 AWS 이용 사례
- Redshift를 활용 데이터 수집 및 집계 (9시간 -> 3시간 단축)
- EMR을 이용해 데이터 전처리 (4시간 -> 18분 단축)
- Elasticsearch를 통한 실시간 분석 (다양한 시각화 구현)

• 머신 러닝 모델 구축에 대한 어려움
- 훈련 데이터 수집 및 저장
- 최적화된 기계학습 알고리즘 선택
- 데이터 훈련을 위한 인프라 설정
- 훈련 및 학습 모델 튜닝 (반복)
- 최적화한 모델 배포
- 모델 기반 서비스 확장 및 운영
-> Amazon SageMaker, 완전 관리형 ML 서비스. 생성, 훈련, 그리고 배포까지 원클릭 형태로 머신 러닝 모델을 상품에 반영할 수 있다. #국내 MATHPRESSO 사례.

• 비즈니스 의사 결정을 위한 분석 빌딩 블럭
# 수집
Kinesis: 스트리밍 데이터
Direct Connect: 데이터 센터와 연결
Snowball: 기존 저장된 벌크 데이터 로드
Database Migration Service: Oracle 등의 데이터 임포트

# 저장/처리
Glue: 데이터 카탈로그와 ETL
Amazon S3: 안전하고, 비용 효율적 스토리지

# 분석
Redshift: 데이터 웨어하우스
EMR: 비정형 데이터 처리, Apache Spark
Athena: ad-hoc, 서버리스 쿼리
QuickSight: 시각화, BI
SageMaker: 기계 학습 플랫폼



■ 세션 2. 글로벌 기업들의 효과적인 데이터 분석을 위한 Data Lake 구축 및 분석 사례


• 데이터 분석 트렌드
# Data = The world's most valuable resource
- 데이터의 양과 형식이 생각했던 것 이상으로 늘어나고 있다. 따라서 이를 받혀주는 데이터 분석 기술이 필요함.
(Hadoop, Elasticsearch, Presto, Spark, ...)
- 더 다양해진 데이터 소비자, 더 복잡해진 데이터 요구사항
(Secure, Realtime, Flexible, Scalable, ...)
- 레거시 환경의 Data silos 문제, 모든 데이터 소스를 한 번에 볼 수 있는 단일 데이터 뷰가 없다. (데이터 소스 별로 분리되어 있고, 이를 결합할 수 없는 환경.)
# Data Lake는 중앙 집중식 데이터 저장소, 다양한 스키마와 구조의 데이터를 대상으로 수집, 저장, 변환, 분석이 용이해야 한다. Single View로 접근하는 차세대 데이터 플랫폼. (Amazon S3 기반)
- Data Lake - Amazon S3 설계
 Tier-1 원본 데이터
 Tier-2 분석용 데이터
 Tier-3 특정한 목적을 갖는 데이터 (Optional, Use Case(또는 ML, AI)에 적합한 구성, 도메인 레벨로 데이터마트 분리)

• 전통적인 방식의 분석 시스템
- 관계형 DB에 저장된 정형 데이터
- 확장이 어려운 구조, 대규모 선비용 투자
- 분석의 복잡성, 비실시간성, 새로운 기술과의 접목 한계
-> Data Lake를 통해 전통적인 DW를 확장.
 다양한 유형의 정형/비정형 데이터 저장, 낮은 비용으로 저장과 분석이 가능.

• Amazon Redshift
여러 개의 컴퓨팅 노드의 병렬 실행으로 페타 바이트 급 데이터를 빠르게 분석할 수 있다고 함. 

• Data Lakes로 데이터를 이동
- AWS는 다양한 선택안을 제공하고 있다. Direct Connect (전용 네트워크 연결). Snowball로 엑사 바이트 급의 데이터를 이전. 등등.
- 또한 실시간 소스(모바일, IoT 기기)로 부터 발생하는 스트리밍 데이터를 저장할 수 있는 방법도 제공. (Kinesis, ...)
- 데이터 웨어하우징, 대화형 SQL 쿼리, 빅데이터 처리, 실시간 분석, 대시보드와 시각화, 기계학습등 다양한 요구에 부합하는 서비스가 이미 AWS에 존재.

• 데이터에 대한 도전 과제
- 혼란스러운 여러 버전의 데이터
- 데이터에 대한 제한된 가시성
- 데이터를 찾기위해 낭비되는 시간
- 누락된 통찰력에 의한 의사결정 저하
-> 통합 저장 -> 시각화 분석 -> 트렌드 분석 -> 클러스터 분석 -> 예측 분석.
# 최종 목표는 예측 분석 및 머신러닝.
# 다우 존스, 에픽 게임즈 사례.

• Data Lake 구축 단계
- S3 버킷 생성
- 데이터 수집
- 데이터 프로세싱 및 카탈로그화
- 보안 및 컴플라이언스 정책 설정
- 데이터 활용 및 분석
-> AWS Lake Formation을 이용하면 Data Lake를 신속하게 구축할 수 있다고 함.

... 뒤에 10여분 못들음;