클라우드상에서 간단한 웹 애플리케이션을 제작할것입니다. 백엔드 저장소로 ICOS(IBM Cloud Object Storage)를 사용할 것이고, ICOS의 API를 이용해 통신할 것입니다. 만드려는 application의 기능은 웹상에서 ICOS에 이미지를 저장시키고, 이미지를 불러오는 기능입니다.
이제 app 코딩을 하기전에 IBM Cloud Platform 과 로컬 개발환경 둘다 접근가능한 소스 레포지토리가 필요합니다. 로컬에서 개발하면 소스 저장소와 클라우드 플랫폼 둘다 push되어야하고 클라우드플랫폼에서 변경이 발생한다면 로컬에도 pull되어야 합니다. 이를 위해 dellivery pipeline을 만들어 봅시다.
Overview에서 지속적딜리버리 사용 클릭
저장소유형은 새로작성, 개인용으로 설정된 체크는 해제해주도록 합니다.
API작성은 작성버튼을 눌러서 쉽게 생성가능합니다.
구성된것 확인.
연결된 git repository를 확인해보면 지금은 텅텅비어있습니다.
git desktop을 열어서 clone해줍니다.
clone한 폴더에 이전에 만들었던 starter파일들을 복사합니다.
이제 다시 repository에 push하기전에, 중요한 할일이 있습니다. repository에 로컬에서 커밋하려면 접근하기위한 access token이 필요합니다!
오른쪽 상단 프로필 -> Settings -> Access Tokens 탭으로 이동. 이름과 권한 범위를 입력한 뒤 token create버튼을 눌러 토큰을 생성합니다.
Name이 id이고, token이 password입니다. 커밋할때 git Desktop에 정보를 입력해주시면 됩니다.
app.js에서 표기한 주소 (REST API)에 따라 다르게 처리해야하기 때문에 중간다리인 라우터가 필요합니다. 본 튜토리얼에서의 코드는 기본주소(’/’) 일때 imageUploadRouter를 호출하고 (’/gallery’)일때 galleryRouter를 호출하고있습니다. 어떤일을 하는지 각 소스코드를 살펴봅시다.
파일을 전송하기 위해 사용하는 몇가지 함수 중 fileReader.readAsBinaryString()이라는 함수가 있습니다. 이함수를 통해 front에서 back으로 파일을 올리면 back단에서 파일을 처리하는데 몇가지 문제가 발생할 수 있습니다. (예:인코딩, 원래파일의 정보)
위의 문제를 해결하기 위해 이 문서에서는 파일업로드를 하기 위해 multer모듈을 사용하고 있습니다. multer는 파일업로드에 사용되는 multipart/form-data를 다루기 위한 node.js의 미들웨어입니다. 추가로, multipart가 아닌 폼에서는 동작하지 않습니다.
vargalleryController=function(title){varaws=require('aws-sdk');//aws api를 사용하기위해 추가
varmulter=require('multer');//파일업로드를 도와주는 multer모듈추가
varmulterS3=require('multer-s3');//업로드한 파일을 S3에 바로 저장시키기위한 multer-s3
//s3프로토콜을 위한 정보 기입
varep=newaws.Endpoint('https://s3.us-south.cloud-object-storage.appdomain.cloud');vars3=newaws.S3({endpoint:ep,region:'us-south'});//cos bucket name
varmyBucket='web-images-bucket';...return{getGalleryImages:getGalleryImages,upload:upload};};module.exports=galleryController;
vargetGalleryImages=function(req,res){varimageUrlList=[];varparams={Bucket:myBucket};//버킷에 있는 개체의 데이터를 반환
s3.listObjectsV2(params,function(err,data){if(data){varbucketContents=data.Contents;//버킷에 들어있는 데이터 개수만큼
for(vari=0;i<bucketContents.length;i++){varbcKey=bucketContents[i].Key;//파일확장자 jpg png gif만 처리
if(bcKey.search(/.jpg/)>-1||bcKey.search(/.png/)>-1||bcKey.search(/.gif/)>-1){varurlParams={Bucket:myBucket,Key:bucketContents[i].Key};//개체의 버킷 이름 및 키를 전달하면 모든 개체에 대해 사인된 URL을 반환
s3.getSignedUrl('getObject',urlParams,function(err,url){imageUrlList[i]=url;});}}}//galleryView.ejs로 렌더링
res.render('galleryView',{title:title,imageUrls:imageUrlList});});};
local환경에서 aws-sdk:2.16.0일 경우에 정상적으로 실행되지만 sdk버전이 낮아서 경고문구가 발생합니다.
added 6 packages from 55 contributors, removed 1 package, updated 1 package and audited 3030 packages in 6.894s
found 4 vulnerabilities (2 low, 2 moderate) run `npm audit fix` to fix them, or `npm audit`for details
1. Overview # 최근 ML(Machine Learning)에 대한 관심이 높아지면서 너도나도 ML에 발을 담그고 있습니다. 하지만 ML은 매우 많은 연산량을 요구하고 보통의 컴퓨터로는 결과를 내려면 굉장히 많은 시간이 소요됩니다.
이번 문서에서는 IBM Cloud와 IBM Watson Studio를 통해 빠르고 쉽게 모델을 training 시키고, deploy하는 과정을 진행하겠습니다.
1. Overview # 이번 튜토리얼에서는 IBM Watson의 Visual Recognition 서비스를 통해 이미지를 인식하고, 서비스의 API를 이용한 간단한 web application제작, 마지막으로 기존 모델이 아닌 커스텀모델을 트레이닝시키는 작업까지 해보도록 하겠습니다.