Dec 6, 2018 - google_openRTB

문서 정리겸 정리합니다.

github에 올라온 google openrtb 를 정리해봅니다. google openRTB 연동에 관한 여러 고민이 있었습니다.

The OpenRTB specification

This library implements the protocol / data model from the latest OpenRTB Specification, so reading that should be your first step; it’s also a good introduction to the concepts of real-time bidding.

OpenRTB is only specified in terms of JSON messages, so an implementation has to provide bindings for specific programming languages so you can create and manipulate its message objects in a convenient way, i.e. not needing to deal with the raw JSON representation. We do that by first translating the specification to a Protocol Buffer descriptor, which can be used to generate model classes. This library will only build a Java model out-of-the-box, but you can easily use the same Protobuf descriptor to generate the model code for many other languages. (Other features though, are only available for Java or other JVM-based languages.)

해당 google openrtb는 구글 프로토콜 버퍼 (Protocol Buffer)를 사용하여, data model 을 구성하였습니다.

구글 프로토콜 버퍼란?

<프토토콜 버퍼>는 랭귀지 중립적, 플랫폼 중립적인 데이터 시리얼라이즈 포맷입니다.  

서로 다른 종류의 머신, 서로 다른 종류의 플랫폼에서 동일한 의미를 갖도록 데이터의 포맷을 정의한다는 점에서 <프로토콜 버퍼>라는 이름은 프로토콜(통신)을 위한 버퍼(데이터)을 뜻하게 되며,  
<프로토콜 버퍼>는 이제 구글의 데이터 공용어 (gRPC의 디폴트 데이터 포맷) 입니다.  

What is gRPC?
- 구글이 정의한 RPC
- 구글의 최신 API는 이제 REST API 뿐 아니라 gRPC API도 함께 제공함
- gRPC는 <프로토콜 버퍼>를 기본 데이터 시리얼라이즈 포맷으로 사용 (JSON 등 다른 포맷도 사용 가능)
- 다양한 랭귀지 지원: C++, Java, Python, Go, Ruby, C#, Node.js, PHP, ...
  (JSON을 <프로토콜 버퍼>로 <프로토콜 버퍼>를 JSON으로 변환 가능)
- XML보다 작고, 빠르고, 간단

구글 프로토콜 버퍼를 적용하기 위해서는, IntelliJ protobuf plugin을 설치해야합니다. IntelliJ 의 Plugins 에서는 검색이 되지 않습니다.

https://plugins.jetbrains.com/plugin/8277-protobuf-support

경로에 가서 프로그인을 설치해야합니다. 또한, maven 을 정상적으로 build 하기 위해서는 protoc 를 설치해야하며,

https://developers.google.com/protocol-buffers/

를 통해 설치하였습니다.

releases page에서, protoc-3.6.1-win32.zip 파일을 받아, 윈도우기반에서 환경설정을 하였습니다.

환경설정을 하지 않을 경우에는 경우는 intellij 에, Settings > Other Settings 에서 Protobuf Support 의 경로를 지정해주시면됩니다. 수정할 내용이 있으면 변경후, jar 파일을 만들어서 별도의 import 를 받아 처리해도 되고,

open-core lib에서 dependency 를 추가해도 됩니다. maven 을 사용하기 때문에,

<!-- https://mvnrepository.com/artifact/com.google.openrtb/openrtb-core -->
<dependency>
    <groupId>com.google.openrtb</groupId>
    <artifactId>openrtb-core</artifactId>
    <version>1.5.4</version>
</dependency>

해당 버전을 적용해도 상관없습니다.


참조


Nov 27, 2018 - openRTB

RTB - Real Time Bidding(실시간 경매 방식)

제가 openRTB 프로젝트를 시작하게 된 것은, 2년전 이 시기에 2016년 11월 경이었는데요.
다음카카오쪽에서 카카오스토리와 폴털 지면 등에 RTB를 추가하면서 해당 RTB를 대응하기 위한 구축을 위해서였습니다.

RTB 라는 것이 실시간 경매 방식을 의미하고요.
경쟁자들 사이에서 제일 비싼 값을 치르겠다고 말한 광고주가 광고 지면을 가져가는 형태가 경매 방식과 동일하여 붙여진 이름입니다.
경매 방식 중 이차가격 경매(Second-Price Auction) 등의 시스템이 openRTB에 그대로 사용됩니다.

경매를 하려면 경매를 벌일 사람들과 장소가 있어야 합니다.
[구매자]와 [판매자], [중개소] 가 필요합니다.
1:1로 물건을 사고파는 환경이라면 이 시스템은 있을 필요가 없습니다.

경매 중개소에서 구매자는 자신에게 적합한 물건을 찾고, 이를 판매하려는 판매자에게 가격을 부릅니다.
RTB 광고 시장에도 구매자와 판매자, 중개소가 등장합니다.
DSP(구매자)와 SSP(판매자), 애드 익스체인지(중개소)가 그 역활을 합니다.

제가 개발을 하면서 느낀 점은,
Global 한 OpenRTB 프로젝트의 목표와, 국내 OpenRTB의 상황의 온도차가 조금 존재했습니다.

Global 한 OpenRTB의 경우 기본적으로 바이어와 광고주, 퍼블리셔 간의 커뮤니케이션을 회사 표준안으로 통합해서 제공하여 Real-Time-Bidding 시장을 더욱더 성장시키는 것을 주목적으로 두는 것으로 이해했습니다.

한마디로, OpenRTB의 궁극의 목표는 바이어와 셀러 간의 커뮤니케이션에서 사용될 공통어를 만드는 것이었습니다.
구글의 광고 디자인이 simple 하며, 실제 openRTB의 연동 SSP(& ADExchange) 들의 디자인이 깔끔한 것이 그러한 점을 뒷받침해줍니다.

국내의 경우는 DSP 의 광고의 얼마나 사용자에게 얼만큼의 유용한 광고가 송출되는지도 중요하지만, 그걸 표현하는 디자인을 조금더 감각적으로 표현하려고 합니다.
그러하기 때문에 국내의 대부분의 광고솔류션을 가진 업체들은 RTB가 필수가 아닌,
광고 플랫폼 사이에서 광고주의 편의를 돋는 하나의 기능일 뿐 플랫폼이 존재하는 목적이 아니기 때문에,
상황에 맞는 광고플랫폼에서 그 플랫폼 성격에 맞는 RTB 시스템을 구축하여,
추후에도 해당 광고솔류션의 경쟁력을 그대로 가져가는 형태로 진행되는 형태가 국내의 OpenRTB의 최종 목적지가 되는 것은 아닌가 싶으며, 그런 부분에서 국내와 해외의 openRTB 연동에서 해당 내용을 알맞게 조휼한다는 것은 꽤 어려운 일로 보입니다.

RTB - 실시간으로 각각의 노출을 소비자가 기다리는 시간 동안 경매(입찰)
Exchange - 노출 당 입찰자들 사이에서 경매를 하는 서비스
Bidder - 노출을 얻기 위해 실시간 경매에서 경쟁하는 기업(엔티티)
Seat - 노출을 얻기 원하는 기업이 입찰을 대신할 입찰자를 고용하는 것.
Publisher - 하나 이상의 사이트를 운영하는 기업(엔티티)
Site - 특별한 경우가 아니면 광고는 웹과 응용프로그램을 포함한 콘텐츠를 지원
Deal ID - 특정 조건에 따라 광고 노출을 구매하는 Seat와 Publisher 사이에 기정 계약을 나타내는 ID

참조


Nov 22, 2018 - Jetblain

kotlin/javascript

자바가 개인적으로 좋은 언어라고 생각한다.

Interoperable javascript »»»>

ApplicationContext Web // Node

Kotlink/Scripting

코틀린은 간결하고 작은 언어… 다른 스크립팅에서도 쓸수있게~~~~~

shellscript, 다이나밍 동적인

Usages >

Build Scripts
Test Scripts (Spek)
Command line Utillitles
Routing Script(Ktor)
Type-safe configuration files (Team City)
Consoles of Data Science

2017 Kotlin /Native (beta)

  • c, obj-c, swift 상호 운영이 가능하도록 개발한다.

ApplicationContext

Memory management ARC with Cycle Collector

coroutines

Entry point 여러개 허용하는 subroutine 언제든 일시 정지, 실행가능.

coroutines Thread?

  • cpu 에 idle 상태를 체크하지 않으므로 비용이 발생하지 않는다. 전환하는대에 zero에 가깝다.

Light-weight hread.

suspend

키워드를 추가하여 함수 분할 suspend 정의한 함수는 사용하기 전까지 동작하지 않는다. suspend 함수는 코루틴스코프 내에서만 사용가능하다.

waitOne waitTwo

Timer 구현

마이크로 delay 120 sec(max) MySQL (Aurora) : Replcation