본문 바로가기

전체 글

(38)
[VAST #1] Video Ad Serving Template 본 포스트는 VAST 3.0 공식문서를 읽고 정리한 내용입니다. 자세한 내용은 IAB 공식문서에서 확인하시기 바랍니다. 1. VAST란? VAST는 Video Ad Serving Template의 약어로, 광고 서버와 동영상 플레이어 사이의 통신 요구사항에 대한 표준을 설정하는 규격입니다. 2. VAST의 등장배경 온라인 동영상 컨텐츠 퍼블리싱이 보편화되면서, 동영상 퍼블리셔들은 자신의 동영상 내 광고를 삽입하여 수익화를 하려고 했습니다. VAST 이전에는 통일된 동영상 광고 프로토콜이 없었기 때문에, 광고 서버의 확장 가능한 광고 배포가 불가능 했습니다. 서로 다른 비디오 플레이어를 사용하여 여러 퍼블리셔에 광고를 제공하기 위해, 각 플랫폼에 대응하는 조금씩 다른 Ad response를 개발해야 했습니..
Json Web Token(JWT) Json Web Token(JWT) Json Web Token 이란? Json Web Token은 정보를 안전하게 전달하기 위한 웹표준(RFC 7519)입니다.JWT는 Json객체를 사용하여 자가 수용적(Self-contained)인 방법으로 정보를 전달합니다. JWT는 디지털 서명이 되어있어 데이터의 신뢰성을 보장합니다. JWT는 HMAC 알고리즘을 사용하거나, RSA 혹은 ECDSA 를 통한 공개/비공개 키 쌍을 사용해 서명 할 수 있습니다. JWT의 사용 Authorization: JWT를 사용하는 가장 일반적인 시나리오입니다. 사용자가 로그인 한 후의 각 요청은 JWT가 포함되어 사용자는 JWT를 통해 허용되는 경로, 서비스, 리소스에 액세스 할 수 있습니다. Information Exchange..
[백준 2602] 돌다리 건너기 - Java 문제링크: https://www.acmicpc.net/problem/2602 2602번: 돌다리 건너기 첫째 줄에는 마법의 두루마리에 적힌 문자열(R, I, N, G, S 로만 구성된)이 주어진다. 이 문자열의 길이는 최소 1, 최대 20 이다. 그 다음 줄에는 각각 와 를 나타내는 � www.acmicpc.net 문제설명 문제접근 이 문제는 완전탐색으로 접근할 수 있지만, 성능이 매우 나빠져 시간초과가 발생합니다. 동적계획법을 사용하면 O(NM) 시간만에 문제를 해결할 수 있습니다. (N = 다리의 길이, M = 두루마리의 길이) DP[다리][현재 다리 위치][두루마리 위치] = 현재 다리 위치에서 해당 두루마리 위치까지 이동 가능한 모든 경우의 수를 담습니다. 점화식은 다음과 같습니다. (악마의 돌다..
이진탐색트리(Binary Search Tree) 이진탐색트리(Binary Search Tree) 얼마 전, 스타트업 면접에서 이진탐색트리인지 확인하는 함수를 작성하라는 질문을 받았었습니다. 입력으로 들어오는 Node 클래스도 제가 정의해서 구현했어야 했는데, 부모를 가리키는 parent 멤버변수를 Node 클래스에 넣지 않아 한참을 해맸었습니다. 면접을 마치고 아쉬움이 많이 남아 BST에 대해 완벽하게 이해하고자 이 글을 작성했습니다. 이진탐색트리(Binary Search Tree)란? 이진탐색트리는 왼쪽 서브트리는 자기자신보다 모두 작고, 오른쪽 서브트리는 자기자신보다 모두 큰 특성을 유지하는 트리입니다. 이진탐색트리(Binary Search Tree)는 이진탐색(Binary Search)과 연결리스트(LinkedList)를 결합한 자료구조입니다. ..
트랜잭션(Transaction)과 ACID 1. 트랜잭션이란? 트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미합니다. 트랜잭션의 예 트랜잭션을 설명할 때, 가장 많이 등장하는 예시는 은행계좌송금 작업입니다. 사용자 A가 사용자 B에게 10,000원을 송금할 경우를 생각해 봅시다. 현실에서는 물리적인 지폐가 이동하면 끝나지만, 데이터베이스의 세계에서는 각각의 상태를 변경해줘야 합니다. 10,000이라는 데이터가 실제로 이동하는게 아니라, 사용자 A의 데이터와 사용자 B의 데이터 상태가 각각 바뀌는 것이죠. 따라서 두 번의 update 쿼리를 실행해야 합니다. 다음은 예시에 대한 트랜잭션의 작업 절차입니다. 트랜잭션 수행 과정 디..
Atomic Type Atomic Type이란? CAS 알고리즘을 사용해 동시성을 보장하는 Wrapping 자료형입니다. Atomic 타입은 어떻게 동시성을 보장할까? Atomic타입이 동시성을 어떻게 보장하는지 이해하려면 CAS 알고리즘에 대해 이해해야 합니다. CAS 알고리즘은 Compare And Swap 알고리즘으로 알고리즘 흐름도는 아래 그림과 같습니다. 멀티스레드 환경에서는 CPU가 메모리에서 변수값을 참조하는게 아니라 CPU의 캐시 영역에서 값을 참조하게 됩니다. 이 때, 메모리에 저장된 값과 CPU캐시에 저장된 값이 서로 다를 수 있습니다(가시성 문제). CAS 알고리즘은 현재 스레드에 저장된 값과 메모리에 저장된 값을 비교한 후 일치하면 새로운 값으로 교체하고, 일치하지 않는다면 실패하고 재시도하는 방식으로 ..
블로킹 큐(Blocking Queue) Blocking Queue 멀티 쓰레드 환경에서 사용되는 자료구조로, 큐의 상태에 따라 자원의 생성과 소비를 제어할 수 있는 큐입니다. 멀티쓰레드 환경에서 쓰레드를 대기시킬 때 주로 사용됩니다(Producer-Consumer 패턴). Blocking Queue는 자원의 생성과 소비를 담당하는 각각의 메서드로 Put과 Take를 사용합니다. Blocking Queue는 자원의 생성과 소비 과정에서 큐가 가득 차 있거나, 비어 있을 경우의 예외를 방지하기 위해 각각의 상황에서 큐를 블로킹합니다. 다음은 Blocking Queue의 구현체 중 하나인 ArrayBlockingQueue의 put과 take 메서드입니다. public void put(E e) throws InterruptedException { c..
[Item 7] 다 쓴 객체 참조를 해제하라 [Item 7] 다 쓴 객체 참조를 해제하라 핵심요약 자바에서는 가비지컬렉터가 메모리 누수를 관리해준다. 그러나 몇몇 특수한 경우에는 사용자가 직접 메모리 누수를 관리해야 한다. 자바에서의 메모리 누수 원인들 스스로 메모리를 직접 관리하는 클래스 캐시 참조 리스너와 콜백 1. 클래스가 직접 메모리를 관리 하는 경우 // 코드 1 - 메모리 누수를 고려 안하고 구현한 스택 class Stack { public Object[] elements; protected int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 4; public Stack(){ elements = new Object[DEFAULT_INITIAL_CAPACITY]; } pub..