본문 바로가기

전체 글

(10)
Yahoo Finance에서 최신 주식 데이터 가져오는 스크립트 만들기 요즘 주식 투자 시뮬레이션 관련 개발을 하고 있는데, 주식 데이터를 야후 파이낸스에서 CSV 파일로 받아서 사용하고 있다. 하지만 1거래일이 지날 때마다 새로운 데이터가 계속 쌓이다보니, 매일 최신 데이터를 가져오는 것이 번거로웠었다. Time Period를 최대로 설정해두고.. 다운로드 버튼 누르고... 일일히 들어가는 것도 귀찮고, API 연동을 해보자니 돈을 내라고 하고... 개발중인 주식 시뮬레이터 특성상 하루 한 번만 데이터를 받으면 되기 때문에, Bash 스크립트를 사용해서 만들어보고자 했다. CSV파일 받는 쿼리는 다음과 같다. 1. 주식의 Ticker 2. 시작일(Unix 타임스탬프) 3. 종료일(Unix 타임스탬프) 테스트 해본 결과, 시작일을 0으로 지정하면 주식 데이터가 있는 최초 날..
1. 코틀린 기초 문법(feat. 자바와의 차이) 자바와는 다른 코틀린의 핵심 문법들을 정리해둔 글입니다. 변수 선언 class Example { // 변수 선언 // var는 변수임을 선언 // mutable = 변수명 // Int: 타입 // 1 = 값 var mutable: Int = 1 // 상수 선언 // val = 상수임을 선언 val immutable: String = "hello" // 타입을 명시하지 않으면 값으로부터 타입을 추론한다 val typeInference = 1.23 // Double로 추론 } 함수 선언 // 함수는 'fun' 키워드를 사용한다 fun funcName(value: Int) { // 파라미터 뒤에 어떤 타입인지 명시한다 println(value) } // 반환 타입이 명시된 함수 fun returnString(..
CNN을 활용한 MNIST 숫자인식 코드 야매 해석 Convolutional Neural Network(CNN) 기반의 MNIST 숫자 인식 모델에 대한 코드를 느낌 가는대로 해석해보았다 원본 코드는 다음과 같다 # -*- coding: utf-8 -*- """ Created on Wed Jul 29 14:27:42 2020 @author: Droomii """ import tensorflow.compat.v1 as tf from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets('MNIST_data/', one_hot=True) # Using Interactive session makes it the default sessions so we do ..
소셜 네트워킹 서비스 Twitter의 Redis 적용 사례 Twitter는 140자 정도의 짧은 글을 올릴 수 있는 소셜 네트워킹 서비스(SNS)이다. Twitter에서의 Timeline은 사용자가 Follow(구독)하는 사용자들의 최근 트윗을 확인할 수 있는 페이지이다. 2012년 당시 Twitter는 15만명이 넘는 실시간 활동 사용자와 초당 30만 건이 넘는 Timeline 요청이 발생했었다. 이러한 규모의 Timeline 요청을 데이터베이스에 직접 접근하는 방식으로 처리하면 Query가 복잡해짐에 따라 속도가 현저히 떨어지는 문제가 발생한다. Twitter는 이 문제를 해결하기 위해 메모리 기반 NoSQL 기술인 Redis를 사용하였다. Twitter의 데이터 센터에 존재하는 방대한 양의 Redis Cluster는 각 사용자의 Timeline에 노출될 T..
제네릭 인터페이스 예시 Comparable 인터페이스는 어떤 클래스 객체를 정렬할 때 구현하는 인퍼페이스이다. 코드는 다음과 같다. public interface Comparable { int compareTo(T o); } 여기서 T는 타입 파라미터를 의미하며, 공란으로 남겨두면 기본값인 Object 타입이 들어가게 된다. 공란으로 남겨둘 시 다음과 같이 특정 타입으로 캐스팅을 해주어야 한다. public class NoTypeParameter implements Comparable{ private int value; public NoTypeParameter(int pValue) { this.value = pValue; } @Override public int compareTo(Object arg0) { // 기본값인 Obj..
Enumeration Type에 대하여 학교에서 자바를 배웠지만, 수업에서 언급조차 되지 않아 이제서야 알게 된 기능이다. Enumeration Type은 요일(월,화,수,목,금,토,일), 가위 바위 보, 사칙연산(더하기, 빼기, 곱하기, 나누기) 등과 같이, 출력되는 경우의 수를 모두 알고 있을 경우 하나의 목록으로 묶어 사용할 때 쓰인다. 필자는 여태까지 요일을 다룰 때 다음과 같이 월요일~일요일까지를 0~6까지의 정수로 표현하였다. public class BeforeEnum { public static final String[] WEEKDAYS = {"월","화","수","목","금","토","일"}; public static void main(String[] args) { // 요일을 가리키는 변수 - 목요일 int weekDay = ..
포장 클래스와 등호(==) public static void main(String[] args) { int i1 = 1000; int i2 = 1000; Integer i3 = 1000; Integer i4 = 1000; System.out.println(i1==i2); // true System.out.println(i3==i4); // false } 포장 클래스는 원시 자료형을 하나의 객체로 사용하고자 할 때 쓰인다. 원시 자료형은 등호(==)를 사용해 비교할 때, 값 그 자체를 비교하지만, 포장 클래스 변수는 참조형이고, 참조형 변수에 등호를 사용할시 동일한 객체를 가리키는지를 비교하기 때문에, 두 포장 클래스 인스턴스 안의 값이 같더라도 별개의 객체이기 때문에 거짓을 반환한다. 그래서 일반적으로 포장 클래스 안의 값을 비교..
추상 클래스 예제 - 운전면허 운전을 하려면 운전면허가 필요하다. 운전면허는 여러 종류가 있지만 여기선 간단히 두 종류 1종 보통, 2종 보통으로 나누겠다. 1종 보통 면허는 2종 보통의 상위호환으로, 2종 보통 면허가 필요한 차량은 운전할 수 있다. 반대로 2종 보통은 1종 보통 면허를 필요로 하는 몇몇 차량을 운전할 수 없다. 1종 보통은 자동, 수동 승용차를 운전할 수 있지만, 2종 보통은 수동 승용차를 운전할 수 없는 점이 그 예이다. 위의 예시는 다음과 같이 만들 수 있다. // Car.java - 자동차 클래스 public class Car{} // ManualCar.java - 자동차 클래스를 부모로 하는 수동 승용차 클래스 public class ManualCar extends Car{} // AutoCar.java -..