전체 글

기록합시다.
ALGORITHM

DFS java

🍕깊이 우선 탐색 : 미로를 탐색할 때 한 방향으로 갈 수 있을 때까지 계속 가다가 더 이상 갈 수 없게 되면 다시 가장 가까운 갈림길로 돌아와서 이곳으로부터 다른 방향으로 다시 탐색을 진행하는 방법과 유사하다. 즉, 넓게(wide) 탐색하기 전에 깊게(deep) 탐색하는 것이다. https://gmlwjd9405.github.io/2018/08/14/algorithm-dfs.html [알고리즘] 깊이 우선 탐색(DFS)이란 - Heee's Development Blog Step by step goes a long way. gmlwjd9405.github.io 깊이 우선 탐색(DFS)이 너비 우선 탐색(BFS)보다 좀 더 간단하다. 단순 검색 속도 자체는 너비 우선 탐색(BFS)에 비해서 느리다. 최단경..

ALGORITHM

JAVA 미로탐색 / BFS

😒 BFS / Breadth-First Search / 너비 우선 탐색 너비 우선 탐색 : 하나의 정점에서 시작해서 차례로 모든 정점을 방문하게 된다. 따라서 특정 도시에서 다른 도시로 가거나, 미로의 최단 거리를 찾거나, 보통은 두 좌표 사이의 ( 노드 사이의 ) 최단 경로 혹은 임의 경로를 찾기 위해 쓴다. 🥕 구현 시, 특정 좌표 ( 노드 ) 를 방문한것에 대한 여부를 반드시 검사해야 한다. 검사하지 않는다면 무한 루프에 빠질 위험이 존재한다. 방문한 노드를 차례로 꺼낼 수 있는 자료 구조인 Queue 를 사용. 즉 선입선출이 원칙이다. 🥕 왜 최단 거리가 되는가 ? https://wikidocs.net/125662 참조 : 미로탐색과 같은 문제를 BFS를 구현하다보면, 누구나 한 번씩은 의구심을 ..

JAVA

java directory copy / progress bar

😒 test용으로 구현 java 1.8 사용 😒 에이전트의 FS 기능 개발 중 필요해서 구현. 특정 디렉토리 경로 및 모든 하위 파일을 file output stream으로 쓰면서 소스와 타겟의 바이트단위 크기를 비교한다. 재귀호출을 통해 디렉토리안의 디렉토리도 모두 확인하도록 구현. 1. static 변수를 통해 진행률 등 기록하는 방식. 2. static 변수 없이, 파라미터로 처리하는 방식. 멀티 스레드 환경에서 전역변수를 참조하면 전역변수의 값이 꼬이므로, 2번의 방식이 적합함. FileDownloaderTest.java package test; import com.gemiso.ariel.common.util.FileUtil; import java.io.*; public class FsCopyDi..

JAVA/SPRING

springBoot / mapstruct

🍟 dto entity 변환 시, mapstruct 라이브러리를 사용하는 방법이 있다. 세팅 : build.gradle dependencies { //MapStruct annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final' implementation 'org.mapstruct:mapstruct:1.4.2.Final' } mapper * UserMapper로 구현함. package com.org.walk.user; import com.org.walk.util.EntityMapper; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @Mapper public interfa..

AWS

EC2 포트포워딩

🥃 외부 접속 ip 및 port 정보를 내부 port 로 매칭시키려 함. EC2 인스턴스 준비는 생략. $ sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 9300 -j REDIRECT --to-port 9300 $ sudo iptables -t nat -L --line-numbers AWS EC2 를 쓰고 있으므로 사용 인스턴스의 인바운드 규칙에 port를 설정해야 한다. * 아웃바운드 규칙은 기본적으로 모두 열려있다. 잘 열렸는지 체크. $ echo > /dev/tcp/127.0.0.1/[port] $ echo &? echo $? 에서 리턴이 0으로 온다면 잘 실행되었다는 뜻임. * 기타 이유로 삭제가 필요 할 경우 : $ sudo iptable..

JAVA

springboot / querydsl 설정

🥕 querydsl 설정을 통한 Q클래스 작동 및 실행 확인까지. # springboot 2.7.0 build.gradle buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'org.springframework.boot' version '2.7.0' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'war' id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } configurations { compileOnly { extendsFrom annotationProcessor } } dependencies { //..

JAVA/SPRING

spring boot / H2 DB 세팅

🤢 테스트용으로 인메모리 h2 환경을 조성한다. java 1.8 / springframework.boot 2.7.0 / gradle 테스트용이나, 개인 사이드 프로젝트용으로 쓰는 이유는 데이터를 디스크가 아닌 메모리에 보유하고 있기 때문임. (휘발성을 띄고 있지만, 설정에 따라 파일로 기록 가능하다.) build.gradle dependencies { // https://mvnrepository.com/artifact/com.h2database/h2 implementation group: 'com.h2database', name: 'h2', version: '2.1.212' implementation 'org.springframework.boot:spring-boot-starter-jdbc' } appl..

JAVA/SPRING

Hikari CP / Spring boot 설정

CP : connection pool Connection의 과부하를 막기 위해 씀. Connection을 미리 만들고 Connection pool 에 두었다가 사용자의 요청이 발생할 경우 Connection을 제공하고, 요청이 끝났다면 다시 Connection pool에 보관한다. DB접속 설정 객체를 미리 만들어 연결하여 메모리 상에 등록해 놓기 때문에 클라이언트가 빠르게 DB에 접속 가능 DB Connection 수를 제한 할 수 있어서 과도한 접속으로 인한 서버 자원 고갈 방지 가능 DB 접속 모듈을 공통화해 DB서버의 환경이 바뀔 경우 쉬운 유지보수 가능 연결이 끝난 Connection을 재사용함으로써 새로 객체를 만드는 비용을 줄일 수 있음 😒HikariCP란 Springboot 2.0 부터 d..

JAVA

jwt 토큰 인증 + Interceptor 검증.

ID / PW 를 사용하는데 pw를 토큰으로 써보자. * 이방식은 refresh token으로 만료 기한을 연장하는 방식이 아니며, access token의 만료기한만 검사. 목적 : interceptor 에서 사용자의 요청에 앞서 json token의 만료 기한을 검증한다. pom.xml에 의존성 추가. io.jsonwebtoken jjwt 0.9.1 토큰 생성. public static String createToken(UserDto user, String SECRET_KEY) { //Header 설정 Map headers = new HashMap(); headers.put("typ", "JWT"); headers.put("alg", "HS256"); // algorithm SignatureAlgor..

JAVA/SPRING

QueryDSL , Criteria , Native Query

간단한 경우, 와 같은 방법으로도 처리가 된다. 아니라면, 굳이 @Query로 다시 쿼리 쓴다 - > 오타 , 띄어쓰기 등에 의해 에러를 내뱉을 확률이 높아짐. 따라서 Criteria 또는 open source 라이브러리인 QueryDSL을 쓴다면 더 간편하게 JPA를 쓸 수 있다. Criteria는 JPQL을 생성하는 빌더 클래스에 해당한다. 프로그래밍 코드로 JPQL을 작성해준다는 장점이 있다. CriteriaBuilder cb = em.getCriterBuilder(); CriteriaQuery query = cb.createQuery (Member.class); Root m = query.from(Member.class); CriteriaQuery cq = query.select(m).where(..

girin_dev
girin_dev