일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- framework
- 그리디알고리즘
- 코딩
- 코드
- 코딩테스트
- Elasticsearch
- 애자일프로그래밍
- 데이터베이스
- Java
- database
- Spring
- 개발자
- 엘라스틱서치
- 애자일
- 백준
- 개발
- 클린코드
- 그리디
- db
- 읽기쉬운코드
- cleancode
- JPA
- 프레임워크
- 스프링
- ES
- Baekjoon
- API
- 알고리즘
- 애자일기법
- 자바
- Today
- Total
목록전체 글 (139)
시뻘건 개발 도전기
※ 본 '코인 자동 매매 프로그램 만들기' 시리즈 포스팅은 개인적인 학습용으로 개발하게 되는 프로그램입니다. 투자의 책임은 투자자 본인에게 있음을 알려드립니다. 다른건 제외하고 핵심인 매수/매도 중에서 포인트만 포스팅을 해볼까 한다. 각 투자자들은 자신만의 매수점과 매도점을 계산할때 사용하는 지표들이 다를 것이다. 나는 참고로 RSI를 좋아해서 RSI를 계산하여 매수점과 매도점을 예측한다. if(rsi < BUY_RSI_STANDARD) { // 호가조회 Map orderBook = nonAuthAPI.getCoinOrderBook(coinName).get(0); List orderBookUnits = JsonUtil.jsonString2List(String.valueOf(orderBook.get(API..
※ 본 '코인 자동 매매 프로그램 만들기' 시리즈 포스팅은 개인적인 학습용으로 개발하게 되는 프로그램입니다. 투자의 책임은 투자자 본인에게 있음을 알려드립니다. 이번 포스팅에서는 scheduling에 대해 설명한다. 내가 배치로 실행할 scheduler는 아래와 같다. Alarm class : 내가 투자를 하면서 가장 내 자신이 한심하다고 느낀 것이 하루종일 앱만 보고 있는 나의 모습이었다. 그래서 앱을 보지 않게 하기 위해 일정한 시간 간격으로 나의 포트폴리오 상태를 slack을 통해 알람을 발송한다. Buy class : 말 그래도 매수만을 담당한다. 그러나 내가 사지 않은 새로운 코인만을 매수한다. (추가매수 x) DailyVisual class : 나의 포트폴리오에 대해서 매일 9시에 시각화한다...
※ 본 '코인 자동 매매 프로그램 만들기' 시리즈 포스팅은 개인적인 학습용으로 개발하게 되는 프로그램입니다. 투자의 책임은 투자자 본인에게 있음을 알려드립니다. 이번 포스팅은 프로그램에 사용될 resource에 대해 이야기한다. encrypted.a.key={업비트에서_발급받은_암호화된_access_key} encrypted.s.key={업비트에서_발급받은_암호화된_secret_key} 나는 업비트에서 API를 사용하기 위해 발급되는 access key와 secret key를 한 번 암호화 해서 사용한다. 실제 배치에서는 해당 키를 사용해서 로그인을 시도할 때, 복호화가 진행되게 해서 보안에 신경썼다. 암호화의 종류는 선호하는 방식을 진행하면 된다. key={암호화_key_32byte} iv={암호화_i..
※ 본 '코인 자동 매매 프로그램 만들기' 시리즈 포스팅은 개인적인 학습용으로 개발하게 되는 프로그램입니다. 투자의 책임은 투자자 본인에게 있음을 알려드립니다. 혼자 무언가를 만들어 볼까 하다가 작년에 파이썬으로 코인 자동 매매 프로그램을 만들게 떠올랐다. 그걸 java로 포팅한다면!? ㅋㅋㅋㅋㅋㅋ 사실 파이썬이 훨신 참고할 데이터가 많았고 많이 사용되어지고 있어서 파이썬을 사용했지만 java로 포팅한 이유는, spring을 공부하기 위함이었다.(전 직장에서 spring을 쓰지 않았기 때문 ㅠㅠ) 코인 자동 매매 프로그램을 만들기 앞서서 미리 준비해야할 사항(플랫폼 선정, 가입, API token 수령 등)은 패스한다. 왜냐하면 이 포스팅 시리즈의 메인은 java-spring이기 때문이다. 훨신 더 좋은..
이직하게 된 배경은? 최근들어 개발자의 몸 값이 치솟는다는 이야기를 많이 듣는다. 주위에 개발자가 아닌 지인들에게 "나도 개발자 할껄...", "개발자 얼마나 많이 버냐?" 등 기분 나쁜(?) 이야기를 많이 듣는다. 내가 생각하기에는 "요즘 개발자가 부족하다."라는 사회에 떠도는 이야기는 틀린 말인듯 하다. 명확하게 "요즘 찐개발자가 부족하다."가 맞는 표현인 것 같다. 요즘 사회에 [보통 6개월 강의(혹은 국비교육 등)를 듣고 신입 개발자]로 지원하여 초봉 7천을 부른다는 이야기를 들었다. (정말 한 숨이 절로 나왔다.) 나는 4년제 대학에서 보통 학생과는 다르게 연구실에 들어가 학사 논문도 써보기도 하고 졸업작품과 졸업논문에 대해서 특허출원의 기회도 얻었다. 더불어 졸업하자마자 취업해서 사회로 다이빙..
JPA를 사용하면서 가장 중요한 일이 java의 entity와 database의 table을 매핑하는 것이라고 해도 과언이 아니다. 따라서 우리는 매핑 어노테이션을 충분히 알고 써야할 책임이 있다. JPA는 4가지의 매핑 어노테이션을 지원한다. - 객체와 테이블 매핑 : @Entity, @Table - 기본 키 매핑 : @Id - 필드와 컬럼 매핑 : @Column - 연관관계 매핑 : @ManyToOne, @JoinColumn @Entity 테이블과 엔티티를 매핑할 때에는 필수로 사용해야한다. @Entity 어노테이션에서 지원하는 속성은 다음과 같이 정리할 수 있다. 속성 기능 default name 엔티티 명 지정. 다른 패키지에 이름이 같은 엔티티 클래스가 있을 때 사용하여 충돌이 일어나지 않도록 ..
플러시 flush는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 역할을 한다. 이 기능을 사용하면 다음과 같은 일이 일어난다. - Entity와 영속성 #2에서 알아봤던 것 처럼 변경 감지가 작동하여 스냅샷과 비교하여 수정된 엔티티를 찾는다. 수정된 엔티티가 있을 때 수정 쿼리를 만들어 SQL 저장소에 등록한다. - SQL 저장소의 쿼리를 데이터베이스에 전송한다. 영속성 컨텍스트를 플러시하는 방법은 3가지가 있다. 1. em.flush()를 직접 호출한다. - 테스트나 다른 프레임워크와 JPA를 함께 사용할 때 외에는 거의 사용하지 않는다. 2. 트랜잭션을 커밋하여 플러시를 자동 호출한다. - 변경 내용을 SQL로 전달하지 않고 커밋하면 데이터베이스에 반영이 되지 않는다. - 꼭 커밋 전에 영속..
그렇다면 영속성 컨텍스트가 왜 필요한지 알아보자. 엔티티 조회 영속성 컨텍스트는 내부에 1차 캐시라고 하는 녀석을 가지고 있다. 영속 상태의 모든 엔티티는 이 1차 캐시에 저장된다. 이해하기 쉽게 코드와 그림을 보자. Member member = new Member(); member.setId = "dotori"; em.persist(member); Member dotori = em.find(Member.Class, "dotori"); // 조회 1차 캐시 내에 @Id로 맵핑된 필드 값을 식별자를 가지고 엔티티가 저장된다. (아직 데이터베이스에 저장된 상태는 아니다.) 조회를 하게 되면 엔티티 매니저는 1차 캐시에서 해당하는 엔티티를 찾는다. 만약 1차 캐시에 없다면 데이터베이스에서 조회한다. (JPA란..