본문 바로가기

Develop167

백트래킹 (Back Tracking) 알고리즘 이해하기 하이 오늘은 백트래킹 알고리즘을 정리해두려고한다. 먼저 백트래킹 알고리즘을 알려면 DFS알고리즘을 정확하게 알고 있어한다. 혹시 DFS 에 대해 잘 모르겠다 싶으면 아래 링크를 차곰해서 보고 오자. https://devkingdom.tistory.com/263 DFS (Depth-First Search) 알고리즘 정리 오늘은 알고리즘에서 가장 중요한 개념중에 하나인 DFS에 대해 설명을 드리고자 한다. DFS는 다양한 경우의 수를 구할때 굉장히 많이 쓰이는 알고리즘이나 꼭 익혀두길 권장한다. 일단 코드소스 devkingdom.tistory.com 백트래킹 알고리즘은 dfs 알고리즘 방식으로 가장 깊은 레벨까지 가서 정답인지 체크하고 아니면 그노드의 부모로 돌아가서 다른 자식노드를 체크하고 이렇게 쭈우우우.. 2021. 7. 29.
BFS (Breadth-First Search) 알고리즘 정리 저번 포스팅에서 내가 DFS 에 대하 포스팅을 했었다. DFS 알고리즘이 경우의수를 찾기 위해 사용하는 알고리즘이라면, BFS 알고리즘은 최단 거리를 찾기 위해 사용하는 알고리즘이라고 생각하면 좋을 것 같다. 먼저 코드를 보여드리겠다. import java.util.LinkedList; import java.util.Queue; public class BFS { public static void main(String args[]) { BFS tree = new BFS(); Node root = new Node(1); root.lt = new Node(2); root.rt = new Node(3); root.lt.lt =new Node(4); root.lt.rt = new Node(5); root.rt.l.. 2021. 7. 28.
DFS (Depth-First Search) 알고리즘 정리 오늘은 알고리즘에서 가장 중요한 개념중에 하나인 DFS에 대해 설명을 드리고자 한다. DFS는 다양한 경우의 수를 구할때 굉장히 많이 쓰이는 알고리즘이나 꼭 익혀두길 권장한다. 일단 코드소스를 먼저 보여드리겠다. public class DFS { public static void main(String args[]) { DFS tree = new DFS(); Node root = new Node(1); root.lt = new Node(2); root.rt = new Node(3); root.lt.lt =new Node(4); root.lt.rt = new Node(5); root.rt.lt = new Node(6); root.rt.rt = new Node(7); tree.dfs(root); } publi.. 2021. 7. 28.
재귀 함수 정리 하이 ... 요즘은 정말 틈틈이 시간을 내서 알고리즘을 열심히 공부하고 있는 중이다. 예전에 취업 준비할 때는 알고리즘에 대해 자신감도 있었고, 문제도 곧잘 풀었었는데 뭔가 공부를 다시하려니 마음먹은대로 쉽게 되진 않는다. 사설이 조금 길었다. 오늘은 알고리즘 문제에서 다양하게 많이 사용되는 재귀함수에 대한 내용을 정리해 두려고 한다. 1. 스택 프레임 먼저 재귀함수에 대해 알기 위해서는 스택 프레임이라는 것을 잘알아야 한다. 스택 프레임이란 스택 영역에 차례로 저장되는 함수의 호출 정보를 의미한다. 보통의 언어에서 메모리의 스택 영역은 함수의 호출이랑 그와 관련된 지역 변수와 파라미터를 저장한다. 이 스택영역은 함수의 호출이 완료되면 소멸된다. 우리가 흔히 들어본 스택 오버플로우가 바로 이 영역이 넘쳐.. 2021. 7. 27.
Spring Boot 프로젝트에서 환경에 따라 다른 Profile 등록하기 하이... 오늘은 실무에서 일하시는 분들이라면 알면 좋은 내용에 대해 작성해보려고 한다. 혼자 개발하는 개발자라면 상관없겠지만, 실무에서는 보통 로컬 환경, 개발 환경, 테스트 환경 , 운영 환경 다양한 환경에서 프로젝트를 수행한다. Spring Boot 를 이용하는 개발자들이라면 다들 아시겠지만 application.yml 파일에 설정을 별도로 해주어 이런 환경 구분이 가능하다. 일단 test 전용으로 yml 파일도 하나 복사해서 만들어주자. 그리고 내부에 test > resources 디렉토리에 있는 yml 에는 ````` spring: profiles: active: test ````` 를 추가해주고, main > resources 에는 ````` spring: profiles: active: lo.. 2021. 7. 9.
[querydsl] batch 성 거래 처리하기 프로그램을 짜다보면 배치작업처럼 다량의 데이터가 업데이트 되거나 삭제되야하는 경우가 있다. 그런데 querydsl로 update 쿼리를 날리면 db의 상태와 영속성 컨택스트의 상태가 다른것을 확인할 수 있다. 영속성 컨택스트의 데이터는 그대로고 db만 값이 변경된다. 영속성 컨택스트의 1차 캐시와 동기화가 안되었기 때문이다. (JPA에서는 이를 Dirty Checking) 이라고 한다. 그래서 혹시나 내부에서 로직이 update이외에 다른게 있다면 꼭 영속성 컨택스트를 초기화 하는 과정을 넣어주는게 좋다. long updateCnt = queryFactory .update(member) .set(member.userName, "babo") .set(member.age, member.age.add(1)) .. 2021. 7. 8.
[querydsl] 동적 쿼리 만들기 mybatis는 특정한 xml에서 sql을 처리하고, 거기서 또 동적 쿼리를 처리한다. 이게 생각보다 나는 많이 불편했다. querydsl은 java 코드 내에서 동적 쿼리 처리가 가능하다. 이는 큰 이점이라고 생각한다. 오늘은 querydsl에서 동적쿼리를 처리하는 두가지 방법에 대해 작성해보려고한다. 1.BooleanBuilder 이 방법은 QueryDSL에서 공식적으로 문서로 남겨져 있는 방식인데 null인지 아닌지를 판별하여 builder를 조립해서 끼워 넣는 방식으로 작업을 한다. //BooleanBuilder builder = new BooleanBuilder(member.userName.eq(nameCond)); // 이런식으로 초기값 설정 가능 BooleanBuilder builder = .. 2021. 7. 8.
[querydsl] querydsl에서 projection 다루기 db를 다루다 보면 종종 projection을 다뤄야할 때가 있다. 혹시나 Projection이 무엇인지를 잘 모르는 분들을 위해 간단하게 Projection의 개념에 대해 정리를 해두겠다. Projection 연산 - 한 Relation의 Attribute들의 부분 집합을 구하는 연산자 - 결과로 생성되는 Relation은 스키마에 명시된 Attribute들만 가짐 - 결과 Relation은 기본 키가 아닌 Attribute 에 대해서만 중복된 tuple들이 존재할수 있음 대충 이런건데.. 이를 querydsl에서도 구현할 수 있다. 만약에 Projection의 대상이 하나인 경우에는 그냥 쉽게 아래 예제처럼 하면된다. List result = queryFactory .select(member.user.. 2021. 7. 7.
[querydsl] concat 사용법 (문자열 붙이기) 오늘은 querydsl 을 사용할때 concat 메서드를 이용해서 문자열을 붙이는 방법을 정리해 둘 예정이다. 1. concat concat을 이용해서 문자열을 이어 붙일수도 있다. String 이외의 요소를 이어 붙일 경우에는 해당 요소를 String으로 바꿔주어야 하기에 stringVaule 메서드를 이용해줘야한다. 이 stringValue 메서드는 나중에 enum 타입을 String으로 바꿀때도 유용하니 잘 정리해두고 기억해두면 좋을 것같다. 아래 예시를 보고 각자에 맞게 잘 응용해서 사용하면 될듯하다. String member = queryFactory .select(QMember.member.userName.concat("&").concat(QMember.member.age.stringValue.. 2021. 7. 7.