728x90
반응형

IT 156

Dynamic Programing (동적 프로그래밍)

Dynamic Programing이란? 동적 프로그래밍은 딱히 프로그래밍 방법론은 아니다. 이름이 '프로그래밍'이라서 헷갈리는데, 그냥 알고리즘 방식의 하나라고 생각하면 된다. 동적 프로그래밍 방법에서는 입력 크기가 작은 문제들을 먼저 해결해서 그 결과값(해)들을 저장해두고 (=memorization) 이것을 이용해 크기가 큰 문제들을 해결한다. 작은 문제의 결과들을 저장해두었기 때문에 큰 문제의 결과를 구할 때 다시 계산할 필요가 없어 속도가 빠르다. 분할 정복 알고리즘과의 차이 동적 프로그래밍은 분할 정복(Divide and Conquer) 알고리즘과 비슷한데 분할 정복이 하향식(top-down) 접근을 하는 것이라면 동적 프로그래밍은 상향식(bottom-up) 접근을 한다. 무슨말이냐면 분할 정복 ..

IT/알고리즘 2023.05.21

@Valid와 BindingResult로 인풋값 검증이 안됨...

예전에 했던건데... 과거 프로젝트에서 무지성으로 복붙했더니 안먹힌다. result.hasErrors()가 무조건 false로 나옴;;; 알고보니 spring boot 3으로 올리면서 디펜던시가 변경되었다. javax.validation 에서 spring-boot-starter-validation 으로 바꿔주니 잘됨 // implementation group: 'javax.validation', name: 'validation-api', version: '2.0.1.Final' implementation 'org.springframework.boot:spring-boot-starter-validation' 전체 코드 Controller 인풋받는 객체 앞에 @Valid 붙여주고, 검증 결과를 저장할 Bin..

윈도우에서 MongoDB 서버 설치하고 확인하기

https://www.mongodb.com/try/download/community-edition Try MongoDB Community Edition Try MongoDB Community Edition on premise non-relational database including the Community Server and Community Kubernetes Operator for your next big project! www.mongodb.com 커뮤니티 에디션 msi파일을 다운받고 실행 별다른 설정 없이 next 눌러서 모두 설치함 이때 MongoDB Compass를 같이 설치할거냐고 묻는데 이는 몽고디비 관리툴임 (rdbms의 DBeaver나 HidiSQL같은 것) 특별히 다른 툴을 사용할..

IT/db 2023.05.15

Pattern과 Matcher로 문자열에서 원하는 값 뽑아내기

key1 = "value1", key2 = "value2", .... 이런 json도 아니고 요상한 형태로 날아오는 데이터를 파싱할 일이 생겼다. 처음엔 key-value 세트가 하나인줄 알고 단순히 따옴표 기준으로 substring을 했는데 알고보니 이게 콤마 기준으로 몇개나 될 지 랜덤하다고 한다. 흠.... 정규표현식이랑 별로 친하진 않지만 정규표현식을 써서 Pattern을 사용하게 되었다. (\w+)\s*=\s*"([^"]*)" 챗gpt와 regexr.com의 도움을 받아 이런 정규표현식이 나왔다. \w+ → (\w)문자가 (+)1개 이상 \s* → (\s)공백이 (*)0개 이상 = → 부등호 그 자체 " → 따옴표 그 자체 [^"]+ → (^") 따옴표 제외한 ([])문자가 (+) 1개 이상 이..

postgresql vacuum의 개념과 필요성

vacuum은 포스트그레에만 있는 기능이라고 한다. 포스트그레에서는 데이터를 삭제하거나 업데이트할 때 기존 레코드의 데이터를 따로 보관해두고 새로 튜플을 삽입하는데 이때 지워진(보관처리된) 기존의 튜플을 데드 튜플이라고 한다. 데드튜플이 많이 쌓이면 쓰지도 않는 데이터들이 자리를 차지해서 쿼리 성능에도 영향을 미치고 디스크 용량을 차지하여 자원낭비도 유발한다. 이 데드 튜플을 청소하는 것이 vacuum이다. vacuum은 auto vacuum을 설정하여 주기적으로 실행하게 할 수 있지만 vacuum tb_name의 쿼리를 통해 직접 수행시킬 수도 있다. vacuum에는 일반 vacuum과 full vacuum이 있는데 일반 vacuum을 하면 데드튜플을 검색대상에서 제거하여 쿼리 성능을 향상시키지만 디스..

IT/db 2023.04.12

스프링 프로젝트 로그에서 특정 sdk의 로그레벨만 조정하기

프로젝트 내에서 오라클 클라우드 (OCI) jdk를 사용중인데 해당 패키지에서 찍히는 불필요한 로그가 너무 많다. 이를 제거해달라는 요구사항이 있어 찾아보았다. 코드의 수정은 필요없고 application.property 내에 추가해주면 된다. logging.level.com.oracle.bmc=warn 이러면 문제가 생겼을때의 로그만 찍히고 일반 info 레벨의 로그는 안보인다. *참고 에러로그 순서 : TRACE > DEBUG > INFO > WARN > ERROR > FATAL

git 특정 브랜치끼리, 특정 폴더(파일) 변경사항 비교

고도화를 위해 기존 솔루션에 이런 저런 기능을 뚝딱뚝딱 만들고 운영기에 패치를 해보기 전에 db 스키마가 어떻게 변했는지 확인하고자 한다. 기존 op 브랜치와 수많은 커밋을 거쳐 현재에 이른 dev 브랜치 간 entity 폴더 아래의 테이블 설정 파일들의 변화를 보려고 한다. #브랜치끼리 비교하기 git diff op dev #브랜치끼리 특정 파일 비교하기 git diff op dev /파일경로 #파일이 아니라 폴더 안의 모든 내용을 비교할 수도 있음 git diff op dev ./entity #변경된 파일 목록만 보려면 git diff --name-only op dev ./entity git diff의 결과를 보는 법 diff --git a/Projects/.../entity/User.java b/P..

IT 2023.01.11
300x250
반응형