다익스트라(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) { ..
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..
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 해결방법서버 측에..
[백준][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..
객체지향과 SOLID원칙
·
이론공부/개념
□ 정의객체지향(Object-Oriented Programming, OOP)은 프로그램을 객체(object)라는 단위로 구성하는 프로그래밍 패러다임객체는 데이터와 데이터를 처리하는 메서드를 함께 묶은 단위로, 현실 세계의 사물과 개념을 모델링하여 코드로 표현하는 방식 □ 주요 개념클래스 (Class): 객체의 설계도나 템플릿으로, 객체의 속성(필드)과 동작(메서드)을 정의객체 (Object): 클래스를 기반으로 생성된 실체로, 속성과 동작을 갖는 구체적인 인스턴스캡슐화 (Encapsulation): 객체의 데이터(속성)를 외부에서 직접 접근하지 못하게 하고, 메서드를 통해서만 접근하게 제한하는 방식, 이는 데이터를 보호하고, 객체의 내부 구현을 숨겨서 코드의 복잡성을 줄인다.상속 (Inheritance)..
HttpRequestMethodNotSupportedException
·
카테고리 없음
- Controller @PostMapping("/v1/orders") @Operation(summary = "주문하기", description = "화폐 주문") public ResponseEntity orderCoin() throws UnsupportedEncodingException, NoSuchAlgorithmException { System.out.println("주문하기"); return ResponseEntity.ok(tradingService.orderCoin()); } - Serivcepublic OrderResponse orderCoin() throws UnsupportedEncodingException, NoSuchAlgorithmExcep..
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 요청 또는 응답을 나타내는 클래스이며, 헤더와 본문을 모두 포함- 본문과 헤더..