기업 탐방기록 - SAP 코리아 방문기[2016.01.12]

흔치않은일상 2016. 1. 15. 17:11

 정보화 시대에 도래하게 되면서 기업들은 기존에 자신들이 해오던 업무 처리를 전산으로 변경하고 있습니다. 그 과정에서 기업들은 자신들의 주요 업무에 최적화된 전산 시스템을 사내에 구축해야 합니다. 하지만 거대한 기업 내에서 전산 작업을 전담하는 부서를 만들기엔 상당히 부담스러운 과정인 데다가 초기 설비 비용 또한 상당합니다. 게다가 중소기업에서 이를 단독으로 수행하는 업무를 하기엔 비용 이외의 상당한 부담이 따릅니다.

 이러한 기업들을 위해서 솔루션을 제시하여 전산 시스템을 설비하고 이를 관리하는 회사가 필요하게 되었는데요 이번에 소개해드릴 SAP사가 바로 그러한 회사중 하나입니다.

 SAP사는 1967년 독일 만하임에서 IBM 출신 엔지니어들이 설립한 소프트웨어 기업입니다. 일반적인 사람들에게 SAP는 잘 알려지지 않은 B2B 기업입니다만 주요 고객인 기업에게 있어 상당한 인지도를 가지고 있는 회사입니다. SAP의 주요 고객은 자신들이 주로 다루는 전산 업무를 처리하기 용이한 솔루션인 소프트웨어를 필요로 하는 회사들입니다. 최근 빅데이터가 주목을 받게 되면서 SAP에서도 빅데이터를 사용하기를 원하는 기업들을 대상으로 SAP HANA를 제공하고 있는데요. 특히 회사내 데이터들을 시각화하여 이를 그래프와 같은 수치로 제공하는 프로그램인 Lumira또한 SAP사의 주요 상품이기도 하지요.


다양한 형식으로 가공된 데이터들(xml, MySQL 등)의 데이터를 수치로 시각화하여

자료를 재구성하는 프로그램 Lumira


 SAP의 한국지사인 SAP 코리아는 다른 해외지사와는 다르게 현지에 연구개발 투자를 하여 국내에서도 소프트웨어 개발 부서를 두고 있습니다. 인원은 약 200명 규모로 한국에서 개발된 소프트웨어가 해외에서도 사용되기도 할 정도로 SAP는 한국에서의 투자도 상당할 것으로 보입니다.


 이번 SAP 코리아 방문은 고려대학교 공학교육거점센터에서 진행된 '빅데이터를 활용한 SW 융합 교육과정'의 일정차 방문하게 되었습니다. SAP 코리아는 지하철 도곡역 인근에 있는 군인공제회 빌딩 내에 위치해 있습니다.



 도곡역 4번 출구에서 내려 계속 앞으로 가다보면 군인공제회 건물을 보실 수 있습니다.


 저 멀리 입주 기업 간판이 눈에 보입니다. 가까이서 확인해 보면...



 위에서 보시는 바와 같이 SAP사의 로고를 만나보실 수 있습니다. 군인공제회 입구로 들어가 오른쪽 엘리베이터 타는 곳으로 이동합니다.



 안내판을 보이는 것과 같이 SAP 코리아는 총 4개의 층에 상주하고 있습니다. 경비원에게 방문 목적을 말한 후 사내에 들어가보도록 합니다.



엘리베이터에서 내리시면 보이는 바와 같이 SAP사의 모습을 볼 수 있습니다.



제가 이번에 SAP 코리아를 방문한 목적이기도 한 빅데이터 SW 융합교육과정 프로그램 입니다.



 사내에서 헌혈 캠페인이 진행중인 것으로 보입니다. 피와 같은 발음인 P를 활용한 직원분들의 재치있는 아이디어가 인상깊습니다.



 제가 교육을 받았던 SAP 코리아 24층 안내도 입니다.



 올해로 SAP가 한국에 진출한지 20주년을 맞아 사내에서 다양한 이벤트가 진행되고 있는 모습을 볼 수 있었습니다.



 한 켠에는 직원들이 물품들을 쉽게 사용할 수 있도록 구비되어 있습니다.



 회의실 내부입니다. IT 기업들에서 흔히 볼 수 있는 분위기의 모습입니다.

 회의실 내에 있는 책상은 높낮이를 자유롭게 바꿀 수 있는 점이 참 신기하더군요.



 사내에서 바깥을 바라본 모습입니다. 일을 하다 창밖을 보면 어려운 일도 술술 풀릴 듯 한 느낌이 듭니다.



사내 사무실 모습입니다. 개인 사석이라기 보다는 공용 좌석에서 자유롭게 사용하는 듯한 모습입니다.

아마 사석의 경우 다른 층에 구비되어 있는 것으로 보입니다.



직원 한 분께서 열심히 일을 하고 계시는 모습입니다.



사내에 구비된 사물함입니다. 자동식으로 자신의 사원증이 있어야 열리는 구조인 듯 합니다.



사무실에서 회의실 사이의 통로입니다.



벽에 붙여둔 말들이 참 재치있군요. 이런 분위기의 회사 참 좋습니다!



Quiet room이라 적혀있는 것으로 보아 조용하게 업무를 보아야 하는 곳으로 보입니다.

안에 전화기가 있는 것으로 보아 중요한 통화가 필요할 때 쓰이는 곳으로 보입니다.



회사 한 켠에 마련되있는 카페테리아입니다. 냉장고와 커피머신 등 없는게 없어 보입니다.



회사 창밖을 바라본 풍경입니다. 역시 강남은 빌딩의 숲으로 둘러쌓여있는 모습이로군요.



SAP 코리아에서 진행하는 Design Thinking 수업이 한창 진행중인 모습입니다.




 SAP 코리아에서는 대학생과 직장인 및 관공서에서 근무하는 공무원들을 대상으로 Design Thinking 수업을 진행하고 있습니다. 실제 Design Thinking은 미국 캘리포니아의 Stanford University에서 2박 3일 일정으로 구성되어 있는데, 이 수업에서는 단 1일로 압축해서 진행하고 있습니다. 확실히 수업에 참가해보니 너무 짧은 시간에 많은 것을 다루려다 보니 시간 부족 등의 아쉬운 점들이 느껴집니다. 하지만 평소에는 쉽게 접하기 어려운 수업이기에 개인적으로는 실리콘벨리 탐방 이후로 상당히 인상깊었던 시간이었습니다.




 Design Thinking 수업을 통해 SAP 코리아에 방문한 이번 기회에 많은 것을 느꼈습니다. 작년 실리콘벨리 탐방을 하였을 때 느꼈던 회사 내의 자유로운 IT 기업의 분위기를 이곳 대한민국에서도 느낄 수 있었다는 점이 상당히 큰 의미가 아니었나 싶습니다.


 현재 SAP 코리아에서 진행하고 있는 Design Thinking 교육과정은 실제 미국의 IT 기업들이 회사내에서 활용하고 있는 방식 중 하나입니다. 회사내 직원들이 서로 수평관계로서 서로의 생각을 공유하는 집단 지성을 통해 좋은 아이디어를 찾아가는 과정은 상명하복 문화가 주를 이루고 있는 우리나라의 기업문화에 있어서 상당히 신선한 충격일 것입니다. 실제 국내 기업들도 이 Design Thinking 교육과정을 통해서 자신의 회사가 발전할 수 있다면 이를  적용해 보겠다는 의향을 비친 기업인 분들도 계시다고 하니 한 편으로는 우리나라 기업들의 달라질 기업문화의 모습을 살짝 기대해 보기도 합니다.


 언제부턴가 빅데이터라는 말이 유행하고 있습니다. SAP 또한 후발주자로서 빅데이터를 처리하는 분산컴퓨팅 사업에 많은 투자를 하고 있는 것을 보면 앞으로도 빅데이터는 반짝 하고 사라지는 유행으로 끊나지 않고 오늘날의 인터넷처럼 일상의 일부로서 자리잡을 것으로 보입니다. 그런만큼 빅데이터를 설계하는 데 있어 중요한 Design Thinking또한 빅데이터의 시대를 맞이하기 위해 준비해야 할 전략이 될 것으로 보입니다.

300x250

Spectral Clustering 알고리즘 응용(Minimum Cut)

공대생의 팁 2016. 1. 1. 23:56

 지난 포스팅에서 Spectral Clustering Algorithm(스펙트럼 군집화 알고리즘)의 정의와 원리에 대해 설명을 하였습니다. 이번 포스팅에서는 Spectral Cluster로 분류된 그래프 자료를 통해 각각의 집단 그룹으로 나누어주는 알고리즘인 Minimum cut에 대해 알아보도록 하겠습니다.


 본 포스팅에서는 이전 포스팅에서 설명하였던 Spectral Clustering 알고리즘을 숙지하고 이를 통해 구하게 되는 유사도 행렬(Affinity Matrix)를 알고 있다는 전제하에 설명할 것입니다. Spectral Clustering에 대해 자세히 알고자 하시는 분께서는 아래 포스팅을 참고해 주시길 바랍니다.


Spectral Clustering Algorithm(스펙트럼 군집화 알고리즘)

http://elecs.tistory.com/167


 지난 포스팅에서 다루었던 각 Cluster 그래프를 한 번 더 보도록 합시다.

 위 그래프는 같은 Cluster에 속한 데이터끼리는 굵은 선으로, 서로 다른 Cluser에 속한 데이터끼리는 가느다란 선으로 표시되어 있습니다. 위 데이터를 Spectral Clustering을 통해 Affinity Matrix로 각 데이터 사이의 유사값을 구함으로서 각 Cluster가 서로 구분될 수 있도록 수치화 하였습니다.

 각 데이터간의 유사도를 표현한 Affinity Matrix를 가지고 위 데이터를 명확하게 나눌 수 있는 방법은 존재할까요? Minimum cut 알고리즘은 주어진 데이터 사이의 유사도 값 중 가장 작은 값으로 각 Cluster 그룹을 나누어주는 기능을 합니다. 위의 그래프를 보았을 때 가느다란 선으로 연결된 데이터 사이를 나누게 되면 각 그룹이 뚜렷다게 구분되는 것을 보실 수 있습니다.

 예시를 통해 자세히 알아보도록 하겠습니다. 아래는 데이터 사이의 선분 vertex 사이에 유사값을 부여한 그래프입니다.



 직관상으로 보았을 때 Minimum cut 알고리즘을 적용하게 된다면 유사도 1과 2로 되어있는 부분을 나누면 두 개의 Cluster로 분별될 수 있다는 것을 직감하실 수 있습니다. 아래는 위의 그림에 Minimum cut을 적용한 그림입니다.

 위 그림대로 각 Cluster 사이의 vertex를 자름으로서 두 개의 Cluster로 분류된 것을 확인할 수 있습니다. 이를 식으로 구현하기 위해서는 어떻게 진행하게 될까요? Minimum Cut 알고리즘은 다음과 같은 해법을 제시합니다.

 아래 식에서 A와 B는 2개의 Cluster를 말하며, w는 Affinity Matrix(유사도 행렬)의 요소 중 하나입니다.

 위 식의 결과값은 두 cluster를 나눌 때 잘리는 부분의 유사값 w를 모두 합한 값입니다. 즉 결과값은 두 Cluster로 분리하기 위해 자르는 유사값의 총 합이 최소가 될 경우 위 식이 성립된다는 것을 알 수 있습니다.

 위 식을 증명하는 방법을 알아보겠습니다. 이전 포스팅(Spectral Clustering 알고리즘)에서 서로 다른 Cluster를 분류할 때 다음 두 조건을 만족해야 한다고 하였습니다.


1. 같은 Cluster 내의 요소끼리의 유사도는 큰 값을 갖는다.

2. 다른 Cluster에 속한 요소끼리의 유사도는 작은 값을 갖는다.


 위 조건을 식으로 나타내면 다음과 같습니다.


 위의 식을 설명하자면 각 Cluster 그룹 A와 B에 속하는 affinity matrix 요소의 값을 모두 더한 후 A와 B 사이를 연결하는 affinity matrix 요소의 값을 모두 더한 값의 2배를 뺀 결과값이 최대가 되는 경우를 나타낸 것입니다. 위 식을 응용하면 아래와 같은 식을 만들 수 있습니다.


 위 식은 affinity matrix 내의 모든 값들을 더한 후 이를 위에서 구했던 식을 뺀 값이 최소가 되는 경우를 식으로 표현한 것입니다. 위 식이 maximum이 되는 값을 찾는 경우이므로 아래의 식은 minimum이 된다는 것을 유추할 수 있습니다.

 유도한 식을 구하기 위해 이를 실제 Affinity Matrix 행렬을 통해 설명해보겠습니다. 아래는 Affinity Matrix인 W를 나타냅니다.

 위의 모든 행렬요소의 값을 구합니다. 이는 아래의 과정을 나타내는 것입니다.


 다음으로 각 행렬 내에서 같은 Cluster 그룹에 속하는 요소들을 모두 더합니다.

위에서 붉은 색으로 강조한 부분을 모두 더합니다. 이는 아래의 과정을 나타낸 것입니다.

끝으로 각 행렬 내에서 다른 Cluster 그룹끼리 연결된 요소들의 값을 모두 더합니다.


 위에서 파란 색으로 강조한 부분을 모두 더합니다. 이는 아래의 과정을 나타낸 것입니다.


 위 과정의 계산을 모두 수행하게 되면 최종값은 붉은 색으로 강조한 부분이 빠지고 파란 색으로 강조한 부분이 두드러지게 됨을 알 수 있습니다. 즉, 각 Cluster 사이에서 cut 되는 부분에 해당되는 요소값이 남는다는 것을 알 수 있습니다. 즉 위의 식은 아래와 같은 원리의 값이 됨을 알 수 있습니다.



 그렇다면 주어진 Affinity Matrix 값을 사용하여 어떻게 최소값을 구할 수 있을까요? 이전 포스팅에서 설명드렸던 고유벡터를 사용하면 행렬의 minimum값을 구할 수 있습니다. 그럼 위 Affinity Matrix를 사용하여 고유벡터를 구하는 과정을 보겠습니다.


 위 식에서 주어진 각 값을 행렬 D와 W로 나누어봅니다. 이때 행렬 D는 대각행렬(Diagonal Matrix)로서 각 대각행렬의 행은 Affinity Matrix의 같은 행 내의 모든 값의 합을 나타냅니다. 아래는 이를 정의한 내용입니다.


 위에서 구한 행렬 (D-W) 행렬의 최소값은 아래의 식과 같이 고유벡터 x를 구함으로서 알 수 있습니다.

이 때 나오게 되는 고유벡터에서 2번째로 작은 고유벡터를 통해 Minimum Cut를 구할 수 있습니다. 이는 이전 포스팅에서 언급한 바와 같이 1번째로 작은 고유벡터를 사용할 경우 각 Cluster 그룹의 분리가 눈에 띄게 나타나지 않기 때문입니다.


 지금까지 Minimun Cut을 사용하여 Spectral Cluster 알고리즘을 나타내는 과정을 살펴보았습니다. 그런데 우리가 지금까지 언급하였던 Minimun Cut 알고리즘에는 단점이 하나 존재합니다. Minimum Cut의 경우 무조건 최소값을 찾는 과정을 거치기 때문에 우리들이 바라는 바와 같이 각 Cluster 그룹이 나누어지지 않는 경우가 발생하는데 아래는 그러한 사례 중 하나를 나타낸다.

 이상적인 방향으로 보았을 때 위의 경우처럼 다른 색깔로 분류된 Cluster 그룹끼리 나누어 지는 것이 맞으나 실제로는 이보다 더 작은 최소값을 갖고 있는 부분에서 나누어지는 것을 볼 수 있습니다. 이처럼 우리의 의도적으로 알고리즘이 적용되지 않는 이유는 Outliar와 같이 해당 cluster에서 다소 거리가 있는 부분에 있는 데이터가 있어 이 부분이 의도치않게 나누어져서 하나의 Cluster가 분류되지 않고 쪼개져 버리는 것을 보실 수 있습니다.

 이러한 Minimum Cut을 대체하게 된 것이 바로 Normalized Cut입니다. Normalized Cut 알고리즘에 대한 자세한 사항은 다음 포스팅에서 이어가도록 하겠습니다.

300x250

안드로이드 프레임워크 프로그래밍(27) [Fedora에서 AOSP 안드로이드 운영체제 컴파일하기]

안드로이드/프레임워크 2015. 12. 31. 12:27

 일반적으로 안드로이드 운영체제를 Build 할 때 거의 대부분의 경우 Ubuntu 환경에서 수행됩니다. AOSP 공식 홈페이지에서도 Ubuntu를 권장하고 있는 바이기도 합니다.

 그래도 혹여나 하는 마음에 Fedora 운영체제에서 안드로이드를 Build 해보는 과정에 대해 포스팅을 해보고자 합니다. 같은 RPM 패키지를 사용하는 Redhat이나 OpenSUSE에서도 이 포스팅의 내용을 적용할 수 있으리라 생각합니다.


Build Version    : Android 6.0.1(Marshmellow)

OS             : Fedora 23 (Twenty Three) 64-bit

JDK Version     : OpenJDK 1.7.0


1. 빌드하고자 하는 AOSP 소스코드를 다운로드 받습니다. 관련 내용에 대해 자세히 알아보고자 하시는 분은 아래 포스팅을 참조해 주기길 바랍니다.

http://elecs.tistory.com/56


$ mkdir ~/bin

$ export PATH=$PATH:~/bin

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

$ chmod a+x ~/bin/reop

$ mkdir ~/aosp 

$ cd ~/aosp

$ repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r1

$ repo sync -j4


 위 과정까지 마치셨다면 아래와 같이 aosp 폴더에 소스코드 다운로드 된 것을 확인하실 수 있습니다.


2. 다운로드한 안드로이드 소스코드를 컴파일할 수 있는 환경을 설정합니다. Marshmellow(6.0) 버전의 경우 OpenJDK 1.7.0을 설치해야 합니다. Oracle JDK로 컴파일을 시도하려 해도 시작하기 전에 컴파일이 중단되어버립니다. Fedora의 경우 dnf를 통해서는 최신 버전의 자바만 지원해주기 때문에 사용자가 직접 OpenJDK를 설치해야 합니다. 설치 방법은 아래의 포스팅을 참조해 주시기 바랍니다.


Fedora에 이전 버전의 OpenJDK 설치하기(Install OpenJDK 7 in Fedora 23)

http://elecs.tistory.com/166


만약 설치한 이후에도 해당 버전이 적용되어 있지 않았을 경우 아래의 명령어를 통해 직접 설치해줍시다.


# alternatives --install /usr/bin/java java /usr/lib/jvm/java-1.7.0-openjdk/bin/java 1

# alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-1.7.0-openjdk/bin/javac 1

# alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/java-1.7.0-openjdk/bin/javadoc 1


3. dnf를 통해 안드로이드를 빌드하기 위해 필요한 패키지를 설치합니다. 


# dnf install bison gcc xorg-x11-fonts-Type1 libpng15 


4. 이제 다운로드 받은 소스코드를 build 하기 위한 준비과정을 진행해 보도록 하겠습니다. 먼저 build 환경을 초기화합니다.


$ ~/aosp

$ source build/envsetup.sh

$ lunch


 안드로이드 6.0.1 버전 기준으로 build 환경은 다음과 같이 나타납니다.


 여기서 자신이 build 하고자 하는 환경을 선택합니다. 본 포스팅의 경우 Android Studio를 통한 에뮬레이터에서의 실행을 목표로 함으로 1번 혹은 14번을 선택합니다. 혹시 자신이 build 하고자 하는 환경에 대한 설정을 알고 싶으신 분은 아래의 포스팅을 참조해 주시기 바랍니다.


안드로이드 프레임워크 프로그래밍(3) [NEXUS5에 소스 빌드하기]

http://elecs.tistory.com/59


5. 이제 build를 해보도록 합니다.


$ make update-api && make -j4


아래와 같은 결과가 나왔다면 Fedora 운영체제 환경에서 안드로이드 이미지를 빌드하는 데에 성공한 겁니다!


 


300x250