전체 글 58

02. 데이터 모델(Data Models)과 질의 언어(Query Languages) - 1

데이터 모델은 소프트웨어 개발에 있어서 가장 중요한 부분 중에 하나입니다. 다양한 종류의 데이터 모델에 대해 이해를 하고 있고, 애플리케이션 요구사항에 가장 적합한 모델을 찾아서 개발을 해야 합니다. 데이터 모델에 따라 어떤 종류의 사용법은 쉽고 어떤 동작은 지원하지 않습니다. 또한 어떤 연산은 빠르지만 어떤 연산은 매우 느리게 동작할 수 있습니다. 그렇기 때문에 애플리케이션에 맞는 데이터 모델을 사용하는 것이 중요합니다. 이번 장에서는 다양한 데이터 모델과 질의 언어에 대해 살펴볼 예정입니다. 관계형 모델(Relational Model) vs 문서 모델(Document Model) 관계형 모델을 다음과 같이 정의됩니다. 데이터는 관계(relation)(SQL에서 테이블이라고 불리는)로 구성되고 각 관계..

Git 명령어 요약 정리 (Cheat sheet)

git은 오늘날 가장 많이 사용하는 버전 관리 시스템 중 하나입니다. 오늘은 git의 자주 사용하는 명령어에 대해서 살펴보고자 합니다. 먼저 각 명령어에 따른 흐름이 어떻게 변하는지 다음 그림을 통해 알 수 있습니다. 이미지 출처 : https://jrebel.com/rebellabs/git-commands-and-best-practices-cheat-sheet/ 생성하기 새로운 로컬 저장소를 생성하기 $ git init [project_name] 저장소 가져오기 $ git clone [url] 살펴보기 작업 디렉토리에 변경된 파일 보기 $ git status 변경된 staged 파일 보기 $ git diff 변경 이력 보기 $ git log 브랜치 작업하기 로컬 브랜치 보기 $ git branch 로컬..

Tools/Git 2019.07.25

동시성(Concurrency) vs 병렬성(Parallelism)

서점에 가면 다양한 언어별로 동시성을 다루는 책들을 많이 볼 수 있습니다. 프로그래밍을 하다 보면 이러한 동시성 처리가 필요한 경우가 있습니다. 그런데 동시성이라는 말을 종종 병렬성과 혼동되어 사용하는 경우가 있습니다. 그래서 이번에 한번 정리를 해볼까 합니다. 동시성(Concurrency) vs 병렬성(Parallelism) 동시성병렬성동시에 실행되는 것 같이 보이는 것실제로 동시에 여러 작업이 처리되는 것싱글 코어에서 멀티 쓰레드(Multi thread)를 동작 시키는 방식멀티 코어에서 멀티 쓰레드(Multi thread)를 동작시키는 방식한번에 많은 것을 처리한번에 많은 일을 처리논리적인 개념물리적인 개념 먼저 동시성과 병렬성의 차이를 표로 살펴보았습니다. 그러나 표로만 봐서는 조금 잘 안 와닿는 ..

01. 신뢰성, 확장성, 유지보수성을 가진 애플리케이션

Compute-intensive(계산 중심) vs Data-intensive(데이터 중심) 과거에는 CPU 성능이 애플리케이션을 제한하는 요소였지만 오늘날에는 그렇지 않습니다. 최근에는 데이터의 양, 데이터의 복잡도, 데이터의 변화 속도가 애플리케이션을 제한하는 요소가 되었습니다. 이렇게 애플리케이션에서 사용하는 데이터의 특징에 맞춰서 설계를 해야 합니다. 그래서 이러한 애플리케이션을 Data-intensive application(데이터 중심 애플리케이션)이라고 합니다. 일반적으로 데이터 중심 애플리케이션은 다음과 같은 구성 요소를 가집니다. 꼭 데이터 중심 애플리케이션이 아니더라도 애플리케이션의 요구 사항에 따라 필요한 것들이 달라질 것입니다. Database Cache Search index Str..

예제로 알아보는 Oozie Coordinator - 2

예제로 알아보는 Oozie Coordinator - 2 이번 포스트에서는 예제를 통해서 data availability 기반의 스케줄링이 가능한 우지 코디네이터 사용법에 대해 알아보겠습니다. time interval 기반의 우지 코디네이터의 사용법이 궁금하신분들은 이전 포스트를 참고하시기 바랍니다. Oozie를 통하여 workflow를 동작시킬 때의 조건으로 특정 데이터 셋의 준비가 되는 경우에 워크플로우가 실행되도록 하고 싶은 경우가 있습니다. 이때 사용할 수 있는 방법이 바로 data availability 혹은 data trigger 기반의 코디네이터입니다. 동작 원리는 간단합니다. 코디네이터에서 frequency 마다 지정된 위치의 데이터 셋이 존재하는지 확인합니다. 확인 후 데이터가 없으면 지정..

예제로 알아보는 Oozie Coordinator - 1

예제로 알아보는 Oozie Coordinator - 1 이전 포스트에서 우리는 다양한 workflow 패턴에 대해 알아보았습니다. workflow는 여러 액션들을 정의하고 액션들에 실행 관계를 포함해서 실행할 수 있습니다. 그러나 우리는 workflow가 특정 시간에 주기적으로 혹은 데이터가 존재하면 실행하길 원합니다. 이러한 요구사항을 수용해서 Oozie에서는 workflow를 스케줄할 수 있는 Coordinator 기능을 제공합니다. 이러한 스케줄링 기능을 통해 강력한 Orchestration 기능을 제공합니다. Oozie는 기본적으로 time interval 기반의 스케줄링과 data availability 기반의 스케줄링을 제공합니다. 또한 외부 이벤트에 의해서도 실행될 수 있습니다.Oozie에서..

딥러닝(Deep learning) 살펴보기 2탄

지난 포스트에 Deep learning 살펴보기 1탄을 통해 딥러닝의 개요와 뉴럴 네트워크, 그리고 Underfitting의 문제점과 해결방법에 관해 알아보았습니다. 그럼 오늘은 이어서 Deep learning에서 학습이 느린 문제점을 어떠한 방식으로 해결하고 연구하고 있는지 한번 알아보도록 하겠습니다. Neural Network 복습 기존의 뉴럴 네트워크는 weight parameter들을 최적화(optimize)를 하기 위하여 Gradient Descent 방법을 사용했습니다. 그럼 Gradient Descent에 대하여 알아보도록 하겠습니다. Gradient Descent 뉴럴 네트워크의 loss function의 현 weight의 기울기(gradient)를 구하고 loss를 줄이는 방향으로 업데이..

Oozie classpath 정의하기

Oozie classpath 사용법 oozie 액션은 일반적으로 우지가 실행하는 작은 자바 어플리케이션들입니다. 그러면 액션을 실행할 때 액션에서 의존성이 있는 클래스들을 classpath를 통해 이용가능한 상태여야 합니다. 우지에서는 sharelib이라는 액션들이 사용하는 라이브러리의 공유 위치를 정의할 수 있습니다. 이를 통해 액션의 디펜던시를 관리를 할 수 있습니다. 또한 다양한 방법으로 라이브러리를 classpath에 추가할 수 있습니다. sharelib directory 사용하기 sharelib를 사용하기 위해서는 oozie.use.system.libpath=true로 설정해주면 사용할 수 있습니다. 그리고 sharelib directory는 다음 oozie-setup 명령어를 통해 생성해줄 수..

Oozie workflow 파라미터

Oozie Parameterization of Workflows Oozie에서 workflow 또는 coordinator에서 파라미터를 변수로 설정한 뒤, 워크플로우나 코디네이터를 실행할 때 이 파라미터를 직접 사용할 수 있습니다. 즉, workflow.xml 파일이나 coordinator.xml 파일을 편집하지 않고서도 값을 변경하여 실행할 수 있으며, 다시 배포하지 않아도 파라미터를 통해 다른 형태의 워크플로우나 코디네이터를 실행할 수 있는 것이죠. 그러면 파라미터를 설정하는 방법에 대해 알아보도록 하겠습니다. Parameter 설정 방법 config-defaults.xml에 설정하기 config-defaults.xml 파일을 생성하여 속성 값(property values)를 설정하여 파라미터를 설정..

Oozie workflow pattern - 3

해당 포스트는 이전한 블로그에서도 확인할 수 있습니다.Oozie workflow pattern - 3 이전 포스트에는 Oozie의 워크플로우 패턴중 하나인 fork-and-join 패턴에 관해서 알아보았습니다. 이번 시간에는 워크플로우 내에 액션의 결과에 조건을 주어 다음 액션을 어디로 수행할 것인지 결정할 수 있는 capture-and-decide 패턴에 대해 알아보도록 하겠습니다. capture-and-decide pattern capture-and-decide 패턴이라고 하니까 약간 어려운 느낌이 있지만 실제로는 간단한 패턴이죠. 앞서 수행된 액션에서 저장된 결과를 아웃풋으로 전달해주고 다음 액션에서는 해당 아웃풋을 받아서 어떠한 액션을 수행할 것인지 결정하게 되는 것이죠. 즉 간단한 제어문이라고 ..

반응형