이더리움 대신 아르고로 DApp 쉽게 만들기3

스마트 컨트랙트는 블록체인에서 작동되는 일종의 프로그램으로 프로그래밍된 계약 조건에 따라 특정 이벤트가 발생할 때 자동으로 계약이 수행됩니다. 스마트 컨트랙트라는 개념은 블록체인과는 별개로 1994년 Nick Szabo라는 사람에 의해 처음 제안되었고, 2013년 이더리움이 스마트 컨트랙트를 블록체인에 도입해 구현함으로써 ‘스마트 컨트랙트’하면 자연스레 ‘ERC-20’, ‘코인 만들기’를 생각하게 되었습니다.

하지만 코인은 스마트 컨트랙트의 하위 개념일 뿐, 스마트 컨트랙트를 기반으로 금융, 헬스, 게임, 엔터테인먼트 등 다양한 분야에서 DApp이 개발되고 있습니다.

이번 글에서는 이더리움보다 속도가 더 빠르고, 스마트 컨트랙트 관련해 다양한 리소스를 제공하는 아르고로 게시판 프로젝트를 진행해보았습니다.

아래 1편과 2편을 통해 DApp의 기본 환경 세팅과 스마트 컨트랙트 작성부터 실습해볼 수 있습니다.

 

1. 파일 업로드

/blockoBoard/src/main/resources/lua/sql_smartcontract.lua

  • contract에 새로운 BoardFile 이란 테이블을 만들어줍니다.
  • 우리가 받은 Project의 BoardFileEntity.java 파일과 동일한 형식입니다.

 

  • 기존의 createBoard에 위와 같이 BoardFile 부분을 추가해줍니다.

 

/blockoBoard/src/main/java/board/common/FileUtils.java

  • 각자의 프로젝트 위치에 맞춰 변경합니다.

 

/blockoBoard/src/main/java/board/board/controller/FileController.java

  • 각자의 프로젝트 위치에 맞춰 변경합니다.

 

/blockoBoard/src/main/java/board/board/controller/BoardController.java

  • 기존의 writeBoard의 함수에 위 부분들을 추가해줍니다.

 

http://localhost:8080/blocko/board/write

  • BoardWrite.html에 file 부분을 변경해줍니다.

 

http://localhost:8080/blocko/board

  • 게시글 등록에 파일 선택을 눌러 원하는 파일을 선택합니다.

 

  • 파일 선택 시 해당 파일의 파일명이 등록된 것을 볼 수 있습니다.

 

  • 정상적으로 redirect 되었다면 위와 같이 write화면에서 list화면으로 이동되어 게시판 리스트에 추가된 것을 확인할 수 있습니다.

 

eclipse 결과값

  • 저장을 눌렀을 시 eclipse console 화면에선 위와 같은 결과를 볼 수 있습니다.

 

aergoscan.io

  • aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.

 

2. 파일 화면 상세 보기

/blockoBoard/src/main/resources/lua/sql_smartcontract.lua

  • contract에 게시글 생성 함수를 위와 같이 만들어줍니다.
  • boardIdx를 기준으로 읽어올 수 있도록 합니다.

 

/blockoBoard/src/main/java/board/board/controller/BoardController.java

  • controller의 openBoardDetail에 해당 내용을 추가해줍니다.
  • 첫번째 게시물처럼 파일이 등록되지 않은 게시물도 정상 출력 가능하도록 예외처리를 넣어줍니다.
  • boardService의 view_Image를 통해 contract의 결과를 받아 modelAndView에 “viewFile” 이란 이름으로 담아줍니다.

 

/blockoBoard/src/main/java/board/board/service/BoardServiceImpl.java

  • 게시판 상세 보기와 동일한 형식이며, contractQuery에 파일상세보기 함수인 “selectBoardFileDetail”을 넣어줍니다.

 

/blockoBoard/src/main/resources/templates/board/BoardDetail.html

  • mv에서 보내준 viewFile의 형식으로 사진을 받아올 수 있도록 입력합니다.

 

eclipse 결과값

  • 저장을 눌렀을 시 eclipse console 화면에선 위와 같은 결과를 볼 수 있습니다.

 

http://localhost:8080/blocko/board/4

  • 업로드한 사진에 대한 이름, 용량, 이미지를 위와 같이 볼 수 있습니다.

 

  • 업로드한 사진의 이름을 누르면 다운로드 할 수 있습니다.

 

3. 파일 수정

/blockoBoard/src/main/resources/lua/sql_smartcontract.lua

  • contract에 게시글 수정 부분에서 파일 관련된 부분들을 추가해줍니다.

 

/blockoBoard/src/main/java/board/board/controller/BoardController.java

  • 기존 게시글 변경 함수에서 위 내역들을 추가해줍니다.

 

http://localhost:8080/blocko/board

  • 바뀐 게시판 리스트를 볼 수 있습니다.

 

  • 바뀐 작성자, 제목, 내용, 사진을 볼 수 있습니다.

 

aergoscan.io

  • aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.

 

4. 파일 삭제

/blockoBoard/src/main/resources/lua/sql_smartcontract.lua

  • contract에 수정할 데이터와 boardIdx를 받도록 합니다.
  • 외래 키 조건 때문에 먼저 BoardFile부터 지워야 합니다.
  • controller와 service는 수정할 필요가 없음으로 생략합니다.

 

http://localhost:8080/blocko/board/4

  • 삭제하기 버튼을 눌러줍니다.

 

  • 성공적으로 삭제되었다는 메세지를 볼 수 있습니다.

 

eclipse 결과값

  • eclipse console 화면에서 contract가 execute된 것을 확인할 수 있습니다.

 

http://localhost:8080/blocko/board

  • 삭제 성공 시 해당 게시글이 리스트에서 제거된 것을 확인할 수 있습니다.

 

aergoscan.io

  • aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.

 

 

여기까지 3편의 글을 통해 이더리움 대신 아르고로 DApp 기본 환경을 세팅하고 스마트 컨트랙트를 작성해 게시판을 만들어보았습니다.

더 간편하게 개발해보고 싶으신 분은 Java 표준에 맞춰 개발한 툴인 AERGO JDBC를 활용한 게시판 DApp 만들기 글을 참고해주세요.

이더리움 대신 아르고로 DApp 쉽게 만들기2
미국 통화감독청(OCC)의 스테이블코인 승인과 디파이(DeFi) 전망

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

필수 입력 사항입니다.
필수 입력 사항입니다.
유효한 이메일 주소를 입력해주세요.
You need to agree with the terms to proceed

메뉴