Thymeleaf를 이용하다 보니 View 부분을 직접 만들어야 하는 과정이 필요했습니다.
화면은 약 10개의 페이지로 구성했고 다음과 같습니다.
댓글 수정을 직접 게시물에 구현하고 싶었지만 어떻게 구현해야할지 감이 잡히지 않아 일단 따로 폼을 만들었습니다.
이후 프로젝트를 진행하기 위한 Git Flow 전략을 익혔습니다.
다음 글들을 참고했는데 많은 도움이 됐습니다.
위의 방식들을 따르되 git flow 툴은 따로 사용하지 않기로 결정했습니다!!
최단경로 알고리즘 입문, 0-1BFS 입문
최단경로 알고리즘이라 하면 크게 다익스트라, 플로이드 워셜, 벨먼-포드 알고리즘이 존재하는데 그 중에서 다익스트라, 플로이드 워셜 알고리즘을 공부하고 각 문제들을 풀어보았다.
해당 알고리즘들의 특징을 간단하게 정리해보면 다음과 같다.
다익스트라 알고리즘은 특정 노드를 출발점으로 두고 다른 노드들까지의 최단경로를 dist라는 배열에 갱신해가며 최단 경로를 찾는다.
인접 행렬(O(V^2))보다는 인접 리스트 방식(O(ElogV + V))이 좀 더 효율이 좋고, 우선순위 큐를 이용하여 구현한다. 간선의 가중치가 음수가 존재할 경우 이용할 수 없다.
특정 노드에서 다른 노드로 갈 수 있는 모든 최소 경로를 구할때 사용된다. 간선의 가중치가 음수여도 이용할 수 있으며, 특정 노드를 중간노드로 두고 시작->중간->끝
의 값과 시작->끝
의 값을 비교해 더욱 작은 경로를 찾으며 매 순간 갱신해준다.
결과에서 음수 사이클이 존재하면 최단거리가 성립하지 않는다.
음수 사이클 검출 방법은 플로이드 워셜 알고리즘이 종료됐을때 확인할 수 있다.
자기 자신으로 돌아가는 루프의 경우 항상 해당 값이 0이어야 하는데 음수의 값을 가지게 되면 음수 사이클이 존재한다고 판단한다.
0-1 BFS는 그래프의 가중치가 0 혹은 1 밖에 존재하지 않을때 O(V + E)라는 선형적인 시간복잡도로 탐색할 수 있는 BFS 기법이다. 13549 숨바꼭질 문제를 풀며 새로 배우게 됐다.
좀 더 자세한 내용은 다음 노션 링크에 정리해 두었다.
자바에서 Enum, 람다, 스트림(공부중)에 대해 공부를 했습니다. 자바의 정석을 이용해 공부하고, 정리한 내용들은 노션에 기록해두었습니다.
개인적으로 개발 공부를 진행하면서 Enum, 람다, 스트림에 대한 깊은 이해 및 사용방법은 필수적이다라는 느낌을 많이 받았습니다.
공부를 진행하며 기존 표현의 길쭉했던 문법들을 확 줄여주는 능력과, 사용자 편의에 따라 사용할 수 있게한 라이브러리를 보며 감탄하며 공부한 것 같습니다.
// 문자열 리스트, 배열 정렬 후 화면에 출력하기(스트림 이용과 이용하지 않은 방식 비교)
String[] strArr = {"aaa", "ddd", "ccc"};
List<String> strList = Arrays.asList(strArr);
// 스트림을 이용한 정렬 후 한줄씩 출력
Stream<String> strStream2 = Arrays.stream(strArr);
Stream<String> strStream1 = strList.stream();
strStream1.sorted().forEach(System.out::println);
strStream2.sorted().forEach(System.out::println);
// 아래 코드는 원래 방식, 스트림에 비해 좀 더 표현해야 할 것이 많다.
Arrays.sort(strArr);
Collections.sort(strList);
for (String str : strArr) {
System.out.println(str);
}
for (String str : strList) {
System.out.println(str);
}
개인적으로 WIL을 한달여간 진행해봤지만, 크게 도움이 되지 않는것 같아 중단하려 합니다. 제가 생각한 도움이 안됐던 이유는 다음과 같습니다.
공부 내용은 항상 그날 그날 정리하고 있다.
Velog 뿐만 아니라 Notion을 통해 하루의 일정을 계획하고 정리하고 있습니다. WIL을 작성할때가 되면 결국 Notion에서 내가 공부한 내용을 참고하여 작성하는 과정을 반복학고 있는걸 보며 무엇을 하고 있는것인가 생각이 들곤 했습니다.
WIL에 공부한 내용들을 카테고리별로 적는게 맞는가?
WIL에 함축시켜서 모든것을 적는것 보다는 차라리 주기적이진 않더라도 내가 정말 공부하며 느끼거나, 특정 문제를 해결했던 과정들을 블로그에 적는게 어떨까라는 생각이 들었습니다.
크게 도움이 되지 않는것 같다.
가장 인정하기 어려웠던 부분인것 같습니다. 이걸 인정하면 내가 한 것들이 무용지물이라는 말처럼 들렸기 때문입니다. 하지만, 크게 도움이 되지 않다고 느꼈기 때문에 과감히 그만두고 다른 방법을 찾아보겠습니다.
앞으로 한 주의 마무리는 블로그 글로 정리하기 보다는 노션을 통해 간단하게 정리하고 다시 새로운 한주를 준비하려 합니다.
그리고 블로그는 직접 진행하며 느낀것, 또는 공부한것, 문제 해결 과정들을 적어보려 합니다.