전체 글 (185) 썸네일형 리스트형 이펙티브 소프트웨어 테스팅 테스팅 책을 읽은 이유 프로젝트를 진행하는 과정에서 테스트 코드의 필요성을 절실히 느꼈다. 코드를 봐줄 상급자가 없거나, 같이 리뷰할 팀원들이 부족하다면 에러가 안 나도록 기도 메타로 가야 했다. 그러다 보니 프런트 개발자와 API를 맞추는 과정에서 에러가 자주 발생했고, 그때마다 새로 배포를 하는 불편함이 있었다. 이를 해결하기 위해 단위 테스트 등을 통해 개발한 기능에 대한 테스트를 작성해 발생할 수 있는 위험성을 줄이고자 했다. 하지만, 통합 테스트같이 복잡한 테스팅이 필요한 경우를 만나니 테스트 코드 작성도 막막해져 책의 도움을 받고자 했다. 이 책을 선정한 이유 난이도가 적당했다. 아직 현업 경험이 없는 학생이다 보니, 전문 테스팅 책을 보는데 이해하기가 무척 어려웠다. 시간을 두고 읽으면 이해.. SSAFY 2학기 특화 프로젝트 회고 공통 프로젝트에 이어 특화 프로젝트가 끝났다. 추천이란 스택을 가지고 주제를 선정해야 했기에, 어떤 것에 대한 추천을 할지 많이 고민을 했다. 그러다 팀원들 모두 맥주를 좋아하고 같은 문제를 겪는다는 것을 알고 맥주 추천 서비스 개발을 시작했다. 추석 연휴 및 전후로 하반기 공채가 겹치다 보니 프로젝트에 집중하기 힘들었던 점이 있었지만, 목표로 정한 기능들은 모두 구현했다. 팀원 모두가 좋아하는 소재를 가지고 공통된 문제점을 해결한다는 것은 무척 의미 있는 경험이었다. 모두가 맥주를 좋아했고, 새로운 맥주에 도전해 보고 싶은데 뭘 마실지 막막한 문제가 있었다. 아이디어 기획도 잘 풀렸고, 토론 과정에서 맥주 고르는 기준에 대한 새로운 관점도 알게 됐다. 왜 주제를 이걸로? 생각보다 단순했다. 나: 오늘 .. SSAFY 2학기 공통 프로젝트 회고 7주간의 공통 프로젝트 기간이 끝났다. 부족한 실력이지만 팀의 백엔드 리드가 돼서 공수 기간에 맞춰 MVP를 정한 뒤, 각 팀원이 하나의 기능을 전담할 수 있도록 초기 문서화를 진행했다.또한, 인프라를 관리하고 merge conflict 시 상황별 해결책들을 제시해 주면서 통해 팀원들이 목표로 했던 spring 스택의 숙련도 향상, 깃을 통한 협업 능력 향상을 할 수 있도록 했다. 결과는 꽤 성공적이었다. 예상했던 것보다 MVP 구현이 2일 빠르게 끝났고, 시연도 매끄럽게 진행됐다. 특히 초반부 브랜치 병합 등에 대해 어려움을 겪었던 팀원들이 후반부에선 내 도움 없이 매끄럽게 진행했다. 물론, 병합 과정에 자신이 붙은 나머지 잘못된 코드들이 병합되던 문제도 있었지만, 그런 문제를 해결하는 것이 리더로서 .. 레드 블랙 트리(red black tree) 레드 블랙 트리란 AVL와 비슷하게 자가 균형 이진 탐색 트리지만 다른 점이 있다. AVL에선 삽입, 삭제가 발생할 때마다 균형을 조정해야 하는 문제가 있다. 아무리 log(N)의 시간 복잡도를 보장한다 해도 수천만의 쓰기 작업이 발생하면 Nlog(N) 시간 복잡도로 문제가 복잡해진다. 이런 문제를 해결하기 위해 레드 블랙 트리에선 삽입, 삭제 작업에서 발생하는 균형 조정을 느슨하게 대처한다. 하지만 이로 인해 탐색에선 AVL보다 균일한 시간 복잡도를 제공하진 않는다. 레드 블랙 트리의 성질 루트 노드는 언제나 블랙 노드다. Nil Node 우리가 생각하는 말단 노드의 하위 노드에 암묵적으로 Nil Node가 생긴다고 보면 된다. Nil Node는 실제 데이터가 아니기 때문에 트리의 높이 계.. 이진 힙(binary heap) 이진 힙이란? 완전 이진트리(Complete Binary Tree)의 한 형태로 힙 정렬, 또는 우선순위 큐에 사용된다. 이진 힙은 다음 2가지 특성을 가지고 있다. 완전 이진 트리와 동일하게 모든 레벨이 완전히 채워져 있다. 마지막 레벨은 왼쪽부터 순서대로 채워진다. 모든 부모 노드는 자식 노드보다 큰 값을 가진다. 이 경우, 최대 힙(Max Heap) 이라고 한다. 반대로 부모 노드가 자식 노드보다 작은 값을 가지면 최소 힙(Min Heap)이라고 한다. 이 글에선 최소 힙을 기준으로 설명한다. 힙 선언 class Heap { private int[] heapArray; private int tail = 0; private int capacity; public Heap(int capacity) { t.. AVL 트리 (Adelson-Velsky and Landis Tree) 이진 탐색 트리의 문제점 상위 노드를 기준으로 작으면 왼쪽, 크면 오른쪽으로 보내기 때문에 들어오는 순서에 따라 한 방향으로 치우칠 수 있다. 우리는 이것을 치우친 이진 트리(Skewed Binary Tree)라고 부른다. AVL 트리란? 모든 리프 노드들의 레벨 차이는 1 이하 트리의 높이는 logN 삽입, 삭제, 탐색 연산에서 최악의 경우에도 O(logN)의 시간 복잡도를 보장한다. Balance Factor 각 노드는 아래 공식으로 balance factor 수치를 계산해 트리의 균형 유무를 판단한다. balance factor = 왼쪽 서브 트리 높이 - 오른쪽 서브 트리 높이 balance factor > 1: 왼쪽 서브 트리에서 불균형 발생 balance factor < -1: 오른쪽 서브 트.. 이진 탐색 트리 (Binary Search Tree) 이진 탐색 트리란 이진 트리에서 데이터의 크기를 판단해 탐색하는 트리 부모 노드를 기준으로 작은 값은 왼쪽 서브 트리로, 큰 값은 오른쪽 서브 트리로 배치된다. 따라서 맨 왼쪽 리프 노드는 트리의 최솟값이고, 맨 오른쪽 리프 노드는 트리의 최댓값이다. 이를 이용해 값을 찾을 때 대소 비교를 통해 탐색 방향을 정한다. 매 탐색마다 경우의 수가 절반씩 줄어들기 때문에 삽입, 삭제, 탐색에서 logN의 시간 복잡도를 가진다. 이진 탐색 트리의 문제 오름차순 또는 내림차순 된 리스트를 순차적으로 저장하는 경우 트리의 방향이 한쪽으로 치우치는 편향 이진 트리가 된다. 이경우, logN의 시간 복잡도가 아닌 O(N)의 시간 복잡도가 발생한다. 노드 정의 private static class Node { int da.. 트리, 이진트리 트리란? 노드들이 연결된 비선형 자료구조. 루트 노드라 불리는 최상위 노드에서 시작해 여러 하위 노드로 확장되는 계측정 구조. 한 노드가 여러 노드와 연결돼 있다. 트리는 사이클이 존재하지 않는다. 즉, 탐색을 수행할 때 시작 노드와 종료 노드가 동일한 경로가 없다. 트리의 용어 노드(Node): 트리의 기본 단위 루트 노드(Root Node): 트리의 최상위 노드. 트리는 하나의 루트 노드를 가진다. 부모 노드(Parent Node): 자식 노드를 가지는 노드 자식 노드(Childe Node): 특정 노드의 하위 계층에 있는 노드 리프 노드(Leaf Node): 자식 노드를 가지지 않는 노드 즉, 최말단 노드 형제 노드(Sibling Node): 같은 부모 노드를 둔 노드들 레벨(Level): 지정된 .. 이전 1 2 3 4 5 6 7 8 ··· 24 다음 목록 더보기