본문 바로가기

go언어 블록체인

(53)
만든 코인 일단 웹페이지에 일단 올려보기! 내가 만든 프로그램을 웹페이지에 올려서 돌아가게 하려면 어떻게 해야하는지 선배들에게 물어봤다 네트워크, 호스팅, 도메인 이란 키워드를 알려주셔서 검색해보고 도메인과 호스팅을 어떻게 할 것인지를 정해본다 이러면 (도메인, 호스팅 게시글) 이제 수강한 노마드코인에 먼저 코인을 런칭하신 분에게 어떤 것들로 하셨는지 조언을 구했다. 무료로 헤로쿠에 저장하기 위해선 bbolt를 버리고 postgreSQL로 넘어가셨다고 합니다 데이터베이스도 따로 사용해야만 하는 것 같았다 그래서 찾아보니 곧 대학교에서 배울 oracle DB, 혹은 널리사용되는 mySQL, 아니면 많이 비교되는 postgreSQL이 있었다 내가 도메인과 호스팅 값을 지불한다면 bbolt도 되지 않을까 생각해서 bbolt도 넣었다. 뭐가 다른건지 찾..
노마드코인 13-15 리뷰 이번 강의는 block에 있는 다양한 함수들을 테스트해보는 강의입니다 초반에는 BlocksSlice를 가져오는(강의에선 loadBlock()?) 함수를 테스트해보구요 후반에는 FindTx를 테스트해봅니다
노마드코인 13-14 번외편 unit test를 완벽히 이해해보자 아직 미숙한 부분이 많습니다 참고만 해주시면 감사하겠습니다! unit test란 무엇일까요? 위키백과 - 컴퓨터 프로그래밍에서 소스코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차다 smartbear.com - 단위 테스트(unit test)는 시스템에서 논리적으로 분리될 수 있는 가장 작은 코드 조각인 단위를 테스트하는 방법입니다. 대부분의 프로그래밍 언어에서 이는 함수, 서브루틴, 메서드 또는 속성입니다. 정의의 분리된 부분이 중요합니다. 외부 시스템에 의존할 때 이러한 테스트는 단위 테스트가 아니라고 말합니다. 시스템 구성이 필요하거나 다른 테스트와 동시에 실행할 수 없습니다." 위키백과 설명은 심플하고, smartbear.com의 설명은 이해하기 좋게 구체적입니다 또한 여러 블로그를..
노마드코인 13-14 리뷰 이번 강의는 blockchain 파일에 있는 여러 함수들을 테스트할 것이다 일단 FindBlock() 함수를 테스트해보자 해시값을 넣어주면 DB에 접근해서 블록 바이츠를 주는 함수를 fakeDB interface?로 DB에 접근하지 않고 블록바이츠를 리턴하도록 만들었다 만들고 TestFindBlock()함수에 t.Run()을 넣어주어 열심히 코딩하고 실행했더니 오류가 발생했다... https://yyth.tistory.com/90 이름이 거기서 기거인 함수 이번 오류는 정말이지 인간이라면 어쩔수 없는건지 이름을 잘못지은 나의 잘못인건지 뭐가 정답이던 정말 한탄스럽다 쾅점수는 4점 주겠다 이건 정말 헤매고 또 헤매어도 몰랐을 오류이다, 내 yyth.tistory.com 이름이 길고 비슷해서 헷갈리는 바람에..
노마드 코인 13-12 리뷰 이번 강의도 block파일에 test 파일을 만드는 과정을 보여줍니다 dbStorage interface에 만들어준 함수들을 db파일에 가져와 DB struct를 만들고 메소드 함수로 하나하나 다시 만들어줍니다 그후 dbStorage가 있는 chain.go 파일에 var dbStorage storage = db.DB{} 이렇게 작성해줍니다 -> db를 위한 adapter가 생겼다고 하네요 끝!
노마드코인 13-11 리뷰 이번 강의부터는 block 파일을 테스트해봅니다 예시로 findBlcok()이라는 함수는 DB에 접근하는 함수를 가지고있습니다 이 함수는 fake interfaces 를 통해 바꿔주어야겠죠? 해봅시다 DB에 접근하는 모든 함수는 type storage interface에 메소드로 작성해둡니다 이렇게 작성해놓으면 우린 interface type의 variable을 대신 사용하는 것이다 그리고 곧 interface에 들어있는 method를 구현할거라고 합니다 끝!
노마드코인 13-10 리뷰 이번 강의는 fake interface에 대한 전반적인 이해 그리고 recapitulate(요점 되풀이)를 해주신다 fake interface는 signature만 같은 (이름만 같은) 함수를 만들어 side effect를 내는 함수를 없애고 리턴값만 똑같이 맞추어 테스트하기에 용이하게 만든 interface이다 그래서 wallet.go에서는 올바른 layer로 interface를 만들고 wallet_test.go에서는 가짜 layer로 테스트용 interface를 만드는 것이다 즉 layer를 다르게 만든다는 것이 핵심 포인트인 것 같다 끝!
노마드코인 13-9 리뷰 이번강의는 fake interfaces 를 만들어서 함수 테스트에 side effect 없이 테스트를 통과시키는 법을 배워봅니다 저번 HandleErr가 이름만 바꿔주고 인터페이스로 한 함수만 바꿔줬다면 이번에는 interface안에 여러 메소드 함수를 놓고 여러개를 바꿉니다? 어쨋거나 저쨋거나 로직은 os.ReadFile() 같이 test할 수 없는 함수는 바꿔치기해서 리턴값만 같도록 조작하는 것이 이 fake interface의 핵심입니다 fake interface를 만들어 테스트를 하다가 계속 테스트 통과는 되는데 coverage 퍼센트는 안나와서 왜 그런가 하고 봤더니 wallet_test.go 함수라도 wallet.go 를 기반으로 돌아간다 그렇기 때문에 w := Wallet() 함수를 사용할 ..
노마드코인 13-8 리뷰 이번 강의에서는 고에서 굉장히 중요하고 멋진 패턴인 interface 패턴에 대해서 배웁니다 interface 패턴이란 일단 구조체가 필드의 집합체라면 인터페이스는 메소드의 집합체입니다 그러므로 interface 패턴이란 메소드 집합체 패턴?이라고 할 수 있겠죠? 이 패턴을 이용하면 테스트하기 쉽고, 훨씬 깔금하고, 덜 의존적인 코드를 만들 수 있다고 합니다 이 패턴은 HandleErr()를 테스트했을 때 사용했던 방법을 사용한다 이 인터페이스가 좋은 이유는 함수를 사용하지 않고 함수의 모양을 설명할 수 있기 때문이라고 하며 일단 인터페이스를 만들어주는데 사실 이해가 잘 안갑니다 아직 와닿진 않네요... 인터페이스를 만들어서 나중에 함수 바꿔치기로 테스트를 하기 위함 인것은 알겠지만 왜 layer str..
노마드코인 13-7 리뷰 이번 강의는 Verify() 함수를 Test해보는 것이 목표이다 강의 초반에는 저번 강의까지 만든 const 문자들을 verify()함수에 넣어서 받은 ok boolean을 에러 핸들링만 해주고 끝! 했는데 잘못된 testPayload(Tx.ID)를 넣었을 때도 테스트 해주기 위해서 테이블테스트를 통하여 테스트를 해준다 그래서 test strcut를 만들고 한 곳에는 올바른 정보, 다른 한 곳에는 틀린 정보를 넣어놓고 verify()함수를 두번 돌려 예상된 ok가 둘다 나왔는지를 확인한다! 이렇게 verify()함수 테스트는 끝이 났다 끝!