본문 바로가기

기타 개발 스킬

(15)
블룸필터 (BloomFilter, 대규모 시스템에서 값에 중복이 있는지 확인하는 방법) 배경 개발하면서 이미 존재하는 값인지(중복된 값이 있는지)를 확인하는 기능은 굉장히 흔히 볼 수 있다. 회원 가입 기능에서 유니크(unique)한 값으로 쓰이는 식별자 즉, ID 중복 검사 같은 것이 그 예다. 🤔 사실 뭐 복잡할 게 있나? 싶은 마음이 든다. 중/소규모 애플리케이션에서는 데이터베이스에 적당히 인덱스를 만들고 조회 쿼리만 잘하면 존재하는지 여부 정도는 금방 나오기 때문이다. (심지어 PK는 자동으로 인덱스가 생성되어있다!) 하다 못해 개발을 조금이라도 해본 사람이라면 선형적으로 하나하나 전체를 탐색하는 것이 느리기 때문에 해시 테이블, Set, Map, B-Tree, … 같은 자료구조를 사용한다는 것을 알고 있다. 하지만 대규모 시스템에서는 값이 존재하는지 확인하는 방법에 대한 고민이 필..
분산 처리 시스템에서 유일한 식별자를 만드는 방법(twitter snowflake) 배경 프로그래밍을 하다 보면 유니크한 식별자 값이 필요한 경우가 있다. 객체를 식별하든 무언가 다른 것과 구분이 필요한 경우로 데이터베이스의 Primary Key나 UUID 같은 것이 그 예다. 필자의 경우 자바, 스프링, JPA 환경에서 프로그래밍을 주로 하는데 무의식적으로 JPA 엔티티의 ID 값으로 Long 타입을 사용했고 데이터베이스에 의존한 시퀀스 또는 auto_increment 값을 사용했다. 그러나 대규모 시스템에서는 이렇게 개발하면 문제가 발생할 수 있다. 대규모 시스템이라는 표현이 어떤 정량적인 방법으로 측정할 수 있는 건 아니어서 애매하지만 여기서는 이렇게 정의하겠다. 🦣 대규모 트래픽 + 대용량의 데이터 처리로 인해 “분산 처리”가 반드시 필요한 경우로 정의한다. (이럴거면 분산 시스..
2021년 회고🚩-준비되지 않은 중니어(?)의 미래 두 번째 회고 2021년에 2020년에 대한 회고를 첫 번째로 해보고 이번이 두 번째다. 이번에는 과거에 어떤 생각을 했었는지 회고 내용이 있으니 그것을 읽어보면서 어떤 것을 이뤘는지 이루지 못했는지, 이루지 못했다면 왜 그렇게 되었는지 생각해볼 수 있을 것 같다. (항상 뭐 한 것도 없는데 시간이 흘러 다음 해가 되었네? 하는 생각이 든다.) 2021년 목표와 회고 📘 보고 싶은 책 보기 자바 ORM 표준 JPA 프로그래밍, 친절한 SQL 튜닝, 오라클 성능 고도화 원리와 해법, 새로 쓴 대용량 데이터베이스 솔루션 (총 4권) 실패. 자바 ORM 표준 JPA 프로그래밍만 읽었고 나머지 3권은 구매조차 하지 못했다. 2022년에는 주니어를 넘어 중니어(?)는 되는데 기본에 충실하기 위해서 데이터베이스 특..
나는 어떤 응답을 만들었는가(부제 : 그놈의 '기초', '기본'은 무엇인가) 어떤 Http Response를 줄 것 인가? 글에서 다룰 주제 이번 글에서 다룰 내용은 기술적인 내용이나 경험(?)이 아닌 개발자라면 한 번쯤 생각해볼만 한 것? 정도 된다. 최근 들어 개발자 연봉 상승 소식도 많이 들리고, 개발자 수요도 많다하고, 비교적 진입 장벽이 높지 않다는 희망적인 소식 덕분에 많은 사람들이 소프트웨어 업계로 많이 오고 있다. 전직 또는 진로 변경을 하려는 사람들은 이미 현업에 있는 사람들에게 업계 질문을 많이 할 것이다. 그리고 현업에 있는 사람들의 조언을 잘 들어보면 거기에는 "기초만 잘 다지면..." , "기본적인 것만 할줄 알면..." 이런 말이 있을 것이다. 주의해야한다. 필자도 만 3년정도 경력이 있지만 그 기초가 뭔지 기본적인 것은 뭔지 명쾌하게 말할 수 없었다. ..
대규모 서비스를 지탱하는 기술 6~15장 (서버와 인프라 구축) 6~10장은 생략!! 과제라 정리하기 애매한 부분 6~10장까지는 데이터 압축, 알고리즘, 전문 검색 엔진 작성 등의 내용을 과제를 통해 보여준다. 그러나 읽어봤을 때 현시점에 정말 필요한 일인가? 하는 의문이 들어서 내용을 생략하려고 한다. 예를 들어 데이터 저장할 때 사이즈를 줄이기 위해서 데이터 압축을 애플리케이션 레이어에서 진행해야 하는지는 의문이다. 책에서는 과제로 정수 데이터를 압축하는 과제를 통해서 perl로 뭔가 하는거 같은데 실질적으로 그렇게까지 하는 회사가 몇 안 되는 것 같다는 생각이 들었다. 지인에게 물어봐도 압축까지 하지 않고 DBMS에서 자체적으로 최적화 해주기를 기대하는 것 같았다. 인코딩 디코딩하는데에 비용 즉, 오버 헤드도 생각하는 것 같다. (대용량 이미지 업로드, 썸네일..
대규모 서비스를 지탱하는 기술 1~5장 (문제 해결을 위한 근본 접근법) 대규모 서비스를 지탱하는 기술 서론 '대규모 서비스를 지탱하는 기술'라는 책을 공부하고 정리해보는 포스트입니다. 1~5장, 6~15장을 묶어서 2개의 포스트로 나눠 작성할 예정입니다. 2011년에 나온 책이고 절판되었지만, 개발자들 사이에서 현재까지도 회자되는 책이어서 읽어보았습니다. (중고 도서로 가격이 아주 비싸고, 국회도서관 우편 복사 비용도 비쌉니다... 😦) 웹을 지탱하는 기술 + 대규모 서비스를 지탱하는 기술 책 2권을 우편복사 요청했는데 비용이 너무 비싸더군요... ✔️ 주의사항 → 앞서 언급한대로 2011년 즉, 10년이 넘은 책이라 다소 변경된 내용이 많아 틀린 내용이 있을 수 있습니다. 이 책의 목적을 제 마음대로 해석했을 때, 대규모 서비스로 성장하면서 경험했던 내용을 간접 경험하며 ..
2020년 어느 개발자의 회고🚩(공부에 멋이 밴놈? 보자 보자 어디보자 넌 다음에 보자) 첫 회고 블로그를 거의 4년째 작성하고 있는데 회고는 처음이다. (사실 무슨 회고를 2021년에 작성하는지 모르겠다. 하하... 이것마저 늦어버린 게으름이란...) 2년 전 즈음에 다른 블로그들 보면서 다들 꾸준히 회고를 작성하길래 나도 해볼까? 생각은 했었지만 '내가 뭐라고...', '회고가 무슨 큰 의미가 있겠냐...' 하면서 안 했다. 😭 그런데 회고를 한 번은 해야될 때라는 생각이 들었다. 생각을 좀 정리해야 할 필요가 있다고 느꼈고 나에게 다시 자극을 주기 위해서다. 사실 이번에 이직한 회사에서 처음으로 프로젝트 회고라는 것을 해보면서 떠오르긴 했다. 2020년에 목표와 회고 📘 보고 싶은 책 보기 이펙티브 자바 성공. 연초에 시작해서 한 번 보고 모르는 거 대충 넘어가는 식으로 봤다. 그리고 ..
개발자 커뮤니티 활동의 중요성(with KSUG 페이스북 커뮤니티 1만명 가입 이벤트 당첨 후기) 개발자 커뮤니티 활동의 중요성 지금까지 개발과 관련된 포스트만 작성해왔습니다만, 이번을 계기로 필자(개인)의 생각도 가끔씩은 적어보려고 합니다. KSUG(Korea Spring User Group) 멤버 1만 이벤트 당첨 후기 KSUG(Korea Spring User Group)라는 우리나라 대표 스프링 커뮤니티에서 페이스북 멤버 1만을 달성하여 이벤트를 진행했었습니다. 그리고 제가 그 이벤트에서 당첨이 되었습니다..!! (KSUG 화이팅! 멤버 1만 달성 축하드립니다!!) KSUG와 Spring에 대한 저의 생각을 댓글로 남기면 추첨을 통해 인프런 강의 쿠폰, 책 등을 선물로 받는 것이었는데요. 저는 이동욱님이 쓰신 화제의(?) IT 도서. "스프링 부트와 AWS로 구현하는 웹서비스"라는 책을 당첨 선..