기타IT

Hagi 2009. 8. 24. 20:58

Mashup (web application hybrid)

From Wikipedia, the free encyclopedia

In web development, a mashup is a web page or application that combines data or functionality from two or more external sources to create a new service.

웹 개발에서, 메시업은 새로운 저비스를 구현하기 위해 외부 소스들을 합쳐서 데이터를 결합하거나 상관관계를 높인 웹페이지나 웹애플리케이션이다.

=> 매시업(Mashup)은 으로 제공하고 있는 정보와 서비스를 융합하여 새로운 소프트웨어나 서비스, 데이터베이스 등을 만드는 것을 말한다.

The term mashup implies easy, fast integration, frequently using open APIs and data sources to produce results that were not the original reason for producing the raw source data.

 

An example of a mashup is the use of cartographic data to add location information to real estate data, thereby creating a new and distinct Web service that was not originally provided by either source.

개요 [편집]

웹 2.0의 구성 요소로 주목을 받고 있다. 구글이나 야후, 마이크로소프트 등이 제공하는 지도 서비스, 인터넷 서점 아마존이 제공하는 상품 정보 등, 자사의 기술을 웹 서비스로서 API를 공개하는 경우가 늘고 있으며, 이들 기능에 독자적인 사용자 인터페이스를 융합하여 새로운 서비스를 제공하고 있다.

미국을 중심으로 다수의 매시업 사례가 등장하여, 범죄 통계 정보, 허리케인 정보, 주유소의 가격정보처럼 실용적인 것에서부터, 온천 정보, UFO 목격 정보, 뉴욕의 영화 위치, 현장정보처럼 취미나 엔터테인먼트에 관한 것까지 여러 종류가 있다. 매시업의 원천이 되는 API의 개발에도 박차가 가해지고 있다.

예시 [편집]

예를 들어 구글 지도[1]에 부동산 매물 정보를 결합한 서비스인 구글의 하우징 맵스[2]등이 있다.

이러한 서비스의 장점은 자료구축의 비용이나 개발비가 거의 들지않는다는 장점이있다. 구글이나 야후, 마이크로소프트 등이 제공하는 지도 서비스, 인터넷 서점 아마존이 제공하는 상품정보 등, 자사의 기술을 웹 서비스로서 API를 공개하는 케이스가 늘고 있으며, 이러한 open api들의 기반기술에 독자적인 유저인터페이스나 컨텐츠 등을 융합하여 새로운 서비스가 제공되고 있다.

 

* hybrid

〕〔L집돼지멧돼지종」 에서〕 n.
1 (동식물의) 잡종, 이종(異種)
2 튀기, 혼혈아
3 혼성물
4언어종어, 혼성어서로 다른 언어·방언에서 유래요소뒤섞여 생긴
a.
1 <동식물이> 잡종의;<사람이> 혼혈
   a hybrid animal 잡종 동물

2 혼성
   a hybrid culture 혼성 문화

3 <단어가> 종의
hbridize v.;hbridism, hybrdity n.

 

* 웹애플리케이션

소프트웨어 공학적 관점에서 웹 애플리케이션(web application) 또는 웹앱인터넷이나 인트라넷을 통해 웹 브라우저에서 이용할 수 있는 응용 소프트웨어를 말한다.

 
 
 

기타IT

Hagi 2009. 8. 24. 20:26

안정적인 소프트웨어를 작성하는 2가지 방법 중 다른 하나

 

안정적인 소프트웨어를 작성하는 데는 여러 가지 고민해야 될 사항이 있겠지만,
그 중 딱 2가지만 고르라고 한다면, 
하나는 '설계'를 그리고 다른 하나는 'Unit test'를 고를 것 같습니다.

그 두 번째, 'Unit test'에 대한 이야기 입니다.


저의 첫 module을 작성을 하던 때였습니다.
온 정성을 다해서 코드를 작성했습니다.
'버그가 없는 완벽한 코드를 작성할 테다!'

'완성!' 드디어 Integration시험이 시작됩니다.
그런데, 믿고 있던 제 module에서 버그가 발견되는 것이 아니겠습니까?
'하나쯤이야.'

시간이 흐르면서 버그는 계속 발견되었습니다.
게다가 이전에 잘 동작하는 것들이, 수정 후에 잘 동작하지 않는 버그도 만들어 냈죠.
'이런~ 자존심 상합니다'

'API의 argument를 그런 식으로 사용한단 말이야?'
'초기화 이전에 그 API가 불릴 수도 있구나'
'그 API들을 동시에 사용한다 말이지?'

API는 경험이 부족했던 제가 예상하기 힘든 방법으로 사용되었고,
'설마?' 했던 것들도 시간이 지나면서 버그로 나타났죠.
그 때부터 '어떻게 하면 이런 버그들을 만들지 않을 수 있을까?' 라는 고민을 시작한 것 같습니다.


찾은 답이 바로 'Unit Test' 입니다.
'Unit test'란 별 것 아닙니다.
Module의 API를 상상할 수 있는 모든 방법으로 시험하여 버그 없음을 확인하는 것이죠.

예를 들어, Argument가 하나 있고 그 범위가 1..100 이라면,
1을 주면 동작하는가? 100을 주면 동작하는가?
0을 주면 실패하는가? 101을 주면 실패하는가?
이런 식으로 시험을 하는 것입니다.


제가 배운 Point는 2가지인데,
첫 번째는 시험 자체가 '자동'이어야 한다는 것입니다.

버그를 수정하게 되면 이런 걱정을 합니다.
'다른 부분에는 영향이 없는 건가?'
관련 없는 부분인 것 같은데, 잘 돌던 코드가 안 도는 경우가 생기게 됩니다.
이때, 자동 Unit Test가 있으면, 코드를 마음 편히 고칠 수가 있게 되는 거죠.
버튼만 누르면 '성공' 이 표시가 되니까요.
코딩이 다시 재미있어집니다.

그런데, 이렇게 시험을 해도 버그는 발견됩니다.
이유는 간단하죠. 경험이 부족하다 보니, 정작 시험해야 할 경우를 빼먹으니까요.
이것이 두 번째 point입니다.
Unit Test는 'Upgrade' 되어야 합니다.
생각하지 못했던 경우가 생기면, 이를 추가하는 겁니다.
Code와 더불어 Unit Test도 계속 Upgrade되는 거죠.
이렇게 계속 추가하다 보면, 언젠가는 완벽에 가까운 Case를 가지게 되겠죠. 하하


결국, Unit test의 목적은 간단합니다.
'한번 만든 버그를, 두번 다시 만들지 말자'


여기까지가 제가 찾은 간단한 방법입니다.
효과는 어땠냐고요?
다행히도 현재는 상당히 적은 수의 버그가 발견되고 있으며,
팀원들의 대부분은 제가 코딩을 잘 하는 것으로 오해를 하죠.
Unit test에서 발견되는 수많은 버그를 모르니까요.

근데, 하나 좋지 않은 것도 있습니다.
코딩이 약간은 재미 없어진다는 거죠.
Module coding이 100 이라면
Unit test coding을 40~70 정도 하게 되니까요.

설계의 고통처럼,
코딩의 고통은 Unit test작성이 아닐까 합니다.

고맙습니다.


 by 제임스 | 2009/04/05 23:37 | 메인스토리 | 트랙백(1) | 덧글(8)

트랙백 주소 : http://jamestic.egloos.com/tb/2282444
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
 Tracked from heartsavior'.. at 2009/05/14 14:01

제목 : Heart의 생각
안정적인 소프트웨어를 작성하는 2가지 방법 중 다른 하나 유닛 테스트에 대해 기억해야 할 두 가지… 시험 자체가 '자동' 이어야 한다, 유닛 테스트는 업그레이드 되어야 한다. 유닛 테스트 코드도 유지보수 대상인 것이다....

 Commented by coffeejava at 2009/04/06 02:10 
reliability, safty ?
 Commented by 제임스 at 2009/04/06 18:47
Reliability, that is.

오랜만입니다. coffeejava님 하하
 Commented by 랩하는좀비 at 2009/04/06 12:35 
Unit Test로 코딩을 하다보면 Test뿐만 아니라 개념이 확장되는 느낌을 받을 수 있더군요. -ㅅ-) TDD가 요즘에 트렌드인 듯 합니다. ...요즘이 아닌려나(...) 

(링크만 해 놓은 눈팅족이지 말입니다) 
 Commented by 제임스 at 2009/04/06 18:59
그런 것 같아요. Test code를 작성하다 보면 개념이 깨끗해져서, 설계를 다시 돌아보다 잘못된 부분을 고치기도 하게 되는 것 같아요. 좀비님하고 말이 통하네요.
TDD, 트렌드, 이런 건 너무 어렵습니다. 하하
 Commented by coffeejava at 2009/04/07 10:46 
안녕하세요~ 
언제나 글은 재미 있게 읽고 있습니다. ^^ 
눈팅만 해서 오랫만이 됐나 봅니다~
 Commented by 제임스 at 2009/04/08 09:53
하하 네 coffeejava님,
공부는 즐거우신지요.
지금도 그 용기가 부럽네요.
 Commented by Keating at 2009/04/25 03:22  
하지만 결국 데드라인의 압박으로 완벽이 아닌 만족의 수준에 머무는 소프트웨어들만 만들어질 뿐이라는 거
 Commented by 제임스 at 2009/04/25 09:58
왠지 세상과 타협하는 것 같으면서도, 타협하지 않는 느낌이 오묘합니다. ^^
Keating님의 말씀만 들어도, 높은 기대치가 보이는 것 같아 훌륭한 엔지니어 일것 같다는 생각이 들어 좋습니다.

출처 : http://jamestic.egloos.com/2282444

 
 
 

JAVA

Hagi 2009. 8. 24. 20:17

ceil

public static double ceil(double a)
Returns the smallest (closest to negative infinity) double value that is greater than or equal to the argument and is equal to a mathematical integer. Special cases:
=> a 보다 작지 않은 가장 작은 정수 값  
     ceil() 함수는 a를 위쪽의 가장 가까운 정수로 라운딩시키고, double로 그 값을 반환한다.  
 
  • If the argument value is already equal to a mathematical integer, then the result is the same as the argument.
  • If the argument is NaN or an infinity or positive zero or negative zero, then the result is the same as the argument.
  • If the argument value is less than zero but greater than -1.0, then the result is negative zero.
Note that the value of Math.ceil(x) is exactly the value of -Math.floor(-x).

Parameters:
a - a value.
Returns:
the smallest (closest to negative infinity) floating-point value that is greater than or equal to the argument and is equal to a mathematical integer.

-출처 :j2se/1.5.0/docs/api/java

 

(예제)

  1. /*
  2.   Find ceiling value of a number using Math.ceil
  3.   This java example shows how to find a ceiling value of a number using ceil method
  4.   of Java Math class. ceil method returns the smallest interger which is not
  5.   less than the value.
  6. */
  7.  
  8. public class FindCeilingExample {
  9.  
  10. public static void main(String[] args) {
  11.  
  12. /*
  13.   * To find a ceiling value, use
  14.   * static double ceil(double d) method of Math class.
  15.   *
  16.   * It returns a smallest integer which is not less than the argument value.
  17.   */
  18.  
  19. //Returns the same value
  20. System.out.println(Math.ceil(10));
  21.  
  22. //returns a smallest integer which is not less than 10.1, i.e. 11
  23. System.out.println(Math.ceil(10.1));
  24.  
  25. //returns a smallest integer which is not less than 5.5, i.e. 6
  26. System.out.println(Math.ceil(5.5));
  27.  
  28. //in this case it would be -20
  29. System.out.println(Math.ceil(-20));
  30.  
  31. //it returns -42 not -43. (-42 is grater than 42.4 :) )
  32. System.out.println(Math.ceil(-42.4));
  33.  
  34. //returns 0
  35. System.out.println(Math.ceil(0));
  36.  
  37. }
  38. }
  39.  
  40. /*
  41. Output would be
  42. 10.0
  43. 11.0
  44. 6.0
  45. -20.0
  46. -42.0
  47. 0.0
  48. */

출처 : http://www.java-examples.com/find-ceiling-value-number-using-math.ceil