목록분류 전체보기 (56)
코딩블로그
다익스트라 알고리즘이란?매번 방문하지 않은 노드 중에서 최단 거리가 가장 짧은 노드를 선택하여 한 단계씩 최단 거리를 구해나간다.음수 간선이 없다면 최적의 해를 찾을 수 있다.시간 복잡도가 빠르다 . 개선된 다익스트라 알고리즘도 존재하는데 이는 우선순위 큐 사용해서 구현할 수 있다 BOJ1753 - 최단경로https://www.acmicpc.net/problem/1753 이 문제는 개선된 다익스트라 형태인 우선순위큐를 활용해서 풀어야 한다 import java.util.*;import java.io.*;class Main { // 간선 정보를 저장하는 Edge 클래스, 우선순위 큐에서 비교를 위해 Comparable 인터페이스 구현 public static class Edge implemen..
벨만포드 알고리즘이란?한 노드에서 다른 노드까지의 최단 거리를 구하는 알고리즘특징으로는 간선의 가중치가 음수일 때도 최단 거리를 구할 수 있다 벨만포드 VS 다익스트라[다익스트라 알고리즘]매번 방문하지 않은 노드 중에서 최단 거리가 가장 짧은 노드를 선택하여 한 단계씩 최단 거리를 구해나간다.음수 간선이 없다면 최적의 해를 찾을 수 있다.시간 복잡도가 빠르다 . 개선된 다익스트라 알고리즘도 존재하는데 이는 우선순위 큐 사용해서 구현할 수 있다[벨만포드 알고리즘](정점-1)번의 단게마다 모든 간선을 전부 확인하면서 모든 노드간의 최단 거리를 구한다이때 다익스트라와의 차이점은 모든 간선을 확인한다는 것이다. 다익스트라는 방문하지 않은 노드 중에서 최단 거리가 가장 가까운 노드만을 방문한다음수 간선이 있어도..
본격적으로 들어가기에 앞서 @Component의 기본적인 개념에 대해 간략하게 언급해보자면@Component클래스 단위로 쓰이며 내부에 종속성이 존재할 때, 즉 내가 만든 클래스를 사용하고 싶을 때 쓸 수 있다 보통 프로젝트에서 Util 클래스는 Static 메서드를 사용해 구현하는 경우가 많다. 이는 주로 상태가 필요 없고, 특정 기능만 반복적으로 수행하는 단순한 작업에 적합하기 때문이다. 하지만, 내가 현재 참여 중인 프로젝트에서는 @Component를 사용하여 Util 클래스를 정의하고 있어서, 보편적인 Static 메서드와 현재 적용중인 @Component 방식 중 어느 것이 더 적절한지 제대로 알아보고자 한다. 먼저 Static으로 구성했을 때를 알아보자StaticStatic메소드는 인자가 동일..
높은 응집도와 낮은 결합도 실현하기소프트웨어 개발에서 높은 응집도와 낮은 결합도를 실현하는 것은 복잡한 비즈니스 로직을 유지보수하기 쉽게 만드는 핵심 원칙입니다. 높은 응집도는 각 모듈이나 클래스가 하나의 책임에 집중하는 것을 의미하며, 낮은 결합도는 서로 다른 모듈이나 클래스 간의 의존성을 최소화하여 시스템을 확장하고 수정하기 쉽게 만드는 원칙입니다. 이번 프로젝트 개선 작업을 통해 이를 적용해보았습니다.스프링 이벤트 도입 배경GDSC 프로젝트에서 준회원 승급 로직을 개선하기 위한 작업을 진행할 때, 기존 코드는 아래와 같이 구현되어 있었습니다. public void verifyDiscord(String discordUsername, String nickname) { validateSta..
문제 상황회사에서 파일 관리 시스템의 일환으로 Presigned URL을 대량으로 생성하는 API를 개발했습니다. 로컬 환경에서는 100개 이상의 URL도 1초 내로 생성할 수 있었습니다. 그러나 AWS에 배포된 실제 서버에서는 30개 이상의 URL을 요청하면 504 Timeout 오류가 발생했습니다.원인 파악로그를 자세히 분석한 결과, 문제의 원인을 파악할 수 있었습니다:배포 서버는 AWS Elastic Load Balancer(ELB)를 이용하고 있는데, 이 ELB는 기본적으로 60초 후에 Timeout을 발생시킵니다.Timeout 발생 후 약 1분이 지나면 요청한 작업이 백그라운드에서 완료되었습니다.-> 하지만 이 504 에러코드가 뜨는 근본적인 원인을 찾아야 했습니다. 그래서 기존의 코드를 분..
외부 API 연동, 어떻게 해야 최선일까?서버 개발자라면 외부 API 연동은 이제 기본입니다. 저도 공공데이터, 영화진흥위원회, 심지어 카카오 로그인까지 다양한 API 연동 작업을 해왔어요. 처음에는 "이렇게 하면 되는구나~" 하고 OkHttp로 시작해서 Feign까지 써봤죠.그런데 문제는, 그냥 돌아가게만 만들었지, 왜 이렇게 동작하는지, 어떤 도구가 더 좋은지 제대로 이해하지 못했다는 겁니다. 시간이 없기도 했고, 솔직히 귀찮기도 했고요... 😅그러다 문득 이런 생각이 들었어요. "만약 면접에서 '이 상황에서는 OkHttp 대신 왜 Feign이나 WebClient, RestClient를 써야 하나요?'라고 질문을 받으면 뭐라고 대답하지?" 아차 싶었죠. 그래서 이번에 제대로 공부해보기로 했습니다. ..
애플리케이션프레젠테이션 계층웹 요청과 응답사용자 요청을 검증주 사용 기술 : 서블릿과 HTTP와 같은 웹 기술, 스프링 MVC스프링 계층비즈니스 로직을 담당주 사용 기술 : 가급적 특정 기술에 의존하지않고 순수 자바 코드로 작성데이터 접근 계층실제 데이터 베이스에 접근하는 코드주 사용 기술 : JDBC, JPA, File, Redis, Mongo여기서 가장 중요한 곳은 바로 핵심 비즈니스 로직이 들어있는 서비스 계층시간이 흘러서 UI와 관련된 부분이 변하고 데이터 저장 기술을 다른 기술로 변경해도 비즈니스 로직은 최대한 변경없이 유지되어야 한다서비스 계층은 가급적 비즈니스 로직만 구현하고 특정 구현 기술에 직접 의존해서는 안된다. 이렇게 하면 향후 구현 기술이 변경될 떄 변경의 영향 범위를 최소화 할 수..
https://www.acmicpc.net/problem/1992 import java.util.*;import java.lang.*;import java.io.*;// The main method must be in a class named "Main".class Main { public static int N; public static int[][] arr; public static StringBuilder sb = new StringBuilder(); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(..