이번주차는 7장이다. 트랜잭션 부분.. 정합성 측면에서 정말 중요하다고 느낀다. 최근 회사에서도 트랜잭션 관련하여 오류 하나가 있었는데 더욱 중요하다고 느껴졌다. 이 장을 통해 다양한 트랜잭션이 막을 수 있는 문제들이 무엇이 있고 어떻게 해결하는지 알게되었다. 완화된 격리 수준 1. Read Committed가장 기본적인 트랜잭션 격리 수준. 두 가지를 보장한다.커밋된 데이터만 읽을 수 있다 (더티 읽기 방지)커밋된 데이터만 덮어쓸 수 있다 (더티 쓰기 방지)2. Snapshot Isolation(MVCC)MySQL 은 MVCC를 격리 수준마다 어떻게 사용하는지- 각 행에 숨은 컬럼: DB_TRX_ID(이 행 마지막 수정한 txid), DB_ROLL_PTR(undo log 포인터 = 옛 버전 체인).- ..
이번주차는 6장과 7장이었다.7장은 추가 문서로 나중에 다시 쓰겠다.(6장만 이번주 하는 줄 착각했다..ㅎ) 6장 - 파티셔닝 왜 파티셔닝하나복제가 같은 데이터를 여러 노드에 복사하는 것이라면, 파티셔닝은 데이터를 쪼개서 노드마다 다른 조각을 두는 것.목적은 확장성. 실제 시스템에서는 복제와 파티셔닝을 결합해서 쓴다. (각 파티션을 다시 여러 노드에 복재해 장애 내성까지 확보한다.) 핵심 목표: 부하를 고르게 분산하는 것. 이게 깨지면 skew(쏠림) 이며, 부하가 몰린 파티션은 hot spot. 기본키 기준 파티셔닝 (키-값 데이터를 나누는 방식)해시 방식의 절충안이 복합 키ex) 카산드라는 키의 앞부분으로 해시 분산, 뒷부분으로 파티션 안에서 정렬을 유지한다. (한 사용자의 이벤트를 시간순으로 하면..
이번 주차는 꽤 재밌는 5장, 복제이다. 여기부터 본격적인 분산환경에서 발생하는 문제들을 다루고 해결책을 설명한다. 복제가 필요한 이유 지연 시간 감소 - 데이터를 사용자와 지리적으로 가깝게 둔다.내결함성 - 일부 노드가 고장 나도 시스템이 계속 동작하도록 한다. 확장성 - 읽기 질의를 처리하는 장비 수를 늘려 확장한다. 데이터가 안 변하면 복제는 그냥 한 번 복사하면 끝이다. 복제가 어려운 건 변경을 어떻게 전파하느냐의 문제가 있기 때문이다. 문제와 해결오래된 값일 때 어떻게 해야될까?문제는 리더의 변경이 팔로워에 즉시 도달하지 않는다는 데 있다. 리더에 쓴 내용이 팔로워에 반영되기까지의 시간차를 복제 지연이라 한다.이 시스템이 보장하는 것은 최종적 일관성 뿐이다. 쓰기를 멈추면 팔로워들은 언젠가는..
이번 주차는 4장 부호화와 발전에 대해 알아보았다. 애플리케이션은 필연적으로 시간에 따라 변한다. 첫 문장으로 시작한다.입사한지 일주일정도 돼서 먼저 기존 소스코드를 파악하는 데 대부분의 시간을 보내고 있다.이렇게 다시 소스코드나 ERD 구조를 하나하나 깊게 보는 것은 정말 오랜만이었다. 보면서 느낀게 위 첫문장과 일치하였다. 필드가 추가되기도 하고 어떤 테이블은 이제 사용하지 않기도 한다. 이 장에서는 이 변화에 대응하기 위해 어떻게 할 수 있을지 해결책을 알려주었다. 먼저 호환성 개념을 알아야 됐다. 하위 호환성: 새로운 코드는 예전 코드가 기록한 데이터를 읽을 수 있어야 한다. 상위 호환성: 예전 코드는 새로운 코드가 기록한 데이터를 읽을 수 있어야 한다. (이게 더 어렵다) 크게 1부와 2..
데이터 중심 애플리케이션 설계 1,2,3장내용이 꽤 많아 개인적으로 인상적인 부분들 위주로 작성하였다.1장 - 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션 기억에 남는 문구단일 도구로는 더 이상 데이터 처리와 저장 모두를 만족시킬 수 없는 과도하고 광범위한 요구사항을 가지고 있다. 이를 해결하기 위해 작업은 단일 도구에서 효율적으로 수행할 수 있는 테스크로 나누고 다양한 도구들을 애플리케이션 코드를 이용해서 서로 연결한다. 예시)비동기 테스크 - Message Queue검색 요청 - Elastic Search읽기 요청 - Cache 느낀점:하나의 도구로 모든 상황을 해결하려고 하는 것이 아니라 각각의 용도에 맞는 도구를 선택하고 서로 연결해서 사용해야된다고 느꼈다. 나 또한 사이드 프로..
드디어 나도 최종합격을 하며첫 회사로 스타트업 백엔드 인턴으로 들어가게 됐다.작년 9월부터 면접을 보기 시작했으니 9개월 만에 취업성공을 했다. 백엔드는 워낙 포화상태라 더더 힘들었던 것 같다. 특히 AI로 인해 시장에서 요구되는 능력치는 날이 갈수록 올라갔다. 코딩테스트, 과제역량, CS 기본기 등등 프로젝트말고도 준비해야 될 것은 많았다. (취준생들 정말 응원합니다)도움 되었던 것은 한 세미나에 온라인 참석을 한 적이 있다. 토스,무신사,채널톡을 합격하신 분이 강연자였는데,빅테크 세미나들을 많이보고 그중 하나를 골라서 프로젝트로 만들어서 이력서에 녹였다는 것이었다. 위 말대로 나도 똑같이 하진 않았지만 빅테크 세미나(유튜브나 기술블로그)들을 최대한 많이 보고 노션에 정리했다.예전에는 기본기만 잘하..
다같이 계속 하다보니 서로 사는얘기하는 빈도도 늘어나는 것 같다~ ㅋㅋ다같은 취준생 입장이다 보니 공감대 형성이 잘 되는 것 같아서 좋다. 이번에 나는 preparedstatement 와 statement차이점에 대해 정리하였다. https://www.notion.so/319025901eb8802a98cbf0abeda56183?v=319025901eb880a2a618000c2d63983e&p=35dfa15530f78008b75dd9f6e49f8c48&pm=s 우리의 애플리케이션에서 PreparedStatement는 어떻게 동작하고 있는가 | Notion이 글의 목적:www.notion.so사실 이 부분까지 깊게 볼 일이 없어서 잘 모르는 부분이긴 했다. 하지만 평소에 사용하는 db io와 연관되어 있어서..
이 책은 작년 여름에 인프런 멘토한테 추천받았던 책이다. 그 회사에서 교과서로 취급받는 정도로 유명하고 좋은 책이다라고 들었다.나도 처음에 도서관에서 우연히 발견했을 때 제목부터 흥미로워서 빌렸다가 1~2장에서 그만둔 기억이 있었다. (글을 읽어도 이해가 잘 안돼서..)읽어야지 하다가 올 해 3월부터 완독을 목표로 시작하였다. 내용은 5~9장이 나한테 큰 도움이 되었던 것 같다. 분산환경에서 어떤 문제가 발생하고 해결책들이 있는지 이 과정들을 자세히 설명해주었다. 4월에 1회독 마무리를 했지만 뭔가 배운것이 제대로 머릿속에 정리가 안 된 것 같아서 노션에 정리하기도 하였다.https://www.notion.so/35afa15530f7804ebf24c5e2e6c7a192 (노션 정리 링크) 분산환경에서 ..
늦었지만 저번주에 진행한 면접 스터디 내용을 복기하려고 한다. ㅈㅎ님과 나 이렇게 발표했다. ㅈㅎ님 내용은 토스 테크 블로그의 https://toss.tech/article/34481 캐시를 적용하기 까지의 험난한 길 (TPS 1만 안정적으로 서비스하기)TPS가 평균 1만, 최대 2만까지 늘어난 약관(terms) 서버에 안정적인 서비스 제공을 위해 캐시를 적용한 이야기를 들려드리려고 해요.toss.tech해당 아티클을 발표해주셨다. 내용은 약관 서비스를 캐시 처리를 통해 db 부하를 감소시키려는 목적이었다. 조건: Strong Consistency를 유지해야 된다.약관은 개인정보와 밀접하여 철회한 이후에도 개인정보 공유가 되는 문제가 발생하면 안되기에 전략: Look-aside 패턴 이유: db의 정..
4월 초에 벚꽃 핀다고 감성에 빠져서 카페에서 회고 썼던게 엊그제 같은데 벌써 4월 마지막 날이다..4월은 그래도 몇번의 면접 경험이 생겼어서 실전 경험을 쌓을 수 있는 시간들이 되었던 것 같다. 처음에는 스타트업, 중소기업 등등 아무 곳이나 붙여주면 간다는 마인드였지만, 그래도 이왕 가는거 더 준비해서 좋은데 가고 싶은 마음이 요즘 들고 있다. 한게 아까워서.. 3 곳의 면접을 봤다. 첫번째 면접1. 우리회사 뭐하는지 아냐 -> 설명해봐라 2. btree랑 클러스터링/논클러스터링 부분 3. 자바 동시성 제어4. 이력서 기반으로 트러블 슈팅 2개 정도 확인 및 한 단계 정도 꼬리질문5. 궁금한 것 있는지 두번째 면접1. 인사담당자가 기본적인 이력 확인 및 자기소개2. 우리회사가 어떤 일을 하는지 아는지 ..