서론: 왜 이 강의를 선택했는가?

내가 프로덕트 매니저의 길을 걷기로 결심했을 때, 나에게 필요한 것은 실질적인 지식과 경험이었다. '서비스 기획 PM 완주반'은 이러한 내 요구를 충족시켜줄 완벽한 강의처럼 보였다. 국비지원을 통해 경제적 부담 없이 수강할 수 있다는 점도 매력적이었다.

Part 0. 짚고가기 - 프로덕트 매니저의 기초

'프로덕트 매니저가 되기 위한 만반의 준비'는 이 강의의 첫걸음이었다. 이 세션은 프로덕트 매니저로서 필요한 기본적인 자세와 스킬셋에 대한 개요를 제공했다. 이론보다는 실제 업무에 필요한 실질적인 준비에 중점을 두었던 내용이 매우 유익했다. 여기서 배운 내용은 향후 내 커리어에 귀중한 자산이 될 것이라는 확신이 들었다​​.

Part 1. 개론 - 문제 발견부터 서비스 운영까지

이 부분은 서비스 기획의 전 과정을 다루었다. 문제 발견, 기회 창출부터 서비스 런칭, 운영, 회고에 이르기까지의 모든 단계를 아우르는 깊이 있는 학습이었다. 특히 SWOT, STP 등 다양한 분석 기법들을 배우면서 시장과 고객을 이해하는 데 큰 도움이 되었다. 이 섹션에서의 학습은 나에게 서비스 기획자로서의 통찰력을 제공했다​​.

Part 2-1. 역기획 프로젝트 - 실전 같은 실습

이커머스, O2O, 핀테크 등 다양한 분야에서의 역기획 프로젝트는 마치 실전에 참여하고 있는 듯한 경험을 제공했다. 각 분야의 실제 사례를 분석하고, 서비스 내에서 개선점을 찾는 과정은 매우 도전적이었다. 특히 핀테크 강의에서 강사님이 직접 진행한 과정을 보여주면서 진행한 방식은 마치 실제 업무를 수행하고 있는 것처럼 느껴졌다​​.

강의 수강 팁과 실무적 조언

강의를 수강하면서 가장 중요한 것은 파이널 프로젝트 과제를 먼저 확인하고, 그에 맞춰 강의를 듣는 것이었다. 이렇게 함으로써 강의 내용을 보다 실질적으로 적용할 수 있었다. 또한, 실무 진행 시에는 문제를 다양한 차원에서 접근하고, 시각화를 통해 문제를 명확히 하는 방법을 배웠다. 이러한 접근은 실제 업무에서도 큰 도움이 될 것으로 기대된다​​​​.

수강 후기: 장점과 단점

이 강의의 가장 큰 장점은 경력과 내공이 깊은 강사님들의 실무적인 접근법과 문서 작성법을 배울 수 있었다는 것이다. 실제 업무에서 바로 적용 가능한 실무 템플릿 제공도 큰 도움이 되었다. 단, 강의 페이지의 로그인 시스템과 자료 접근 방식에 있어서는 다소 불편함을 느꼈다​

 

결론: 나의 성장과 발전

개인적인 아이디어 기획서를 작성하는데 도움이 된것 같다!!!

 

이 강의를 통해 서비스 기획의 전체적인 흐름을 이해할 수 있었으며, 프로덕트 매니저로서 필요한 핵심 역량을 키울 수 있었다. '내일배움카드'와 '국비지원교육' 덕분에 경제적 부담 없이 이 귀중한 학습 기회를 얻을 수 있었다는 점도 매우 감사하게 생각한다. 이 강의를 통해 얻은 지식과 경험은 내 커리어에 큰 전환점이 될 것이며, 이를 바탕으로 앞으로 더 큰 도전과 성장을 기대하고 있다.

나는 프로그램을 본업으로 삼고자 많은 패캠에서 많은 프로그램 강의를 듣고 있다. 그리고 올해 7월 중반까지 내일배움카드를 통한 교육을 듣고 있었다. 열심히 프로그래밍 공부를 하다 패스트 캠퍼스 페이지에서 K-디지털 기초역량훈련에 대한 광고를 보게 되었고 마침 나에게도 내일배움카드도 있고, 그렇다면 추가로 일부 훈련비를 환급식으로 해서 단기간 강의를 들을수 있다고?!  이 얼마나 좋은가!!

 

바로 강의들을 살펴보았고 평소 게임과 VR 관련해서 관심이 있던 나는 내가 만든 캐릭터를 직접 만든 프로그램에 올려서 사용하는 미래를 꿈꾸며 "블렌더로 만드는 정교한 3D 캐릭터 제작" 강의을 신청하여 듣게 되었다!

 

강의는 입문자용으로 딱 좋은 커리큘럼을 가지고 있는데 나는 아직 듣고 있는 수업이 있었다. 이게 끝나야 집중이 가능한데( 보통 그렇듯 수업 마지막이 바쁘다 ) 패캠 K-디지털 기초역량훈련은 온라인이므로 중반부터라도 무제한 동영상 학습 방식으로 몰아서 들을수 있을 수 있어 나에게는 아주 정말루~ 딱 좋은 강의였다! 또한 추가로 일찍신청하면 얼리버드로 NFT 관련 캐릭터 제작에 대한 강의도 주고 강의를 다듣고 일부 미션을 성공하면 추가 강의 3개월 제공을 해준다고 하니 환급금이라는 목표 외에도 열심히 들어야한다!

 

강의 커리큘럼은 https://fastcampus.co.kr/b2g_kdc_blender 직접 링크를 찾아가면 자세히 알 수 있다.

그래도 대략 강의 내용을 적어보자면 아래의 구성으로 되어 있다.

[사진 입니다. 설명 영상은 직접 링크로 가서 확인하세요!]

 

1주차. 블렌더 기초

블렌더 시작하기

모델링하기

 

2주차. 단순한 캐릭터 만들기 - 모델링

UV map과 텍스쳐

캐릭터 제작과정과 Sculpt 모드

Head 모델링

 

3주차. 단순한 캐릭터 만들기 - 모델링, 리토폴로지

Body 모델링

Face 리토폴로지

Body 리토폴로지

 

4주차. 정교한 캐릭터 만들기 - 텍스쳐 & 리깅

UV 언랩, 노말맵 베이킹

텍스쳐, 셰이딩

캐릭터 리깅하기

 

5주차. 정교한 캐릭터 만들기 - 애니메이션

걷기 애니메이션

캐릭터 내보내기

 

추가 강의. 정교한 캐릭터 만들기 - 리깅 애니메이션

캐릭터 모델링 & 텍스쳐

웨이트 페인트 & 컨트롤러 만들기

신나는 댄스 애니메이션

 

 

 

1, 2주차 내용이 기능에 관한 설명이기 때문에 처음 부터 조금 지루하고 어려울 수도 있다.

그래도 그렇게 긴편은 아니니 다시 듣겠다는 식으로 대략적으로 보고 바로 실습을 하면서 다시 찾아보는 방식으로 진행한다면

편하게 들을 수 있을 것이다.

 

더욱이 이런 툴사용법은 직접 사용해봐야하므로 실습을 꼭 해봐야 한다 그냥 듣고 지나가면 바로 지워 지기때문에

초반의 설명을 번갈아가며 실습을 꼭!!! 해봐야 한다 그리고 실습한 것을 나중에 환급 기준에 쓸 수도 있기 때문에

꼭 꼭 꼭 반드시 실습을 해보길 바란다.

 

이 글을 쓰면서 그동안 내가 만들었던 것들을 다시 보고 있는데 ㅎㅎ;;; 좀 열심히 해야 겠다....

좋은 취미와 스킬을 가지게 된것 같아 기쁘다.

그럼 마무리는 수업 이외에 만든 것들을 올려본다.

 

1주차에 배운 내용은 바로 툴사용법과 단축키등의 내용이다.

이것은 꼭 보고 여러면 따라해야 한다. 배우고 나면 대략 아래의 것들을 만들어볼 수 있다.

제일 처음에 만드는 컵인데 나는 강의와 다르게 간단하게 만들고 이런 저런  뻘짓을 해보았다... 굿!
2주차 부터는 좀더 자세한 내용을 다룬다.

대략 간단한 모델링과 카메라 사용법, 랜더링 세팅 방법, 텍스처링 하는 방법들을 배우는대 컵과 아래의 모델링을 정도를 해볼 수 있다.

의자도 만들어 봤는데 실제로 목공을 배워서 이렇게 미리 만들어보고 똑같이 실물도 만드는게 버킷리스트가 되었다.

 

이제 3주차 부터는 캐릭터를 만들고 꾸미는 방법들에 대해 나온다. 1,2 주차의 기본기는 바탕이 된다..

(와 내가 보던 캐릭터들이 생각보다 엄청난 노가다와 노력의 산물들이라는 것을 알게 되었다...)

 

그리고 4주차는 더 자세한 꾸미기 테크닉이 있고 이것은 위의 강의 링크를 찾아가게 보시라!! (엄청나다..)

5주차는 리깅 에니메이션 하는 것인데 이것은 아직도 강의만 보구 있다.. 캐릭터만 해도 만드는 것만 해도 시간이 살살 녹아벼렷...

 

[3,4,5 주차는 강의 소개에 나오는 캐릭터를 만들고 에니메션하는 바로 그것을 한다. 강의 내용 그자체 이기 때문에 PASS>>]

 

강의 캐릭터는 무서워서 올리기 그렇고 만든게 대충이라.. ㅠㅠ 심심해서 남는 시간에 취미 삼아 만들어본 것을 한번 올려본다.

스컬핑을 배우고 나서는 용머리를 한번 뽑아보았다. 마우스로 하니 좀 힘들다. 타블렛이 있다면 다를 것 같다.

 

 

한달 남짓한 짧은 강의지만 배우는것도 제법되고 알찬 강의 였던것 같다.

거기다 바로 추가 강의 까지 두개나 준다구 ㅠㅠ!!! 으와~~  바쁘다 바뻐!!

 

바로 패.캠.에 다양한 강의가 있고 여러분도 할 수 있다!!!

ㄱㄱ!! 화이팅! 

코드스테이츠 블록에인 교육의 첫 기수(BEB01)로써 수업을 듣게 되었다.

첫 날은 오리엔테이션과 기타 설명 으로 시작 되었다.

 

대략 아래의 내용을 진행했다.

 

온라인으로 진행되었고 discord와 zoom 을 이용하여 컨텍하고 수업을 진행을 하기 때문에

디코에 가입하고, 가입해서 채널 네이밍도 맞추고, urclass라는 코드스테이츠 사이트에서

진행되는 수업자료를 보기위한 가입, 로그인 구글인증을 하였다.

 

계속해서 일정 관리를 위한 구글 캘린더를 연결하고 카드발급 요청도 확인하고

출석 본인인증 방법등등 설명을 듣고  파악하는 시간을 가졌다.

 

로컬 환경에서 ERC-721을 개발하고, Truffle을 이용한 배포를 실습합니다.

로컬에서 NFT를 개발하기 위해, Truffle과 Ganache를 사용합니다.

 

 

 

1) 폴더를 하나 생성하고 환경세팅

 

Truffle

truffle 프레임워크는 스마트 컨트랙트(solidity) 개발시 개발, 배포 및 테스트 환경을 제공 합니다. 이 프레임워크는 node.js에서 동작을 하며 npm 으로 설치를 할수 있습니다.

 

https://github.com/trufflesuite/truffle

 

GitHub - trufflesuite/truffle: A tool for developing smart contracts. Crafted with the finest cacaos.

A tool for developing smart contracts. Crafted with the finest cacaos. - GitHub - trufflesuite/truffle: A tool for developing smart contracts. Crafted with the finest cacaos.

github.com

설치 후 ' truffle version '  버전확인

 

# 폴더 생성
mkdir truffle721
# 폴더 진입
cd truffle721
# truffle 초기화
truffle init
# npm 초기화
npm init

개발 환경 준비를 마쳤다면, VScode를 실행합니다.

콘솔에 'code .' 입력

VScode에 나타나는 폴더와 파일의 구조는 다음과 같습니다.

먼저 몇 가지 세팅을 하고, 코드를 가져오겠습니다.

truffle-config.js 를 열고, solc를 설정합니다. solc 는 Solidity, Compiler의 버전 등을 설정합니다.
이 예시에서 사용하는 Solidity의 버전은 "0.8.7"이고, Compiler의 버전은 "london"입니다.
주석을 제거하고, 다음과 같이 설정을 수정합니다.

다음은 네트워크 설정을 편집합니다. Ganache를 이용해 로컬 환경에서 테스트할 예정이므로, 먼저 Ganache를 등록합니다.
다음과 같이 주석을 제거하고, developement를 구분하기 좋게 ganache 로 변경합니다.

이제 로컬 환경에서 Truffle과 Ganache를 이용해 개발하는 환경을 구축했습니다. Ganache를 이용한 배포는 다른 콘텐츠에서 다룹니다.

이전 콘텐츠에서 작성한 코드를 가져오겠습니다. 몇 가지 방법이 있지만, 간단한 코드이므로 복사 & 붙여넣기로 콘텐츠를 진행합니다.

 

 

//Contract based on [https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";

contract MyNFTs is ERC721URIStorage, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    constructor() public ERC721("MyNFTs", "MNFT") {}

    function mintNFT(string memory tokenURI)
        public onlyOwner
        returns (uint256)
    {
        _tokenIds.increment();

        uint256 newItemId = _tokenIds.current();
        _mint(msg.sender, newItemId);
        _setTokenURI(newItemId, tokenURI);

        return newItemId;
    }
}

 

함수 mintNFT 에서 변경된 부분은 다음과 같습니다.

  • 파라미터 address recipient 삭제
  • 파라미터 address recipient 를 사용하는 _mint 함수 실행부에서, recipient 를 msg.sender 로 대체

이렇게 변경하면, 오너의 지갑 주소에서만 함수 mintNFT 를 실행할 수 있고, 새로운 NFT는 항상 오너의 지갑 주소로 발행됩니다.

mint 함수는 사용하려는 형태에 따라 편집해서 사용합니다. 정해진 수량의 NFT만 제공하는 경우, NFT를 미리 발행해둔 채 tokenUri 만 업데이트하는 형태로 사용하기도 합니다. 개인 작가처럼 꾸준히 새로운 작품을 NFT로 발행하려면, mint 함수를 생성해두는 편이 좋습니다. 상황에 따라 알맞는 형태로 함수를 구현하세요.

편집한 코드를 복사하세요. VScode로 넘어가서 계속 진행합니다.

contract/ 폴더 아래에 MyNFTs.sol 파일을 생성합니다. 이 파일에 아까 복사해 둔 코드를 붙여넣습니다.

[주의] 이때 Remix에서 복사해오지 않은 경우(ex. 메모장에 코드를 붙여넣고 다시 복사한 경우 등), 코드의 컨벤션이 깨질 수 있습니다. 코드 편집기에서 복사하여, 코드 편집기로 붙여넣는 편이 가장 안전합니다.

이 파일에서는 OpenZeppelin의 파일을 참조하고 있습니다. 따라서, npm 을 통해 openzeppelin 을 설치해야 합니다.

이 경로의 터미널에서 다음의 명령어를 통해 openzeppelin 을 설치하세요.

npm install @openzeppelin/contracts

붙여넣은 코드가 정상적으로 배포되기 위해서는, migration 파일을 설정해야 합니다.
migration/ 폴더로 이동하여 1_initial_migration.js 파일을 엽니다. 그리고 다음과 같이 편집합니다.

const Migrations = artifacts.require('Migrations');
const MyNFTs = artifacts.require('MyNFTs.sol'); // MyNFTs.sol 파일 추가

module.exports = function (deployer) {
	deployer.deploy(Migrations);
	deployer.deploy(MyNFTs); // MyNFTs를 배포에 추가
};

이걸로 ERC721을 이용한 개발을 마쳤습니다. 배포 콘텐츠를 통해, 작성한 컨트랙트를 로컬에서 Truffle과 Ganache로 배포합니다.

 

2. Truffle로 ERC-721 배포하기

로컬 환경에서 Ganache를 이용해 컨트랙트를 배포합니다.
먼저, 새로운 터미널을 열고 ganache-cli 를 실행합니다.

# 새로운 터미널에서 ganache-cli 실행
ganache-cli

기존의 터미널에서 Truffle로 배포합니다. 이때, truffle-config.js 파일의 network 에 설정한 ganache 로 실행해야 합니다.

[주의] 실행하는 터미널의 현 위치가 package.json, truffle-config.js 의 위치와 동일한지 확인하세요. 맨 처음 truffle init 을 실행한 위치와 동일합니다.

truffle migrate --compile-all --network ganache

위 명령어에서 --network 에 이어 나오는 ganache 는 truffle-config.js 에서 설정한 network 의 키입니다.
위 명령어를 통해 로컬의 ganache-cli 와 연결하고, 컨트랙트를 배포합니다.

컨트랙트의 배포가 잘 이루어졌다면, Truffle console을 이용해 컨트랙트를 조작할 수 있습니다. 다음의 명령어를 터미널 프롬프트에 입력하고, Truffle console에 진입합니다.

truffle console --network ganache

Truffle console에서, 배포한 컨트랙트의 인스턴스를 받아옵니다. 그리고 배포한 컨트랙트가, 작성한 코드와 일치하는지 확인합니다.

instance = await MyNFTs.deployed()
instance.name()
# 'MyNFTs'
instance.symbol()
# 'MNFT'

배포된 컨트랙트에 대한 확인을 마쳤으면, 작성한 함수가 잘 동작하는지 확인합니다. 이때 함수의 마지막 파라미터로 실행할 지갑 주소를 함께 전달해야 합니다. 이 지갑의 주소는 ganache-cli 의 첫번째 지갑(0번째 인덱스 지갑) 주소입니다. Ganache를 이용해 컨트랙트를 배포할 때에는, default로 첫번째 지갑(0번째 인덱스 지갑)의 주소에서 컨트랙트를 배포합니다.

instance.mintNFT("https://urclass-images.s3.ap-northeast-2.amazonaws.com/beb/section4/unit4/test.json", { from: accounts[0] })
# Tx Information

그 다음 발행된 NFT로부터 tokenURI 를 확인합니다.

instance.tokenURI(1)
# "https://urclass-images.s3.ap-northeast-2.amazonaws.com/beb/section4/unit4/test.json"

앞으로 다른 네트워크(ex. 메인넷)에 배포할 때에는 truffle-config.js 에 네트워크 정보를 추가하고, Truffle 명령어 중 옵션 --network 와 함께 네트워크의 정보를 담고있는 키를 입력하면 됩니다.

 

- 회고

Keep

기존 학습 내용을 블로깅하면서 정리할 수 있는 시간이 된 것 같다.

 

Problem

막상 기록하면서 다시 해보려니 잘 안되서 급하게 했다.

 

Try

다른 유닛들도 해보고 익숙해지도록 해야겠다

+ Recent posts