레벨2가 시작한지도 2~3주가 지났다. 매주차 회고를 쓰려고 노력했지만, 바쁘다는 핑계와 귀차니즘으로 회고를 조금씩 미루게 되는 듯하다. 대신 학습한 내용들을 꼼꼼히 포스팅하는 데에 좀 더 집중했다.
이번 포스팅에서도 약간의 귀차니즘 때문에 아주아주 간단하게 회고를 작성할 듯하다 (ㅎㅎ..) -> 쓰다보니까 길어졌다...
레벨1에 이은 체스 미션
레벨1과 다른 점이 있다면, 스프링으로 체스미션을 구현해야 한다는 점이었다. 스프링을 사용해본 적은 있었지만, 얕은 지식으로 기술만 사용하고 있었던 상태였기 때문에 이번 미션이 마냥 쉽지는 않았다. 외래키 무결성 제약 조건 위배 등 db 에러도 많이 겪고, Javascript 지식 부족으로 인한 400 에러도 많이 보았다. 특히 스프링에 익숙하지 않아 많은 고통을 받았던 직렬화/역직렬화 에러는 따로 포스팅을 했을 정도였다.
하지만 역시 프로그래밍은 두드려 맞으면서 배운다고. 이번 미션을 통해 스프링에 대한 감을 잡을 수 있었다. Http와 db에 대한 cs 지식의 필요성을 느껴 따로 공부를 하기도 했다. Http 필요성은 api 생성 부분에서 느꼈다. 우리가 구현한 도메인 로직과 dao 로직을 다뤄주는 서비스에서 기능을 수행하고 결과물(dto)를 반환해주면 컨트롤러에서 ResponseEntity에 담아 요청에 대한 응답으로 보내준다. 이 때, Http Status Code를 200으로 할지, 201로 할지, 에러가 발생했다면 400일지, 500일지 결정해주어야 했다. Http Method 종류도 굉장히 다양했다. GET, POST만 알고 있었던 나에게 PUT, PATCH, DELETE 까지 다뤄볼 수 있었던 좋은 경험이었다. db 공부 필요성은 @Transactional 어노테이션에 대해 공부하면서 느꼈다. 웹 기반 체스 2단계 미션은 '동시에 여러 명이서 게임하기'가 주제였는데, 이 때 트랜잭션이 잘못 처리되면 rollback을 해주어야 했고, 동시성 문제가 발생할 수 있으므로 isolation level을 설정해주어야 했다. 이 과정에서 트랜잭션 ACID 성질 등 db 공부까지 함께 진행하게 됐다. 시간이 난다면 db 책을 한 권 읽어봐야겠다.
내 최종 결과물은 여기서 볼 수 있다.
https://github.com/kth990303/jwp-chess
지원 플랫폼 근로 _ 자동차 레이싱카
코틀린으로 우아한테크코스 지원플랫폼을 개발하기 전에, 코틀린 문법부터 익힐 필요가 있었다. 그렇기 때문에 우리는 우아한테크코스 레벨1 때 진행했던 자동차 경주미션을 코틀린으로 변환하는 작업을 진행해보는 시간을 가졌다. 이 역시 페어프로그래밍으로 진행되었으며, 내 페어는 애쉬였다. 애쉬 아일랜드 노래를 좋아해서 애쉬로 지었다고 한다. 나 또한 R&B, 감성랩을 좋아하는 편이어서 노래 스타일이 잘 맞았다! 후에 서술하겠지만, 애쉬는 나와 같이 우테코 근처 헬스장을 같이 등록한 `튼튼이클럽 멤버`이다 ㅎㅎ
우리의 목표는 java 관련 import문을 아예 제거하는 것이었다. 실제로 막히는 부분이 있어 구글링을 할 때 나오는 블로그들의 대부분이 java 관련 import문을 사용하는 것을 흔히 볼 수 있었다. 코틀린스럽게 레이싱카를 만들어보고 싶었기 때문에 열심히 공식문서도 찾아보고 구글링도 한 결과, 5~6시간 정도 소요하여 원하는 결과물을 만들 수 있었다!
data class Car(val name: String, var position: Int = 0) {
init {
validateCarName(name)
}
private fun validateCarName(name: String) {
require(!isEmptyName(name)) { EMPTY_NAME_ERROR_MESSAGE }
require(!isIllegalLength(name)) { MAX_NAME_LENGTH_ERROR_MESSAGE }
}
//...
}
JAVA와 다른 점이 꽤나 많다. 위 코드만 봐도 자바랑 꽤나 다르다는 것을 알 수 있다. 그래서 이 참에 문법 정리도 할 겸, 블로그에 코틀린 문법을 포스팅해놓았다.
https://kth990303.tistory.com/312
https://kth990303.tistory.com/314
이후에 제이슨이 완성된 코드를 피드백 및 리팩터링해주었다. 일단 컨벤션 체크부터 failed가 떴다 (...) 다행히 우리뿐만 아니라 대부분의 크루들에게서 failed가 떴는데, 터미널에 아래와 같이 입력해주고 successful이 떠야 했다.
./gradlew ktlintCheck
EOF 개행 문자 관련, { } 사이사이 공백, 세미콜론 존재 등으로 인해 check에서 많이 걸렸던 기억이 난다. 앞으론 주의해야겠다.
코틀린이 확실히 자바에 비해 편리한 면도 있지만, 아직 자바가 좀 더 익숙한 듯하다. 열심히 공부해서 지원 플랫폼 잘 만들어볼 수 있도록 해보자!
매트 스터디 _ Http
매트가 Http 스터디를 열었다! 스터디 기간은 길지도 짧지도 않은 6주! 너무 길면 이후에 지치기 때문에 기간도 적당하고 일주일에 1~2시간 투자하면서 http 공부를 할 수 있는 좋은 기회였다. 마침 Http 공부의 필요성을 느꼈던 나는, 소식을 듣자마자 바로 가입했다~
https://github.com/woowacourse-study/2022-http-web-basic-for-all-developer
첫주차에는 라쿤이 발표를 했다. 라쿤이 발표 중간중간에 질문받는 시간을 꽤 많이 가졌는데, 오히려 이 방법이 되게 좋았다. 질의응답하면서 토론을 진행하다보니 모르는 것에 대해 새롭게 알게 되기도 하고, 안다고 생각했던 것도 다시 한 번 생각해보는 시간이 되었다.
발표가 끝나고 나서 주디가 무려 9개 (!!!)의 질문을 했다. 그런데 알고보니 질문이 아니라 퀴즈면접 타임이었다(...) 주디는 이미 cs에 대한 지식이 꽤 있었어서 다른 사람들이 알면 좋을 만한 내용들을 공유하고자 질문 겸 공유를 하려고 했던 것이라 한다. 덕분에 많은 걸 배울 수 있었다. 특히 난 프로세스와 스레드 개념에 조금 혼란스러웠는데, 이번 시간에 정립할 수 있었다.
지난주에는 스터디가 끝나고 바로 근로 온보딩 회의를 하러 갔기 때문에 (사실상 핑계긴 하다 ㅎㅎ...) 위 discussion에 작성하지 못했다.
이번 돌아오는 월요일엔 Discussion에 댓글 좀 남겨보도록 해야겠다.
내 1주차 스터디 정리글은 여기서 볼 수 있다!
https://kth990303.tistory.com/311
튼튼이 클럽 회식
우테코 튼튼이방에는 6명의 인원이 존재한다. 나, 호호, 슬로, 리버, 쿼리치, 애쉬. 왜 튼튼이방이냐 하면, 레벨2 시작 기념으로 종강때까지 헬스장을 같이 다니기로 했기 때문이다ㅋㅋㅋ 원래는 나, 호호, 슬로 3명이었는데, 리버와 쿼리치가 같이 들어왔고, 애쉬도 함께 하기로 했다. 이제 곧 주디, 크리스, 페퍼도 들어온다는 소문이 있던데~ 빨리 만나길 기원한다.
새로운 미션이 시작되기 전날인 월요일 오후 7시. 튼튼이클럽 멤버들끼리 생활맥주에서 회식을 하기로 했다! 우연의 일치로 오찌, 소주캉, 포키, 토닉도 생활맥주에서 술을 마시기로 했다고 한다.
회식하면서 느낀 점은.... 진짜 이 사람들, 헬창이다. 술 마시는 척하면서 몰래 운동하는 사람들이 있었다 (...)
쿼리치는 뭉친 근육을 풀면서 500cc 맥주잔으로 전완근 운동을 하고 있었다... 리버랑 애쉬도 몰래 운동한 것 같은데 흐음..
그리고 이 클럽 멤버들. 어떤 얘기를 해도 기승전 운동으로 끝난다ㅋㅋㅋ 꽤 재밌었다.
특히 호호가 진짜 대박이었다.
크리스: 호호 내일 뭐할거예요?
일반인의 대답: 내일 ~~에서 밥먹고, 우테코에서 코딩하다가 집갈 거 같아요!
호호: 내일 가슴이요!
... 진짜 괜히 튼튼이 클럽이 아닌 것 같다.
그렇게 즐겁게 논 다음날,
코로나 확진 판정을 받았다.
튼튼이 클럽 멤버들은 비상에 걸릴 수밖에 없었고, 다들 코로나 검사를 빠르게 진행한 결과, 나, 쿼리치, 애쉬가 코로나 확진 판정을 받았다. 다행히 호호, 슬로, 리버는 음성인 듯하다. (역시 튼튼이방... 강철 면역)
지금은 격리 5일째인데, 무엇보다 격리당해야 한다는 점이 제일 힘든 듯하다. 빨리 격리풀리길 기원 ㅜㅜ
코로나에 걸려서 비실이방이 되나 했지만, 이렇게 코로나 면역도 생기게 되니까 더더욱 튼튼해지는 걸로 생각하기로 했다! ㅎㅎ
빨리 격리가 풀리고 다같이 운동하면서 즐겁게 놀고 싶다.
레벨2 지하철 노선도 미션
4주, 어쩌면 그 이상동안 함께한 체스를 떠나보내고 드디어! 레벨2 지하철 노선도 미션이 시작됐다. 미션이 시작되면서 페어를 랜덤으로 뽑았다. 이 시간은 항상 긴장되고 두근두근대는 듯.
이번 페어는 아키였다! 아키는 레벨1 때 파랑, 베루스 등과 함께 구구조였다고 한다. 이번 미션엔 내가 코로나 확진을 받는 바람에 slipp 게더에서 온라인으로 마이크를 키고, code with me로 진행했다. code with me가 중간에 튕기기도 하고, 내가 기침을 하기도 해서 환경이 썩 좋진 못했다. 하지만 서로 배려해주고 호흡도 잘 맞았어서 이틀만에! 미션을 끝내고 PR을 보낼 수 있었다~
(매트가 github으로 code with me를 대체할 수 있으며, 훨씬 좋다고 하는데 나중에 함 알아봐야겠다... code with me 너무 짜증.)
이번 미션에는 e2e 테스트를 작성하는데에 초점이 맞춰져있었다. 그동안 우리는 단위 테스트만을 진행했고, 컨트롤러는 별도의 테스트를 진행하지 않았었다. 하지만 이번 수업을 듣고 e2e test를 작성하면서 api가 제대로 응답되는지, 우리가 원하는대로 body에 값이 담기는지 테스트함으로써 이제 컨트롤러까지 테스트할 수 있게 됐다!
내 e2e test 정리글은 여기서 볼 수 있다.
https://kth990303.tistory.com/315
전체 테스트를 돌릴 때 context 분리가 발생하지 않아 test failed가 뜨는 현상이 발견됐었다. 아키와 나는 이 부분에서 꽤 고민하다가, 일단 지하철역 이름을 중복되지 않게 임시방편으로 수정한 후에 리뷰어 의견을 들어보기로 합의했다. 이후에 나는 SubwayApplicationTest에 @DirtiesContext를 붙여주는 방법으로 수정했는데, 아키는 어떻게 수정했을지 궁금하다 ㅎㅎ
아키와 성공적으로 페어를 마치고, 술 얘기가 나왔는데 코로나라 내가 술을 못먹는게 너무 아쉬웠다. 그렇게 얘기를 나누다가 파랑, 베루스 얘기가 나왔다. 베루스는 나랑 같은 레벨2 데일리조여서 같이 술을 마시면 좋겠다는 얘기가 나왔다. 파랑은 블랙잭 페어 이후로 꽤나 친하게 지내기도 했고, 파랑도 술을 꽤나 좋아하기 때문에 나중에 기회가 되면 아키랑 파랑, 베루스랑 함께 술을 마셔보고 싶다!
튼튼이클럽, 코틀린, 스프링 등등.
레벨2에도 즐겁고 신기한 것들로 가득차있었다.
이번 레벨2가 끝날 때쯤에 나는 얼마나 성장해있을까?
일단 다 제쳐두고 코로나 격리가 빨리 풀렸음 좋겠다~
튼튼이 클럽이랑 운동도 하고 싶고, 우테코 크루들이랑 술도 마시고 싶고, 선릉캠에서 밤10시까지 빡세게 코딩도 해보고 싶다.
'JAVA > 우아한테크코스 4기' 카테고리의 다른 글
[220525] Spring 경로 조회 미션을 하면서 배운 점 (5) | 2022.05.25 |
---|---|
[220512] Spring - 지하철 노선도 미션을 통해 배운 점 (4) | 2022.05.12 |
[220419] 우아한테크코스 레벨2 개학 후기 (6) | 2022.04.20 |
[220208 ~ 220408] 우아한테크코스 레벨1 후기 (0) | 2022.04.17 |
[220406] 체스 미션(1~5단계)을 통해 배운 점 (4) | 2022.04.07 |