728x90
반응형

전체 글 206

스프링 프레임워크 - (3) AOP

AOP 배경 소프트웨어를 개발하다 보면, 로깅이나 예외처리와 같은 비지니스로직이 아닌 코드를 반복하게 된다. 이러한 로직은 중요한 부분이지만, 실제 비지니스 로직과는 거리가 먼 것이 대부분이다. 여러 다른 부분의 코드에 사용될 수 있지만, 반복적이다. 유지보수를 할 때도, 여러곳에 분산되어 있으면 관리가 어렵게 된다. 이를 해결하기 위해 나온 개념이 Aspect Oriented Programming, 즉 관점지향 프로그래밍이다. 횡단관심사 (Cross-Cutting Concern) 여러 모듈에 걸쳐 공통적이고 반복적인 처리 로직을 일컷는 말이다. AOP는 이러한 횡단관심사들을 한데 모아 관리하는 것에 관심이 있다. 횡단관심사의 대표적인 예들은 다음과 같다: 보안 로깅 트랜잭션 모니터링 캐시 예외 AOP의..

강화학습 공부 - (4) Model Free Control

Model Free Control Model Free Control은 다음과 같은 문제들을 풀기 위함이다: 문제에서 MDP가 주어져 있지 않지만, 경험을 통해 간단하게 만들 수 있는 경우 MDP가 주어져 있지만, 환경이 너무 크기 때문에 샘플링을 통해 행동하는 경우 On-Policy vs Off-Policy On-Policy 행동하면서 학습하는 문제 정책 $\pi$를 통한 경험의 샘플링을 통해 정책 $\pi$ 학습시키는 것 , 즉 행동하는대로 학습하는 형태 또한 검증시에도 같은 정책을 사용한다. Off-Policy 다른 (에이전트의) 행동 패턴을 통해 학습하는 문제 다른 에이전트의 정책 $\mu$를 통핸 경험의 샘플링을 통해 정책 $\pi$를 학습시키는 것, 즉 다른 누군가의 행동을 보고 학습하는 형태 ..

선형대수 - (2) 가우스 소거법

연립 방정식과 행렬 다음과 같은 연립 방정식이 있다고 하자: (선형방정식은 1차식의 변수들만 존재하는 것이다.) $\begin{cases} x + 2y = 3 \\ x + 5y = 6 \end{cases}$ 위는 1번식에 4를 곱하고 2번식을 빼면, 3y = 6이 되고, y = 2라는 답이 나온다. 그리고 이를 대입해 x로 풀어내면, x = -1이라는 답을 얻을 수 있다. 위의 직선을 평면에 표현하면, x와 y는 두개의 직선의 교점임을 알 수 있다. 이를 컬럼벡터와 행렬을 통해 표현해 풀 수 있다. 위의 문제를 행렬과 벡터로 표현하면 다음과 같이 표현할 수 있다. $\begin{bmatrix} 1 \quad 2 \\ 4 \quad 5 \end{bmatrix} \begin{bmatrix} x \\ y \e..

선형대수 - (1) 선형성

선형성 (Linearity) f(x)는 x라는 변수에 대한 함수이다. f는 또한 연산(operation)이다. f가 선형성을 가지려면 두가지 조건을 만족해야 한다. 1. Superposition (중첩) $f(x_1 + x_2) = f(x_1) + f(x_2)$ 만약 $x_1$과 $x_2$를 함수에 적용하기 전에 더한 것과, 함수에 각각 적용한 뒤 더한 것의 결과가 같으면, 중첩의 조건을 만족하는 것이다. 2. Homogeneity (동질성) $f(a x) = a f(x)$ 만약 x에 상수 a를 곱한 값에 함수를 적용한 것이, 함수에 적용한 뒤 상수 a를 곱해준 결과와 같으면, 동질성의 조건을 만족하는 것이다. 위를 하나의 수식으로 표현하면 다음과 같이 표현할 수 있다. $f(a_1 x_1 + a_2 x..

스프링 프레임워크 - (2) 스프링 빈 (Bean)

빈 스코프 스프링의 DI컨테이너가 관리하는 Bean의 생존기간을 의미한다. 스프링에서 설정할 수 있는 Bean의 스코프는 다음과 같다: singleton 디폴트값이다. 하나의 인스턴스가 생성되고, 이후에는 해당 인스턴스를 공유하게 된다. prototype DI에 Bean에대한 요청이 들어올때 마다 Bean을 생성한다. 멀티스레드 환경에서 사용되는 Bean에 많이 쓰인다. request HTTP 요청이 들어올 때 새로운 Bean을 생성한다. 웹에서만 쓰인다. session HTTP 세션이 생성될 때 새로운 Bean을 생성한다. 웹에서만 쓰인다. global session 글로벌 HTTP세션이 생성될 때 Bean을 생성한다. 포틀릿 웹에서만 쓰인다. application 서블릿 컨텍스트가 만들어질 때 Bea..

스프링 프레임워크 - (1) 의존성 주입 (DI)

DI의 생성 배경 생성자에서 모든 의존성이 있는 클래스들을 초기화 하면 클래스들 간의 결합도가 높아진다. 하지만 비지니스 로직을 구현하다 보면, 다양한 컴포넌트들을 조합하게 되고, 이를 효율적으로 분리해야 협업이나 외주개발이 용이하게 되는데, (컴포넌트가 실제로 구현될 때 까지 시간이 걸릴 수 있음) 이를 Dummy클래스로 대체하는 방법이 있다. 따라서 결합도를 낮추려면, 생성자에서 구현하는 것 보다, 생성자에서 인자로 받는것이 더 효율적일 것이다. 이렇게 하면 Interface에 명시된 메소드명만을 사용하게 되고, 실제 Impl의 구현체는 쉽게 수정할 수 있게 된다. 하지만 생성자에서 직접 주입을 받는 경우에도, 각 컴포넌트를 개발자가 직접 주입해주어야 하기 때문에, 로직적인 변경이 필요할 경우 큰 수..

데이터 중심 애플리케이션 - (1) 데이터 시스템

데이터 시스템 용어 정리 신뢰성 (Reliability) 하드웨어나 소프트웨어의 결함, 에러와 같은 역경에 직면해도 시스템이 올바르게 동작하는가 결함성 (fault-tolerant) 시스템에서 잘못될 수 있는 일인 결함을 예측하고 대처할 수 있는 능력 결함 (fault) 시스템의 사양에서 벗어난 요소 장애 (failure) 필요한 서비스를 제공 못하고, 시스템이 멈춘 상태 카오스 몽키 (Chaos-Monky) 넷플릭스의 테스트 방법의 일종으로, 시스템의 구성 중 하나의 혹은 여러 프로세스를 임의로 죽여 결함을 일으켜 테스트하는 방법 확장성 (Scalability) 데이터, 트래픽의 양, 복잡도 증가를 위해 시스템이 확장할 수 있는가 부하 매개변수 (load parameter) 시스템의 현재 부하를 기술하..

스파크 튜토리얼 - (8) 스파크 스트리밍

Spark Streaming 스트리밍이랑 실시간으로 끊임없이 들어오는 데이터를 의미합니다. Spark Streaming이란 이렇게 실시간으로 들어오는 데이터를 처리하기 위한 모듈입니다. 이러한 스트리밍 데이터는 개발자가 지정한 단위의 시간동안 들어온 데이터를, 묶음으로 Batch 처리를 하게 됩니다. 아래의 그림을 보면 이해가 빠를 것입니다. 이렇게 들어오는 데이터 소스는, Apache Kafka, Kinesis와 같은 메시지 서버일 가능성이 높습니다. 하지만 Kafka나 Kinesis를 실습하기에는 너무 길어지기에, 파이썬 웹소켓을 통해 스트리밍 데이터를 보내보도록 하겠습니다. Spark Streaming Context 생성 Spark Streaming은 pyspark.streaming패키지에서 불러올..

강화학습 공부 - (3) Model Free Prediction

Model Free Prediction 환경이 MDP로 표현될 수는 있지만, MDP가 주어지지 않은 문제를 풀고싶다. 이러한 상황에서 사용할 수 있는 기법들을 설명한다. 동적 계획법 (Dynamic Programming) 동적계획법은 문제를 작은 단위로 나누고, 반복을 통해 문제를 푸는 것이다. 이 방식은 상태의 수가 증가할 수록 계산 복잡도가 엄청나게 늘어난다. 또한, 동적 프로그래밍은 상태가 모두 알려진 MDP에 대해서만 풀 수 있다. 만약 MDP가 주어지지 않고, 모든 상태에 대해 알 수 없다면, 동적계획법을 사용할 수 없다. 따라서, 정책이 주어졌고, MDP를 알지 못할 때, 가치함수를 찾는 과정을 알아보고자 한다. 몬테카를로 학습 (Monte-Carlo Learning) 몬테카를로 학습은 직관적..

스파크 튜토리얼 - (7) 스파크 SQL

Spark SQL 스파크는 여러 방면에서 SQL을 사용할 수 있도록 지원합니다. 이전 포스팅들에서는 csv나 json파일을 통해 DataFrame을 만드는 방법을 잠깐 설명했습니다. 이 DataFrame 기능이 곧 Spark SQL에 포함되는 기능입니다. Spark SQL과 DataFrame SQLContext는 spark session을 내장하고 있습니다. 아래와 같이 입력하게 되면 sqlCtx가 내장하고 있는 SparkSession을 가지고 올 수 있습니다. In [ ]: sqlCtx.sparkSession 이 내용이 중요한 것은, SparkSession이 파일 로딩 및 JDBC나 여러 Connector를 사용한 SQL서버와의 연결이 가능하기 떄문입니다. 따라서 JDBC나 ODBC를 지원하는 모든 S..

728x90
반응형