스프링 MVC - 웹 애플리케이션의 이해
·
Java & Spring/Spring
□ 웹 서버(Web Server)HTTP 기반으로 동작정적 리소스 제공정적파일 HTML, CSS, JS, 이미지, 영상ex) NGINX, APACHE□ 웹 애플리케이션 서버(WAS - Web Application Server)HTTP 기반으로 동작웹 서버 기능 포함 + 정적 리소스 제공 가능프로그램 코드를 실행해서 애플리케이션 로직 수행동적 HTML, HTTP API(JSON)서블릿, JSP, 스프링 MVCex) Tomcat, Jetty, Undertow□ 서블릿(Servelet)서버 TCP/IP 연결 대기, 소켓 연결HTTP 요청 메세지를 파싱해서 읽기POST 방식, /save URL 인지Content-Type 확인HTTP 메세지 바디내용 파싱저장 프로세스 실행비즈니스 로직 실행HTTP 응답 메세지 생..
다익스트라(Dijkstra) - 최단경로 찾기
·
Java & Spring/알고리즘
□ 예제 : https://www.acmicpc.net/problem/1916□ 사용처 : 가중치가 있는 그래프에서 최단 경로를 찾는 알고리즘으로, 음수 가중치가 없는 경우에만 사용 □ 구현1. 변수선언 static int N; static int M; static List[] bus; static int[] cost; static boolean[] check;N : 종점 수M : 노선 수List[] bus : 버스 노선 인접리스트cost : 비용 배열2. Node 클래스 선언 static class Node { int destination; int cost; public Node(int e, int cost) { ..
Github Actions - Docker - EC2 무중단 배포하기
·
CI-CD
□ Dockerfile# 1. Gradle을 이용해 애플리케이션 빌드FROM gradle:8.12-jdk17 AS builderWORKDIR /appCOPY . .RUN gradle build --no-daemon# 2. 실행 환경FROM openjdk:17-slimWORKDIR /appENV DB_USERNAME=${DB_USERNAME}ENV DB_PASSWORD=${DB_PASSWORD}ENV jwt_secret_key=${jwt_secret_key}ENV origin_ip=${origin_ip}ENV aes_secret_key=${aes_secret_key}COPY --from=builder /app/build/libs/*.jar app.jarENTRYPOINT ["java", "-jar", "a..
Dockerfile Instuction
·
Docker
□ FROM컨테이너의 기반이 되는 이미지를 지정FROM openjdk:17-jdk-slim□ WORKDIR컨테이너 내부에서 작업할 디렉토리를 지정WORKDIR /app□ COPY로컬 파일을 컨테이너 내부로 복사할 때 사용COPY target/*.jar app.jar # Maven 빌드 결과 복사COPY build/libs/*.jar app.jar # Gradle 빌드 결과 복사□ ADDCOPY와 유사, ADD는 .tar.gz같은 압축파일을 자동으로 압축해제함ADD myfile.tar.gz /app/ # 압축 해제됨□ RUN컨테이너 이미지를 빌드할 때 명령어를 실행RUN mvn clean package -DskipTests # 테스트 제외하고 Maven 빌드 실행RUN ./gradlew clean b..
Java - 비동기처리(CompletableFuture)
·
Java & Spring/Java
□ CompletableFuture 정의비동기 작업을 처리하는 클래스로, 기존 Future의 단점을 해결하며, 논블로킹(Non-blocking) 방식으로 실행된다.□ 단점비즈니스 로직과 쓰레드관리 로직이 병합되어 관심사분리가 되지않고있다.□ 실습코드- 전역변수static final long startTime = System.currentTimeMillis(); - 간단한 연산 메서드private static double plus(double a, double b) { double plus = a + b; try { Thread.sleep(100); } catch (InterruptedException e) { Thread.cur..
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 해결방법서버 측에..