본문 바로가기

분류 전체보기

[AWS]Beanstalk이란 나는 1년정도 BeanStalk을 사용하고 있다. 처음에는 BeanStalk가 어떤 역할을 하는 서비스인지 궁금해서 찾아봤었는데, 이해가 잘 되지 않았었다. 그래서 내가 경험한 빈스톡에 대해서 정리해보고자 한다. BeanStalk이란? 빈스톡은 Docker 컨테이너를 기반으로 애플리케이션을 쉽게 배포하고, 운영하고, 관리하는걸 도와주는 AWS 서비스다. 별도의 서비스 사용료는 없고, 사용한 AWS 리소스 만큼 비용이 과금된다고 한다. 특징 초기 세팅기본적으로 필요한 환경을 몇번의 클릭으로 서버 셋팅을 할 수 있다.- 예를 들면 원하는 루비 버전과 패신저를 설정하면, 인스턴스에 직접 들어가서 설치하지 않아도 빈스톡이 알아서 환경을 구성해준다. - 그런데 최신 버전의 언어를 지원하지 않는 경우도 있다. 이런..
[Docker]docker에서 bundle 데이터가 캐싱되는 상황 개발 / 테스트 환경을 위한 서버에 도커로 레일즈를 올릴 때, 수정 사항이 생길 때마다 배포를 하게 된다. 이 때, bundle install이 매번 실행되면 gem들이 설치될 때까지 매번 기다려야 한다. 그래서 레일즈 개발하는 분들이 아래의 페이지처럼 bundle install을 통해 생성된 gem들을 이미지로 묶어버리는 방법을 찾아 정리해두었다. http://ilikestuffblog.com/2014/01/06/how-to-skip-bundle-install-when-deploying-a-rails-app-to-docker/ 이렇게 Dockerfile을 수정해줘야 한다 저기.. Gemfile을 ADD해주고... bundle install을 해주는 부분을 추가해줘야한다. 한번 Dockerfile을 돌렸..
[Spark]User Define Function spark에서 sql을 날릴 때, 사용자가 커스텀하게 만든 함수를 사용할 수 있게 하는 방법이 있다. SPARK의 UDFs ( User-Defined Functions ) 개념을 사용하면 된다. UDF는 우리가 피요한 새로운 컬럼 기반의 함수를 만들어준다. User Define Functions는 데이터셋을 가공해주는 Spark SQL DSL의 함수들을 확장시켜준다. 아래처럼 쓰면 된다고 한다. udf 함수에 내가 정의한 함수의 파라미터를 넘겨주면 된다. val dataset = Seq((0, "hello"), (1, "world")).toDF("id", "text") // Define a regular Scala function val upper: String => String = _.toUpperCa..
[Spark]DataFrame을 S3에 CSV으로 저장하기 S3에 Dataframe을 CSV으로 저장하는 방법 val peopleDfFile = spark.read.json("people.json") peopleDfFile.createOrReplaceTempView("people") val teenagersDf = spark.sql("SELECT name, age, address.city FROM people WHERE age >= 13 AND age
카드형 Swipe 라이브러리 리서치 피파 게임 같은 이미지가 웹페이지에서 슥슥 움직이는 그런 라이브러리를 찾고 있다. 1. Swiper 데모 사이트 : http://idangero.us/swiper/demos/#.WKvi-BKLT_Q깃허브 : https://github.com/thebird/Swipe 뭔가.. 삐까뻔쩍해보이지 않는다. 2. Hammer JS 사이트 : http://hammerjs.github.io/ 유용해보이지만, 모바일에 최적화된 인터랙티브 라이브러리여서 PC에서는 부적합하다 3. js-swipe-cards 데모 사이트 : http://apeatling.com/demos/js-swipe-cards/깃허브 : https://github.com/apeatling/javascript-swipe-cards 음.. 역시 모바일에서..
[Spark] 여러개의 로그 파일 한번에 읽어오기 제플린 노트북에서 데이터 소스를 가져올 때, DataFrameReader Class를 주로 사용한다. 아래의 코드 처럼, DataFrameReader의 함수들을 사용해서 구조화되어있는 파일을 읽어들이면 DataFrame을 리턴된다. spark.read.json("s3n://jimin-bucket/a/*") spark.read.parquet("s3n://jimin-bucket/a/*") 그런데 파일을 하나하나 가져오기 보다는 여러 파일리스트를 한번에 가져오고 싶을 때가 있다.이때는 MutableList에 파일 목록들을 담아서, 이를 매개변수로 보내주면 된다. -----------------------------------------------------------------------------------..
[Spark] S3에 파일이 존재하는지 확인하기 Zeppelin 노트북에서 데이터소스를 불러올 때, AWS S3에 올려둔 파일들을 가져다가 사용한다.그런데 만약 없는 파일을 읽어들이려고 하는 경우, 에러가 발생한다.만약 일자별로 쌓인 로그 파일을 한번에 가져와서 읽을 필요성이 있다고 생각해보자. val fileList = MutableList("s3n://jimin-bucket/folder1/20170202/*", "s3n://jimin-bucket/folder1/20170203/*", "s3n://jimin-bucket/folder1/20160204/*") spark.read.json(fileList:_*) 만약 20170203 폴더에 file1이 없는 경우, 파일을 읽어들일 수 없어 에러가 난다.이런 경우, fileList 변수에는 실제로 존재하는..
엔지니어 관점에서 AdExchange 이해하기 (2) - OpenRTB 이전 포스팅에 이어서, AdExchange에서 사용하는 인터페이스인 OpenRTB에 대한 이야기를 할까 한다. OpenRtb의 필요성 이전에 이야기한 것처럼 AdNetwork간에서 광고를 서로 사고, 팔아야하는 필요성이 생겨서, AdExchange라는 개념이 생겼다.그러면서 서로 광고를 교환하기 위한 표준 인터페이스의 필요성이 생겨났다. 애드 익스체인지가 발전하면서 여러 애드네트워크들 간에, 혹은 여러 익스체인지들 간에 광고 교환 작업들이 발생하게 되었는데,이 때마다 서로 어떤 파라미터를 던져주면, 어떤 Result 값을 리턴해줄지 조정하는 작업들이 필요하게 되었다. 그때마다 서로 인터페이스를 맞추기는 번거로웠다. 그리고 한 업체와 포맷을 맞추고, 또 다른 업체와 연동을 하려면 또다시 위의 인터페이스 조..