728x90
반응형

분류 전체보기 204

JPA - (1) 프로젝트 생성

JPA JPA란 Java Persistence API의 약자로, Java 객체와 관계형 DB를 맵핑해주는 ORM 프레임워크입니다. 개발환경 앞으로의 포스팅을 통해 JPA를 사용해볼 것인데, 이에 사용할 환경은 다음과 같습니다. IDE: IntelliJ Community 빌드툴: Gradle 언어: Java Database: H2 프레임워크: Spring Boot Spring Boot를 왜 사용하는지 의아해 하실 수 있지만, H2를 별도로 설치하지 않아도 되어서 사용하는 것입니다. 프로젝트 설정 Spring Initializr 먼저 아래 링크를 통해 스프링 부트 어플리케이션을 생성해 다운받겠습니다. https://start.spring.io/ 프로젝트는 아래와 같이 설정해 주었습니다. Gradle Proj..

서버 개발/JPA 2019.08.05

추천시스템 18 - 경사하강법

추천시스템 본 포스팅은 Minnesota대학교의 Intro to Recommender Systems코세라 강좌를 정리한 내용입니다. https://www.coursera.org/learn/collaborative-filtering?specialization=recommender-systems SVD의 문제점 SVD는 좋은 테크닉이지만 아래와 같은 문제가 있다: SVD를 계산하는것은 매우 느리다. SVD는 채워지지 않은 데이터에 대해 어떠한 조치를 취해주어야 한다. 따라서 이러한 문제들을 해결하기 위해 경사하강법을 적용해보고자 한다. 접근법 경사하강법을 적용하고자 하는 인사이트는, SVD를 사용해 추천을 계산할때의 에러를 직시하는것이다. 선형대수적으로는 SVD를 구한 다음, k만큼의 값을 자르는것이, ra..

5주차

주키퍼 주키퍼는 분산 코디네이션 시스템이다. 분산 환경에서 여러 노드 간에 조정자 역할을 한다. 만약 하나의 노드에 워크로드가 많이 갔다면, 로드밸런싱 해주는 기능도 포함되어 있다. 주키퍼 아키텍처 디렉토리 기반으로 데이터를 저장한다. Key-value방식으로 znode라는 저장 객체를 저장한다. 데이터를 파일시스템과 같이 계층화된 구조로 저장하기에 용이하다. Watch 기능 주키퍼 클라이언트가 특정 znode에 watch기능을 걸어놓을 수 있다. Watch기능을 걸어 놓는다면, 해당 노드의 변화를 콜백 형식으로 업데이트 받는다. 복제기능 주키퍼 서버들은 모두 데이터를 복제해서 가지고 있다. 주키퍼 서버들은 연결이 되면 리더를 선택하게 된다. 이 때 리더는 모든 서버들의 저장된 것을 복제한다. 또 리더가..

Java Thread - (3) 동기화

동기화 Thread는 독자적입니다. 이 말은 즉 보통은 다른 Thread를 신경쓰지 않고 자신의 작업을 수행한다는 의미입니다. 멀티프로세서 기반의 시스템에서는 보통 여러개의 CPU에서 각각 많은 양의 Thread들이 동시다발적으로 작업을 수행합니다. 이번 포스팅에서는 이 많은 양의 Thread들이 어떻게 협업하고, 동기화 되는지, 그리고 공유 자원을 접근할 때에는 어떤 방식으로 할 수 있는지에 대해 알아보겠습니다. Lock Thread들을 동기화 할때는 락이라는 개념을 사용합니다. 이 Lock은 보통 자원을 하나의 Thread만 접근 가능하게 잠궈놓는다는 의미로 쓰입니다. 하나의 Thread가 자원을 접근하고 있을 때, 다른 Thread가 같은 자원에 접근한다면, 이 자원은 의도하지 않은대로 변경이 될 ..

추천시스템 17 - 행렬 분해

추천시스템 본 포스팅은 Minnesota대학교의 Intro to Recommender Systems코세라 강좌를 정리한 내용입니다. https://www.coursera.org/learn/collaborative-filtering?specialization=recommender-systems 잠재 의미 분석 (Latent Semantic Analysis) 정보검색 분야에서도 비슷한 고민을 먼저 시작했다. 문서의 키워드벡터와 쿼리의 키워드벡터 들의 조합은 간단하지만 좋은 표현법은 아니다. - 의미를 내포하기가 힘들다 이것을 해결하기 위해 특이값분해 (Singular Value Decomposition, SVD)라는 테크닉을 사용한다. SVD는 행렬을 사용자-아이템 행렬에서 선호도 기반의 작은 행렬로 감소시..

강화학습 공부 - (1) 마르코프 결정 프로세스

서론 MDP란 강화학습의 환경을 공식적으로 설명하는 것이다. 모든 환경이 관찰 가능하다고 가정한다. 거의 모든 강화학습의 문제들이 MDP로 표현될 수 있다. 마르코프 구성요소 현재를 기준으로 미래는 과거와 무관하다 상태 S_t는 $P[S_{t+1} | S_t] = P[S_{t+1} | S1, … S_t]$ 상태 $S_{t+1}$은 오직 상태 S_t에 의해서만 결정된다. 이것이 상태 S_1에서 S_t까지 (히스토리)를 모두 반영한다고 가정한다. 따라서 현재의 상태가 다음(미래)상태를 결정하는데 충분하다고 본다. 상태 전환 확률은 마르코프 상태 s의 제일 높은 확률을 가진 다음 상태 s'를 결정하는 확률이다. $P_{ss'} = P[S_t+1 = s' | S_t = s]$ 상태 전환 행렬은 현재 상태에서 다..

스파크 튜토리얼 - (3) RDD

RDD RDD는 Resilient Distributed Dataset의 약자입니다. 직역하면 탄력 분산 데이터셋이 되겠습니다. 이는 분산되어 존재하는 데이터들의 모임, 즉 클러스터에 분배되어 있는 데이터들을 하나로 관리하는 개념이라고 생각하면 편할 것 같습니다. 스파크의 모든 데이터 타입들은 RDD를 기반으로 만들어져 있고, 데이터끼리의 연산들은 RDD의 연산으로 이루어져 있습니다. RDD는 HDFS의 파일과 같이 변경이 불가능한, 즉 쓰기가 불가능한 데이터입니다. RDD 연산 RDD는 두가지 연산으로 이루어져 있습니다. Transformation Action Transformation 트랜스포메이션은 RDD끼리의 연산입니다. 이전 포스팅에서 사용했던 filter메소드 역시 트랜스포메이션의 일종입니다. ..

스파크 튜토리얼 - (2) 주피터 노트북 설정

주피터 노트북 주피터 노트북은 파이썬을 개발할 때 가장 많이 쓰이는 에디터중 하나일 것입니다. 예전에는 IPython이라고 하는 이름으로 출시가 되었었죠. Python커널을 사용해 짧은 코드를 돌리고 결과를 그 화면에서 바로 볼 수 있고, 마크다운을 사용해 노트나 보고서 형식으로 작성할 수 있어서, 프로토타이핑이나 보고서 형식의 코드 작성에 유용합니다. 주피터 노트북 설정 저는 VirtualBox를 사용하였기 때문에, 외부 접속이 필요해서 다음 설정을 해주었습니다. 먼저 다음 커맨드를 실행해 config파일을 생성해 줍니다. # jupyter notebook --generate-config 그리고 해당 파일을 열어줍니다. # vi ./.jupyter/jupyter_notebook_config.py 아래 ..

3주차 - 2

Yarn 얀의 이름은 Yet Another Resource Negotiator의 약자이다. 얀은 한마디로 하둡의 리소스를 관리하고 관장하는 시스템이다. 얀의 등장에 의해 하둡은 큰 아키텍쳐의 변화가 생겼다. 1.0에서는 HDFS와 MapReduce만 있는 구조였지만, 얀의 리소스 매니저가 다른 어플리케이션도 지원하면서, 여러 어플리케이션이 HDFS를 접근할 수 있게 되었다. 이 때문에 하둡 위에 Spark나 Hbase와 같은 시스템들이 올라갈 수 있는것이다. HDFS의 일이 파일을 읽고 쓰는 일이었다면, 얀의 일은 자원을 요청하고 할당하는 일이다. 하지만 이는 사용자(개발자)가 해주지 않고, 시스템이 알아서 해주는 것이다. 얀 어플리케이션은 클라이언트로부터 요청을 받으면 먼저 리소스매니저에게 전달 된다...

3주차 - 1

하둡 스트리밍 하둡 스트리밍으로 맵리듀스를 처리할 때와의 근본적인 차이점은, 하둡 스트리밍은 맵과 리듀스 작업 중간에 워커의 로컬 디스크에 쓰기를 하지 않는다. 유닉스의 stdin stdout을 중간 연산에 사용한다. HDFS 파일시스템의 기본 연산은 file io (read/write) 이다. 하지만 hdfs는 기본적으로 write once, read many를 지향하는 구조이다. 데이터가 한번 쓰이면, 중간에 붙이는 것은 불가능하고, 끝에 붙이는 것만 가능하다. 따라서 저장은 한번 하고, 분석 작업을 할 때 많이 읽을 수 있게 하기 위한 구조라는 것이다. HDFS의 가장 중요한 설계 원칙 중 하나는 Fault-Tolerance이다. 따라서 하나의 노드에 장애가 발생했을 때, 다른 노드에서 같은 데이터..

728x90
반응형