본문 바로가기
반응형

IT192

上 편: 동남아 국가 인프라를 고려한 서비스의 기술적 개선 과정 上 편: 동남아 국가 인프라를 고려한 서비스의 기술적 개선 과정 현재 서비스 중인 MyVenus는 인도네시아 중심으로 동남아 국가들을 타겟팅한 뷰티 플랫폼 서비스 App입니다. 제 개발자 커리어의 첫 서비스 운영/개발이었는데 동시에 첫 해외 서비스를 운영하는 경험 또한 하게 되었습니다. 서비스 운영/개발을 하기 전 과거에는 SI 업무를 통해 App 개발을 해보았기에 App 개발에는 완전 처음이 아니었습니다. 하지만 SI 업무에서 했던 App 개발들은 모두 국내용이었고 사실 이것은 일반적이었습니다. 하지만 지금 이렇게 동남아 해외 서비스 App을 개발/운영하면서 국내용 서비스와 다르게 추가적으로 개발/운영하는데 꽤 많은 고려사항이 있었습니다. 이번 上편에서는 국내 서비스와 동남아 서비스를 하면서 알게 된 .. 2023. 9. 18.
서비스 운영/개발팀의 가장 효율적인 QA 테스트 프로세스를 찾아서 서비스 운영/개발팀의 가장 효율적인 QA 테스트 프로세스를 찾아서 서비스 운영/개발팀의 QA 프로세스를 정립하는 것이 꽤 어렵고 과정이 있어 이렇게 기록하고자 합니다. QA 란? Quality Assurance의 약자로 품질 보증을 말합니다. 제품 출시 이전에 각종 테스트(Test)및 검수 작업을 하는 업무 일정 수준의 품질(Quality)을 가질 수 있도록 제품 출시 이전에 각종 테스트(Test) 및 검수 작업입니다. It 업계에서 또한 기능 개발 후 QA을 통하여 제대로 기능이 작동하는지 검증하는 시간을 필수적으로 갖게 됩니다. 개발자에게 QA 란? SI/SM/솔루션/서비스 업계 상관없이 QA 테스트는 마지막 완성을 위해서 꼭 필요한 프로세스이며 정말 중요한 과정입니다. 이 과정이 없다면 불안정한 제.. 2023. 9. 2.
Redux - Redux로 간단한 웹사이트 구현하기 Redux로 간단한 웹사이트 구현하기 Redux만으로도 간단한 웹 CRUD을 구현할 수 있다. 1. 기본적인 HTML 뼈대 구현 위의 이미지에서 볼수 있듯이 간단한 CRUD을 Redux를 통해 구현할 수 있게되었다. 삭제, 생성이 되는 것을 테스트로 확인 할 수 있었다. 2021. 1. 23.
Redux - Redux 구현하기 Redux 구현하기 1. store 생성 2. reducer와 action을 이용해서 새로운 state 값 만들기 3. state의 변화에 따라서 UI 반영하기 //추가 //추가 리덕스를 이렇게 이용하면 state를 가져오기, 쓰기의 역할이 각자 정해짐으로 인해서 오는 한 번 수정을 위해 모든 state을 수정하는 것이 아닌 각각의 정리가 가능해졌으며 state변화를 알려주기때문에 그 사이에 다른 작업을 할 수 있게 되었다. 컴포넌트 작업에 용이, 정해진 방법대로 state를 관리하면 다른 component를 신경쓸 필요없어졌다. 2021. 1. 23.
Redux - Redux란? Redux란? predictable state​ container for JavaScript apps. 상태 관리 라이브러리로 state을 관리해주는 기능을 하고 있다. 여기서 State이란 컴포넌트 안에서 데이터를 교환하거나 전달할 때 사용한다. Redux을 쓰는 이유 상위 컴포넌트에 comments 들의 정보를 다 보관하고 있다. 하지만 comments 을 관리하는게 이 한 컴포넌트만 있는 것이 아니라이 컴포넌트의 자식 컴포넌트에서도 comments 를 관리하고 그 자식 컴포넌트에서도 comments를 관리하고 있는게 문제이다. 즉 comments의 state는 최상위 컴포넌트에서 관리되고 있음최하위 컴포넌트에서 Action이 일어났을 때 이 행위를 최상위 컴포넌트에 알려줘야하는데 이때 Redux가 .. 2021. 1. 23.
MongoDB - Index Index Index는 MongoDB에서 데이터 쿼리를 더욱 효율적으로 할 수 있게 해준다. 인덱스가 없이는, MongoDB는 collection scan – 컬렉션의 데이터를 하나하나 조회 – 방식으로 스캔을 하게 돤다. 만약 document의 갯수가 매우 많다면, 많은 만큼 속도가 느려지며 이 부분을 향상시키기 위하여 인덱스를 사용하면 더 적은 횟수의 조회로 원하는 데이터를 찾을 수 있다. Index의 종류 기본 인덱스 _id 모든 MongoDB의 컬렉션은 기본적으로 _id 필드에 인덱스가 존재한다. 만약에 컬렉션을 만들 때 _id 필드를 따로 지정하지 않으면 mongod드라이버가 자동으로 _id 필드 값을 ObjectId로 설정해준다. _id 인덱스는 unique(유일)하고 이는 MongoDB 클라.. 2021. 1. 20.
Express - 페이스북 로그인 구현 페이스북 로그인 구현 회원정보를 보관하는 것은 회원입장에선 불편하고, 서비스 입장에선 부담되는 일입니다. 이런 문제를 해결하기 위해서 최근에는 페이스북이나 구글과 같은 기업들이 로그인 연동 기능을 제공한다. 이를 Federated Identity라고 하고 Passport.js를 이용하면 이를 쉽게 구현할 수 있다. npm install -s passport-facebook 위의 코드를 입력하여 페이스북 로그인 구현을 위한 모듈을 다운로드한다. var = FacebookStrategy = require('passport-facebook').Strategy; passport.use(new FacebookStrategy({ clientID: FACEBOOK_APP_ID, clientSecret: FACEBOO.. 2021. 1. 20.
MongoDB - Document 수정 Document 수정 update() 메소드 MongoDB에서는 update() 메소드를 통하여 데이터를 수정 할 수 있다. db.collection.update( , , { upsert: , multi: , writeConcern: } ) Collection 안의 document(들)을 수정한다. 이 메소드를 통하여 특정 field 를 수정 할 수도 있고 이미 존재하는 document를 대체(replace) 할 수도 있다. update() 메소드의 기본 옵션으로는 단 하나의 document를 수정한다. *query document 업데이트 할 document의 criteria 를 정합니다. find() 메소드 에서 사용하는 query 와 같다. *update document document에 적용할 변.. 2021. 1. 19.
Express - 비밀번호 암호화 비밀번호 암호화 아래와 같이 회원정보가 들어있는 파일에 비밀번호가 암호화 되어있지 않는다면 보안에 심각한 문제를 초래할 수 있다. 아래 링크 페이지에 자세한 사용설명이 존재한다. www.npmjs.com/package/bcrypt bcrypt A bcrypt library for NodeJS. www.npmjs.com npm install -s bcrypt 비밀번호를 암호화하는 프로그램 모듈이 따로 존재하기에 위의 명령어를 입력하여 프로그램을 다운받는다. syntax/bcrypt.js //따로 bcrypt 프로그램을 구동시킬 코드를 모아둔 파일 만듬. var bcrypt = require('bcrypt'); //bcrypt 모듈 연동 const saltRounds = 10; const myPlaintex.. 2021. 1. 19.
Express - 다중 사용자 구현(회원가입) 다중 사용자 구현(회원가입) 1. 회원가입 UI 구현 lib/auth.js module.exports = { isOwner: function(request, response){ if(request.user){ return true; } else{ return false; } }, statusUI: function(request, response){ //register UI 추가 var authStatusUI = 'login | Register' if(this.isOwner(request, response)){ authStatusUI = `${request.user.nickname} | logout`; } return authStatusUI; } } lib/template.js module.exports .. 2021. 1. 19.
MongoDB - Document Query(조회) 2 Document Query(조회) 2 find() 메소드 활용 sort(), limit(), skip() orders 라는 데이터 추가 db.orders.insert[ ... { "_id": 1, "item": { "category": "cake", "type": "chiffon" }, "amount": 10 }, ... { "_id": 2, "item": { "category": "cookies", "type": "chocolate chip" }, "amount": 50 }, ... { "_id": 3, "item": { "category": "cookies", "type": "chocolate chip" }, "amount": 15 }, ... { "_id": 4, "item": { "category.. 2021. 1. 18.
MongoDB - Document Query(조회) Document Query(조회) find() 메소드 articles라는 데이터 베이스 추가 db.articles.insert([ { "title" : "article01", "content" : "content01", "writer" : "Velopert", "likes" : 0, "comments" : [ ] }, { "title" : "article02", "content" : "content02", "writer" : "Alpha", "likes" : 23, "comments" : [ { "name" : "Bravo", "message" : "Hey Man!" } ] }, { "title" : "article03", "content" : "content03", "writer" : "Bravo", .. 2021. 1. 18.
Express - passport.js로 로그인 기능 적용하기 passport.js로 로그인 기능 적용하기 인증구현 app.post('/auth/login_process', //로그인 프로세스 경로로 설정 passport.authenticate('local', { successRedirect: '/', //로그인 완료 후 등장할 경로 설정 failureRedirect: '/auth/login' })); //로그인 실패 후 등장할 경로 설정 로그인 폼에서 전송한 데이터를 받는 쪽을 passport로 전환하기 위해서는 일단 위의 코드를 main.js에 붙여넣기 해야한다. 경로 또한 로그인을 할 수 있도록 하는 process 쪽으로 해줘야한다. 자격확인 main.js //로그인 정보를 main.js로 가져옴 var authData = { email: 'k0502s2nav.. 2021. 1. 18.
Express -passport.js 설치하기 passport.js 설치하기 passport.js는 트위터나 페이스북 등등을 외부 사이트에서 로그인하고 연동할 수 있는 기능이라고 할 수 있다. www.passportjs.org/packages/ 위의 사이트에 가면 passport.js의 설치 및 사용 설명서가 있다. $ npm install passport 일단 npm을 이용하여 passport 프로그램을 다운받는다. $ npm install passport-local 일단 passport.js 기능으로 로그인 할때 아이디와 패스워드를 사용할 것이므로 위의 명령어를 입력하여 프로그램 다운한다. 페이스북, 트위터 등 같이 다른 기능들을 사용하려면 다른 프로그램을 다운받아야 한다. var passport = require('passport') , Loc.. 2021. 1. 18.
Express - session을 이용한 로그인 인증 구현 session을 이용한 로그인 인증 구현 로그인 기능을 구현하여 올바른 값을 입력하여 로그인이 되면 생성 및 수정을 할 수 있는 권한을 주었고 또 로그인을 하면 설정해둔 닉네임이 웹 화면상에 등장하도록 하였다. 로그인을 하지 않았다면 생성 및 수정을 할 수 없도록 제한을 걸어두는 간단한 로그인 기능들을 구현하였다. main.js var express = require('express'); var app = express(); var fs = require('fs'); var bodyParser = require('body-parser'); var compression = require('compression'); var helmet = require('helmet') app.use(helmet()); v.. 2021. 1. 16.
Express - express-session의 기본 개념 express-session 쿠키로만 로그인 기능을 구현하면 보안상 매우 치명적인 결함이 존재한다. 로그인을 할 수 있는 정보인 쿠키값이 그대로 노출되기 때문이다. 이때 express의 미들웨어인 session을 이용하면 이러한 문제점을 보안할 수 있다. 아래 사이트에서 세션에 대한 사용방법과 예가 나와있다. http://expressjs.com/en/resources/middleware/session.html Express session middleware express-session Installation This is a Node.js module available through the npm registry. Installation is done using the npm install comman.. 2021. 1. 16.
MongoDB - 생성 및 제거하기 생성 및 제거하기 Database 생성 use DATABASE_NAME 명령어를 통하여 Database를 생성 할 수 있다. 생성 후, 생성된 데이터베이스를사용하게 되고, 데이터베이스가 이미 존재하는 경우엔 현존하는 데이터베이스를 사용한다. > use k0502s switched to db k0502s 위와 같이 몽고DB을 실행시킨 후 명령어를 입력하면 생성을 할 수 있다. > db k0502s 현재 사용중인 데이터베이스를 확인하려면 db 명령어를 입력하면 된다. > show dbs local 0.000GB 만든 데이터베이스 리스트들을 확인하려면 show dbs 명령어를 입력하면 된다. Database 제거 Database를 제거할땐 db.dropDatabase() 명령어를 사용한다. 이 명령어를 사용하.. 2021. 1. 15.
Express - 쿠키를 이용한 인증 기능 구현하기 쿠키를 이용한 인증 기능 구현하기 main.js var http = require('http'); var fs = require('fs'); var url = require('url'); var qs = require('querystring'); var template = require('./lib/template.js'); var path = require('path'); var sanitizeHtml = require('sanitize-html'); var cookie = require('cookie'); //쿠키를 사용하기 위한 추가 //올바른 쿠키 데이터이 들어오면 isOwner가 false에서 true가 되도록 하는 함수 따로 만듬. function authIsOwner(request, resp.. 2021. 1. 15.
Express - 쿠키의 옵션 쿠키의 옵션 Session 쿠키 와 Permanent 쿠키 웹브라우저를 끄면 사라지는 휘발성 쿠키를 Session cookie라고 하고 웹브라우저를 꺼도 사라지지 않는 쿠키를 Permanent cookie라고 한다. var http = require('http'); var cookie = require('cookie'); http.createServer(function(request, response){ console.log(request.headers.cookie); var cookies = {}; if(request.headers.cookie !== undefined){ cookies = cookie.parse(request.headers.cookie); } console.log(cookies.yum.. 2021. 1. 15.
Express - 쿠키의 기본 개념 쿠키의 기본 개념 쿠키란 하이퍼 텍스트의 기록서의 일종으로서 인터넷 사용자가 어떠한 웹사이트를 방문할 경우 그 사이트가 사용하고 있는 서버를 통해 인터넷 사용자의 컴퓨터에 설치되는 작은 기록 정보 파일을 일컫는다. HTTP 쿠키, 웹 쿠키, 브라우저 쿠키라고도 한다. 이 기록 파일에 담긴 정보는 인터넷 사용자가 같은 웹사이트를 방문할 때마다 읽히고 수시로 새로운 정보로 바뀐다. 쿠키 생성 var http = require('http'); http.createServer(function(request, response){ response.writeHead(200, { 'Set-Cookie':['yummy_cookie=choco', 'tasty_cookie=strawberry'] }); response.en.. 2021. 1. 15.
MongoDB - 기본 설치 및 개념 기본 설치 및 개념 MongoDB란? MongoDB는 C++로 작성된 오픈소스 문서지향(Document-Oriented) 적 Cross-platform 데이터베이스이며, 뛰어난 확장성과 성능을 자랑하며 또한, 현존하는 NoSQL 데이터베이스 중 인지도 1위를 유지하고있다. NoSQL란? Not Only SQL 라는 의미이며 기존의 RDBMS의 한계를 극복하기 위해 만들어진 새로운 형태의 데이터저장소이다. 관계형 DB가 아니므로, RDMS처럼 고정된 스키마 및 JOIN 이 존재하지 않는다. Document와 Collection 몽고 DB는 Document Oriented 데이터베이스라는 것인데 Documen로 데이터를 다룬다고 말 할수 있다. 데이터 구조는 한개이상의 key-value pair 으로 이뤄져.. 2021. 1. 14.
Express - 라우터의 파일로 분리 정리 라우터의 파일로 분리 정리 관리하는 페이지가 많아짐에 따라서 코드의 복잡도가 급격히 높아지게 된다. 복잡도를 낮추는 방법이 라우터다. 주소체계변경 main.js var express = require('express') var app = express() var fs = require('fs'); var path = require('path'); var qs = require('querystring'); var bodyParser = require('body-parser'); var sanitizeHtml = require('sanitize-html'); var compression = require('compression') var template = require('./lib/template.js').. 2021. 1. 14.
Express - 에러처리 에러처리 app.use(function(req, res, next) { res.status(404).send('Sorry cant find that!'); }); app.use(function (err, req, res, next) { console.error(err.stack) res.status(500).send('Something broke!') }); 위의 코드들을 맨 아래에 적용하면 에러 발생시 설정한 값이 뜨도록 설정할 수 있다. main.js const express = require('express') const app = express() const port = 3000 var fs = require('fs'); var qs = require('querystring'); var templ.. 2021. 1. 14.
Express - 정적인 파일의 서비스 정적인 파일의 서비스 express에서 이미지, 자바스크립트, CSS와 같은 파일을 서비스하는 방법이 있다. app.use(express.static('public')); 위 코드를 추가시켜줘야 정적인 파일을 적용할 수 있다. main.js const express = require('express') const app = express() const port = 3000 var fs = require('fs'); var qs = require('querystring'); var template = require('./lib/template.js'); var path = require('path'); var sanitizeHtml = require('sanitize-html'); var bodyParse.. 2021. 1. 14.
Express - 미들웨어 미들웨어 미들웨어는 누군가 미리 만들어 놓은 코드를 부품을 쓰듯이 생산성을 높이기 위하여 쓸 수 있는 기능이라고 말할 수 있다. express 자체가 미들웨어로 구성되어있다고 해도 무방하다. 미들웨어 사용하기 body-praser라는 node.js 코드를 더 간결하고 간단하게 해주는 미들웨이로 예를 들어 보겠다. expressjs.com/en/resources/middleware/body-parser.html Express body-parser middleware body-parser Node.js body parsing middleware. Parse incoming request bodies in a middleware before your handlers, available under the req.. 2021. 1. 14.
Express - Express 홈페이지 구현 적용 Express 홈페이지 구현 적용 홈페이지 기본 구현 onst express = require('express') const app = express() const port = 3000 var fs = require('fs'); var template = require('./lib/template.js'); app.get('/', (request, response) => { fs.readdir('./data', function(error, filelist){ var title = 'Welcome'; var description = 'Hello, Node.js'; var list = template.list(filelist); var html = template.HTML(title, list, `${tit.. 2021. 1. 14.
Express - 기본 세팅 시작 기본 세팅 시작 npm install exppress --save 위 코드를 node.js가 실행된 상태에서 터미널에 명령하여 express 프로그램을 다운로드한다. expressjs.com/ko/starter/hello-world.html Express "Hello World" 예제 Hello world 예제 기본적으로 이 앱은 여러분이 작성할 수 있는 가장 간단한 Express 앱일 것입니다. 이 앱은 하나의 파일로 된 앱이며 Express 생성기를 통해 얻게 되는 앱과는 같지 않습니다. (이 예제 expressjs.com 위 사이트에 들어간다. express가 실행되는지 확인하는 간단한 코드가 주어진다. const express = require('express') const app = expres.. 2021. 1. 14.
Node.js and Mysql - 저자 관련 기능 구현 저자 관련 기능 구현 1. 저자 목록 보기 기능 구현 main.js var http = require('http'); var fs = require('fs'); var url = require('url'); var qs = require('querystring'); var template = require('./lib/template.js'); var db = require('./lib/db'); var topic = require('./lib/topic'); var author = require('./lib/author'); var app = http.createServer(function(request,response){ var _url = request.url; var queryData = url... 2021. 1. 12.
Node.js and Mysql - Node.js 정리정돈 Node.js 정리정돈 1. DB 설정정보 정리정돈 이제 정리정돈의 첫 시작으로 mysql을 연동시켰던 코드를 따로 분리하여 파일을 만들고 그 안에 따로 만들어 놓는다. 그리고 모듈화를 통해 main.js와 연동시켜준다. 위와 같이 db.js 파일을 main.js에 연동시켜주었다. 2. Node.js 코드의 정리정돈 (topic) topic.js라는 파일을 따로 만들어 mysql을 사용하여 node.js에 적용한 코드들을 그대로 따로 만든 파일에 옮긴 후 모듈화시켜 더욱 복잡하지 않게 하여 업무의 효율성을 더욱 높여주었다. 보기에도 깔끔하고 가독성이 좋아졌다. main.js var http = require('http'); var fs = require('fs'); var url = require('ur.. 2021. 1. 11.
Node.js and Mysql - My SQL join을 이용해서 구현하기 My SQL join을 이용해서 구현하기 mysql에 들어있는 위 두 테이블 데이터를 JOIN 기능을 Node.js에 적용하여 더 효율적으로 코드를 작성할 수 있다. 1. My SQL join을 이용해서 상세보기 구현 Main.js var http = require('http'); var fs = require('fs'); var url = require('url'); var qs = require('querystring'); var template = require('./lib/template.js'); var path = require('path'); var sanitizeHtml = require('sanitize-html'); var mysql = require('mysql'); var db = .. 2021. 1. 11.
반응형