스프링 MVC - 멀티 쓰레드
·
Java & Spring/Spring
□ 쓰레드애플리케이션 코드를 하나하나 순차적으로 실행하는 것은 쓰레드자바 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행쓰레드가 없다면 자바 애플리케이션 실행이 불가능쓰레는 한번에 하나의 코드 라인만 수행동시 처리가 필요하면 쓰레드를 추가로 생성- 요청 마다 쓰레드 생성장점동시 요청을 처리리소스가 허용할 때 까지 처리가능하나의 쓰레드가 지연 되어도, 나머지 쓰레드는 정상 동작단점쓰레드 생성 비용은 매우 비쌈요청 마다 쓰레드를 생성하면 응답 속도가 늦어짐쓰레드는 컨텍스트 스위칭 비용이 발생쓰레드 생성에 재한이 없기 떄문에 요청이 너무 많이 오게 되면 임계점을 넘어 서버가 죽을 수 있음- 쓰레드 풀특징필요한 쓰레드를 쓰레드 풀에 보관하고 관리쓰레드 풀에 생성 가능한 쓰레드의 최대치를 관리, ..
스프링 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) { ..
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..
HTTP 요청과 응답에 사용되는 클래스들
·
Java & Spring/Java
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/HttpEntity.html HttpEntity (Spring Framework 6.2.2 API)hasBody public boolean hasBody() Indicates whether this entity has a body.docs.spring.io □ HttpHeaders- HTTP 헤더를 나타내는 클래스, 요청과 응답의 헤더를 설정하고 가져올 때 사용- 주로 인증 토큰, 콘텐츠 유형, 인코딩 방식 등 헤더 값을 설정할 때 사용□ HttpEntity- HTTP 요청 또는 응답을 나타내는 클래스이며, 헤더와 본문을 모두 포함- 본문과 헤더..
[백준][Gold IV] Java - 1043번 : 거짓말
·
Java & Spring/코딩테스트
□ 문제 : 최대 거짓말 가능 회수를 카운트하는 프로그램 구현https://www.acmicpc.net/problem/1043진실을 아는 사람이 없는 경우 파티 수 만큼 거짓말 가능진실을 아는 사람이 있는 경우 전염되어 거짓말을 할 수 있는 파티 수가 줄어듬ex)진실을 아는사람 (1)이 있다고 가정4번 파티에 진실을 아는사람(1)과 모르는 사람(2)가이 있고3번 파티에 (2)와 다른 모르는 사람(3)이 있다면 지민이는 3번 파티에서도 거짓말을 할 수 없게됨□ 사용 알고리즘BFS□ 전체 코드코드 보기import java.io.*;import java.util.*;public class Main { static BufferedReader br = new BufferedReader(new InputStr..
그래프탐색 - DFS와 BFS
·
Java & Spring/알고리즘
□ DFS와 BFS에 대한 개념 강의 영상https://www.youtube.com/watch?v=_hxFgg7TLZQ&t=624s  □ 실행 코드코드 보기import java.io.*;import java.util.LinkedList;import java.util.Queue;import java.util.StringTokenizer;public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); static int N, M, ..
[백준] Java - 1929번 : 소수 구하기
·
Java & Spring/코딩테스트
- 알고리즘 : 에라토스테네스의 체- 전체코드코드 보기import java.io.*;import java.util.ArrayList;import java.util.List;public class Main { public static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); public static void main(String[] args) throws IOException { String[] input = br.readLine..