본문 바로가기

전체 글295

스타트업 서비스에 대한 생각 사람들이 기본적으로 어떤 서비스를 이용한다는 것은 그 서비스를 이용했을 때, 자신에게 돌아오는 가치가 있기 때문이다. 이러한 가치를 명확히 설명할 수 없는 제품은 망한다. 진짜 망한다.... 일단 어떻게든 끌어왔다고 하더라도 그 이후에 지속적으로 서비스를 이용하게 만드는 것은 다른 문제이다. (다시 보니 이 분야에서 자청님은 클라스가 다른 사람이었다...) 예를 들어 채용 사이트라고 해보자. 사람을 고용하려는 회사나 취업을 하려는 사람들이 채용 사이트를 이용한다. 특정한 목적을 가진 사람들을 타겟으로 하기 때문에, 지속적으로 서비스를 이용하게 만들기 좋다. 이미 존재하는 사용자 층이 있고 그들이 뛰어놀 수 있는 환경을 제공하면 되는 것이다. 단순히 '~한 분야에 관심이 있는 사람들끼리의 모임' 같은 느.. 2025. 5. 3.
[Bitcoin] 채굴과 합의 채굴채굴은 새로운 비트코인이 통화 공급량에 추가되는 과정이다. 또한 채굴을 통해 사기거래나 이중지불 문제로부터 비트코인을 보호한다. 채굴자들은 비트코인 네트워크에 처리 능력을 제공하고 그에 대한 대가로 비트코인을 받는다. 채굴자들은 새로운 거래들을 승인한 후 전 세계에 존재하는 장부에 승인된 거래들을 기록한다. 새 블록에는 지난 블록 이후에 발생한 거래들이 들어 있으며 10분마다 채굴되어 블록체인에 추가된다. 블록의 일부가 되어 블록체인에 추가된 거래는 '승인' 되었다고 간주되며, 승인된 거래를 전송받은 새로운 소유주는 해당 비트코인을 소비할 수 있게 된다. 채굴자들은 채굴 작업에 대해 2가지 종류의 보상을 받는다. 하나는 새 블록 각각에서 새로운 코인을 생성하는 것이고, 나머지 하나는 해당 블록 내에.. 2025. 4. 30.
[Bitcoin] 블록체인 블록체인블록체인 데이터 구조는 거래가 담겨있는 블록이 그 이전 블록과 연결되어 있는 형태의 정돈된 목록이다. 블록체인 내에 있는 블록 각각은 해시를 이용해서 식별된다. 해시는 블록의 헤더에서 SHA256 해시 알고리즘을 이용해서 생성된다. 각 블록은 블록헤더에 있는 '이전 블록 해시' 필드를 통해 이전 블록(부모 블록)을 참조한다. 블록은 단 1개의 부모 블록을 가지지만 일시적으로 여러 개의 자식 블록을 보유할 수 있다. 여러 개의 자식 블록은 블록체인 분기가 발생하는 동안 생성된다. 블록체인 분기란 다른 채굴자들에 의해 거의 동시로 다른 블록들이 발견되는 경우 발생하는 일시적 상황이다. 결국 단 하나의 자식 블록만이 블록체인의 일부가 되며 블록체인 '분기' 현상은 해결된다. '이전 블록 해시' 필드는 .. 2025. 4. 29.
성장하기 좋은 회사에서 일하고 있다 다시 생각해보니 내가 너무 약은 것 같다는 생각도 든다. 솔직히 연봉에서 우리 회사가 많이 주는 편은 아니다. 그러나 회사의 문화나 개발 수준을 보면, 다른 회사에 비해 훨씬 성장하기에 좋은 환경인 것은 사실이다. 코드 리뷰 문화가 있고 테스트 코드를 작성할 수 있는 기회를 제공받는다. 시니어급 인력의 코드를 보면서 어깨너머로 바로 보고 배울 수 있는 환경인 점도 있다. 우리 회사는 오픈소스를 하는데 내가 어떤 작업을 했는지 인터넷에 완전히 공개가 되어 있다는 점도 특징이다. 코드를 직접 보여주면서 능력을 어필할 수 있는 회사는 그리 많지 않을 것 같다. 게다가 회사 사람들은 다들 나보다 수준이 높은 사람들이다. 그렇게 생각하는 이유에는 몇 가지가 있는데, 일단 나보다 학력과 학벌이 좋다. 그리고 내가.. 2025. 4. 28.
[Bitcoin] 거래 스크립트 2 P2PK(Pay to Public Key)P2PK는 P2PKH보다 더 단순한 비트코인 지불 방식이다. P2PK는 공개키가 잠금 스크립트 내에 자체적으로 저장되어 길이가 훨씬 짧아지게 된다. P2PK의 잠금 스크립트는 다음과 같다. OP_CHECKSIG 위와 같은 출력값을 해제하기 위해 필요한 해제 스크립트는 아래와 같이 단순한 서명의 형태다. 해당 거래의 복합 스크립트는 다음과 같다. 이 스크립트는 CHECKSIG라는 단순한 호출 연산자로, 서명이 정확한 키에 속해 있는 지를 입증한 후 스택으로 TRUE 결과값을 돌려보낸다. OP_CHECKSIG 다중서명다중서명은 N개의 공개키가 스크립트 내에 기록되어 있고, 예상지출 상태를 풀기 위해서는 이 중 적어도 M개 이상의 개인키가 서명을 제공해야 한다는.. 2025. 4. 28.
[Bitcoin] 거래 스크립트 1 거래 스크립트와 스크립트 언어비트코인 클라이언트는 스크립트를 실행해서 거래를 유효화한다. UTXO에 위치한 잠금 스크립트와 해제 스크립트는 스크립트 언어로 작성된다. 대부분의 거래는 'A가 B에게 지불'하는 형식으로 진행되며 P2PKH 스크립트와 동일한 스크립트를 기반으로 한다. 스크립트 구성(잠금과 해제)잠금 스크립트는 출력값에 위치한다. 출력값을 소비하기 위해 충족되어야 하는 요건을 명시하고 있다. 잠금 스크립트에는 보통 공개키 혹은 비트코인 주소가 담겨 있기 때문에 스크립트 펍키(scriptPubKey)라고 부르기도 한다. 대부분의 어플리케이션에서는 잠금 스크립트를 scriptPubKey로 표현한다. 해제 스크립트는 잠금 스크립트가 출력값에 놓아둔 조건을 해결하여 출력값이 소비될 수 있도록 하는.. 2025. 4. 27.
개발실력에 대한 자격지심 구직을 시작한 2월부터 지금까지 사실 개발 실력에 대한 자격지심이 있었다. 팀노바의 학생들은 너무나도 좋은 결과를 낸다. 팀노바는 개발자 신입 연봉 5천 이상으로만 취업시키는... 사실상 괴물 양성소 느낌의 학원이다. 나는 이들의 성과가 너무 부러웠고 그래서 학생들 작품을 참고해서 포트폴리오를 만들었다. 나도 그런 멋있는 개발자가 되고 싶었다. 그래서 어렴풋이 '연봉 5천 개발자들이 만드는 포폴을 내가 만들었다면, 나도 그 정도 수준의 개발자가 될 수 있지 않을까?' 생각했던 것이다. 솔직히 따라 만들면서 생각보다 어렵다고 느꼈지만 결국 원하는 수준까지 만들었다. 스스로 생각하기에 '이 정도면 괜찮은 개발자 아닌가?'하는 생각에 자부심을 느낄 정도는 되었다. 근데 직접 시장에 내 이력서를 돌려보니 그.. 2025. 4. 26.
회사 코어코드 읽으면서 들은 생각 요즘 회사에서 느끼는 점이 하나 있다. 개발자의 성장에서 꽤나 큰 변화가 이뤄나는 시기가 있는 것 같다. 새로운 것을 접하고 그 필드 내에서 자신의 한계를 이겨내는 경험을 해본 사람들이 그렇다. 물론 처음 접하는 것은 누구에게나 어렵다. 그러나 버티면서 하다보면 꽤 잘하게 된다. 개발뿐만 아니라 다른 분야도 모두 마찬가지라고 생각한다. 요즘은 회사의 코어 로직이라 부를 수 있을만한 코드 위주로 보면서 분석하고 있다. UI로직은 UI로직대로 수준이 높고, 비즈니스 로직은 비즈니스 로직대로 매우 깔끔하다. 비트코인 라이브러리 코드의 경우에는 배경지식이 없으면 이해가 안 되는 수준이라 그렇다치고, 다른 부분은 어느 정도 이해가 된다. 분명 읽기에 마냥 쉬운 코드는 아니지만, 정갈한 편이라 이해가 잘 되는 것.. 2025. 4. 24.
[Bitcoin] 거래 거래 구조거래는 입력값이라고 불리는 자금원에서부터 출력값으로 불리는 목적지까지의 가치의 전송을 인코딩하는 데이터 구조다. 4바이트: 버전1~9바이트: 입력값 개수가변적: 입력값1~9바이트: 출력값 개수가변적: 출력값4바이트: 잠금시간 거래 출력값과 입력값 비트코인 거래로 구성되어 있는 블록을 구성하는 기본 요소는 '소비되지 않은 거래 출력값(UTXO)'이다. UTXO는 특정 소유주에 의해 암호로 잠겨있고, 블록체인 상에 기록되어 있다. 비트코인 네트워크는 수백만 개에 달하는 UTXO중에서 이용 가능한 UTXO를 전부 추적한다. 따라서 수백 개의 거래와 수백 개의 블록들 중에서 사용자의 비트코인은 UTXO의 형태로 산재해 있을 수 있다. 비트코인 주소 혹은 계좌에 보관된 잔액은 있을 수 없다. 특정 소.. 2025. 4. 23.
[Bitcoin] Descriptor Descriptor는 월렛간 'import' 'export' 처리를 위한 형태를 제공한다. 백업과 derivationPath를 통한 주소를 생성하는 목적으로도 사용한다고 한다. function([derivationPath]key)checksum 형태로 되어있다. Descriptor에 들어갈 수 있는 정보는 Script, Key, MultiSig 정보가 있다. 개인적으로 다중서명지갑에서 주소가 결정된 형태로 들어가는 형태만 알고 있었는데, derivationPath로 파생되는 자식을 범위로 묶을 수 있다는 것이 신기했다. 다중서명지갑 1 of 2, 고정된 키를 사용하는 경우multi(1,022f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240ef.. 2025. 4. 22.
[Bitcoin] 지갑 2 확장키키 유도 함수는 세 가지 입력값(키, 체인코드, 색인번호)을 기반으로 자식키를 생성한다. 중요한 요소는 키와 체인코드이고, 이 둘을 결합한 것은 확장키라고 부른다. 확장키는 256비트 크기의 키와 256비트 크기의 체인코드를 512비트 크기의 열로 연결하여 단순하게 표현된다. 확장키에는 2가지 형태가 있다. 확장 개인키는 개인키와 체인코드의 결합으로, 자식 개인키(혹은 자식 공개키)를 얻는데 사용할 수 있다. 확장 공개키는 공개키와 체인코드의 결합으로 자식 공개키를 생성하는 데 사용될 수 있다. HD지갑의 트리구조에서 확장키를 브랜치의 근원으로 간주해보면, 브랜치의 근원을 가지고 해당 브랜치의 나머지를 구할 수 있다. 확장 개인키만 있으면 브랜치의 나머지 부분을 완성할 수 있는 반면, 확장 공개키.. 2025. 4. 21.
[Bitcoin] 지갑 1 지갑지갑은 개인키를 담는 곳으로 대게 구조화된 파일이나 데이터베이스 형태로 구현되어 있다. 결정적 키 생성법을 이용하여 이전 개인키로부터 새로운 개인키를 각각 생성하며, 개인키들을 차례대로 연결할 수 있다. 이러한 배열을 계속 만들어 내는 최초의 키(Seed)만 있으면 배열상의 모든 개인키를 생성해 낼 수 있다. 사용자들은 개인키를 이용하여 거래에 서명하여 거래출력값(비트코인)을 가지고 있음을 증명한다. 비결정적 지갑단순히 무작위로 생성된 개인키를 모아놓은 것이다. 유형-0 비결정적 지갑이라고 부른다. 무작위로 선택한 개인키 100개를 미리 생성한 후 필요한 만큼 추가로 생성하기 때문에 각 키들은 단 한번만 사용된다. 키가 생성된 후에는 복사본을 보관해야 하므로 자주 데이터를 백업해야 한다. 관리가 복.. 2025. 4. 20.
위임은 어떻게 받아야 하는가? 약 1년 전에는 위임에 대한 책을 많이 읽었다. 회사 내에서 사원으로 있지만 '경영 도서'를 읽다보면 대표의 시각에서 문제를 바라볼 수 있지 않을까 생각했던 것이다. 물론 그러한 예측은 사실이었고 적어도 내 생각에는 많은 도움이 되었던 것 같다. 대표의 시각에서는 어떤 부분을 생각할 수 밖에 없는지, 어떤 역량을 키워야만 하는지 등등 알게 된 점이 많다. 게임 프로그래밍 학원 원장님을 만나서 이야기를 나눈 것, 구직 기간동안 면접을 보고 다닌 것도 도움이 많이 되었다. 예전에는 이런 생각을 많이 정리했었다. 1. 인사 가스라이팅 정리글(자청)https://blog.naver.com/richyumin/2233290010652. 통제에 의한 리드, 문맥에 의한 리드https://blog.naver.com.. 2025. 4. 20.
[Bitcoin] 개인키와 공개키 공개키의 암호법과 암호화폐비트코인은 사용하는 공개키 암호법으로 '타원곡선 곱셈 함수'를 기본 토대로 삼고 있다. 한 쌍의 키는 개인키와 개인키에서 파생된 공개키로 구성되어 있다. 공개키는 비트코인을 전송받을 때 사용되며, 개인키는 전송받은 비트코인을 소비할 때 사용된다(트랜잭션 서명) 대부분의 지갑에서는 개인키와 공개키를 함께 저장하지만, 공개키는 개인키를 통해 계산할 수 있으므로 개인키만 저장하는 것도 가능하다. 개인키와 공개키비트코인 지갑에는 쌍으로 구성된 키가 여러 개 들어있고, 각각의 쌍은 개인키와 공개키로 구성되어 있다. 개인키(k)는 숫자로 구성되어 있으며, 타원곡선 함수를 이용하여 공개키(K)를 구하는 것이 가능하다. 개인키개인키는 무작위로 추출한 단순한 숫자로 구성되어 있다. 개인키에.. 2025. 4. 19.
요즘 회사에서 드는 생각(근무 3주차) 요즘들어 개발실력이 강제로 늘어가는 느낌이 든다. 회사에서 요구하는 코드의 수준이 굉장히 높은 편인데 솔직히 나는 '코드 리뷰' 문화가 있는 곳은 이곳이 처음이었다. 이제껏 나는 생산성에 초점을 맞추면서 살아온 것 같은데, UI코드를 그렇게 깔끔하게 짤 수 있는 수준이 있는지 처음알았다. 코어 코드가 깔끔한 경우는 꽤 봤지만, UI코드의 퀄리티까지 빡세게 신경쓰는 곳은 이제껏 보지 못했다. 나름 경력도 3년이 쌓인 시점이고 이것저것 만들어 보면서 슬슬 쓸만한 개발자가 되었다고 느낀 시점은 있었다. 근데 요즘들어 아직은 많이 부족하다는 생각이 앞선다. 기본적으로 기준이 높은 사람들과 같이 일을 하고 있어서 그런가, 즐겁기도 하면서 '내가 여기에 코드를 짜도 되는 것인가?'하는 생각도 가끔든다. 좋은 코드를.. 2025. 4. 14.
비트코인 공부중 최근에는 '마스터링 비트코인'과 '비트코인 블록체인 바이블'이라는 책을 읽고 있다. 이더리움 블록체인과는 완전히 다른 느낌이 들어서 뭔가 신기하기도 하고 흥미롭다고 느끼고 있다. UTXO 개념도 처음에 inputList, outputList가 왜 있는건지 이해가 안 되었는데, 2~3번 책에서 설명을 들으니 이해가 되었다. 그 외에도 트랜잭션의 해시값을 통해 머클트리가 만들어지는 과정, 블록 헤더에는 어떤 정보가 있는지 등등 전반적인 블록체인에 대한 이해도를 쌓고 있다.  회사 프로젝트가 비트코인 도메인에 대한 이해도를 쌓아야 괜찮은 업무를 받을 수 있는 터라, 일부러 비트코인 관련 도서를 읽고 있다. 비트코인에 대한 지식없이는 코드 파악에 무리가 있다고 느꼈기 때문이다. 회사 입장에서도 뭘 알아야 빡센 .. 2025. 4. 14.
개발자의 실력차이와 계급은 누가 만드는가 내가 좋아하는 철학 유튜브 채널을 보다보면, 마치 을 읽는 느낌이 든다. 긴장감이 풀려버린 시점에서 정신차리게 한 대 쳐주는(?) 역할을 한다.  개발자의 성장에 있어서(사실 다른 인생사도 마찬가지지만) 피해의식을 가지지 않는 것이 정말 중요하다. 회사는 우리가 생각하는 것만큼 나쁘지 않다. 실력이 있는 사람에게 그에 맞는 대우를 해주려고 하지, 항상 싼 값에만 사람을 쓰려고 하지 않는다. 내가 원하는 연봉을 받지 못하고 있다면, 그건 전적으로 내 실력의 문제이지. 돈을 주지 않는 회사의 문제가 아니다. (오히려 회사는 좋은 인재를 데려오고 싶어서 아우성이다..) 모든 인생사가 마찬가지다. 발전은 자신이 부족했던 점을 찾고자 할 때 생긴다. 다른 사람을 탓하고 문제를 회피할 때는 전혀 발전하지 않는다. .. 2025. 4. 12.
개발경력 3년 쌓이고 보이는 것들 요즘 회사를 다니면서 느끼는 것은 '회사마다 분위기가 너무 다르다'라는 점이다. 솔직히 말하면 애초에 신입때 뭘 잘 모르는 상태기도 했다. 세상이 어떻게 굴러가는지도 모르고, 개발 실력 좀 있다고 설치는 꼴 아니었을까? 그리고 지금 시점에서 봐도 신입치고 나쁜 실력은 아니었다. 기업에서는 산업기능요원 신분으로 정부지원금 + 낮은 연봉으로 쓰기에 나쁘지 않은 인력이었을 것이다. 고등학교를 졸업한 친구를 채용한다는 리스크는 다른 조건으로 커버가 되는 수준이었다.  회사 4곳의 분위기를 경험하면서 느끼는 점은 '신입들은 어딜 가든 신입스러운 분위기가 난다'라는 것과 '연차대비 압도적으로 잘하는 사람은 쉽게 보이지 않는다'는 점이다. 신입인데 너무 잘하는 사람은 분명히 존재하지만, 내가 그 정도 수준이 아니라 .. 2025. 4. 11.
개발만 하다보니 삶의 여유가 없다 당연한 이야기지만 최근에 다시 회사를 다니기 시작하면서 '삶의 여유'라는 게 없어졌다. 물론 회사에서 야근을 강제하면서 여유를 없애고 그러지는 않는다. 그냥 내가 회사 소스 분석하고 이것저것 공부하면서 여유를 없애버린 것이다. 회사에서 빡세게 집중해서 작업하고 집에와서 밥먹고 소스 1시간 보고 뻗어버리는 일이 생기고 있다.... 아마 회사에서도 1~2시간 정도 공부하다가 퇴근해서 그런 듯 싶다.  나는 알고 있다. 이대로 하면 진짜 말도 안 되게 빨리 늘 것이다. 인생 자체가 '개발'에 온 신경이 다 쏠려있을 때, 실력적으로 엄청나게 성장하는 것을 이미 경험해본 적이 있어서 알고 있다. 더 잘하고 싶고 더 많이 배워야 한다는 마음이 가득할 때, 어떻게 하면 실력을 빠르게 끌어올릴 수 있을까에 대해서만 고.. 2025. 4. 9.
더욱 인정받는 개발자가 되려면... 나는 개발자로 성장하기 위해서는 '개발 실력'이 좋아야 한다고 생각한다. 물론 이것도 정말 맞는 말이다. 근데 개발 실력 외에도 중요한 것이 많다. 그 중에 하나가 '상급자의 생각을 읽는 능력'이다. 요즘 세대들은 세상이 원하는 것을 주려고 하기보다, 자신이 원하는 것을 하려는 경향이 크다. 아무래도 어린 시절부터 대우를 받고 귀한 자식으로 크다보니 그런 경향이 있는 듯 싶다(나도 귀한 자식으로 자랐다)  내가 일주일간 회사를 다니면서 느낀점은 '과거의 가치로 돌아가야 한다'는 것이다. 아무리 세상이 변하더라도 '노동' '돈' '노력'에 대한 가치는 훼손되지 않는다. 요즘 세상은 이러한 가치들을 너무 쉽게 생각하는 경향이 있다. 일을 잘하려고 노력하는 사람은 점점 귀해지고, 대충대충 적당히 넘어가려는 사.. 2025. 4. 5.