본문 바로가기
728x90
728x90

분류 전체보기191

[Java] MVC 패턴 그리고 domain, service 0. 목차 1. 개요 2. MVC 패턴 3. domain과 service 1. 개요 우테코지원 해야겠다 마음먹고, 이전기수 프리코스 내용 검색해서 찾아본적이 있었다. 이전기수 분들의 블로그 글들에서 공통적으로 보이던 것들이 OOP(객체지향), TDD(테스트 주도 개발), MVC 였다. 그때부터 조금씩 저 세가지 내용에 대해 틈틈히 블로그 글들을 읽으면서, 내가 프리코스를 할 때는 저 세가지 항목을 꼭 지키면서 해야지 라는 마음을 가졌었다. .. 물론 잘 못하고 있는 중이다. 더 잘하기 위해서 공부했던 내용 한번 정리 들어간다. 2. MVC 패턴 솔직히 한번도 안들어 본 사람은 없을거다. 나도 뭔지는 몰라도 들어본적은 있었으니까. MVC 패턴은 MODEL VIEW CONTROLL의 약자로 하나의 애플리케이.. 2022. 11. 5.
[Java] JUnit ParameterizedTest input 여러개 테스트 돌리기 0. 목차 1. 개요 2. 여러개 테스트 한큐에 돌리기(ParamterizedTest) 3. 그외에도 이것저것 1. 개요 프리코스 2주차 2일째. 고난과 역경의 TDD 하다가 input 여러개 넣고 한큐에 테스트 돌리는 방법 찾다가 알게된거 정리해볼려고한다. 2. 여러개 테스트 한큐에 돌리기(@ParameterizedTest) 예를 들어서, 인자로 받은 숫자가 짝수인지 아닌지 테스트하는 테스트 코드를 작성했다고 해보자. @Test void check_odd_test() { Integer input = 2; boolean result = isOdd(input); Assertions.assertThat(result).isTrue(); } input의 값을 2로 지정하고 테스트가 통과했다. 하지만 나는 나를 .. 2022. 11. 3.
[Java] TDD 톺아보기 수정과 지적 환영합니다. 막 대해 주세요. 0. 목차 1. 개요 2. TDD란? 3. 테스트 코드 작성 4. 정리 1. 개요 우테코 2주차 미션에 JUnit 5와 AssertJ를 이용하여 본인이 정리한 기능 목록이 정상 동작함을 테스트 코드로 확인한다 . 라는 내용이 추가되었다. JUnit 5와 AssertJ가 누구신지는 모르겠지만, 대충 TDD 해라 라는 내용인건 확실하다. 이렇게 말하면 내가 TDD에 대해 잘 알고, 잘하는 사람 처럼 보이겠지만 초면이다. 그냥 어디서 주워들은게 있다. 작업을 하기전에 TDD가 무엇인지, 어떻게 하는 건지 하나하나 톺아보려한다. 2. TDD란? TDD의 뜻은 Test Driven Development 의 약자이다. 소중한 우리말로는 테스트 주도 개발 이다. 음 항상 용.. 2022. 11. 3.
[우테코 프리코스] 우테코 5기 백엔드 지원 & 프리코스 1주차 회고 0. 목차 1. 개요 2. 우테코 백엔드 지원 3. 프리코스 1주차 회고 0. 개요 어.. 원래는 지원하고 나서 지원 후기 쓰고.. 프리코스 1주차 하고나서 1주차 회고 쓰려 했는데 ㅎ.. 게을렀다기 보단 우선순위에서 밀리다보니 이제서야 쓰게됨ㅋㅋ 그냥 내가 어떤마음으로 우테코를 지원했고, 그 과정이 어떠했는지 기록으로 남겨두고 싶었다. 나중에 다시 볼일이 있을지는 모르지만 일단 남겨둠 본가 냉동실 같은 느낌임 1. 우테코 지원 1-1. 우테코 지원 이유 10개월 간 국비교육을 받았다. 프론트, 백엔드, 블록체인에 대해 전반적으로 배우고, 취업시장에 뛰어 들었다. 근데 난 안뛰어들었다. 살짝 발만 대봤음. 같이 공부하던 20명의 동기들만 뛰어들었다. 취업을 하지 않은 이유는 단순했다. 만족이 안된다. 아.. 2022. 11. 2.
[Block-chain / 블록체인] smart contract event(스마트 컨트랙트 이벤트) 등록 및 Back-end 이용하여 contract 실행 0. 목차 1. 개요 2. contract event 등록 3. Back-end 이용하여 contract 실행 1. 개요 이번 포스팅은 저번 포스팅에 이어서 작업을 할거다. 컨트랙트에 이벤트를 등록하고, 서명을 제외한 트랜잭션에 필요한 객체의 내용을 백엔드에서 만들어서 프론트에 응답으로 전해주면, 프론트에선 객체의 내용을 메타마스크에게 전달한다. 메타마스크는 트랜잭션 객체의 내용과 메타마스크에서 관리중인 프라이빗 키를 이용하여 서명을 만들고, 해당 내용을 이더리움네트워크로 던지는 역할을 한다. 백엔드는 MVC 패턴을 따라서 만들려고 한다. 2. Contract Event 등록 만약 지금 내가 만든 페이지에 여러명의 사람이 접속해있다고 치자 (A,B) A라는 사람이 증가 버튼을 눌러서 트랜잭션을 발생시킨 .. 2022. 7. 14.
[Block-chain] smart contract를 이용한 DApp counter 만들기 0. 목차 1. 개요 2. 구성 3. truffle 이용하여 contract 배포 및 실행 4. react로 구현한 페이지에서 contract 실행 1. 개요 리액트와 스마트 컨트랙트를 이용해서 단순한 카운터 애플리케이션을 만들려고 한다. 이제껏 했던것의 총 정리의 느낌이다. geth를 이용하지 않고 ganache를 이용해서 테스트 할것이다. 2. 구성 |- truffle |- client npx create-react-app cleint mkdir truffle && cd truffle truffle init 위 명령어를 차례대로 실행해서 디렉토리 구조를 잡아주었다. 3. truffle 이용하여 contract 배포 및 실행 3-1. truffle 설정 ganache를 이용하기 때문에 config 파.. 2022. 7. 13.
Solidity(솔리디티), smart contract(스마트 컨트랙트) prettier(프리티어) 적용하기 (prettier-plugin-solidity) 0. 목차 1. 개요 2. 플러그인 설치 3. .prettierrc 작성 4. vscode 설정 변경 5. semicolon 1. 개요 최근 컨트랙트를 배우면서 당연하게도 solidity를 사용하게 되었는데, 기존에 있던 prettier 만으로는 solidity 코드에 formmater가 적용이 안된다. 매우.. 매우 불편하다. 그래서 찾다보니 플러그인을 이용해 할 수 있는 방법이 있어서 작성해보려 한다. 2. 플러그인 설치 플러그인을 사용해서 기존 prettier 설정에 추가적인 설정을 부가할 수 있다. 사용할 플러그인의 이름은 prettier-plugin-solidity이다. GitHub GitHub - prettier-solidity/prettier-plugin-solidity: A Prettier.. 2022. 7. 12.
[Block-chain / 블록체인] Truffle(트러플) 활용하여 contract(컨트랙트) 배포 0. 목차 1. 개요 2. truffle 없이 contract 배포 3. truffle 활용하여 contract 배포 1. 개요 저번 포스팅에서는 geth console에서 컨트랙트를 배포해 보았다. 오늘은 javascript 코드 작성을 통해 컨트랙트를 배포 해보며 전체적인 흐름을 이해하고, truffle 을 활요한 컨트랙트 배포를 해보려 한다. 2. truffle 없이 contract 배포 2-1. UTC 파일 복호화 하여 개인키 가져오기 이전의 포스팅에서 javascript에서 web3 라이브러리를 통해 트랜잭션을 구현한 적이 있는데, 그때 ehtereumjs-tx 라이브러리를 이용해서 서명을 만들었었는데 위 라이브러리를 이용해서 서명을 만들기 위해서는 개인키가 필요하다. 사실 오늘 포스팅에서 사.. 2022. 7. 12.
[block-chain / 블록체인] Solidity(솔리디티)작성 과 contract(스마트컨트랙트) 배포 0. 목차 1. 개요 2. Solidity 3. contract 배포 1. 개요 오늘은 솔리디티 코드를 작성하고, 작성한 코드를 최근 진행한 토이프로젝트를 이용해 contract 배포를 진행 해보려 한다. 2. Solidity solidity는 오로지 smart contract 작성을 위해서 존재하는 언어이다. 파일 확장자로는 .sol을 사용한다. 코드를 작성하는데 기존의 vscode에서 작업하던 것과 달리 코드에 색이 입혀지지 않는다면, solidity확장자를 설치해보자. 2-1. Solidity 작성 solidity 문서 최상단에는 항상 버전을 적어주는 것으로 시작한다. pragma solidity ^0.8.15; 그리고 contract라는 예약어를 사용해서 코드를 작성한다. js의 class 와 비.. 2022. 7. 11.
[Block-chain / 블록체인] Geth 이용해서 Private Network 만들기 0. 목차 1. 개요 2. Geth 톺아보기 3. IPC 통신 4. Private Network 1. 개요 저번 포스팅에서 Geth란 Go 언어로 빌드된 ethereum 클라이언트를 뜻한다고 했었다. ehtereum 클라이언트는 여러가지 언어로 빌드가 되어있는데 그중 go 언어로 빌드 된, 즉 Geth 가 근본이라 할수 있다. 오늘은 이걸 가지고 Private Network 생성을 해보려고한다. 2. Geth 톺아보기 우선 geth에 대해 좀더 알아본 뒤에 private network를 구현해보려한다. geth의 설치와 환경변수 설정은 이전의 포스팅에서 다뤄본 적이 있다. geth를 실행시키면 현재 이더리움 메인넷의 데이터를 가져온다. m1 mac 기준으로 가져온 데이터들은 ~/Library/Ethere.. 2022. 6. 30.
[Blockchain/블록체인] CRA typescript로 Front에서 Metamask 이용하여 Transaction 발생 0. 목차 1. 개요 2. DApp 3. window.ethereum 4. 기능구현 1. 개요 저번 포스팅에서는 직접 트랜잭션의 내용을 객체로 만들고, 만들어진 트랜잭션 객체의 내용을 이더리움 네트워크로 전송하는 것을 테스트 코드를 통해 작성해 보았는데, 이번 포스팅에서는 React로 프론트를 만든 뒤애, 프론트에서 Metamask를 통해 트랜잭션을 발생 시켜 보려고한다. 트랜잭션의 내용을 프론트에서 직접 만드는 것이 아니라, 프론트에서는 수신자와 금액만 입력하면, Metamask에 현제 연결 되어있는 계정의 내용으로 트랜잭션을 만들고, 현재 연결되어있는 네트워크에 전달하여, 트랜잭션이 발생된다. 이러한 App을 DApp이라고 한다. 2. DApp 말이 나온김에 DApp을 조금 알아보자. DApp 이란.. 2022. 6. 30.
[Blockchain/블록체인] ganache(가나슈)와 테스트코드를 통해 Ethereum(이더리움) Transaction(트랜잭션) 만들기 0. 목차 1. 개요 2. ganache(가나슈) 3. curl 4. web3 1. 개요 이번 포스팅에선 가나슈와 테스트코드 작성을 통해(jest) 트랜잭션을 발생시키는 걸 해보려한다. 이전 까지의 포스팅을 통해 전체적인 흐름을 잡았고, 이미 구성 되어있는 이더리움 네트워크를 이용하기 때문에 그닥 어려운 내용은 없는 것 같다. 2. 가나슈 (ganache) 가나슈는 로컬에서만 실행되는 이더리움이다. npm install -g ganache-cli 글로벌로 설치를 해주자. 가나슈는 마이닝 기능과 P2P 기능은 존재하질 않는다. 대신에, 블록과 체인 그리고 트랜잭션의 내용은 구현 되어있는데, Transaction(트랜잭션 이하 Tx)이 발생되면, Tx가 발생되면 자동으로 해당 Tx를 담고 있는 block이 .. 2022. 6. 28.
[Block-chain/블록체인] Mac GETH 설치 0. 목차 1. 개요 2. Go 설치 3. Clone 및 make geth 4. 환경변수 설정 1. 개요 내가 쓰는 랩탑이 Mac이기 때문에, Mac 기준으로 작성할거다. 저번 포스팅에서 얘기했듯, 이번 포스팅에선 GETH를 설치 해보겠다. 2. Go 설치 저번 포스팅에서 설명하였듯이, GETH란 GO + Etereum의 합성어이다. 즉 GO 언어로 작성된 이더리움 네트워크이다. 그러니까 우선적으로 Go를 설치 해야 한다. go version 기존에 go가 설치가 되어있다면 go version go1.18.3 darwin/arm64 뭐 이런게 뜰거다. 만약 zsh : command not found: go 요런게 뜬다면 homebrew를 통해 go 를 설치를 해주자 brew install golang 설.. 2022. 6. 27.
[Block-chain/블록체인] Ethereum(이더리움) / EVM / Account / EOA / CA / Transaction(트랜잭션) / GEth 0. 목차 1. 개요 2. EVM 3. Account 4. Transaction 5. GETH 1. 개요 기존의 포스팅에서 비트코인을 야매로 카피해서 구현했었다. 그리고 오늘 부턴 이더리움에 대해 포스팅을 하려고 한다. 이더리움에는 비트코인에는 존재하지 않는 EVM(이더리움 가삼머신) 이란것이 존재하고, 비트코인과는 Transaction의 내용과 처리도 다르며, account를 만드는 방법도 다르다. (기존 포스팅에서 사용했던 방법이 이더리움의 account 생성 방식을 어줍잖게 따라했었다.) 비트코인은 PublicKey를 2번의 hash화를 거쳐서 만든다 하나씩 알아보자. 2. EVM EVM(Ethereum Virtual Machine = 이더리움 가상머신 이하 EVM)은 스마트 컨트랙트에 작성된 코드.. 2022. 6. 27.
[Blockchain/블록체인] Wallet(지갑)/PrivateKey(개인키)/PublicKey(공개키)/account(계정) 톺아보기 0. 목차 1. 개요 2. 지갑 3. 개인키와 공개키 서명 4. 기능구현 5. 계정 1. 개요 나는 수업을 통해 블록체인에 대해 공부하기 전에는 블록체인과 코인, NFT 그 이외의 기타등등에 대해 완전한 문외한이었다. 그래도 블록체인 지갑(Wallet)이란 말은 몇번 들어본적이 있었고, 그냥 현실세계의 지갑 처럼 코인을 담고있는 무언가라고만 생각을 했었는데, 수업을 통해 내가 유추하던 지갑과는 전혀 다른 것이란 걸 알게되었는데 그 내용을 정리해보려고 한다. 2. 지갑(Wallet) 블록체인에서 말하는 지갑이란, 너무나 당연한 소리지만, 하나의 어플리케이션이다. 그리고 이 어플리케이션을 만드는 방법은 매우 다양하다. 가장 많이 쓰인다고 하는 metamask라는 지갑 어플리케이션은 크롬 익스텐션(Chrome.. 2022. 6. 20.
[Blockchain/블록체인] P2P 서버로 받은 블록 검증 및 업데이트 0. 목차 1. 개요 2. 기능구현 1. 개요 저번 포스팅에서 P2P 네트워크를 통해 각각의 노드가 가지고 있는 블록과 체인을 주고 받아보았다. 상대방에게 전달 받은 블록체인으로 업데이트가 될 필요가 있다면, 해당 블록체인으로 내 노드의 블록체인을 업데이트 해줘야 한다. 그렇다면 우선 전달 받은 블록체인으로 업데이트가 될 필요가 있는지 없는지 부터 확인을 해야 한다. 그리고 업데이트가 될 필요가 있다면, 하지만 업데이트 하기 전에, 상대방에게서 받은 블록체인에 대한 검증이 이뤄져야한다. 검증이 통과 됐다면, 상대방의 블록체인으로 내 블록체인을 업데이트 해주면 된다. 2. 기능구현 위에서 업데이트가 될 필요라고 했는데, 이 필요성을 확인하는 조건이 있다. 전달받은 최신 블록의 height+1이 내가 가진 .. 2022. 6. 15.
[Blockchain/블록체인] P2P 네트워크 이용하여 블록정보 주고 받기 0. 목차 1. 개요 2. 기능 구현 1. 개요 저번 포스팅에서 websocket을 이용해서 기초적인 P2P네트워크를 구현했다. 이번에는 저번에 구현한 네트워크를 이용해, 노드간에 블록을 주고받는 기능을 구현해보려한다. 원래라면 이 과정에 검증과정이 필수 이지만, 우선 오늘은 코드의 흐름을 이해하는게 우선이기 때문에 검증에 대한 부분은 제외하고 구현해보려 한다. P2P 네트워크에서는 클라이언트와 서버의 역할을 각각의 노드가 동시 수행하기 때문에, 각각에 역할에 대한 코드가 나눠져 있지않고 하나의 문서에서 작성된다. 그렇다보니 흐름이 조금 괴랄하긴 한데 최대한 하나하나 풀어서 기술해보려 한다. 2. 기능 구현 index.ts import { BlockChain } from '@src/core'; impor.. 2022. 6. 14.
[Blockchain/블록체인] P2P서버로 네트워크 구축 0. 목차 1. 개요 2. P2P 서버란? 3. P2P 서버 네트워크 구축 1. 개요 또한 블록체인의 핵심 개념 중 하나인 탈중앙화를 위해서는 데이터를 한군데에 모아서 관리하는 것이 아니라, 블록체인의 참여자 각자가 갖고 있는 블록들을 서로 비교하며, 서로의 블록에 대한 검증을 이뤄낸다. 그렇기 때문에, 기존에 내가 배웠던 서버와 클라이언트의 개념과 달리, 각각의 개인 컴퓨터끼리 직접 연결하고, 서로 데이터를 주고받는 방식의 네트워크가 필요하다. 그리고 이러한 방식을 P2P 서버라고 한다. 2. P2P서버란 P2P 서버에 대해 조금 더 자세히 알아볼 필요가 있을 것 같다. P2P 아예 처음 들어보는 단어는 아니다. 아직까지도 흔하게 쓰이는 토렌트, 좀 더 과거로 거슬러 올라가면 당나귀, 프루나, 파일구리.. 2022. 6. 14.
[Block-chain/블록체인] chain/difficulty/mining 구현 0.목차 1. 개요 2. POW(작업증명) 3. chain 구현 4. difficulty구현 5. mining 구현 1. 개요 저번 포스팅에서 block의 생성과 구조에 대해 알아보았다. 이번에는 mining(채굴) 기능을 구현해보려 하는데, 선결 과제가 주어진다. mining을 구현 하기 위해서는 difficulty를 우선 구현 해야한다. 우선은 모르는 개념이 많으니, 개념부터 잡고 가면 좋을 듯 하다. 2. POW(Proof Of Work) 이걸 전체적으로 아우르는 개념을 POW(작업증명)이라 할 수 있다. 작업증명이란 작업을 통해 단순한 연산문제를 풀고, 해당 작업을 마치면, 보상을 받아내는 방식을 일컫는다. 기존에도 사용이 되던 방식이지만(스팸메일을 처리하기우해 사용 됐었음), 비트코인의 창시자 .. 2022. 6. 12.
[Typescript/타입스크립트] path alias로 경로 깔끔하게 만들기 (build 이후 can not find module) 0. 목차 1. 개요 2. path alias 사용하기 3. javascript 에서 적용 1. 개요 프로젝트를 진행하다 보면 디렉토리 구조는 점점 복잡해지고 import 구문에 적힌 경로들은 무수히 많은 ../ 들을 포함하게 된다. 근데 이거 꼴보기 싫다. typescript 에서 type alias를 이용하여 경로들을 깔끔하게 재설정 해주고, build이후에 js 파일 실행시 터지는 can not find module 에러 까지 처리해보자. 2. path alias 사용하기 생각보다 매우 간단하다. // src/testPath/test.ts export const number: number = 10; // src/index.ts import { number } from './testPath/test'.. 2022. 6. 9.
728x90
728x90