컨디션이 좋지 않아 오전 스터디는 알고리즘 풀이만 하고 끝냈다.
이번 주는 os를 진행하지 않고 회의만 했다. 토론 포멧에 대해 얘기를 해봤는데, 잠깐잠깐 나오는 것도 재밌었다. 괜찮은 것 같다.
노을과 was 프로젝트를 재개했다. 지난 주에 회의한대로 진행했다. 간만에 하다보니 소스 파악이 좀 필요하긴 했는데, 테스트를 보니 금방 감을 잡았다. 테스트의 효과는 굉장했다.
끝나고 스크럼도 이어서 했는데, 요즘 생각해보고 있는 인수테스트와 단위테스트에 대해 애기를 나눠봤다. 이런식으로 얘기하는건 잘 되는데, 면접할때도 잘 풀어서 설명할 수 있는 방법을 생각해봐야겠다.
방법론 얘기를 하다보니 ATDD를 해보기로 결정했다. 그런데 그러기에는 선수되어야 하는 지식들이 있어 당분간은 공부하며 스터디처럼 진행하기로 했다.
어제에 이어서 로그인 기능을 마저 구현했다. 구현 이후에는 리팩토링을 약간 시도했다. 아무래도 e2e 테스트 처럼 구성이 되어 있었기에 단위로 나뉘어지지 않았던 것 같다.
스크럼을 하며 예전에도 발생했던 content-length에 관한 오류가 노을에게 발생한 것을 알게 됐다. 아무래도 이상해서 브라우저에서 직접 확인해봐도 서로 달랐다. 아예 파일 자체를 읽어오면 길이가 다르게 읽힌다. 현재 예상되는 원인은 깃 커밋 시 cr lf를 자동 변환 시켜주는 기능이다. 설정이 서로 다르거나 IDE나 gui 툴로 커밋한 것과 cli로 커밋한 결과가 달라지거나 하는 부분이 있을 수 있을 것 같다. 일단 단순 원인 파악은 했는데 내일 다시 얘기해봐야겠다.
간만에 이런식으로 개발을 진행하니 확실히 재밌다. 하루 한 시간으로 개발시간을 정해놓고 하니 그런것일 수도 있고. 다시 오랜 시간 진행되면 재미가 없어질 수도 있다. 지금은 좋다.
그 동안 보던 ATDD를 이어서 봤다. 계속 보다보니 TDD와 ATDD 이전에 인수테스트와 단위테스트에 대해 먼저 봐야하는게 아닌가 하는 생각이 들었다. 물론 해당 내용들이 들어가있긴 하지만 정확히 어떤 것이라고 명확하게 말할 수 있는 것 같지는 않다.
내일은 RestAssured를 학습해보기로 했다. 각자 구현을 해보며 익혀보기로 했는데 잘 진행됐으면 좋겠다.
리팩토링이 마무리되면서 몇 가지 문제점이 발생됐다. 아무래도 테스트 하기 쉬운 구조를 만드려고 하다보니 안 좋은 구조가 눈에 띄인 것 같다. 이외에도 기존에 고질적이었던 소켓 생성 시 포트가 겹치는 문제나, 이번에 새로 알게 된 테스트 케이스가 독립적이지 않은 문제를 발견해서 해결해야 할 것 같다.
스터디는 쉬고 회의만 진행했다. 회의가 꽤 길어졌는데, 우리가 만들 애플리케이션을 어떻게 바라볼지 관점에 대한 얘기를 주로 했다. 전체적인 컨셉과 각 프로세스에서 중요한 관점이 어떤 것인지에 따라 성격이 많이 바뀌는 것 같아 신기했다.
RestAssured를 테스트해봤다. 전체적으로 TestRestTemplate과 유사한 느낌이었다. 개인적으로는 최신 버전 쓰다가 잘 안 돼서 짜증이 살짝... 알고보니 스프링 부트 BOM에 버전이 등록돼있었다...
차이점은 TestRestTemplate은 RestTemplate을 고대로 가져다 쓴다. 따라서 RestTemplate을 써봤다면 익숙하게 쓸 수 있다. 또한 RestTemplate과 같이 요청의 결과가 객체로 바로 리턴된다. 반면, RestAssured는 프레임워크 단에서 할 수 있는 것이 많다. 가장 큰 차이점은 given-when-then 메소드를 이용해 BDD를 명시적으로 나타낼 수 있다는 것이다. 찾아보니 인수테스트가 사용자 시나리오 기반으로 작성되기 때문에 테스트 케이스 부터 BDD가 사용되는 것 같았다. 아마 이 점이 많이 사용하는 이유 중 하나인 것 같다.
단점은 harmcrest를 사용해서 assertJ에 비해 불편하다. 결과비교는 직접 객체로 받아와서 하는게 더 좋을 것 같다.
오늘은 각자 코드를 설명하며 실시간 리뷰를 해봤다. 이것 저것 아이디어도 나왔는데, 일단 오랜만에 하느라 감을 잃어서 처음에 제대로 작성하지 않았던 요구사항 먼저 다시 작성해봤다. 빼먹은 부분들이 있어 체크해두고, 넘어가다 쿠키와 세션에 대한 얘기가 나왔다. 어쩌다 넘어간건지 기억이 잘 안 나는데, 어쨌든 생각보다 꽤나 깊게 들어가봤다(생각보다 깊은거라 사실은 얕다). 가장 큰 수확은 세션과 쿠키의 차이였는데, 세션은 정보 교환자체나 단위를 뜻하고 쿠키는 저장하는 방식이라는 것이다. 지금까지 이게 제대로 이해가 되지 않아 많이 헤멨던 것 같다. 이걸 보고 나니 crsf 같은것도 잘 이해됐다. 또한 스티키 세션과 세션 클러스터링도 어느정도 이해가 되는 것 같다. 물론 다시 제대로 봐야하긴 하겠지만, 세션의 정의를 알고 다시 보니 근본적인 필요성도 이해가 됐다.
이외에도 iso 5계층도 살펴봤는데, iso레이어도 빨리 다시 봐야겠다...
둘 다 구현체로 아파치에서 제공하는 HttpClient를 사용한다(아마 톰캣에 들어있는 듯 하다. 그래서 톰캣과 같은 환경이라 하는 듯). 내부적으로는 소켓을 쓴다. was 프로젝트에서 하는 것과 유사한 방식인듯 하다. 나중에 까보고 참고해봐야겠다.
ATDD정리는 얼추 끝났다. 글 몇 개만 더 읽어보고 마무리하려는데, 이것 보다도 단위테스트나 인수테스트에 대한 개념을 잡는게 더 중요할 것 같기도 하다. 그리고 마틴파울러 아저씨가 쓴 글 중에 mock을 이용한 단위 테스트와 클래식한 단위테스트를 비교해둔 글이 있는데 그 것도 읽어보면 좋을 것 같다.
제이미가 와이어프레임을 그려와줘서 그걸로 얘기를 나눴다. 대충 정리는 된 것 같고, 백엔드 요구사항과 프런트 요구사항을 각자 도출해서 취합해보려 한다. 서로 빠진 부분을 찾을 수 있지 않을까 싶다.
12시부터 4시까지 알고리즘을 풀기로 했다. 혼자하면 집중이 흐트러지기 쉬운데 좋은 것 같다. 그동안 알고리즘 문제 정리가 잘 되지 않았었는데, 브랜치를 이용해 정리를 해보려고 레포를 새로 팠다. 지금까지는 나쁘지 않은 것 같다.
MockMvc 분석
잭슨 리퀘스트 바디 파싱 분석
알고리즘
OS
AWS 강의듣기
s3 이용
블로그
면접
오라클이나 postgresql
Powered with by Gatsby 2.0