728x90

정규표현식은 복잡한 조건 비교문 없이
패턴 단위로 문자열을 검증할 수 있어서 무척 유용하...지만...-_-;;
자주 사용하지 않으면 할 때마다 헷갈린다는 단점이 있다.

자바스크립트만 이용해서 사용자 입력값을 검증하는 것은
무조건 문제가 생길 수 있기 때문에 서버측 검증을 꼭 해야만 한다.
물론 서버측에서는 여러가지 다른 수단 (가령, 스토어드 프로시저 파라메터의 데이터 타입) 이 있기 때문에
자바스크립트에서 정규표현식 검증을 하고
서버단에서는 별도 Validation 을 하는 것도 좋은 방법이다

각설하고,

사용자 계정 생성시 자주 사용하게 되는 룰이 영문, 숫자만 허용하는 것인데
이를 자바스크립트 정규표현식을 사용하면 무척 간단하게 표현이 가능하다

var regType1 = /^[A-Za-z0-9]+$/;
혹은
var regType1 = /^[A-Za-z0-9]*$/;

 
영어는 대문자 소문자가 있기 때문에 두가지를 모두 식에 표현해 주어야 한다

var regType1 =/^[A-Za-z0-9]+$/;

혹은
var regType1 = /^[A-Za-z0-9]*$/; 

숫자도 0-9 라는 조건을 통해 필터링 할 수 있다

var regType1 = /^[A-Za-z0-9]+$/; 
혹은
var regType1 = /^[A-Za-z0-9]*$/; 

+ 는 대/소 영문자, 숫자가 한번 이상 나온다는 의미이며 
꺽쇠 바깥쪽의 별표(아스타리스크,*)는 꺽쇠 안의 조건이 0번 이상 반복된다는 의미이다
+와 *는 미묘하게 차이가 있지만 위의 목적으로는 어느것을 사용해도 무방하다

만약, 문자열 길이를 제한하고 싶으면 어떻게 하면 될까?
그 때는 브레이스({,})로 문자열 갯수를 지정해 주면 된다.

var regType1 = /^[A-Za-z0-9]{4,12}$/; 

위와 같은 식을 이용하면 4자 이상, 12자 이하의 문자열 필터링이 가능하다.
완성된 코드는 아래와 같다.

var regType1 = /^[A-Za-z0-9+]*$/;
if (regType1.test(document.getElementById('userid').value)) { alert('아이디가 조건에 맞지 않습니다'); }

참고로 정규표현식 관련된 책들중 얇고 부담 없지만 탄탄한 책은
한빛미디어에서 출간된 "처음 시작하는 정규표현식 Regular Expression" 을 추천한다 

[자세히보기]


- NoPD -

 

쿠팡 파트너스 활동을 통해 소정의 수수료를 지급받을 수 있습니다

 

728x90
728x90
가끔 리눅스나 Mac OS 환경에서 배치파일을 만들어야 할 때가 있다.
자주 쓰면 잊어버리지 않을텐데, 가끔 쓰다보니 할때마다 자꾸 찾는거 같다.

chmod a+x [파일명]


chmod 옵션중 a 는 모든 유저를 나타내며
x 옵션이 Execute 를 나타내는 옵션이다.
까먹지 말고 적어두자 ^^


참고 : 
Unix Executable File / Linux Executable File / Mac Executable File

- NoPD -
 
728x90
728x90
웹 사이트 혹은 웹 서비스를 글로벌 사용자들을 대상으로 제공하고자 할 때 가장 걸리는 것이 바로 속도문제입니다. 내 서버가 어디에 위치하고 있느냐에 따라 엔드유저가 접근하는 시간이 달라질 수 밖에 없기 때문입니다. 아마존과 같은 클라우드 인프라 서비스는 세계 여러곳에 지역(Region) 센터를 두고 있어 이런 문제점을 어느정도 해결할 수 있게 해주고 돈을 조금 들인다면 아카마이와 같은 CDN 서비스를 통해 손쉽게 웹 트레픽의 속도를 보장할 수 있습니다.

그렇지만 개인 개발자라던가 아직 서비스에 대한 클라우드 인프라 투자, CDN 전송망의 사용이 힘든 상황이라면 얘기가 조금 다릅니다. 이런 경우라면 최대한 웹 사이트를 최적화하여 HTTP 세션이 맺어지는 불가피한 오버헤드를 제외한 나머지 웹 컨텐츠, 오브젝트에 대해서는 최대한 최적화를 하는 것이 필요합니다. 그런데 최적화를 하려면 현재 상태를 알아야 합니다. 도대체 미국, 프랑스, 영국, 호주 등 외국에서 내 웹사이트에 접근했을 때 속도는 어떻게 측정해야 할까요?

 
해외로도 발이 아주 넓어 각지에 친구가 있는 경우라면 웹 사이트 접속해보면서 시간을 재달라고 하면 되겠지만 현실적으로 그러기는 너무 힘이들죠. 이런 노고를 위해 착한 사람들이 만든 착한 웹 사이트, 웹페이지 테스트(http://www.webpagetest.org)를 이용하면 어렵지 않게 세계 각지에서의 속도 측정을 할 수 있습니다.

여러가지 심도있는 테스트는 Advanced Settings 를 통해서 할 수 있습니다만 간단하게 URL 을 입력하고 테스트 지역을 선택하는 것 만으로도 기본적인 데이터를 모두 뽑아볼 수 있습니다. 브라우저 User-Agent 값을 변경시켜 가면서 웹 사이트를 테스트 할 수 있는 기능도 제공되기 때문에 여러가지로 유용한 서비스라 하겠습니다. 어차피 HTTP Request / Response 로 분석을 해주는 서비스이기 때문에 우리가 흔히 아는 웹 사이트를 가지고 속도 테스트를 해봐도 상관 없습니다.  트위터를 가지고 한번 해보니 아래와 같은 결과가 나오네요. 지역은 브라질 상파울로를 선택하고 브라우저는 크롬을 가지고 테스트 요청을 했습니다.


상세 화면으로 들어가면 파이어버그나 크롬 웹 개발자 도구를 이용하는 것과 같은 뷰를 볼 수 있습니다. 상세한 내용은 직접 보시면서 확인하면 될 것 같구요, 처음 테스트 결과가 나오는 화면에서 두번의 테스트를 하는 이유를... 혹시 아시나요? 아신다면 그대는 웹 사이트 튜닝 세계로 들어올 준비가 된 것입니다 ^^ 정답은 댓글로 물어보시면 답변해 드리는 것으로...

웹 페이지 성능 측정 서비스, WebpageTest 방문하기 [바로가기


- NoPD - 
728x90
728x90
Node.js 가 등장한 이후 간단히 테스트 목적의 웹 서버를 만드는 일이 손쉬워졌습니다. 단순한 Static 컨텐츠의 노출이 아닌 이상 닷넷을 이용하던 자바를 이용하던 뭔가 무거운 개발도구를 실행하고 코드 몇 줄을 넣은 후 컴파일 해야 했다면 Node.js 는 그런 번거로움과 불필요함을 한방에 날려주고 있습니다.

새롭게 옮긴 직장에서 고객사의 PUT Request 에 대한 처리를 해야 할 일이 생겼는데 고객사의 API 에 대고 신나게 테스트를 할 수 있는 것도 아니고 해서 간단하게 가상머신에 Node.js 와 Express 모듈을 이용하여 RESTful API (..라고 적었지만 그냥 PUT Request 를 처리하는...) 를 만들어 봤습니다. 혹시나 RESTful API 의 CRUD 액션을 간단히 구현할 필요가 있으신 분들 참고하시라고 올려둡니다. Node.js 와 Express 모듈을 설치하신 뒤 소스코드를 참고해서 보시면 됩니다. REST 호출 이외에도 처리를 위해 Jade 모듈도 설치후 설정이 들어가 있는데요, 이 부분은 필요하신 경우 선택적으로 쓰시면 되겠습니다.

(참고로 현재 시점에서의 Node.js 와 Express 최신 버전을 따르고 있기 때문에 보시는 시점에 따라 해당 엔진과 모듈의 행동양태가 변경되면 동작하지 않을 수도 있습니다 ^^;;)

// express_server.js
var express = require('express');
var app = express();

app.configure(function() {
	app.set('views', __dirname + '/views');
	app.set('view options', { layout: false });
	app.use(express.methodOverride());
	app.use(express.bodyParser());
	app.use(app.router);
	app.use(express.static(__dirname + '/public'));
	console.log('configure successful...');
	console.log('view directory is ' + __dirname + '/views');
	console.log('static directory is ' + __dirname + '/public');
});

app.get('/hello', function(req, res) {
	res.render('index.jade', {
			message:'hello world'
	});
});

// TYPE 1 (RESTful) : call "/puttest/3"
app.put('/puttest/:id', function(req, res) {
	res.send('received id :' + req.params.id);
});

// TYPE 2 (Traditional) : call "/puttest" with body parameter "id=9" then
app.put('/puttest', function(req, res) {
	res.send('received id :' + req.body.id);
});

app.configure('production', function() {
	app.use(express.logger());
	app.use(express.errorHandler());
});

app.configure('development', function() {
	app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.listen(81);

위의 소스코드에서 사용한 Jade 템플릿은 아래와 같이 간단하게 되어 있습니다. 그냥 그렇구나 하시면 될 것 같습니다.
// Jade 렌더링 테스트용 : /views/index.jade
#{message}

[ Node.js 의 기초를 위한 추천 도서 ]
인기 저자 윤인성 작가의  "모던 웹을 위한 Node.js 프로그래밍" [자세히보기]


- NoPD -
728x90

+ Recent posts