Java - 비동기 처리(ExecutorService / Future)
·
Java & Spring/Java
□ ExecutorService 정의여러 개의 스레드를 효율적으로 관리하고 재사용할 수 있도록 돕는 스레드 풀(Thread Pool) 관리 인터페이스submit() 또는 execute()를 통해 작업을 실행할 수 있다.작업을 실행하면 Future 객체를 반환하여 결과를 받을 수 있다. □ Future 정의ExecutorService.submit() 메서드를 호출하면 작업의 결과를 받을 수 있는 Future 객체가 반환된다.future.get()을 호출하면 결과를 가져올 수 있지만, 결과가 준비될 때까지 블로킹(대기) 된다.작업을 취소할 수도 있다 → future.cancel(true) □ 장점스레드 풀(Thread Pool)을 관리하면서 비동기 작업을 효율적으로 수행 □ 단점블로킹 방식이므로 결과를 기다..
Java - 비동기 처리(Thread & Runnable)
·
Java & Spring/Java
□ 단점새로운 스레드를 생성함으로 리소스 낭비가 발생스레드 생성 비용이 비쌈OS의 스레드 관리 부담이 커질 수 있음- Thread생성을 통한 비동기 처리 public static void main(String[] args) { final long startTime = System.currentTimeMillis(); for(int i = 0; i { try { log.info("{}번째 작업 {}, 소요시간: {}", finalI, plus(), System.currentTimeMillis() - startTime); } catch (Inter..
6. 비동기 처리(AtomicBoolean, Future<?>)
·
프로젝트/coin-trading
private final ConcurrentHashMap> userTrades; private final ExecutorService executorService; private final Map userRunningStatus; private final BackDataRepository backDataRepository; private final UpbitService upbitService;- 프로그램 실행 public void startTrading(AuthUser authUser) { String userId = authUser.getUserId(); // 이미 실행 중인 거래 프로그램이 있는지 확인 if (userTrades.con..
5. EC2 프로그램 동작중... 앞으로의 개선방향
·
프로젝트/coin-trading
□ 프로그램 동작중 □ 진행완료백데이터를 활용한 투자전략의 수익률 확인 틀잡기프론트앤드와 연동로그인을 통해 upbitKey를 받고 암호화로그 관리하기□ 진행중백데이터 자료 다듬기□ 진행예정CI/CD 파이프라인 구축while문이 싱글스레드로 실행중이라 로그인을 하더라도 프로그램 이용 불가→ 멀티스레드 or 비동기 처리 적용해보기while문은 자원낭비가 심함 Redis적용을 고려→ 비교 항목while 문 사용Redis 활용CPU 효율❌ 비효율적 (계속 반복)✅ 이벤트 기반, 효율적API 요청 부담❌ 불필요한 요청 많음✅ 최소화 가능 (캐싱)실시간 반응❌ sleep() 사용✅ 즉시 반응 가능다중 서버 지원❌ 중복 요청 발생✅ 하나의 데이터 공유 가능
CORS(Cross-Origin Resource Sharing)
·
이론공부
□ CORS(Cross-Origin Resource Sharing)웹 브라우저에서 실행되는 보안 정책인 동일 출처 정책을 우회 할 수 있도록 도와주는 메커니즘- 동일 출처 정책(Same-Origin Policy)브라우저는 보안상 서버의 출처(origin)가 다르면 요청을 차단.출처(origin) = 프로토콜 + 도메인 + 포트예를 들어, 아래 두 개의 출처는 다르다.https://example.com (✅ 접근 가능)http://example.com (❌ 차단됨 - 프로토콜 다름)https://api.example.com (❌ 차단됨 - 서브도메인 다름)동일 출처 정책이 없다면, 악의적인 사이트에서 다른 사이트의 API를 마음대로 호출할 수 있어 보안 문제가 발생할 수 있다.- CORS 해결방법서버 측에..
4. 투자전략 변경 및 EC2 배포
·
프로젝트/coin-trading
□ 투자전략의 문제점chatGPT를 활용하여 투자전략을 수립하였으나, 과금등의 이유로 3.5버전으로 사용하니 투자판단이 모호하다고 생각됨- api 호출 마다 10초간 5~6번을 호출하면 "buy", "sell"이 교차하면서 나오게됨(매매 수수료 발생) □ 개선 투자 전략(변동성 돌파 전략)목표가 = 금일 시가 + (전일 고가 - 전일 저가) * 0.5매초 시세조회 api를 호출하여 목표가 도달 시 전액 매수매일 장 종료 시 전량 매도코인시장은 장 종료가 없으므로 오전 9시를 기준으로 실행 public void startProgram() throws IOException, InterruptedException, NoSuchAlgorithmException { double todayTarget ..
3. chatGPT 연동하기(투자 판단)
·
프로젝트/coin-trading
□ 업비트 API에서 차트 추출 API(json타입으로 추출하기)private static String candleExtract() throws IOException { // 업비트 차트 전달 15일치 일봉데이터 가져오기 OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://api.upbit.com/v1/candles/days?market=KRW-ETH&count=15") .get() .addHeader("accept", "application/json") ..
[백준][Gold III] Java - 1238번 : 파티
·
카테고리 없음
https://www.acmicpc.net/problem/1238 □ 문제 : 최단거리 중 가장 큰 값 구하기각 마을(정점)으로 가는 단방향 노드가 주어짐(노드, 거리값)문제에서 요구하는 마을을 갔다 오는 최단거리들 중 가장 큰 값을 반환하는게 문제□ 사용 알고리즘다익스트라(Dijkstra)□ 전체 코드import org.w3c.dom.Node;import java.io.*;import java.util.*;public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter bw = new BufferedWriter(new OutputStrea..
2. 업비트 매매 API 적용
·
프로젝트/coin-trading
https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8%ED%95%98%EA%B8%B0 업비트 개발자 센터 docs.upbit.com □ 매매 API 적용 public OrderResponse orderCoin() throws UnsupportedEncodingException, NoSuchAlgorithmException { // 계좌 및 gpt와 연동하여 결정 String side = ""; String price = ""; String volume = ""; String ord_type = side.equals("bid") ? "price" : "market"; HashMap params..
객체지향과 SOLID원칙
·
이론공부
□ 정의객체지향(Object-Oriented Programming, OOP)은 프로그램을 객체(object)라는 단위로 구성하는 프로그래밍 패러다임객체는 데이터와 데이터를 처리하는 메서드를 함께 묶은 단위로, 현실 세계의 사물과 개념을 모델링하여 코드로 표현하는 방식 □ 주요 개념클래스 (Class): 객체의 설계도나 템플릿으로, 객체의 속성(필드)과 동작(메서드)을 정의객체 (Object): 클래스를 기반으로 생성된 실체로, 속성과 동작을 갖는 구체적인 인스턴스캡슐화 (Encapsulation): 객체의 데이터(속성)를 외부에서 직접 접근하지 못하게 하고, 메서드를 통해서만 접근하게 제한하는 방식, 이는 데이터를 보호하고, 객체의 내부 구현을 숨겨서 코드의 복잡성을 줄인다.상속 (Inheritance)..