2021-07-14(Wed)

Facts (사실, 객관)

  • 감사일기를 8일째 적는 것을 성공했다.

  • 루틴에 넣을 활동을 정리하기 시작했다.

  • 랜딩과제 피드백에 답하고 코드를 개선했다.

  • Table lock에 대해서 조사를 진행했다.

Feelings (느낌, 주관)

동기의 PR에서 save!를 잘못 쓴 케이스를 코멘트 주고 싶었지만, 다른 동료들이 이미 리뷰 중이었고 반드시 문제를 발견할거라는 생각에 섣불리 코멘트를 남기지 않았다. 아내와의 대화를 통해 검증해봤을 때, 같이 리뷰 받는 입장인데 굳이 다른 리뷰이에게 코멘트를 남기는건 관계에 썩 좋지 않을 것 같다는 판단이 들었기 때문이다. 흠 결과적으로 정성들여 썼던 코멘트는 폐기했지만, 관계는 지킨 것 같아서 다행이다. 소프트 스킬은 정말 어렵네.. 그냥 마냥 솔직하게 행동하고 싶긴하다.

다들 바쁘다보니 랜딩 과제 피드백은 재원님만 진행해주셨다. 괜찮다, 질 좋은 피드백과 키워드가 있다면 나는 잘 성장할 수 있다. 지금까지 잘해왔고, 앞으로도 잘해봐야겠다.

솔직히 루비스타일 가이드의 negative conditions 검사를 지양하라는 것은 아래 1,2,3번 케이스 중 3번 케이스를 선택하라는 것으로 이해했었긴 한데, 팀 컨벤션을 따라가자 :)

action if !obj.nil? # 1번 케이스
action if not obj.nil? # 2번 케이스
action unless obj.nil? # 3번 케이스

동시성 테스트를 하기 위한 유틸 메서드를 만들어보았는데, 나름 잘 만든 것 같아서 기분좋았다. Proc & yield 활용법을 만족스럽게 익힌 것 같아서 뿌듯하다.

Findings (배운 점)

DB, ruby와 rails를 파보는 하루였다.

DB

  • SQL column을 생성할 때, limit 구문을 활용해서 bytes까지 신경써서 만들어야하는 것을 새삼 깨달았다.

  • InnoDB의 Snapshot에 대해 학습했다.

  • Non repetable readPhantom read 의 차이점에 대해 학습했다.

    • 후자는 전자와 달리 이미 존재하는 데이터의 수정이 불가하지만, 새로운 데이터 생성은 가능한 상태에서 발생한다.

  • MySQL에서는 REPEATABLE READREAD COMMITTED 레벨 격리 수준에서 SELECT 쿼리로 데이터를 읽어올 때, 테이블에 lock을 걸지 않고, 트랜잭션 최초에 snapshot을 구축하여 데이터를 가져온다.

    • 때문에 REPEATABLE READ에서 phantom read도 발생하지 않는다.

  • WHERE 1=1 구문을 왜 쓰는지 확인하였다.

    • 디버깅이 쉽다.

    • 동적 쿼리 등 조건을 검사하며 쿼리를 날려야할 때 구문을 덧붙이기 쉽다.

Ruby와 Rails

  • ActiveRecord의 멤버변수에 값을 대입할 때, self를 붙여야하는지 여부를 확인하였다.

    • 결국 =과 함께 쓸 때는 self를 붙여야한다. = 연산자를 오버라이드한 메소드 호출과 지역변수 할당 간에 구별이 되지 않기 때문.

  • 동시성 테스트시 쓸만한 유틸 메서드를 만드는 방법을 익혔다.

    • Proc & yield를 응용하여, 원하는 메서드를 원하는 갯수의 쓰레드에서 원하는 횟수만큼 호출할 수 있도록 하는 유틸 메서드를 만들었다.

Affimation (자기 선언)

  • 나는 무지를 인지하여 적극적으로 드러내고,

  • 무지를 아는 영역으로 바꾸어내며,

  • 결국엔 성장하는 개발자다.

Last updated