이때의 생각해볼 수 있는 상황들은 무엇이 있을까? 바로 단위테스트를 진행하는 목업 객체의 역할분담이다.
사실 data repository 테스트를 따로 진행한 후 비즈니스 로직 테스트는 단순히 then에 해당 비즈니스 로직이 호출되었는지 를 확인할 수 있다.
하지만 위에 작성해둔 코드로 실행시켜도 문제는 없다. 단순히 해당 계층의 테스트인데 다른 계층까지 점령해도 되느냐의 차이인 것 같다.
더 세분화한다면 Data Repository 테스트 / 비즈니스 로직 테스트 / MVC테스트 이렇게 세분화하여 진행할 수 있지만 결국엔 비즈니스 로직에서는 해당 비즈니스 로직을 호출할 때 모든 repository 메서드를 호출할 것이며, MVC 테스트를 진행할 때도 리퀘스트를 보내면 컨트롤러가 비즈니스 로직을 호출하게 될 것이다.
이에 대한 고민을 할 필요가 있으나, 현재 상황에서는 repository 자체에 여러 커스텀 메서드 (쿼리 dsl을 활용하거나 jpql을 활용해 직접 쿼리문으로 조회하는 메서드)가 존재하지 않기 때문에 비즈니스 로직에서 데이터계층까지 테스트하는 식으로 작성했다.
기존 실버1수준 까지 풀 수 있던 자료구조 골드 하위 문제 도전해보기 ⭕️ (실버 1문제로 타협)
이펙티브 자바 한 챕터 읽고 정리하기 / JPA 한 챕터 읽고 정리하기 (챕터 야바위) ❌(시간부족)
게시판 프로젝트 리팩토링 마무리 / 테스트 코드 작성 하고 끝내기 ❌(시간부족)
작성한 코드를 왜 그렇게 작성했는지에 대한 이유를 설명할 수 있어야 할 것 같다. 🤔
오늘 진행한 것들 🤔
힙 자료구조에 대해서 정리
재귀용법에 대해서 정리
힙 자료구조 알고리즘 1문제, 재귀 알고리즘 1문제 풀이
데이터베이스 실시간 강의
그룹스터디 인사이트 공유
오늘의 배운 점 🤔
힙구조에 대해서 배웠습니다.
이진 탐색 트리와 완전 이진 트리의 차이점에 대해서 알게 되었습니다.
이진 탐색 트리는 말그대로 탐색을 위한 구조이고 완전 이진 트리는 최소/최댓값을 빠르게 찾기위한 구조라고 정리했습니다.
완전 이진트리는 값을 무조건 왼쪽 끝 부터 삽입하고 최소/최대 정렬에 따라 부모 노드와 위치를 계속 바꿔가면서 삽입하고 (윗 노드의 값이 자식 노드의 값보다 크거나 같아야 한다 (최대힙일경우)) , 이진 탐색 트리는 부모 노드보다 값이 크면 오른쪽, 작으면 왼쪽 으로 삽입하는것을 알게 되었습니다.
재귀용법에 대해서 배웠습니다.
따로 정리라고 할것은 재귀 함수에 어떤 부분에 스탑을 넣을 것인지 조건을 잘 정하는게 관건인것 같았습니다.
자료구조부분은 생각보다 어려웠던 부분도 없었고 이미 구현이 되어있는 api 도 많았지만, 재귀나 정렬부터는 제가 직접 머릿속으로 고민해야될 문제가 많은것 같아서 차분차분 풀어나가야 할 것 같습니다.
멘토님께서 어떠한 문제를 잘 풀게 되는건 알고리즘 풀이의 실력이 늘은것이 아닌 해당 문제에 쓰이는 것에 대한 실력이 상승한거라고 하셨는데, 이제 다시 브론즈부터 풀어나가야 할 문제들이 생긴것 같습니다.
알고리즘 문제를 풀었습니다.
재귀 문제는 실버 5로 도전했다가 큰코를 다쳤습니다.
메소드가 스택에 어떻게 쌓이는지는 이해를 했지만, 직접 풀이를 해보려니 이해가 완전히 되지 않은 느낌입니다.
다시 브론즈부터 풀어봐야겠습니다.
힙 문제는 실버 1문제를 풀이했습니다.
이제 골드문제도 도전해도 되겠다는 생각이 들었습니다. (언제 한번 알고리즘 풀데이를 가져봐야겠습니다.)
데이터베이스 실시간 강의
JOIN, GROUP BY, HAVING, ALTER ,인덱스 에 대해서 배웠습니다.
GROUP BY 같은 경우에는 말그대로 같은 값을 가진 row 끼리 그룹별로 묶어서 관리할 수 있게 해줍니다.
인덱스 같은 경우에는 정리가 더 필요할 것 같습니다.
보통은 pk로 설정해버리면 pk가 되는 컬럼은 자동으로 인덱스가 생성되나, 그렇지 않은 컬럼들도 따로 인덱스를 생성 할 수 있습니다.
따로 제약조건을 붙여서도 관리가 가능했습니다.
JOIN 은 이너조인과 아우터 조인이 있으나 이너조인만 배웠습니다.
이너조인은 단순히 두 테이블간 겹치는 부분만 데이터를 가져와서 퍼즐처럼 붙여준다고 이해했습니다.
따로 찾아보니 아우터조인은 중복이 되지 않는 값까지 다 가져와서 중복이 되지 않은 값들을 null 로 입력후 붙여준다고 합니다.
having 은 where 과 비슷하지만, having 은 그룹으로 묶었을때의 로우에만 적용되고 where 은 개별 데이터별로 적용된다는 차이점을 갖고있습니다.
alter 는 테이블에 변경사항이 존재할때 수정하는 정도의 문법으로 알고있으면 될 것 같습니다.
그룹 스터디에서 인사이트 공유를 진행했습니다.
호승님은 네트워크, 컴퓨터구조에 대한 짤막한 정보들을 가져와주셨습니다.
메모리? 의 크기가 작을수록 컴퓨터의 성능이 좋아진다.. 라는 내용이 존재했었습니다. 생각해보니 맞는것 같습니다. 장치 하나하나가 굉장히 작아서 같은 면적에 많이 들어가고 감당이 된다면 그게 최고의 성능을 발휘 할 수 있겠다 생각했습니다.
네트워크같은 경우에는 lan과 wan 의 차이에 대해서 설명해주셨습니다. lan은 제한된 구역내의 네트워크, wan은 광범위한 구역의 네트워크 를 뜻한다고 합니다. 흥미롭네요
이안님은 토이프로젝트를 진행하시면서 겪었던 문제에 대해서 공유를 해주셨습니다.
주변에 누군가가 고민을 하는것을 같이 공유한다는것은 좋은것 같습니다.
저도 그 부분에 대해서 한번 더 생각할 수 있게 되어서 좋았습니다.
주변에 동료가 한계단 한계단 올라가는걸 볼때마다 짜릿한 기분이(?) 듭니다.
진혁님께서는 정적 팩토리 메소드에 대해서 공유를 해주셨습니다.
이펙티브 자바로 정리했던 내용인데 책 자체가 어려워서 솔직히 다시봐도 크게 이해되는 부분은 없었습니다.
하지만 또 다시 보게되니 그 이후로 배웠던 무언가와 연관지어서 생각할 수 있게 되었습니다.