본문 바로가기

Computer Science

(45)
[Spring] Optional 객체 여부에 따른 map 사용법 1)객체가 Optional 객체인 경우 - JPA를 활용하면 단일 객체 리턴에 대해서는 모두 Optional 객체로 반환한다. ( ※ 참고로 JPA 에서 List 로 리턴할 때는, List 가 비어있으면 Optional 객체가 아닌 Null로 리턴한다.) - 따라서 아래 mailRepository.findById 는 Optional 객체를 리턴하며 따로 Optional.of 나 Optional.ofNullable 를 활용할 필요는 없다. Mail mail = this.mailRepository.findById(mailRequestDTO.getId().longValue()) .map(m -> { Mail newMail; newMail = m; // ... Setting ... // return newMai..
[Spring] Get 호출시 response 에 한글 깨짐 현상 Spring boot GET 으로 호출시 response 값에 들어있는 한글이 깨지는 현상이 발생했었다. 아래와 같이 response 로 받은 값을 UTF-8로 인코딩을 해서 사용하니 문제가 해결되었다. 참고) httpGetConnection 은 내가 만든 메소드 이름이다. HttpResponse response = httpGetConnection("http://{URL}"); HttpEntity entity= response.getEntity(); String result = EntityUtils.toString(entity, "UTF-8");
[Spring] LZ4 압축 및 압축 해제 (FILE) LZ4 압축 및 압축해제 in JAVA import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import org.apache.commons.codec.binary.Base64; import net.jpountz.lz4.LZ4FrameInputStream; import net.jpountz.lz4.LZ4FrameOutputStream; public class Lz4Compress { public static final int DEFAULT_BUFFER_SIZE = 8192; public static final int EOF = ..
[Encoding] Base64 정리 회사 DB 에서 데이터를 받아올 일이 있었는데, 그게 Base64로 Encoding 되어 있었습니다. Base64 encoding 은 사실 알게 모르게 자주 사용하고 있었는데, 제대로 정리해 본적이 없어서 이번 기회에 정리하기로 마음 먹었습니다. ● Base64? [참고: https://blue-boy.tistory.com/227 ] > Base64를 사용하는 가장 큰 이유는 "binary data를 인코딩해서 Text 기반 데이터로 다룰 수 있다" 라는 점 때문입니다. binary data 중 ASCII 코드에 포함되지 않는 Data가 있어 ASCII 로 Data를 전달하면 Data 손실이 발생할 수 있습니다. 아스키는 7bit Data 이고, binary data는 8비트를 모두 사용하기 때문이죠. ..
[OS]데드락(Dead Lock), 교착 상태 데드락(Dead Lock)은 교착 상태라고도 불립니다. 1. 교착 상태가 뭘까요? 교착 상태란 자원이 한정적인 상황에서 두 개 이상의 프로세스가 각자 먼저 확보한 자원을 가진 채 상대방의 자원을 필요로 할 경우, 외부 조치가 없는 한 프로세스들이 아무 일도 하지못하고 계속 기다려야 하는 상황 을 말합니다. 잠깐 주의! 무한 대기와 교착 상태의 차이점 - 무한 대기는 프로세스가 자원을 할당 받는데 오랜 시간이 걸리는 것뿐 언젠간 할당 받을 수 있는 상태. - 교착 상태는 아무리 오랜 시간이 흘러도 프로세스가 자원을 할당 받지 못하고 마비된 상태. 그렇다면 교착 상태가 일어나면 어떤 문제점이 발생될까요? 2가지가 있습니다. ① 해당 프로세스들이 더 이상 실행되지 못하여 사용자들에게 응답해 주지 못한다는 점...
[DB] 트랜잭션 (Transaction) 트랜잭션이 뭘까? 이게 그렇게 중요한 건가? 궁금증을 해결하기 위해 이 포스팅을 쓰게 됐습니다. 1. 트랜잭션이란?(What is Transaction?) · 데이터베이스의 상태를 변환시키는 하나의 논리적인 작업 단위를 구성하는 연산들의 집합이다. 도대체 트랜잭션이 뭘까요?? 위의 형식적인 정의는 읽을 수록 헷갈리고 무슨 말하는지도 몰라서 간단하게 정리해보겠습니다. 간단하게 말해서 아래의 SQL 질의문으로 DB 에 접근하는 것을 의미합니다. ● SELECT ● DELETE ● UPDATE ● INSERT 너무 간단하지 않나요? 저것만 하면 트랜잭션을 한거라구요? 당연히 아닙니다. 트랜잭션은 하나의 SQL 문이 아니라 많은 SQL 질의문을 묶어 관리자나 개발자가 하나의 단위로 정의한 것입니다. 게시판을 예..
[Algorithm] 단절점을 찾는 알고리즘과 단절선을 찾는 알고리즘이 미세하게 다른 이유 단절점과 단절선의 개념에 대해서는 스킵하겠습니다. 추후에 시간이 되면 올리겠습니다 ~ 본론으로 들어가서 단절점을 찾는 알고리즘과 단절선을 찾는 알고리즘이 왜 미세하게 다른 것일까요? 처음 단절점의 개념을 접하고나서 여러 블로그를 찾아봤었는데 단절선은 단절점 알고리즘에서 약간 변형만 하면 된다고 써놓고 코드만 올려놓은 블로그들이 대다수였습니다;;; 저같은 단절점 초보에게는 너무나도 매정한 설명이었습니다. 결론적으로 말하면 제가 이 포스팅을 하는 이유는 왜 단절선을 찾을 때는 부모 정점로 가는 간선을 제외하고 찾아야 하는가? 였습니다. 단절점을 찾을 때는 시작 정점에서 DST를 만들어 가면서 한 정점에서 부모 정점을 포함하여 뻗어나갈 수 있는 정점의 번호 중 가장 작은 값을 리턴시켜주는 알고리즘을 사용했습니..
[Algorithm] 플로이드 워셜 알고리즘(Floyd-Warshall Algorithm) 플로이드 워셜 알고리즘은 다익스트라 알고리즘과 벨만포드 알고리즘과는 다르게 모든 정점사이의 최단 경로를 한 번에 구하는 알고리즘 입니다. 다익스트라와 벨만포드 알고리즘도 정점의 갯수번 만큼 돌리게 되면 모두 구할 수 있습니다. - 플로이드 워셜 알고리즘 기본적인 아이디어는 A->B로 가는 경로는 A->K->B(K는 경유지) K라는 경유지를 거쳐서 무조건 가게 된다는 생각이다. K는 그래프 상에 존재하는 모든 정점이 될 수 있다. 궁극적으로 A에서 K라는 경유지를 거쳐 B로 갈 수 있는 최단 거리를 구하는 것이다. D[i][j] 를 i에서 출발해 j까지 가는 최단 거리라고 했을 때, 다음 점화식을 만족한다. D[i][j] = min(D[i][j], D[i][k] + D[k][j]) https://www.a..