전체 글
-
프림 알고리즘알고리즘 2024. 8. 14. 22:57
서론최소 신장 트리(이하 MST)를 구하는 프림 알고리즘을 알아보자. 최소 신장 트리에대한 설명이 필요하다면 아래 글을 참고하도록 한다.2024.08.13 - [알고리즘] - 최소 신장 트리 최소 신장 트리신장 트리 (Spanning Tree)신장 트리는 다음과 같은 특징을 가진다.그래프의 모든 정점을 포함한다최소한의 간선의 개수를 가진다 ( 즉, 정점의 개수 - 1 개의 간선을 가진다)트리이기에 사이클을 가devchive.tistory.com 프림 알고리즘프림 알고리즘은 다음과 같은 순서를 가진다.임의의 정점을 선택해 MST에 추가한다MST에 포함된 정점과 포함되지 않은 정점을 연결하는 간선 중 가장 비용이 적은 간선을 선택해 MST에 추가한다최소 신장 트리에 V - 1개의 간선이 추가될 때 까지 2번..
-
크루스칼 알고리즘알고리즘 2024. 8. 13. 23:36
서론최소 신장 트리를 구하는 알고리즘은 크루스칼 알고리즘에 대해 알아보고 관련된 백준 1197 문제를 풀어보자.최소 신장 트리에대한 설명은 아래 글을 참고하자.2024.08.13 - [알고리즘] - 최소 신장 트리 최소 신장 트리신장 트리 (Spanning Tree)신장 트리는 다음과 같은 특징을 가진다.그래프의 모든 정점을 포함한다최소한의 간선의 개수를 가진다 ( 즉, 정점의 개수 - 1 개의 간선을 가진다)트리이기에 사이클을 가devchive.tistory.com 크루스칼 알고리즘최소 신장 트리(이하 MST)를 구하는 크루스칼 알고리즘은 다음과 같은 순서를 가진다.간선의 크기를 오름차순으로 정렬하고 제일 낮은 비용의 간선을 선택한다현재 선택한 간선이 정점 U,V를 연결하는 간선이라고 할 때, 만약 U..
-
최소 신장 트리알고리즘 2024. 8. 13. 22:52
신장 트리 (Spanning Tree)신장 트리는 다음과 같은 특징을 가진다.그래프의 모든 정점을 포함한다최소한의 간선의 개수를 가진다 ( 즉, 정점의 개수 - 1 개의 간선을 가진다)트리이기에 사이클을 가지지 않는다 위와같은 그래프가 있다고 할때 다음과같이 여러개의 신장 트리들이 나올 수 있다. 위의 예시 외에도 더 다양한 형태의 신장 트리가 존재한다.최소 신장 트리 (Minimum Spanning Tree)최소 신장 트리의 개념은 간단하다. 그래프의 존재하는 신장 트리중 가중치의 합이 가작 작은 신장 트리가 최소 신장 트리이다.위의 예시에서는 왼쪽부터 차례대로 가중치의 합이 12, 16, 18 이다. 그 외에도 존재하는 신장 트리중 가장 작은 가중치의 합을 가진 최소 신장 트리는 아래의 트리이다. ..
-
Spring Boot AOP를 이용해 로그인 검증하기JAVA 2024. 7. 29. 23:18
스프링 부트로 개인 프로젝트를 하며 사용자가 로그인을 했는지 권한을 확인할 필요가 있어졌다. 이에 개발하려는 기능 정의를 다음과 같이 했다.AOP를 통해 검증한다LoginCheck 라는 Annotation을 만들어서 이 어노테이션을 기반으로 AOP를 적용한다LoginCheck Annotation은 메소드에도 붙을 수 있고 클래스에도 붙을 수 있다.LoginCheck Annotation은 값을 가질 수 있다. 기본값으로 True를 갖는다. False인 경우 검증하지 않는다. 먼저 어노테이션으로 정의한 이유는 개발을 하며 명시적으로 권한이 필요하다는것을 표시해주고 싶었기 때문이다. Controller에 LoginCheck 이라는 어노테이션이 있다면 다른 개발자가 보더라도 권한이 필요한 영역이라 쉽게 유추할것..
-
RabbitMQ 와 Kafka공부방 2024. 7. 12. 22:16
메시지 브로커개인 프로젝트를 진행하던 중, 이메일을 보내는 기능을 구현하고자했다.시스템 구성은 API 서버가 있고 이 서버에서 메일을 보내고자할경우 별도의 Mail 서버로 요청을 보내 메일을 보내는것이다. 간단하게 API 서버에서 Mail 서버로 HTTP를 사용해 API 요청을 보내 처리해도 되지만 이럴경우 두 서버간의 요청이 동기적으로 처리되어버린다.메일을 보내는 기능 자체는 사용자의 요청에 즉각적으로 처리가 될 필요 없는 기능이다. 이 때문에 나는 비동기적으로 처리하는 방법으로 구조를 잡았다. 메시지 브로커를 이용하여 메일 서버와 통신하는것이다. 이렇게되면 API 서버는 메일을 보내는 요청을 메시지 브로커에 던지면 끝이다. 그 뒤는 메일서버가 처리할 영역으로 두 서버의 역할이 확실히 분리된다.메시지 ..
-
JEST를 이용한 테스트코드 작성JS 2024. 7. 1. 22:25
JestJest는 자바스크립트 테스트 라이브러리이다. 다른 테스트 라이브러리는 여러 라이브러리들을 조합하여 사용하곤 했는데 Jest는 하나의 라이브러리로 Test Runner, Matcher 그리고 Mocking 까지 지원해준다. 기본적인 사용법사용법을 알아보기 앞서 테스트할 코드를 먼저 보자/** * @description SMTP host 기반 domain 주소 추출 * @returns {String} */extractDomainFromHost(){ if(this.host === MailTransporter.DEFAULT_HOST){ throw new WrongArgsError(`Mail transporter 의 host를 입력해주세요`); } const pattern ..
-
Spring Boot MessageConverterJAVA 2024. 6. 24. 01:29
개요Spring Boot 기반 개인 프로젝트를 진행하는중 MessageConverter 관련해 문제가 있었다. 이 문제를 해결하며 알게된 내용을 정리해보았다. 문제@GetMapping("/test2")public String test2(){ return "test 2";}@GetMapping("/test3")public List test3(){ return List.of("t","e","s","t");}기존 코드의 Controller 부분이다. /test2 에 요청하면 String 을 반환하고, /test3 에 요청하면 ["t","e","s","t"] 를 반환한다.public Object beforeBodyWrite(@Nullable Object body, MethodParameter retu..
-
Proxy 와 Reverse Proxy공부방 2024. 6. 18. 23:49
Proxy Server프록시 서버(영어: proxy server, 문화어: 대리봉사기)는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. - wikipedia Proxy 는 영어로는 '대리' 라는 뜻으로 말 그대로 어떤 행위를 대신 해준다는 의미이다. 이런 Proxy 서버의 역할은 서버와 서버 사이에서 중개인 역할을 한다고 생각하면 된다. 이때 프록시 서버의 위치에따라 (Forward)Proxy 와 Reverse Proxy 로 구분한다. 클라이언트와 인터넷 사이에 있는 프록시를 Forward Proxy, 인터넷과 서버 사이에 있는 Proxy를 Reverse Proxy 라고 한다. Forward Proxy우리가 흔히 그냥..