이전 글 ‘이더리움 대신 아르고로 DApp 쉽게 만들기 1편‘에 이어서 게시글 생성 및 조회수 올리기, 게시글 수정과 삭제를 해보겠습니다.
1. 게시글 생성
/blockoBoard/src/main/resources/lua/sql_smartcontract.lua
- contract에 게시글 생성 함수를 위와 같이 만들어줍니다.
- contract 배포 전에 만든 함수를 abi에 잊지않고 추가해줍니다.
- 생성한 contract를 그대로 재사용하기 위해 Athena IDE 중단에 Contract를 클릭합니다.
- 우리가 생성한 contract 주소를 확인하고 선택합니다.
- 우리가 만든 contract 주소가 import된 것을 확인할 수 있습니다.
- Compile과 Deploy를 순차적으로 눌러줍니다.
- Athena IDE Console 창에서 ReDeploy된 것을 확인할 수 있습니다.
- 만약 Contract를 선택하지 않은 채 Deploy를 누르게 되면 아래 Console 화면과 같이
ReDeploy가 아닌 Deploy가 되어 새로운 Contract가 생성됩니다.
/blockoBoard/src/main/java/board/board/controller/BoardController.java
- controller의 wrtieBoard 함수를 위와 같이 변경해줍니다.
- paramMap을 통해 key, value 형식으로 contract에 담을 수 있도록 넣어줍니다.
- createDateTime 같은 경우 contract에서 처리한 시간을 기입하기위해 넣지 않습니다.
- boardService의 기존의 save대신 write라는 이름으로 새로 생성한 service로 변경합니다.
/blockoBoard/src/main/java/board/board/service/BoardServiceImpl.java
- 게시판 list와 다르게 ContractExecute를 사용해서 데이터를 전송할 수 있도록 controller에서 받은 데이터를 list 형식으로 변환시켜 줍니다.
http://localhost:8080/blocko/board/write
- BoardWrite.html을 통해 화면에서 게시글을 등록해봅니다.
eclipse 결과값
- 저장을 눌렀을 시 eclipse console 화면에선 위와 같은 결과를 볼 수 있습니다.
http://localhost:8080/blocko/board
- 정상적으로 redirect 되었다면 위와 같이 write화면에서 list화면으로 이동되어 게시판 리스트에 추가된 것을 확인할 수 있습니다.
aergoscan.io
- aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.
- aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.
- aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.
2. 상세화면 보기
/blockoBoard/src/main/resources/lua/sql_smartcontract.lua
- contract에 게시글 생성 함수를 위와 같이 만들어줍니다.
- boardIdx를 기준으로 읽어올 수 있도록 합니다.
/blockoBoard/src/main/java/board/board/controller/BoardController.java
- controller를 기존에 JPA를 연동한 내역들을 위와 같이 변경해줍니다.
- findById 대신 boardService.view()함수를 통해 contract로부터 데이터를 읽어오도록 가공 후 modelAndView에 담아줍니다.
/blockoBoard/src/main/java/board/board/service/BoardServiceImpl.java
- 게시판 list와 마찬가지의 형식이며 contractQuery에 lua에서 만든 함수 이름 “selectBoardDetail”로 기입합니다.
http://localhost:8080/blocko/board
- 이대로 게시글을 눌러보면 작성한 내용들을 볼 수 있는 것을 확인할 수 있습니다. 다만 조회수가 0인 문제가 있습니다.
- 조회수가 올라가도록 만들어보겠습니다.
3. 조회수 올리기
/blockoBoard/src/main/resources/lua/sql_smartcontract.lua
- contract에 해당 게시글을 boardIdx를 통해 조회하고, hitCnt를 1 올리도록 만들어 줍니다.
/blockoBoard/src/main/java/board/board/controller/BoardController.java
- openBoardDetail 함수에 위와 같이 boardService.increaseHitCnt 라는 함수를 생성해줍니다.
/blockoBoard/src/main/java/board/board/service/BoardServiceImpl.java
- 게시글 상세보기와 마찬가지로 boardIdx 값을 받아옵니다.
- 게시글 작성처럼 contractExecute를 통해 contract가 실행될 수 있도록 boardIdx를 넣어줍니다.
eclipse 결과값
- eclipse 실행시 contract를 2번 실행한 것을 확인할 수 있습니다.
aergoscan.io
- aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.
- aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.
- 이때의 “2”는 boardldx 값 입니다.
http://localhost:8080/blocko/board/2
- 위와 같이 조회수가 정상적으로 증가한 것을 확인할 수 있습니다.
4. 게시글 수정
/blokoBoard/src/main/resources/lua/sql_smartcontract.lua
- contract에 수정할 데이터와 boardIdx를 받도록 합니다.
- Board 컬럼에서 updatedDateTime을 만들지 않았기에 createdDateTime에 업데이트합니다.
/blockoBoard/src/main/java/board/board/controller/BoardController.java
- 게시글 생성과 비슷한 형식으로 수정할 데이터들을 Map에 담아 service로 넘겨주도록 합니다.
/blockoBoard/src/main/java/board/board/service/BoardServiceImpl.java
- service 역시 게시글 생성처럼 contractExecute를 사용하여 controller에서 받아온 데이터를 가공 후 ”editBoard”라는 contract 함수로 전달합니다.
http://localhost:8080/blocko/board/2
- 수정하기 버튼을 눌러 줍니다.
- 순서대로 변경하고자 하는 내용들을 입력 후 수정반영하기를 누릅니다.
eclipse 결과값
- eclipse console 화면에서 contract가 execute된 것을 확인할 수 있습니다.
http://localhost:8080/blocko/board
- 게시글을 수정하면 게시판 리스트 화면으로 이동되며, 바뀐 제목, 작성자, 시간을 확인할 수 있습니다.
http://localhost:8080/blocko/board/2
- 상세화면으로 이동 시 내용 역시 변경된 것을 확인할 수 있습니다.
aergoscan.io
- aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.
5. 게시글 삭제
/blokoBoard/src/main/resources/lua/sql_smartcontract.lua
- contract에 삭제할 boardIdx를 받도록 합니다.
/blockoBoard/src/main/java/board/board/controller/BoardController.java
- 기존의 게시글 삭제 함수인 deleteBoard에서 호출하는 service를 변경해줍니다.
/blockoBoard/src/main/java/board/board/service/BoardServiceImpl.java
- contractExecute를 사용하여 controller에서 받아온 boardIdx를 통해 ”deleteBoard”라는 contract 함수에게 전달해줍니다.
http://localhost:8080/blocko/board/2
- 삭제하기를 누릅니다.
- 성공 시 위와 같은 알림창이 뜹니다.
eclipse 결과값
- eclipse console 화면에서 contract가 execute된 것을 확인할 수 있습니다.
http://localhost:8080/blocko/board
- 삭제 성공 시 게시판 리스트에서 사라진 것을 확인할 수 있습니다.
aergoscan.io
- aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.
이어서 이더리움 대신 아르고로 DApp 쉽게 만들기 3편에서는 게시판에 파일을 업로드하는 것과 파일 수정과 삭제를 해보겠습니다.