About Spring
-Framework
1) Framework 란 무엇인가?
프레임워크란 프래그래머가 프로그램을 만드는데 있어 아주 기본이 되는 골격 코드를 말한다.
중요한 것은 이 골격이라는 것이 어떤 특별한 목적을 가지고 있다는 점이다. 건물을 만들기 위한 골격, 배를 만들기 위한 골격처럼말이다.
골격을 보면 앞으로 완성품이 무엇이 될지 예상할 수가 있따. 그래서 이 프레임워크를 반제품이라고 부르는 사람도 많다.
반제품, 즉 반쯤 완성된 제품이라는 의미이다. 반쯤 완성되었기 떄문에 프레임워크를 이용하는 사람은 나머지 반 부분만 채워 넣어주면 된다.
프레임워크 자체는 완전한 애플리케이션 소프트웨어가 아닌 어떤 문제영역을 해결하기 위한 잘 설계된 일반적인,
재사용 가능한 모듈(이미만들어진 '반') 이기 떄문에 완결된 애플리케이션으로 제공되지 못한다.
따라서 사용자가 프레임워크를 확장하여 비즈니스 요구사항을 만족시키는 완전한 애플리케이션 소프트웨어를 완성시키는 작업( 나머지 ' 반') 이 요구되
는 것이다.
<변경이되지않는 Core부분인 Cold Spot 위에 훅 포인트(Hook Point)를 통해 확장한다(Hot Spot).>
즉 프레임워크는 Open-Closed 원칙 (이하 OCP)을 그대로 따르고있다. 재사용되는 공통된 부분은 프레임워크로 구현되어
다른사람이 그 내부를 가공 없이 이용하도록 제공하고 있다(Closed). 확장이 필요한 부분은 사용자 요구사항에 맞게 정의하여 확장시키므로
문제영역에 최적화된 애플리케이션 설계가 완성된다(Open) *이를 확장에는 열려있고, 병경에는 닫혀있다라고 말한다.
프레임워크를 애플리케이션에 적용할 떄 변경되지 않고 반복적으로 재사용되는 부분을 프레임워크의 코어로 정의한다. 변경이 잘 일어나지 않는
프레임워크의 코어부분을 콜드 스팟(Cold spot)이라고 부르기도 한다.(OCP) 에서 Closed 모듈에 해당한다).
프레임워크 코어는 각 애플리케이션마다 확장 모듈을 연결하는 확장 점을 제공하는데, 이를 훅 포인트(Hook Point)라고 한다.
대개 훅 포인트는 추상 클래스나 인터페이스의 형태로 나타낸다. 애플리케이션마다 이 훅 포인트를 통해 확장 모듈을 바인딩한다.
이확장 모듈을 핫스팟(Hot Spot)이라고 부른다(OCP에서 Open 모듈에 해당한다).
일반적으로 훅 포인트는 사용자가 소스코드 상에서 함수 호출을 통해 확장 모듈을 등록(혹은 바인딩)하게 된다.
하지만 바인딩 코드들이 사용자 코드 곳곳에 분포되어 산만하고 반복 작업을 하게 되는데 이런 불편 떄문에 현재 프레임워크는 메타 데이터를
이용하여 훅 포인트로의 연결, 정책 설정들을 정의하고 있는 추세이다.
이렇게 프레임워크에 기반해 애플리케이션을 개발하게 되면 생산성이 향상될 뿐 아니라 여러 애플리케이션이 비슷한 구조를 가지게 되므로
관리하기도 쉬워진다.
2) 자바 프레임워크에는 어떤 것이 있는가?
대표적인 자바 프레임 워크로는 (이것이 전부는아니다)
웹 어플리케이션 프레임워크: Spring MVC, Struts, WebWork 등
데이터베이스 관련 프레임워크: iBatis, Hibernate, Spring DAO
비지니스 관련 프레임워크 : Spring
*Spring의 경우 객체를 생성하고 객체간의 의존관계를 정의하고 라이프 사이클을 제어하는 틀을 제공해주며,
거기에다 다른 프레임워크들을 서로 연결해 주는 역활도 한다.
-Spring 소개
1)EJB
Spring을 이야기 하기 전에 앞어 EJB를 살펴보면, EJB는 Enterprise JavaBeans 의 약자로 엔터프라이즈 급의 서비스를 제공하는 것을
목적으로 한다. EJB에 대한 문서를 읽어보면 'EJB는 엔터프라이즈 애플리케이션 개발을 단순화 한다' 라고 소개하고 있다.
하지만 이는 그 이전의 엔터프라이즈 애플리케이션과 비교하였을 때 맞는 이야기이고 실상은 그 개발이 단순화하지 못하고 있는것이
사실이다.
EJB의 선언적 프로그래밍 모델이 트랜잭션이나 보안과 같은 개발의 기반구조에 해당하는 여러 측면들을 단순화 시킨것은 사실이지만,
배치 설명자(deployment descriptor), 홈/리모트 인터페이스 등과 같은 과도한 코드를 강제함으로써 다른 방식으로 복잡해졌다고
말할 수 있다. EJB는 분산 객체나 원격 트랜잭션 등의 복잡한 문제를 해결하기 위하여 만들어 졌기 떄문에 복잡하지만,
아이러니하게도 현실적으로 봤을 때 상당수의 엔터프라이즈 애플리케이션은 그정도로 복잡하지 않다는 것이다.
이러한 고민 안에서 스프링은 탄산하게 되었다.
2)Spring
Spring은 로드 존슨이 만든 오픈소스 프레임워크 이며, 복잡한 엔터프라이즈 애플리케이션을 겨냥해 만들어졌다.
스프링은 평범한 자바빈즈(이하 POJO - Plain Old Java Object)를 사용하는데도 EJB에서만 가능했던 일들이 모두 이뤄지게 한다.
그러나 스프링의 유용성은 서버 축 개발에만 국한 한 것이아니라, 모든 자바 애플리케이션에서 단순성, 테스트 용이성, 느슨한 결함성의 측면에서
스프링의 이점을 얻을 수 있다.
Spring 의 특징을 보면
경량 - 스프링은 그 크기와 부하의 측면에서 경량(liteweight)이다. 전체 스프링 프레임워크는 기껏해야 몇 메가 안되는 하나의 JAR 파일로 배포된다.
또한 스프링 자체의 부하는 무시해도 되는 수준이다.
제어 역행- 스프링은 제어 역행(IoC - Inversion of Control) 이라는 기술을 통해 애플리케이션의 느슨한 결합을 도모한다.
IoC가 적용되면 객체는 의존하는 다른 객체를 생성하거나 찾는 대신, 수동적으로 의존성을 받는다. 이런의미로 IoC를 의존성 주입이라고 말하기도한다.
관점지향 - 스프링은 관점지향 프로그래밍(AOP : Aspect Oriented Programming)을 위한 풍부한 지원을 한다.
관점지향 프로그래밍은 애플리케이션 비지니스 로직을 시스템 서비스로부터 분리함으로써 응집된 개발을 가능하게 한다. 애플리케이션 객체는 원래 해야할 일인 비지니스 로직을 수행하는 것 이외에는 아무것도 하지않는다. 애플리케이션 객체는 로깅이나 트랜잭션 지원과 같은 시스템적인 관심사에는 책임이 없으며 신경조차 쓰지 않는다.
컨테이너 - 애플리케이션 객체의 생명주기와 설정을 포함하고 관리한다는 점에서 스프링은 일종의 컨테이너라고 말할 수 있따. 빈의 인스턴스를 하나만
생성시키거나 또한 필요할 떄마다 설정 가능한 프로토 타입을 기반으로 새로운 인스턴스를 생성시키는 등 빈이 어떻게 생성되야 하는지를 직접
설정할 수 있다. 또한 빈이 서로 어떻게 연관돼야 하는지도 설정할 수 있다. 이 부분이야 말로 스프링의 가장 핵심적인 기능이라고 말할 수 있다.
프레임워크 - 스프링을 사용하면 간단한 컴포넌트로 복잡한 애플리케이션을 구성하고 설정할 수 있다. 스프링에서 애플리케이션 객체는 대게 XML파일
내에 선언적으로 구성한다. 또한 스프링은 애플리케이션 로직 개발은 개발자에게 맡기고, 다양한 기반구조 기능을 제공한다.
'공부 > Spring' 카테고리의 다른 글
Spring IOC (0) | 2011.12.12 |
---|---|
엔티티 빈 (0) | 2011.07.26 |
RMI(원격 메소드 호출, Remote Method Invocation) (3) | 2011.07.04 |
javascript 공백처리, 글자수체크
%%%%%
공백일경우 javascript는 trim 함수만들어서사용
<script type="text/javascript">
var s = ' AAA BBB CCC ';
s = trim(s);
document.write('[' + s + ']' + '<br />');
document.write('<pre>[' + s + ']</pre><br />');
function trim(s) {
s += ''; // 숫자라도 문자열로 변환
return s.replace(/^\s*|\s*$/g, '');
}
</script>
%%%%%%
글자수 체크
function ChkByte(maxlength) {
var objstr = document.getElementById("brightKey").value; // ÀÔ·ÂµÈ ¹®ÀÚ¿À» ´ãÀ» º¯¼ö
var objstrlen = objstr.length; // Àüü±æÀÌ
// º¯¼öÃʱâÈ
var maxlen = maxlength; // Á¦ÇÑÇÒ ±ÛÀÚ¼ö ÃÖ´ëÅ©±â
var i = 0; // for¹®¿¡ »ç¿ë
var bytesize = 0; // ¹ÙÀÌƮũ±â
var strlen = 0; // ÀÔ·ÂµÈ ¹®ÀÚ¿ÀÇ Å©±â
var onechar = ""; // char´ÜÀ§·Î ÃßÃâ½Ã ÇÊ¿äÇÑ º¯¼ö
var objstr2 = ""; // Çã¿ëµÈ ±ÛÀÚ¼ö±îÁö¸¸ Æ÷ÇÔÇÑ ÃÖÁ¾¹®ÀÚ¿
// ÀÔ·ÂµÈ ¹®ÀÚ¿ÀÇ ÃѹÙÀÌÆ®¼ö ±¸Çϱâ
for(i=0; i< objstrlen; i++) {
// ÇѱÛÀÚÃßÃâ
onechar = objstr.charAt(i);
if (escape(onechar).length > 4) {
bytesize += 2; // ÇѱÛÀ̸é 2¸¦ ´õÇÑ´Ù.
} else {
bytesize++; // ±×¹ÜÀÇ °æ¿ì´Â 1À» ´õÇÑ´Ù.
}
if(bytesize <= maxlen) { // Àüü Å©±â°¡ maxlen¸¦ ³ÑÁö¾ÊÀ¸¸é
strlen = i + 1; // 1¾¿ Áõ°¡
}
}
// ÃѹÙÀÌÆ®¼ö°¡ Çã¿ëµÈ ¹®ÀÚ¿ÀÇ ÃÖ´ë°ªÀ» ÃÊ°úÇϸé
if(bytesize > maxlen) {
alert( "Key°ªÀÌ À߸øµÇ¾ú½À´Ï´Ù. ´Ù½ÃÀÔ·Â ÇØÁÖ¼¼¿ä.");
objstr2 = objstr.substr(0, "#");
document.getElementById("brightKey").value = objstr2;
document.getElementById("brightKey").focus();
return true;
}
if(bytesize == 0){
if(!confirm("Å°°ªÀÌ ÀԷµÇÁö ¾Ê¾Ò½À´Ï´Ù. °è¼Ó ÁøÇàÇϽðڽÀ´Ï±î?")){
return true;
}
}
}
'공부 > JavaScript' 카테고리의 다른 글
자바스크립트 총정리 (0) | 2011.06.30 |
---|---|
쿠키(cookie) (0) | 2011.06.29 |
체크박스 전체해지 (0) | 2011.06.13 |
L4 로드밸런싱 설정 및 운용
2010/03/11 08:57 / 네트워크한마디로 말하면,
L4의 핵심은 'IP, 포트, 세션' 을 기반으로한
로드 밸런싱(Load Balancing)이다!
라고 말하고 싶네요. L4에서 가장 중요한건 역시 4계층답게
포트(port)라는 생각이 드네요.
2계층의 MAC
3계층의 IP
그럼 4계층은 바로 포트 입니다.
그리고 이 포트와 맞물려 로드 밸런싱이라는 개념이 등장 합니다.
L4 스위치는 마치 포트와 로드밸런싱의 오묘한 조합이랄까요.
L4 스위치 = 포트 + 로드밸런싱(물론 IP,세션도 중요합니다)
L4스위치가 로드밸런싱을 수행하는 장비이기 때문에 L4스위치를
다른말로 로드 밸랜서(Load Balancer) 라고도 합니다.
로드밸런싱은, 동일한 역할을 수행하는 서버 그룹을 VIP를 통해 관리하며,
서버로 향하는 트래픽을 일단 VIP를 가진 L4스위치로 수신한 후
분배정책에 따라 적절한 서버에 분배해 주는 것을 말합니다.
VIP는 Virtual IP의 약자로, 서버그룹의 대표 IP라 할 수 있습니다.
이 VIP를 로드밸런싱을 수행하는 L4 스위치가 가지고 있습니다.
서버와 통신하고자 하는 클라이언트는 VIP를 향해 트래픽을 전송하고
L4스위치가 이 트래픽을 받아 적절한 서버에 로드밸런싱 해주는 것이
L4스위치의 역할입니다.
한마디로, L4 스위치는 부하분산 장비입니다.
요즘 웬만한 사이트는 서버 한 대로 사용자들의 트래픽을 감당하기
어렵기 떄문에 동일한 역할을 수행하는 서버를 여러 대 두어서 사용자들의
트래픽이 많아져도 유연하고 안정적으로 사이트를 운영하기 위해
L4스위치를 통한 로드밸런싱을 하는걸로 알고 있습니다.
L4스위치, 즉 로드밸란서가 없어도 네트워크를 하는데 지장은 없습니다.
하지만 IT가 발전하고 트래픽이 과도해지면서 로드밸런서 없이는 안정적인
네트워크를 구성하는것이 불가피해지고 있다는 생각이 드네요.
이 그림에서 보는바와 같이,
클라이언트와 서버 사이에 로드밸란서가 위치하여 서버 2대에 대해
로드밸런싱을 수행합니다.
즉, 로드밸런서가 트래픽을 왼쪽 서버로 보낼 수도 있고, 오른쪽 서버에 보낼
수도 있습니다.
###################################################
그러면 L4를 왜 쓰느냐??
2가지 이유가 있습니다.첫 번째 로드를 분산하기 위해서 입니다.(로드 발란싱)
예를 들어 한 서버에 웹 서비스(80)를 하는 서버가 있습니다.
그런데 서버에 부하 때문에 서버를 증설 해야 합니다.
하지만 서버를 분리 시키면 IP가 하나 더 필요하게 되고 IP가 늘어나면 기존 서비스와 IP가 달라지는 문제가 생깁니다.이 때 사용하는 것이 L4장비의 VIP입니다.
예를 들어 기존에 사용하는 서버의 IP가 128.x.x.1이라고 합시다.
이 IP를 L4장비에 VIP로 할당합니다. 128.x.x.1 for 80 128.x.x.1 regarding 80
(VIP는 가상의 아이피를 말합니다.)
기존 서버에는 128.x.x.2 와 새로운 서버에는 128.x.x.3을 할당합니다.
(물론 기존 서버와 새로운 서버는 데이타가 동기되어 있어야 합니다.)
그리고 L4장비에 로드발란싱이 가능하게 세팅합니다.
그러면 이제 128.x.x.1로 요청하는 응답에 대해서 L4가 처리 하게됩니다. (대표IP로 서버여러대를 가지치기 할수 있다.)
L4는 로드발란싱 규칙에 따라서 기존 서버에서 응답하게 할 수도 있고 신규 서버에서 응답하게 할 수도 있습니다.
간단하게 L4에서 홀수 번째 요청은 기존 서버에서 짝수 번째 요청은 신규 서버에서 응답하게 설정 할 경우 요청에 대한 응답을 정확하게 반으로 나눌수 있습니다.
이렇게 한 서버의 요청건수를 줄여주어 실제로 한대의 서버가 처리해야 할 요청을 두대(여러 대)의 서버가 처리하게 되는 것을 로드 발란싱이라고 합니다.
알테온으로 설명 드리면, 웹서버 두대를 로드밸런싱 하려면 먼저웹서버를 각각 real server 로 각각 ip를 등록합니다.
그리고 웹서버 즉 real server ip 두개 를 group1 에 소속시킵니다.
그리고 virtual ip (vip=대표ip)를 하나 등록해서 그 ip로 오는
패킷중에 http(80) 패킷에 대해서는 group1으로 보내면 설정된
matric(hash, 라운드로빈, least connection, weighted )값에 의해
로드밸런싱 되는것입니다. 대부분 hash 방식을 사용하죠...
이렇게 하면 128.x.x.1 for 80 은 오직 80 포트만을 받고, 다른 포트는 filtering 된다.. 쓸데없는 포트로 들어오는 공격을 막을수 있다.
그리고 L4의 두번째 기능으로 무결성을 위한 fail over기능입니다.
흔히 가장 안정적으로 서비스되는 서버는 일년에 다운타임(동작 불능시간)이 50분 미만인 서버라고 합니다.
(1년동안 50분 정도 다운되면 최고로 안정적인 서버가 되는 것입니다.)
서버역시 기계인 것이라 영원히 죽지 않는 서버는 존재하지 않습니다.
그러나 사람들은 좀더 서버가 안정적으로 동작하길 윈하게 되죠
아주 중요한 서버(예를 들면 정치 관련 홈페이지나 은행과 같은 금융 그리고 그 외 쇼핑몰등)의 경우 일년에 50분의 다운이라도 서비스에 큰 타격을 입을 수 있습니다.
예를 들어 128.x.x.1이라는 서버가 있습니다.
그러나 이 서버는 중요한 서버라 절대 서버에 장애가 있으면 안됩니다.
이럴경우 사용하는 장비가 L4입니다.
L4에 VIP를 이용해서 128.x.x.1이라는 IP를 할당합니다.
기존 서버의 IP를 128.x.x.2로 변경합니다.
새로운 서버에 128.x.x.3으로 할당합니다.(물론 기존 서버와 자료가 같도록 동기화 되어 있어야 합니다.)
L4에 fail over기능을 이용 할 경우
128.x.x.1로 오는 모든 요청에 대해서 L4는 128.x.x.2가 응답하게 합니다.
그리고 128.x.x.2에 장애가 있을 경우(서버가 다운될 경우)에는 128.x.x.3서버가 자동으로 응답하게 처리하게 됩니다.
이렇게 미리 동일한 서버를 준비해 놓고 L4를 이용해서 fail over로 연결하면 첫번째 서버(마스터)에 장애가 있을 경우라도 미리 준비해 놓은 서버(슬래이브)가 동작하게 되므로
실제로 서비스에는 문제가 없게되는 것입니다.
Alteon L4 스위치 기본 설정방법
- Real 서버가 2대이고 1개의 그룹으로 설정, vitural 서버는 1개 사용
- metric(분산알고리즘) 미설정 시 default는 leastconnection
- health 체크 미설정 시 default는 tcp, inter=2(매 2초마다 체크), retry=4(4번 실패 체크 시 down으로 정의)
- DAM(Direct Access Mode)가 default로 disable (Real IP를 통한 직접 서비스 안됨)
※ 즉, 여기서는 Real IP를 이용한 http(80번 포트) 접속 안됨
(하지만 Load Balance와 무관한 서비스는 각각 가능: ssh, 터미널 접속,... 등)
Main#
Main# /cfg/l3 ; 스위치 IP 설정...
(또는 Main# /cfg/ip)
Layer 3# if 1 ; 스위치 자체 IP 설정...
IP Interface 1# addr 1.2.3.4 ; IP address 할당
IP Interface 1# mask 255.255.255.0 ; subnet mask 할당 (필요시)
IP Interface 1# ena ; IP address 활성화
IP Interface 1# /cfg/l3/gw ; default gateway 설정...
Enter default gateway number: (1-255) 1 [Enter] ; gateway 번호 입력 (필요시)
Default gateway 1# addr 1.2.3.1 ; default gateway 할당
Default gateway 1# ena ; gateway 활성화
Default gateway 1# /cfg/slb/real 1 ; 첫번째 real 서버 설정...
Real server 1# rip 1.2.3.5 ; real 서버 IP address 할당
Real server 1# ena ; 첫번째 real 서버 활성화
Real server 1# /cfg/slb/real 2 ; 두번째 real 서버 설정...
Real server 2# rip 1.2.3.6 ; real 서버 IP address 할당
Real server 2# ena ; 두번째 real 서버 활성화
Real server 2# /cfg/slb/group 1 ; real 서버 그룹 설정...
Real server group1# add 1 ; 등록된 real 서버 1번을 그룹에 추가
Real server group1# add 2 ; 등록된 real 서버 2번을 그룹에 추가
Real server group1# /cfg/slb/virt 1 ; virtual 서버 설정...
Virtual server 1# vip 1.2.3.2 ; virtual 서버 IP address 할당
Virtual server 1# ena ; virtual 서버 활성화
Virtual server 1# service http ; http 서비스 설정...
Virtual server 1 http Service# group 1 ; http 서비스를 real 서버 그룹에 할당
(필요시 Virtual server 1 http Service# rport 8080 ; http 서비스를 real 서버의 8080 포트에 매핑)
Virtual server 1# /cfg/slb/port 1 ; L4의 물리적인 포트 1번 설정...
SLB port 1# server ena ; 포트 1번을 서버 포트로 할당
SLB port 1# /cfg/slb/port 2 ; L4의 물리적인 포트 2번 설정...
SLB port 2# server ena ; 포트 2번을 서버 포트로 할당
SLB port 8# /cfg/slb/port 8 ; L4의 물리적인 포트 8번 설정...
SLB port 8# client ena ; 포트 8번을 클라이언트 포트로 할당
SLB port 8# /cfg/slb ; SLB 설정...
Layer 4# on ; Server Load Balancing 모드 On
Layer 4# apply ; 변경된 설정값 적용
Layer 4# cur ; 현재 설정값 확인
Layer 4# save ; FLASH 메모리에 현재 설정내용 저장
Layer 4# /info/slb/dump ; SLB 정보 확인
------------------------------------------------------
| ㅁ1 ㅁ2 ㅁ3 ㅁ4 ㅁ3 ㅁ4 ㅁ5 ㅁ6 ㅁ5 ㅁ6 ㅁ7 ㅁ8 | --> Alteon L4 스위치
--+---+--------------------------------------+--------
| | |
| | |--> 클라이언트 포트 (외부 연결)
| |
| |--> 서버 포트 (서버 연결)
|
|
|--> 서버 포트 (서버 연결)
※ 설정 시 port 9번은 미사용
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
L4/L7 스위치 개요 (로드밸런서)
from 이유있는 코드 2010/02/01 14:05
스위치의 분류 :
L2 : OSI 레이어 2에 속하는 MAC 어드레스를 참조하여 스위칭하는 장비
L3 : OSI 레이어 3에 속하는 IP주소를 참조하여 스위칭하는 장비
L4 : OSI 레이어 3~4에 속하는 IP 주소 및 TCP/UDP 포트 정보를 참조하여 스위칭하는 장비
L7 : OSI 레이어 3~7에 속하는 IP 주소, TCP/UDP 포트 정보 및 패킷 내용까지 참조하여 스위칭함
L4/L7 스위치의 용도 :
일반적으로 서버들의 로드밸런싱을 위해 사용됨
복수개의 웹서버가 있을 때, 임의의 웹서버에 접속을 시도하면, 스위치가 각 서버의 부하를 고려하여
적당한 서버와 연결시켜준다.
설정에 따라 순차적 연결 또는 접속이 가장 적은 서버에 연결하는 방식 등이 있다.
L4 스위치 :
Layer 4에서 패킷을 확인하고 세션을 관리하며, 로드밸런싱을 제공하는 스위치
TCP/UDP 패킷 정보를 분석해서 해당 패킷이 사용하는 서비스 종류 별로 처리(HTTP, FTP, SMTP...)
세션관리, 서버/방화벽 로드밸런싱, 네트워크 서비스 품질 보장
L4 스위치의 서비스 단위 로드밸런싱을 극복하기 위해 포트 + 데이터 페이로드 패턴을 이용한 패킷 스위치
(e-mail 내용/제목, URL ...)
connection pooling(시스템 부하 감소), Traffic Compression (컨텐츠 압축 전송), 보안 기능
차이점 :
L7은 보안 기능 강화
(DOS/SYN 공격 방어, CodeRed/Nimda 등 감염 패킷 필터링, 네트워크 자원 독점 방지 등)
L7 스위치에 대한 오해 :
: 기본적으로 L2, L3 및 부분적으로 L4 스위치를 지원한다. 레이어5 세션 계층 위주이다.
L7 스위치는 URL 기반 스위치다.
: L7 스위치 기능에 대한 일부분을 말한 것이다.
L7 스위치는 모든 TCP/UDP 포트(0-65535)에 대한 인지가 가능하다.
(sticky 상태)
사용자A -> L4 -> 1번서버
사용자A -> L4 -> 1번서버
기존 사용자의 세션 상태를 timeout 시간 내에는 계속 유지시켜주는 것이 sticky session이다.
대안 :
URL 스위칭 :
'공부 > 기타' 카테고리의 다른 글
토드 단축키 (0) | 2012.01.04 |
---|---|
Crontab 설정 (0) | 2011.12.15 |
조인쿼리 정리 (0) | 2011.06.13 |
OpenAPI OAuth (0) | 2011.06.13 |
ORA-00918: column ambiguously defined 원인 및 해결방법 (0) | 2011.06.13 |
WS(Web Server) 와 WAS(Web Application Server) 정의
[ 웹 서버와 WAS(Web Application Server)의 정의 ]
웹서버와 WAS는 비슷한 개념이기 때문에 같이 또는 다르게 사용되는 단어 가운데 하나이다. 인터넷 확산 초기에는 웹서버라는 개념으로 통칭해서 사용했지만, 시간이 지남에 따라 WAS를 더 많이 사용하고 있다. 인터넷 사용자가 증가함에 따라, 각 웹 사이트는 보다 많은 사용자에게 원활한 서비스를 제공하기 위해 기능적인 layer를 나누게 되었고 여기서 웹서버와 WAS의 구분점이 생기게 된 것이다.
기능적으로만 본다면, 거의 대부분의 웹 서버가 웹 애플리케이션을 동작시킬 수 있겠지만 모두 웹 서버 혹은 WAS라고 부르는 것보다는 어떤 기능을 수행하는지에 따라, 즉 기능상의 분류를 통해 구분지어 사용해야 할 것이다.
구분 |
웹서버 |
WAS |
설명 |
1. 웹브라우저(Web Client)에게 컨텐츠를 제공하는 서버이다. 즉 정적인 HTML이나 jpeg, gif같은 이미지를 HTTP 프로토콜을 통해 웹 브라우저에 제공한다.
|
서버단에서 애플리케이션을 동작할 수 있도록 지원한다. 일반적으로 컨테이너라는 용어로 쓰인다. 초창기에는 CGI, 그 이 후에는 Servlet, ASP, JSP, ASP, PHP등의 프로그램으로 사용되고 있다. |
[ 웹 서버와 WAS(Web Application Server)의 구성에 따른 분류 ]
1. 기본적인 웹 사이트 구성
<그림 1>은 웹 사이트의 가장 기본적인 구성 환경이다. 모든 콘텐츠를 한 곳에 집중시켜 웹 서버와WAS의 역할을 동시에 수행한다. 사용자가 많지 않거나 트래픽이 적을 때 효율적이며 간단한 구조로 개발 및 테스트 시스템 구성시 활용의 가치가 높다.
장점 : 사용자 증가에 따라 스위치 장비를 통해 로드 밸런싱을 수행하고, 여러대의 WAS를 통해 지원이 가능하다. 필요시에 추가로 WAS를 증설하는 구조라고 볼 수 있다.
단점 : WAS가 정적인 데이터(HTML/Image)의 처리와 동적인 데이터(웹 애플리케이션)의 처리를 동시에 수행하기 때문에 최적화 측면에선 바람직하지 않다. 또한 정적데이터의 입출력 처리를 위해 웹 애플리케이션의 수행을 방해할 수 있고, 그 반대의 경우도 있다.
2. 웹 서버와 WAS로 구성된 환경
<그림 2>는 웹 서버와 WAS의 기능적 분류를 통해 효과적인 분산을 유도한 형태이다. 정적인 데이터는 구조적으로 앞에 존재하는 웹 서버에서 처리하고, 동적인 데이터는 뒷단의 WAS가 처리한다.
사용자의 요청에 대해서 정적 데이터인 HTML과 자바스크립트 파일, CSS, Image 등을 앞단의 웹 서버에 위치시켜 처리함으로써 WAS로 서비스 요청이 넘어가지 않게 한다.
또한 웹 애플리케이션 서비스를 위치적으로 뒤편에 존재하는 WAS에 넘겨줌으로써 WAS는 웹 애플이케이션의 수행이 집중할 수 있다.
웹 서버 단에서 처리할 것과 WAS에게 넘겨질 것을 처리하는 방식은 웹 서버 단의 Configuration을 통해 처리할 수 있다. 특정 확장자나 디렉토리 업무를 WAS로 넘길지 여부는 웹 서버 단에서 처리한다.
3. 특정기능에 대한 서버를 별도로 두고 있는 환경
점점 화려해지는 UI를 자랑하는 페이지들이 많아짐에 따라 이미지의 비중이 증가하고, 이런 이미지들이 전체 네트워크 비중의 상당부분을 차지한다. 따라서 이미지 서버를 따로 구성해 네트워크 비중도 줄이면서 웹 서버와 WAS를 좀 더 효과적으로 사용할 수 있는 구조라 할 수 있다.
또는 특정 콘텐츠에만 집중적인 요청을 받는 경우도 있다. 예를 들어, 대학 입시 때 경쟁률 조회는 상당히 많은 사용자에 의해 조회가 되고, Reload 또한 빈번하게 일어나므로 특정시간 간격으로 HTML을 생성하고, 페이지를 특정 서버에 위치시켜 적절하게 부하를 분산시켜 해결이 가능하다.
장점 : 다양한 환경에 대한 대처가 빠름
단점 : 구조를 정확하게 이해하지 않았을 경우에는 개발 및 테스트에 많은 시간이 쓰임
4. WAS단을 Logic으로 구분하여 구성
<그림 4>는 <그림 2>의 변경된 형태이다. WAS단의 프로그램이 많은 비중을 차지하는 경우, Presentation Logic을 담당하는 프로그램과 Business Logic을 담당하는 프로그램을 구분하는 구성이다. 이런 구성은 특정 로직 부분의 부하에 따라 적절한 대응을 할 수 있으나 구조가 복잡해지는 단점이 있다.
[ WAS 관련 용어 정의 ]
1. 자바 서블릿(Java Servlet)
자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 “서블릿”이라고 한다.
자바 서블릿은 Java EE사양의 일부분으로, 주로 이 기능을 이용하여 쇼핑몰이나 온라인 뱅킹 등의 다양한 웹 시스템이 구현되고 있다.
비슷한 기술로는 펄 등을 이용한 CGI, PHP를 아파치 웹 서버 프로세스에서 동작하게 하는 mod_php, 마이크로소프트사의 IIS에서 동작하는 ASP 등이 있다. CGI는 요청이 있을 때마다 새로운 프로세스가 생성되어 응답하는 데 비해, 자바 서블릿은 외부 요청마다 프로세스보다 가벼운 쓰레드로써 응답하므로 보다 가볍다. 또한 자바 서블릿은 자바로 구현되므로 다양한 플랫폼에서 동작한다.
2. 엔터프라이즈 자바빈즈(Enterprise JavaBeans, EJB)
EJB는 기업환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델이다. 즉, EJB는 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션이다. EJB사양은 Java EE의 자바 API중 하나로, 주로 웹 시스템에서 JSP는 화면 로직을 처리하고, EJB는 업무 로직을 처리한다.
EJB의 종류는 세션 빈(Session Bean), 엔티티 빈(Entity Bean), 메시지 구동 빈(Message-driven Bean)이 있다.
3. 자바 메시지 서비스(Java Message Service, JMS)
JMS는 자바 프로그램이 네트워크를 통해 데이터를 송수신하는 자바 API이다.
4. 자바 가상 머신(Java Virtual Machine, JVM)
JVM은 자바 바이트코드를 수행할 수 있는 환경이다. 자바 바이트코드는 주로 자바를 컴파일하여 생성하지만, 다른 언어의 컴파일러에서도 생성할 수 있다. 자바 가상 머신은 자바 플랫폼의 기반을 이루며 다양한 하드웨어 기반 플랫폼에 포팅된다. JVM은 자바 플랫폼의 주요한 부분이며 마이크로소프트 윈도(95/98/NT), 리눅스, 유닉스, 맥 오에스 텐 등 대부분의 운영체제는 물론, 인터넷 익스플로러와 넷스케이프 등과 같은 웹 브라우저 등 여러 가지 플랫폼에 설치되어 사용될 수 있으며,휴대전화나 가전기기에도 설치할 수 있다. 따라서 자바 플랫폼은 여러 플랫폼을 지원하여 미들웨어로서의 역할과 플랫폼 스스로의 역할을 동시에 수행할 수 있다. 사용자는 자바 바이트코드로 컴파일된 자바 프로그램을 실행시키기 위해서 이 자바 가상머신을 이용하면 된다.
원 개발사인 썬 마이크로시스템즈에서 자바 가상 머신의 기준이 되는 표준판(Java SE) 과 표준판을 핸드폰이나 PDA 등 임베디드 기기용인 축소판(Java ME) 으로 구분하여 가상 머신을 배포하고 있다. 기업판(Java EE)의 경우에는 표준판의 자바 가상 머신을 기반으로 확장된 라이브러리 집합을 정의한 것이기 때문에 자바 가상 머신의 종류로 분류하기 애매하다. 썬 마이크로시스템즈에서 제공하는 자바 가상 머신 말고도 각 운영체제 개발사가 제공하는 자바 가상 머신이 있으며, GNU의GCJ나 아파치 소프트웨어 재단(ASF: Apache Software Foundation)의 하모니(Harmony)와 같은 오픈 소스 자바 가상 머신도 존재한다. 이러한 공개 소프트웨어 단체의 움직임에 따라 썬 마이크로시스템즈에서도 자사의 자바 가상 머신 및 개발 도구 킷을 오픈 소스 정책에 맞추어 공개한 상황이다.
5. 힙 메모리(heap memory)
프로그램을 사용할 수 있는 자유 메모리. 프로그램 실행 시에 함수로 보내는 데이터 등을 일시적으로 보관해 두는 소량의 메모리와 필요시 언제나 사용할 수 있는 대량의 메모리가 있다. 이때, 소량의 메모리를 ‘스택’이라 하고 대량의 메모리를 ‘힙’이라 한다. 이 ‘힙’이 없어지면 메모리 부족으로 ‘이상 종료’하게 된다.
6. 자바 서버 페이지(JavaServer Pages, JSP)
HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 언어이다. Java EE 스펙 중 일부로 웹 애플리케이션 서버에서 동작한다. 자바 서버 페이지는 실행시에는 자바 서블릿으로 변환된 후 실행되므로 서블릿과 거의 유사하다고 볼 수 있다. 하지만,서블릿과는 HTML 표준에 따라 작성되므로 웹 디자인하기에 편리하다. 이와 비슷한 구조인 것인 PHP, ASP, ASP.NET 등도 있다. 아파치 스트럿츠나 자카르타 프로젝트의 JSTL 등의 JSP 태그 라이브러리를 사용하는 경우에는 자바 코딩없이 태그만으로 간략히 기술이 가능하므로 생산성을 높일 수 있다.
클라이언트에서 서비스가 요청되면, JSP의 실행을 요구하고, JSP는 웹 애플리케이션 서버의 서블릿 컨테이너에서 서블릿 원시코드로 변환된다. 그 후에 서블릿 원시코드는 바로 컴파일된 후 실행되어 결과를 HTML 형태로 클라이언트에 돌려준다.
7. Java Database Connectivity(JDBC)
자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다. JDBC는 Java로 작성된 프로그램을, 일반 데이터베이스에 연결하기 위한 응용프로그램 인터페이스 규격입니다. 이 응용프로그램 인터페이스는 데이터베이스 관리 시스템에 넘겨질 SQL 형태의 데이터베이스 접근요구 문장을, 각 시스템에 맞도록 바꾸어준다. API는 동적으로 올바른 Java 패키지를 로드하고, JDBC 드라이버 매니저에 등록하기 위한 메커니즘을 제공합니다. 드라이버 매니저가, JDBC connection을 생성하기 위한 connection factory로서 사용됩니다.
8. Java Management eXtensions(JMX)
응용 프로그램 소프트웨어/객체/장치 (프린터 등) 및 서비스 지향 네트워크 등을 감시 관리를 위한 도구를 제공하기 위한 자바 API이다. 이러한 리소스는 MBean(Managed Bean)이라는 객체로 표현된다.
9. Java Naming and Directory Interface(JNDI)
디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup)하기 위한 자바 API이다.
XML과 MXML의 이해
웹페이지가 HTML 태그로 만들어진 것처럼 플렉스에서 XML 태그를 이용해 화면 요소를 정의한 것을 MXML이라고 한다.
MXML은 XML 태그를 사용하기 때문에 XML의 문법을 따른다.
<XML의 이해>
XML은 확장 마크업 랭귀지(eXtended Markup Language)의 약어로서 태그를 이용해 데이터를 구조적으로 표현하는 데 사용한다.
XML은 플렉스뿐만 아니라 여러분야에서 데이터 또는 화면을 구조적으로 정의하는데 사용된다.
<XML의 구조>
XML은 지시문, 루트 엘리먼트(루트태그), 자식 엘리먼트로 구성된다.
-처리지시문: 문서의 인코딩 방식을 설정하는 부분으로서 플렉스에서는 'utf-8'을 사용한다. 'utf-8'을 사용하면 다국어 처리가 가능하다.
-루트 엘리먼트(루트태그):처리 지시문 다음에 오는 태그로서 그 XML문서에서는 하나만 존재해야한다.
또한 자식엘리먼트는 루트 엘리먼트 안에 반드시 포함되어야한다.
-자식 엘리먼트: 루트 엘리먼트 안에 포함되는 것으로서 데이터를 구조적으로 표현한다.
*인코딩방식
한국은 예전 관행이 남아 국내 일부 사이트에서는 euc-kr을 사용하는 곳도 있는데, 그렇게하면 utf-8을 사용하는 플렉스에서 한글이 꺠진다.
그럴 떄는 System.useCodePage=true로 설정하면 한글을 볼수있다. 하지만 이것도 운영체제가 한국어인 PC에만 해당되므로
근본적으로 utf-8을 사용해 데이터를 처리할 것을 권한다.
<XML의 주요 개념>
HTML도 태그를 이용한다는 점에서 XML과 유사하지만 다음과 같은 차이점이 있다.
-HTML태그는 사용할 수 있는 태그의 종류가 한정적이지만 XML은 태그를 필요한 만큼 사용자가 정의해서 사용할 수 있다.
-HTML태그는 시작태그와 종료태그의 짝이나 문법에 약간 오류가 있더라도 에러 없이 사용할 수 있지만 XML은 문법적인 오류가 있으면 쓸 수 없다.
1) XML 파싱과 파서
HTML은 문법 체크를 느슨하게 하지만 XML은 엄격하다. 이러한 과정을 XML파싱이라고 하며 전용파서에서 처리한다.
XML 파서에는 태그의 중첩구조를 트리 구조로 표시해 DOM(Document Object Model)파서와 XML을 파싱할 때 발생하는 이벤트에서 데이터를 처리하는
SAX(Simple API for MXL) 파서가 있다. 웹브라우저와 이클립스에는 DOM파서가 내장되 있다.
2) wel-formed문서와 valid 문서
파싱했을 때 문법적인 오류가 없는 XML 문서를 wel-formed 문서라고 한다. valid 문서는 문법적인 오류가 없을 뿐만 아니라 태그의 순서와 속성까지 엄격하게 정의하는 DTD(Document Type Definition)까지 준수하는 문서다. valid문서는 주로 서버설정파일에 사용되며 WAS(Web Application Server)의 Web.xml이 대표적인 예다.
3) 엘리먼트의 노드값과 속성값
엘리먼트는 XML 문서를 논리적으로 구성하는 단위로서, 하나의 엘리먼트는 시작태그와 종료태그로 구성된다. 시작태그와 종료태그 안에는 노드값 또는 여타 엘리먼트가 들어갈수있다. 다음은 <finerss>라는 엘리먼트에 노드값과 하위 엘리먼트를 표시한 예다.
-노드값 표시
<finerss>http://finerss.tistory.com</finerss>
-하위 엘리멘트표시
<finerss>
또한 시작태그 안에는 속성값을 정의할 수 있다. 다음은 <finerss>라는 엘리먼트에 url이라는 속성을 정의한 2가지 예다.
-시작,종료태그 모두 표시
<finerss url="http://finerss.tistory.com"> </finerss>
-종료태그 생략
<finerss url ="http://finerss.tistory.com" />
4)주석과 CDATA 섹션
주석은 파싱되지 않도록 하는 텍스트로서 HTML처럼 <!-- 주석내용 -->의 형식으로 기술한다.
그래서 주석은 데이터 구조에는 반영되지 않는다. 하지만 CDATA 섹션은 모든 문자를 텍스트 그대로 처리하도록 하면서 데이터 구조에도 반영된다.
예를 들어 데이터에 '>' 나 '<' 같은 기호가 들어가면 태그로 인지되므로 파싱에러가 발생한다. 따라서 그런부분은
<![CDATA[내용]]> 으로 처리를 해줘야 파싱 에러가 발생하지 않는다. 플렉스에서는 액션스크립트를 정의하는 영역을 CDATA 섹션으로 처리한다.
-CDATA 섹션 처리가 안 된 경우
<finerss>
<url><http://finerss.tistory.com></url>
</finerss>
-CDATA 섹션 처리가 되어 있는 경우
<finerss>
<url>
<![CDATA[http://finerss.tistory.com>]]
</url>
</finerss>
5)엔티티 레퍼런스
<,>,&,'," 같은 기호는 XML에서 특수한 의미로 사용되는 문자다.하지만 문자그대로를 테이터로 표현해야 할경우가있는데
그럴경우 밑에표와같이 엔티티 레퍼런스로 표현을 해줘야한다.
개체 |
표현 문자 |
<; | < |
> | > |
& | & |
' | ' |
" | " |
6) 네임스페이스
XML 네임스페이스는 동일한 이름의 태그를 구분하고 애플리케이션에서 다르게 처리하도록 하는데 사용한다. 플렉스에서는 컴포넌트 계열(패키지 경로)를 분리해 처리하는데 사용된다. 예를 들어 플렉스에서 <s:Button>과 <mx:Button> 둘 다 버튼이긴 하지만, 전자는 플렉스 4에서 새로 추가된 spark 계열의 버튼이고 후자는 플렉스 4 이전에 할로 계열 버튼이다.
MXML은 XML을 확장해 정의한 것이기 떄문에 XML의 문법이 곧 MXML의 문법이다. 따라서 MXML은 다음과 같이 사용해야 한다.
<MXML 문법의 7가지 규칙>
규칙1. MXML은 다국어 표현을위해 UTF-8 사용을 권장한다.
첫 줄의 인코딩 속성을 변경하면 다른 코드셋을 사용할 수 있다.
-UTF-8 코드셋 : <?xml version="1.0" encoding="utf-8"?>
-EUC-KR 코드셋 : <?xml version="1.0" encoding="euc-kr"?>
규칙2. 루트 태그는 하나여야 한다.
플렉스는 웹 애플리케이션의 경우 3버전은 <mx:Application>, 4.x 버전은 <s:Application> 이 루트태그이다.
규칙3. 태그는 대소문자를 구분한다.
규칙4. 태그를 열었으면 반드시 닫아줘야 한다.
태그는 '<태그>' 로 시작해서 '</태그>' 로 끝난다. 하위 엘리먼트가 없는 태그는 '<태그/>' 로 쓸 수도있다.
규칙5. 태그는 다른 태그를 포함할 수 있지만 엇갈리게 쓸 수는 없다.
<mx:Button> (o) <mx:Button> (x)
<mx:Label> <mx:Label>
</mx:Label> </mx:Button>
</mx:Button> </mx:Label>
규칙6. 태그의 속성은 큰따옴표나 작은따옴표로 표시한다.
<mx:Button 속성명='xxx' /> 와 <mx:Button 속성명="xxx" /> 의 결과는 같다.
규칙7. 태그의 속성은 하위 엘리먼트로 빼내어 쓸 수 있다.
속성 <mx:Button label="Test" /> 와 하위 엘리먼트로 표현한 <mx:Button><mx:label>Test</mx:label></mx:Button>은 동일한 내용이다.
<MXML과 플렉스 컴포넌트의 관계>
플렉스 빌더의 컴포넌트 뷰에 있는 컴포넌트들을 디자인 에디터로 끌어다 놓고 소스보기를 하면 그 컴포넌트에 해당하는 MXML 태그 코드가 생성되 있다. 이는 하나의 MXML 태그는 하나의 플렉스 컴포넌트와 매핑돼 있기 떄문이다. MXML과 실제 태그가 나타내는 플렉스 컴포넌트의 이름은 동일하다.
<XML네임스페이스>
네임스페이스는 태그의 속성처럼 다음과 같이 정의한다. URI에는 웹사이트 주소나 패키지 주소가 들어갈 수 있다. URI는 파서가 태그를 구분지어 처리하기 위해 사용하는 것이므로 유효한 웹사이트 주소가 들어갈 필요는 없다.
xmlns:네임스페이스명="URI"
네임스페이스는 정의가 된 엘리먼트를 포함한 자식 엘리먼트에 적용할 수 있다.
루트엘리먼트에 적용하면 모든 자식 엘리먼트가 그 네임스페이스를 사용할수있다
플렉스4에는 다음과같은 네임 스페이스가 루트 엘리먼트에 정의되어있다.
-xmlns:"http://ns.adobe.com/mxml/2009"
화면요소가 아닌 데이터나 로직 처리를 위한 엘리먼트에 적용된다.
ex><fx:Script>, <fx:Declaration>
-xmlns:s="library://ns.adobe.com/flex/spart"
플렉스 4에 새로이 추가된 spark계열의 컴포넌트에 사용하고자 할때 정의한다.
-xmlns:mx="livrary://ns.adobe.com/flex/mx"
플렉스 4 이전 버전에서 사용되는 할로 계열의 컴포넌트를 사용하고자 할떄 정의한다.
플렉스에서 네임스페이스를 추가하는 경우는 사용자 정의 컴포넌트의 패키지 경로를 지정할 때다. 알고보면 fx,s, mx의경우도 URI가 웹사이트 주소와 유사하지만 내부적으로는 플렉스 프레임웍 패키지의 경로를 처리하도록 되어있다.
<데이터바인딩>
데이터 바인딩은 특정 컴포넌트에서 사용할 데이터를 연결해주는 것이다. 무엇보다도 데이터가 바뀌면 플렉스가 해당 데이터를 사용하는 컴포넌트에게 변경사항을 알려 화면이 자동으로 업데이트된다는 장점이 있다.
*플렉스에서 데이터바인딩을 이용하면 데이터변경에 따른 화면 업데이트를 별도로 코딩하지 않아도 된다. 따라서 변경될 가능성이 있는 데이터를 화면에 보여줄 때는 데이터바인딩을 이용해야한다.
데이터바인딩을 하려면 참조하려는 변수값에 대해 속성명="{변수}" 로 해줘야한다.
*플렉스 4부터는 양방향 데이터바인딩을 사용할 수 있기떄문에 @기호를 {} 앞에붙여주면 두컴포넌트 모두 서로에게 데이터 변경을 적용할 수 있다.
만일 바인딩하려는 데이터가 액션스크립트 변수라면 변수명 앞에 [Bindable] 라고 표시해줘야한다.
'공부 > Flex' 카테고리의 다른 글
플렉스 UI 컴포넌트 정리 (0) | 2011.08.25 |
---|---|
플렉스란? (0) | 2011.08.25 |
Flex공부시작 (0) | 2011.08.24 |
플렉스 UI 컴포넌트 정리
- Button : Button은 UIComponent를 확장해서 만든 컴포넌트로 주로 다음과 같이 정의 해서 사용한다.
<mx:Button id =”id명” label=”버튼명” click=”이벤트핸들러명”
Icon=”아이콘파일명 ”
Color=”0x0B333C”
textAllign=”center | left | rigth”
click=”버튼을 마우스로 눌렀다가 놓았을 때 이벤트 핸들러”
buttonDown=”버튼을 눌렀을 때 이벤트핸들러”
/>
- LinkButton : LinkButton은 Button의 하위 컴퍼넌트로 Button과 유사하지만 마우스를 올렸을 때 커서의 모양이 바뀐다는 점이 다르다. Button도 buttonMode=’true’ useHandCursor=’true’로 설정하면 LinkButton처럼 사용할 수 있다.
<mx:LinkButton id=”id명” label=”링크버튼명” click=”이벤트핸들러명”
icon=’아이콘파일명”
color=”0x0B333C”’
textAllign=”center | left | rigth”
click=”버튼을 마우스로 눌렀다가 놓았을 때 이벤트 핸들러”
buttonDown=”버튼을 눌렀을 때 이벤트핸들러”
/>
- CheckBox : CheckBox는 설문조사에서 여러 개의 항목을 선택할 수 있게 해준다. CheckBox는 Button을 확장한 컴퍼넌트이기 때문에 태그 사용법은 버튼과 유사하다. CheckBox를 선택하게 하려면 selected속성을 true로 설정한다.
<mx:CheckBox id=”id명” label=”체크박스에 나타날 설명”
labelPlacement=”right | left | top | bottom”
click=”CheckBox 클릭시 이벤트 핸들러” selected=”true | false” color=”글자색” />
- RadioButton : RadioButton도 CheckBox처럼 Button을 확장한 컴퍼넌트 이기 대문에 태그 사용법은 버튼과 유사하다. Radiobutton은 설문조사에서 여러 개 중 한 개의 항목만 선탹할수 있도록 해준다. 그래서 CheckBox와는 달리 groupName의 속성으로 RadioButtonGroup을 주면 그룹명이 같은 것 중에서 한 개만 선택할수 있게 한다. RadioButton을 선택되게 하려면 selected 속성을 true로 설정한다.
<mx:RadioButton id=”id명” label=”RadioButton에 나타날 설명”
labelPlacement=”right | left | top | bottom” groupName=”라디오버튼 그룹명”
click=”RadioButton 클릭시 이벤트 핸들러” selected=”true | false” color=”글자색” />
RadioButtonGroup : RadioButtonGroup은 EventDispatcher를 확장한 넌비주얼 컴퍼넌트로서 하나만 선택할 수 있도록 RadioButton들을 groupName으로 묶어주는 역할을 한다.
- ColorPicker : ColorPicker 컴퍼넌트는 RGB 색상을 고를 수 있는 컴퍼넌트로 콤보박스의 상위 클래스인 ComboBase 클래스를 확장해서 만들었다.
showTextField는 ColorPicker를 클릭했을 때 RGB값을 같이 보여줄지를 설정한다.
사용자가 선택한 색상은 ColorPicker의 selectedColor값을 통해서 읽어올 수 있다.
<mx:ColorPicker id=”id명” showTextField=”true” selectedColor=”0xFFFFFF” />
- DateChooser : DateChooser는 UIComponent를 확장해서 만든 달력 컴퍼넌트이다. DateChooser 컴퍼넌트는 달력기능을 위해 추가된 속성이 많으며 그 용도는 다음 태그와 함께 정리했다. DateChooser를 선택하면 change 이벤트가 발생한다. 날짜에서 월을 나타내는 값은 0부터 시작해서 11로 끝난다. 즉 0은 1월을 의미하며 11이 12월을 의미한다.
<mx:DateVhooser
allowMultipleSelection=”false | true” //여러 날을 선택할 수 있는 옵션
allowDisjointSelection=”true | false”
// Control 키를 이용해서 이웃해있지 않은 날짜를 선택할 수 있는 옵션으로
// allowMultipleSelection=’true’ 로 되어 있어야 함.
dayNames=”[“S”,”M”,”T”,”W”,”T”,”F”,”S”]” // 요일 이름 배열
disabledDays=”No default” // 비활성화할 일자들
disabledRanges=”No default” // 비활성화할 날짜 영역
displayedMonth=”Current month”
// 현재 달로서 0이 1월을 표현하며 11이 12월을 표현함
displayedYear=”Current year” // 현재 연도
firstDayOfWeek=”0” // 0으로 되어있으면 일요일부터 시작
maxYear=”2100”
minYear=”1900”
monthNames=”[“January”,”February”,”March”,”April”,”May”,”June”,”July”,”August”
,”September”,”October”,”November”]” // 월의 이름
monthSymbol=”월” // 원 다음에 표시되는 이름
selectableRange=”No default” // 선택가능한 날짜 영역
selectedDate=”No default” // 선택한 날짜
selectedRanges=”No default” // 선택된 날짜 영역
showToday=”true | false” // 오늘 날짜 표시 옵션
yearNavigationEnabled=”false | true” // 연도 이동 컨트롤 표시 여부
yearSymbol=”년” // 년 다음에 표시되는 이름
change=”날짜를 선택했을 때 발생”
/>
- DateField : DateField는 ComboBase를 확장한 컴퍼넌트로서 TextInput과 DateChooser의 기능을 합쳐놓은 컴퍼넌트라고 보면 되겠다.
<mx:DateField
Properties
dayNames=”[“S”,”M”,”T”,”W”,”T”,”F’,”S’]” // 요일 이름 배열
disabledDays=”No default” // 비활성화 일자들
disabledRanges=”No default” // 비활성화 날짜 영역
displayedMonth=”Current month”
// 현재 달로서 0이 1월을 표현하며 11이 12월을 표현함
displayedYear=”Current year” // 현재 연도
firstDayOfWeek=”0” // 0으로 되어있으면 일요일부터 시작
formatString=”MM/DD/YYYY” // 텍스트 필드에 표시될 날짜 형식
labelFunction=”텍스트필드에 표시될 내용에 사용할 함수명”
maxYear=”2100”
minYear=”1900”
monthNames=” [“January”,”February”,”March”,”April”,”May”,”June”,”July”,”August”
,”September”,”October”,”November”]” // 월의 이름
monthSymbol=”월” // 월 다음에 표시되는 이름
parseFunction=”텍스트필드에 들어오는 입력값을 처리해주는 함수명”
selectableRange=”No default” // 선택가능한 날짜 영역
selectedDate=”No default” // 선택한 날짜
showToday=”true | false” // 오늘 날짜 표시 옵션
yearNavigationEnabled=”false | true” // 연도 이동 컨트롤 표시 여부
yearSymbol=”년” // 년 다름에 표시되는 이름
change=”날짜를 선택했을 때 발생”
close=”달력을 닫을 때”
open=”달력을 열 때”
/>
- HSlider/VSlider : Slider를 확장한 컴퍼넌트로서 슬라이더썸(Thumb:조절바)을 움직여서 다른 컨트롤의 값을 설정하는 데 사용하는 컨트롤이다. 상하로 움직이는 것은 VSlider, 좌우로 움직이는 것은 HSlider이다.
<mx:VSlider id=”slider1”
thumbCount=”1’ // 슬라이더썸의 수로서 어려 개 지정이 가능하다.
minimum=”0” // 슬라이더의 최소값
maximum=”2” // 슬라이더의 최대값
labels=”[0배,0.5배,1배,1.5배,2배]” // 슬라이더에 나타날 라벨값
values=”[1]” // 초기화될 때 선택된 값
tickInterval=”0.5” // 눈금자 간격
snapInterval=’0.5” // 눈금 이동 간격
liveDragging=”true” // 마우스를 슬라이더썸을 드래그하는 동안의 가밧도 처리할 것인지 여부
dataTipPlacement=”left | right | top | bottom” // 슬라이더를 움직일 때 보이는
데이터텁의 위치
change=”슬라이더값이 변할 때 발생하는 이벤트”
/>
- NumericStepper : NumericStepper는 UIComponent를 확장한 컴퍼넌트로서 최대/최소값 사이를 상하 조절 버튼을 누르면서 바꿔 줄 수 있다. 이때 최대값과 최소값이 뒤바뀌지 않도록 해야한다.
<mx:NumericStepper
imeMode=”null”
maxChars=”10”
maximum=”10” // 표현최대값
minimum=”0” // 표현최소값(음수도 가능)
stepSize=”1” // 컨트롤을 누를 때 마다 바뀌는 값의 크기
value=”0” // 기본 선택값
change=”값이 변경되었을 때 발생하는 이벤트”
/>
- Label : Label은 화면에 글자로 설명을 넣어야 하는 곳에 사용하는 컴퍼넌트로 Button과 마찬 가지로 UIComponent를 확장해서 만든 컴퍼넌트이지만 이벤트를 써서 사용자와 인터랙션하는 곳에는 잘 쓰지 않는다. Text 속성에 Label에 나타낼 문자를 적어주면 되고 selectable 속성은 기본적으로 false로 되어있다. 이 속성을 true로 주면 Label의 text를 마우스로 선택해 복사할수 있다.
<mx:Label text=”” selectable=”true | false” />
- Text : Text 컴퍼넌트는 Label을 확장해 만든 컴퍼넌트로 Label과 마찬가지로 사용자의 입역을 받지는 못하지만 여러 줄로 텍스트를 표시할 수 있다. Text에는 상위 컴퍼넌트에서 상속받은 이벤트가 있지만 주로 텍스트를 보여주는 데에만 사용하기 대문에 이벤트를 그다지 활용하지 않는다. 텍스트의 속성에는 text와 htmlText가 있는데 두 속성에 값이 동시에 들어오면 htmlText값을 보여준다. Text 컴퍼넌트의 태그는 다음과 같이 사용한다.
<mx:Text text=”표시할 내용” >
<mx:htmlText>
<![CDATA[
<font color=”#FF0000”>HTML 텍스트</font>
]]>
</mx:htmlText>
</mx:Text>
htmlText에사 사용할 수 있는 HTML 태그는 다음과 같다.
Anchor 태그 (<a>)
Bold 태그 (<b>)
Break 태그 (<br>)
Font 태그 (<font>)
Image 태그 (<img>)
Italic 태그 (<i>)
List item 태그 (<li>)
Paragraph 태그 (<p>)
Text format 태그 (<textformat>)
Underline 태그 (<u>)
- TextArea : TextArea는 UIComponent에 스트롤 기능을 추가한 ScrollControlBase 컴퍼넌트의 하위 컴퍼넌트로서 HTML의 TextArea처럼 사용자의 입력을 받으면서 여러 줄로 표시가 가능한 텍스트 처리 컨트롤이다. TextArea는 Label,Text와 달리 상용자의 입력을 받으므로 다음과 같이 다양한 속성들이 있다.
<mx:TextArea
condenseWhite=”false | true”
// true로 되어있으면 htmlText에 들어있는 모든 줄바꿈 공백을 무시한다.
diaplayAsPassword=”false | true” // true로 되어있으면 *형식으로 글자를 표시한다.
editable=”true | false” // 에디팅 가능 여부
horizontalScrollPolicy=”auto | on | off” // 수평 스트롤바 표시 여부
htmlText=”null” // html태그를 사용한 텍스츠 내용
imeMode=”KOREAN” // KOREAN이라 설정하면 바로 한글 입력모드로 설정된다.
length=”0” // 화면에 표시될 글자수
maxChars=”0” // 최대 수용 글자수
restrict=”null” // 입력제한
styleSheet=”null” // text 영역에 적용할 스타일시트
text=”” // 표시할 text내용
textHeight=”height of text” // text의 높이
textWidth=”width of text” // text의 넓이
verticalScrollPolicy=”auto | on | off” // 수직 스크롤바 표시 여부
wordWrap=”true | false” // 자동 줄바꿈 기능 사용여부
change=”No default” // 텍스트 내용이 바뀌었을 때 발생하는 이벤트
/>
- TextInput : TextInput는 UIComponent의 하위 컴퍼넌트로서 TextArea와 기능은 우사하나 한 줄로만 표시된다는 점에서 다를다. TextInput에서 데이터를 입력하고 엔터키를 치면 enter이벤트가 발생하며 여기서 입력처리(입력값 검증 및 서버 전송)를 할 수가 있다.
<mx:TextInput
condenseWhite=”false | true”
// true로 되어있으면 htmlText에 들어있는 모든 줄바꿈 공백을 무시한다.
displayAsPassword=”false | true” // true로 되어있으면 * 형식으로 글자를 표시한다.
Editable=”true | false” // 에디팅 가능 여부
horizontalScrollPolicy=”auto | on | off” // 수평 스트롤바 표시 여부
htmlText=”null” // html태그를 사용한 텍스트 내용
imeMode=”KOREAN” // KOREAN이라 설정하면 바로 한글 입력모드로 설정된다.
length=”0” // 회면에 표시될 글자수
maxChars=”0” // 최대 수용 글자수
restrict=”null” // 입력제한
text=”” // 표시할 text내용
textField=”internal subcontrol”
textHeight=”height of text” // text의 높이
textWidth=”width of text” // text의 넓이
change=”No default” // 텍스트 내용이 바뀌었을 때
enter=”No default” // 텍스트 입력후 엔터키를 쳤을 때
textInput=”No default” // 텍스트 내용을 입력했을 때(키입력,붙여넣기,지우기 등)
restrict
restrict=”[abc]” : abc만 입력 가능
restrict=”[0-9]” : 숫자만 입력 가능
restrict=”[A-z]” : 영어만 입력 가능
restrict=”[A-z0-9.@\-]” : 이메일 입력
restrict=”[0-9\-]” : 전화번호 입력
- RichTextEditor : RichTextEditor는 Panel을 확장해서 TextInput,Button,TextArea,ComboBox,ColorPicker등의 컴퍼넌트를 합쳐서 만든 간단한 HTML입력용 컴퍼넌트이다.
<RichTextEditor
defaultLinkProtocol=”http://” // 화면에 표시되는 링크 방식
htmlText=”” // htmlText 내용
showControlBar=”true | false”
// RichTextEditor의 하단 버튼이 들어있는 ControlBar의 표시 여부
showToolTips=”false | true” // 풍선도움말(툴팁) 표시 여부
text=”” // 일반 텍스트 내용
change=” // 텍스트 내용이 바뀌었을 때발생하는 이벤트
/>
- Image : Image 컴퍼넌트는 SWFLoader를 확장한 컴퍼넌트로서 JPEG,PNG,GIF,SWF 파일을 실행시 화면에 보여줄수 있다. 보통 SWFLoader는 플렉스 애플리케이션 또한 로딩하는 데 사용하고, Image는 정적인 이미지를 로드하는 데에 사용한다. Image 컴퍼넌트에 source=”@Embed(source=’filenme’)” 형식으로 속성을 표시하면 SVG파일 또한 보여줄수 있으며 컴파일된 플렉스 애플리케이션 내에 이미지가 같이 포함된다.
<mx:Image source=”@Embed(‘assets/Nokia_6630.png’)” />
- SWFLoader : SWFLoader는 UIComponent를 확장한 컴퍼넌트로서 JPEG,PNG,GIF,SWF 파일을 실행시 화면에 보여줄 수 있다. 주로 동적인 SWF를 로드하는 데에 사용한다.
<mx:SWFLoader
autoLoad=”true | false” // 컨텐츠 자동 로딩 여부
maintainAspectRatio=”true | false”
// 원본이미지의 width,height의 비율을 유지할 것인지 여부
scaleContent=”true | false” // 이미지의 스케일 조절 여부
showBusyCursor=”false | true” // 컨텐츠를 로드할 때 작동중 커서를 보여줄 것인지의 여부
source=”No default” // 컨텐츠 경로
complete=”No default” // 로딩 완료시 발생
progress=”No default” // 로딩 중
unload=”No default” // 로딩한 객체를 언로드할 때
/>
- ProgressBar : ProgressBar는 UIComponent를 확장한 컴퍼넌트로서 어떤 작업의 진행상황을 bar모양을 채워가면서 보여주는 컴퍼넌트로서 전체 작업에 대한 예측치가 있는 determinate와 그렇지 않고 시간을 기준으로 진행하는 indeterminate방식이있다.
<mx;ProgressBar
Conversion=”1” // 로드한 바이트수/전체바이트수를 나눈는 값으로 1이 기본값임
direction=”right | left” // progressBar의 진행방향
indeterminate=”false | true” // indeterminate방식 여부
label=”No default” // progressBar의 라벨
labelPlacement=”bottom | top | left | right | center” // 라벨위치
maximum=”0” // 최대 표시값
minimum=”0” // 최소 표시값
mode=”event | polled | manual” // bar를 업데이트하는 방식
source=”No default” // ProgressBar 가 표시하려는 작업 객체
complete=”No default” // 작업 완료
progress=”No default” // 작업 진행중
/>
- VideoDisplay : VideoDisplay는 UIComponent를 확장한 컴퍼넌트로서 FLV(플래시 비디오) 파일을 플렉스 애플리케이션에서 보여준다. FLV파일은 웹서버로부터 조금씩 다운받아서 보여주거나 웹캠이나 플래시 미디어 서버에서 스트리밍해서 보여줄 수 있다.
<mx:VideoDisplay
autoBandWidthDetection=”false | true” // 밴드대역폭의 자동여부
autoPlay=”true | false” // 자동 실행 여부
autoRewind=”true | false”
// 플레이하다가 정지하거나 플레이가 끝났을 때 맨앞으로 자동 되감기 여부
bufferTime=”0.1’ // 비디오 버퍼에 넣을시간
cuePoints=”” // 미디어 내에 들어있는 특정 지점으로 큐포인트로 바로 이동할 수 있다.
idleTimeout=”300000”
// 아무것도 안하고 있을 동안 얼마나 커넥션을 유지할 것인가를 밀리초로 설정
Live=”false | true” // 라이브 스트리밍 실행 여부
maintainAspectRatio=”true : false”
// 원본 비디오의 width,height의 비율을 유지할 것인지 여부
source=”” // 미디어 파일 경로
totalTime=”” // 미디어의 총 길이(초)
volume=”0.75” // 볼륨크기 (0~1 사이)
/>
-- 데이터 바인딩 --
데이터 바인딩은 두 개 이상의 컴퍼넌트들이 있을 때 한쪽 컴퍼넌트의 속성이 바뀌면
다른 쪽의 컴퍼넌틑에도 바뀌 내용이 속성에 반영되도록 컴퍼넌트의 관계를 엮는 것을 말한다.
MAML에서 일반적인 속성 표기는 <mx:컴퍼넌트 속성=”참조값” /> 으로 하지만, 데이터 바인딩이 이뤄지게 하려면 속성값을 표시할 때 { } 기호를 써서 <mx;컴퍼넌트명 속성=”{참조값}” />과 같이 표시해야 한다.
참조값은 보통 다른 컴퍼넌트이 id.속성명으로 표현한다, 한편 액션스크립트에서 일반적으로 선언해 사용하는 변수를 데이터 바인딩이 일어나게 하려면 다음과 같이 변수 앞에 [Bindable] 이라고 명시를 해줘야 한다.
[Bindable]
Private vaar myData:ArrayCollection;
…
<mx:DataGrid dataProvider=”{myData}” />
콤퍼넌트 간의 데이터 바인딩
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal">
<mx:Script>
<![CDATA[
// 이 변수는 TextInput에 바인딩 되어 있어 반드시 [Bindable]로 선언해줘야 함
[Bindable]
private var bindableVar:Number = 0;
]]>
</mx:Script>
<!-- 이 Label의 text값은 TextInput의 text값과 바인딩 되어 있음 -->
<mx:Label text="TextInput의 값 : {myTxt.text}" />
<!-- 이 TextInput의 text는 변수 bindableVar와 바인딩 되어 있음 -->
<mx:TextInput id="myTxt" text="{bindableVar}" />
<!-- 버튼을 클릭하면 bindableVar을 바꾸고 바뀐 값이 Button과 TextInput에 반영됨 -->
<mx:Button label="Change Variable" click="bindableVar++" />
</mx:Application>
dataProvider, 컴퍼넌트 데이터 연결 창구
데이터 바인딩은 주로 데이터가 필요한 컴퍼넌트의 데이터값을 지정해주는 데 사용한다.
아래의 컴퍼넌트들은 데이터 바인딩을 통해 사용할 데이터를 화면으로 보여주는 컴퍼넌트들로서 dataProvider 속성에 배열값이나 XML 데이터값을 넘겨줌으로써 데이터를 보여줄 수 있다.
컨트롤 계열 컴퍼넌트
ComboBox / DataGrid / List / HorizontalList / TileList / Tree / Repeater / ColorPicker / DateField / Menu / MenuBar / PopUpMenuButton
모든 차트 컴퍼넌트
LineChart / ColumnChart / AreaChart / BarChart / PieChart / PlotChart /BubbleChart /CandleStickChart / HLOCChart
레이아웃 계열 컴퍼넌트
ButtonBar / LinkBar / TabBar / ToggleButtonBar
예제
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<!-- List와 DataGrid에서 사용할 데이터 선언 -->
<mx:ArrayCollection id="myAC">
<mx:source>
<mx:Object label="한국" data="1"/>
<mx:Object label="미국" data="2"/>
<mx:Object label="일본" data="3"/>
</mx:source>
</mx:ArrayCollection>
<!-- List와 DataGrid의 dataProvider 속성으로 myAC를 설정함 -->
<mx:List dataProvider="{myAC}" width="282"/>
<!-- DataGrid는 editable속성을 true로 하여 셀을 클릭하면 편집되도록 함 -->
<mx:DataGrid dataProvider="{myAC}" editable="true" />
</mx:Application>
- ComboBox : ComboBox는 UIComponent를 확장한 ComboBase의 하위 컴퍼넌트로서 HTML의 Select객체처럼 드롭다운 리스트형식으로 데이터를 보여준다. 사용자는 여기서 값을 하나만 선택할 수 있다. ComboBox에서 선택한 아이템의 배열은 selectedIndex로 알아낼 수 있으며 선택한 값은 selectedItem으로 값을 읽을 수 있다. 여러 개의 아이템을 선택하려면 List나 PopupButton을 사용한다.
<mx:ComboBox
dataProvider=”null” // 데이터 속성
dropdownWidth=”100” // ComboBox의 폭
labelField=”label” // ComboBox의 이름으로 나타날 필드명
prompt=”null” // 처음 ComboBox의 리스트에 표시할 값
rowCount=”5” // ComboBox의 리스트에 표시할 아이템 최대 개수
selectedIndex=”-1” // 선택한 아이템의 인덱스
selectedItem=”null” // 선택한 아이템
change=”No default” // 아이템을 선택할 때
open=”No default” // 리스트를 오픈할 때
/>
1. dataProvider 데이터 연결하기
2. ComboBox의 아이템 추가
3. Combobox의 아이템 삭제
4. 원하는 ComboBox의 아이템이 선택되게 하기
5. ComboBox에서 다른 아이템을 선택했을 때 선택된 아이템의 인덱스,label,data값 읽어 오기
- Tree : Tree는 List를 확장해서 만든 컴퍼넌트로서 트리 메뉴 구조를 보여주는 역할을 한다. 다른 데이터 관련 컨트롤과는 달리 Tree는 XML 데이터를 dataProvider에 연결해주어야 한다. XML의 특정 노드의 엘리먼트가 하위 노드를 가지면 자동으로 폴더모양의 아이콘으로 설정되어 클릭하면 하위 노드를 보여준다.
<mx:Tree
dataProvider=”null” // 트리가 사용할 XML 데이터의 정의
dragMoveEnabled=”true | false” // 트리의 아이템을 드래그로 이동하게 하는 설정
firstVisibleItem=”” // 트리의 제일 위에 보여줄 엘리먼트에 대한 설정
hasRoot=”false | true” // 현재의 노드가 최상위의 노드인지를 판단
itemIcons=”null” // 트리의 아이콘 설정
openItems=”null” // 트리를 보여줄 때 모든 노드를 펼질지의 여부
showRoot=”true | false” // 트리의 루트 엘리먼트를 보이게 하는 설정
change=”No default” // 트리의 노드를 클릭했을 때 발생
itemClose=”No default” // 트리의 노드를 열었을 때 발생
itemOpen=”No default” // 트리의 노드를 받았을 때 발생
/>
1. dataProvider에 XML 데이터 연결하기
2. Tree 열고 닫기
3. Tree 에 아이템 추가
4. Teee 노드 이동
5. Tree 노드를 선택했을 때 선택된 노드의 인덱스,label,data값 읽어 오기
- List : List는 DataGrid처럼 ListBase를 확장한 컴퍼넌트로서 ComboBox와 유사하지만 여러건의 아이템을 선택할 수 있다. 이는 HTML에서 다중 선택이 가능한 Select 객체와 유사하다.
<mx:List
Editable=”false | true” // 에디팅 가능 여부
imeMode=”null” // IME 설정
itemEditor=”TextInput”
// 아이템을 편집모드 시 List에 보여지는 컴퍼넌트로 TextInput의 형태로 편집한다.
rendererIsEditor=”false | true” // 아이템 에디터를 화면에 그대로 표현할지를 결정
itemEditBegin=”No default” // 아이템이 편집될 때
itemEditEnd=”No default” // 아이템 편집이 끝났을 때
/>
- TileList : ListBase에 열과 행의 개념을 적용한 TileBase 컴퍼넌트를 확장하여 만든 컴퍼넌트로서 아이템들을 지정된 공간 안에 차례대로 배치한다. 배치할 수 있는 아이템이 5개인데 데이터로 갖고 있는 아이템이 15개라면 3줄에 걸쳐서 5개씩 아이템을 보여준다.
<mx:TileList
allowDragSelection=”false | true” // 드래그해서 아이템을 선택하도록 하는 옵션
allowMultipleSelection=”false | true” // 여러 개의 아이템을 선택하도록 하는 옵션
columnCount=”4” // 화면에 보여줄 열 개수
columnWidth=”NaN” // 열의 폭
dataProvider=”null” // 사용할 데이터 객체
data=”Object” // itemRenderer를 사용할 때 참조하는 객체 속성
iconField=”null” // 아이콘으로 보여줄 필드 속성
itemRenderer=”null” // itemRenderer 이름
labelField=”label” // 데이터에서 label로 보여줄 필드명
rowCount=”-1” // 화면에 보여줄 행의 개수
rowHeight=”NaN” // 화면에 보여줄 행의 높이
selectable=”true | false” // 리스트에 보여주는 아이템을 선택가능하도록 하는 옵션
selectedIndex=”-1” // 리스트에 선택된 아이템 배열의 인덱스
selectedIndices=”null” // 리스트에 여러 개로 선택된 아이템 배열의 인덱스들
selectedItem=”null” // 선택된 아이템 객체
selectedItems=”null” // 선택된 아이템 객체들
showDataTips=”false | true” // dataTip을 보여주는 옵션
wordWrap=”false | true” // 아이템에서 줄바굼을 하는 옵션
change=”No default” // 다른 아이템을 선택했을 때 (selectedIndex가 바뀔때)
itemClick=”No default” // 아이템을 클릭했을 때 ”
/>
TileList에서 자주 사용하는 속성은 itemRenderer이다. itemRenderer는 화면에 데이터를 보여줄 때 다른 컴퍼넌트를 사용해서 화면에 보여줄 수 있도록 해부는 속성이다. 이 컴퍼넌트는 사진 갤러리에서 이미지를 리스트로 보여주는 데 많이 사용한다.
여기서는 itemRenderer에 <mx:Component> 속성 안에 사용할 MXML 태그를 넣었다. 이때 두가지를 정확히 처리해야 한다.
1. <mx:Component> 태그 안에 들어가는MXML 태그 또는 컴퍼넌트 명은 반드시 하나여야 한다.
예) 다음 예는 VBox안에 컴퍼넌트가 들어간 itemRenderer의 예이다.
<mx;TileList>
<mx;itemRendrer>
<mx:Component>
<mx:VBox width=”100” height=”250”>
<mx:Label text=”{data.label}” />
<mx:Image source=”{data.data}” />
</mx:VBox>
</mx:component>
</mx;itemRendrer>
</mx:TileList>
예) 다음 예는 itemRenderer로 MXML 컴퍼넌트를 사용한 예이다.
<mx:TileList>
<mx:itemRenderer>
<mx:Component>
<MyRD/>
</mx:Component>
</mx:itemRenderer>
</mx;TileList>
// MyRD.mxml의 내용
<?xml version=”1.0” encoding=”utf-8”?>
<mx:VBox xmlns:mx=http://www.adobe.com/2006/mxml width=”100” height=”250”>
<mx:Label text=”{data.label}”/>
<mx:Image source=”{data.data}”/>
</mx:VBox>
예) 다음의 예는 itemRenderer에 MXML컴퍼넌트의 이름을 사용한 예이다.
<mx:TileList itemRenderer=”MyRD” />
2. itemRenderer에 들어가는 데이터는 data라는 참조명으로 가져온다.
데이터 구조가 아래와 같이 되어 있으면,
<mx:Object label=”힌드폰1” data=”phone_1.png” />
data.data, data.label 식으로 itemRenderer에사 값을 가져올 수 있다.
- HorizontalList : ListBase에 열과 행의 개념을 적용한 TileBase 컴퍼넌트를 확장하여 만든 컴퍼넌트이다.
아이템들을 수평으로 배열하는 컴퍼넌트로서 사진들을 슬라이드 형식으로 보여주는 데에 많이 사용한다.
<mx:HorizontalList
allowDragSelection=”false | true” // 드래그해서 아이템을 선택하도록 하는 옵션
allowMultipleSelection=”false | true” // 여러 개의 아이템을 선택하도록 하는 옵션
columnCount=”4” // 화면에 보여줄 열 개수
columnWidth=’NaN” // 열의 폭
dataProvider=”null’ // 사용할 데이터 객체
data=”Object” // itemRenderer를 사용할 때 참조하는 객체 속성
iconField=”null” // 아이콘으로 보여줄 필드 속성
itemRenderer=”null” // itemRenderer 이름
labalField=”label’ // 데이터에서 label로 보여줄 필드명
rowCount=”-1” // 화며넹 보여줄 행의 개수
rowHeight=”NaN” // 화면에 보여줄 행의 높이
selectable=”true | false” // 리스트에 보여주는 아이템을 선택가능하도록 하는 옵션
selectedIndex=”-1” // 리스트에 선택된 아이템 배열의 인덱스
selectedIndices=”null” // 리스트에 여러 개로 선택된 아이템 배열의 인덱스들
selectedItem=”null’ // 선택된 아이템 객체
selectedItems=”null” // 선택된 아이템 객체들
showDataTips=”false | true” // dataTip을 보여주는 옵션
wordWrap=”false | true” // 아이템에서 줄바꿈을 하는 옵션
change=”No default” // 다른 아이템을 선택했을 때 (selectedIndex가 바뀔 때 )
itemClick=”No default” // 아이템을 클릭했을 때
/>
- DataGrid : DataGrid는 DataGrid List 의 상위 컴퍼넌트인 ListBase를 뿌리에 두고있다. DataGrid는 플렉스에서 데이터를 표현하는 데 가장 많이 사용하는 컴퍼넌트로서 테이블 형태의 데이터를 보여주는 데 사용한다. DataGrid의 기능은 다음과 같다.
1. 배열 형태의 데이터를 테이블 리스트로 표현한다.
2. 각 열별 정렬 기능
3. 열 간에 드래그앤드랍으로 이동 가능
4. 셀 내용을 직접 편집가능
<mx:DataGrid
Columns=”From dataProvider” // 데이터그리드의 열 지정
draggableColumns=”true | false” // 열을 드래그앤드랍으로 이동할 수 있게 하는 속성
editable=”false | true” // 데이터그리드의 각 셀의 값을 편집할 수 있게 하는 속성
horizontalScrollPosition=”null”
imeMode=”KOREAN” // KOREAN이라 설정하면 바로 한글 입력모드로 설정
minColumnWidth=”NaN” // 열이 최소 폭
resizableColumns=”true | false” // 열의 크기를 바꿀 수 있게 할지 설정
sortableColumns=”true | false” // 열을 정렬할 수 있게 할지 설정
change=”” // 데이터가 바뀌었을 때 발생
itemClick=”” // 데이터그리드 아이템을 클릭했을 때 발생
/>
1. dataProvider 데이터 연결하기
2. DataGrid의 행 추가
3. DataGrid의 행 삭제
4. 원하는 DataGrid의 아이템이 선택되도록 하기
5. DataGrid에서 다른 아이템을 선택했을 때 선택된 행의 인덱스 ,label,data값 읽어오기
'공부 > Flex' 카테고리의 다른 글
XML과 MXML의 이해 (0) | 2011.08.25 |
---|---|
플렉스란? (0) | 2011.08.25 |
Flex공부시작 (0) | 2011.08.24 |
플렉스는 XML태그로 된 소스파일(*mxml)을 컴파일해 다양한 플랫폼에서 구동 가능한 실행파일을 만들어내는 개발 플랫폼이다.
플렉스2 버전까지는 웹브라우저의 플래시 플레이어에서 구동가능한 실행파일(*.swf)만 만들어냈지만, 플렉스 3 버전에서는 데스크탑 애플리케이션(*.air),
플렉스 4.5버전에서는스마트폰에서 실행가능한 애플리케이션을 만들수 있게 되었다.
플렉스와 플래시의 차이점
플렉스가 플래시로부터 나온 기술이기 떄문에 서로 닮은 점이 많지만 사실 다른 점도 많다.
이러한 차이점이 생기는 근본적인 이유는 개발의 편의성 여부에 있다. 어느 한 쪽이 더 개발하기 편리하다는 것이 아니라 각 용도에 맞게 편리하게 개발할
수 있도록 만들어졌다는 뜻이다. 즉 플래시는 화면을 그려낼 수있는 디자인 성향이 강한 반면, 플렉스는 태그 기반 스크립트로 되어 있어
일반 텍스트 에디터로도 개발이 가능한 개발자 성향이 강하다.
플렉스의 화면 구성 방법
플렉스는 UI를 빠르고 쉽게 만들 수 있도록 여러가지 컴포넌트를 기본적으로 제공한다.
플렉스 UI컴포넌트는 크게 컨트롤과 컨테이너로 분류할수있다. 하나의 플렉스 애플리케이션 화면은 컨트롤과 컨테이너의 조합으로 만들어진다.
컨테이너는 자식컴포넌트들을 수직, 수평, 바둑판 형태 등 다양한 방식으로 배치하거나 화면을 이동할 때 사용하는 것으로 컨트롤이나 또 다른 컨테이너를
포함 할 수 있다. 반면 컨트롤은 주로 사용자 키보드나 마우스 조작과 같은 입력을 처리하는 컴포넌트로서 컨테이너의 자식으로 들어간다.
플렉스의 역사
플렉스1은 매크로미디어에서 2004 년 3월 출시했다. *,mxml소스를 WAS에 설치되어 작동하는 플렉스 프리젠테이션 서버에 올려 놓으면 서버에서 *.swf로 컴파일해서 화면에보여준다. 이때까지만해도 플렉스가 작동하려면 반드시 서버가 있어야 했따. 이방식은 1.5버전까지 지속됬으며 서버는 고가였기 떄문에 플렉스 대중화에 걸림돌이었다. 하지만 플렉스 2버전으로 오면서 서버 모듈 없이도 이클립스 기반으로 만들어진 개발툴인 플렉스 빌더에서 컴파일하면 *.swf 가 생성 되도록했다. 무엇보다도 플렉스 개발툴킷(Flex SDK)을 오픈소스로 전환해 많은 오픈소스 플렉스 컴포넌트가 만들어지는 계기가 되었다. 또한 개발 언어인 액션스크립트가 3.0으로 버전업되면서 랭귀지 지원, 실행 성능이 향상되었다. 플렉스 3 버전으로 오면서 웹에서만 실행되던 플렉스의 플랫폼을 데스크탑으로 확장하기위해 AIR 런타임을 함께 출시한다. 그리고 이떄부터 애플리케이션 성능과 디자인 협업, 개발 생산성 향상에 초점을 본격적으로 맞추기 시작한다. 플렉스4 버전으로 오면서 기존 컴포넌트의 구조적인 문제점을 해결하고자 spark이라는 컴포넌트를 추가했다. spark컴포넌트는 컴포넌트 모양과 기능을 개선했을 뿐만 아니라 MXML코드 안에서 화면정의, 변수 선언, 스킨, 스테이트 정의 영역을 구분함으로써 성능과 디자인협업 향상을 도모한다. 또한 새로운 CSS 정의 방법을 추가해 스타일을 유연하게 적용할 수 있게 했다. 그리고 플래시 플랫폼의 통합성을 강조하고자 플렉스 빌더의 브랜드명을 플래시 빌더로 바꾼다. 플렉스 4.5 는 데이터그리드, 폼, 밸리데이터, 포매터, 이미지 같은 새로운 spark 컴포넌트가 추가됬으며 스마트폰 앱 버전 개발을 지원한다. |
'공부 > Flex' 카테고리의 다른 글
XML과 MXML의 이해 (0) | 2011.08.25 |
---|---|
플렉스 UI 컴포넌트 정리 (0) | 2011.08.25 |
Flex공부시작 (0) | 2011.08.24 |
한장한장 공부할때 마다 그흔적들을 남기면서
정리하여, 후에 간편하게 보면서 참고할수있도록 해야겠다
책은 okgosu의 플렉스4.5& 플래시빌더 정석
'공부 > Flex' 카테고리의 다른 글
XML과 MXML의 이해 (0) | 2011.08.25 |
---|---|
플렉스 UI 컴포넌트 정리 (0) | 2011.08.25 |
플렉스란? (0) | 2011.08.25 |
테이블/DIV태그에서 글자길어지면 자동으로 잘라주고 ...넣기
게시판이나 리스트를 보여 줄때 텍스트가 너무 길어지면 보기 흉한 경우가 있다.
이때는 대부분 ASP나 PHP를 이용해서 (스크립트를 이용해서) 잘라주고 끝에 ... 을 부쳐주는 경우가 있다.
게시판이나 메인페이지에서 공지사항을 보여 줄때 두줄이상이면 디자인이 깨져서 보기 흉하다.
이때 사용할 수 있는 것이 다음 방법입니다.
<table width="100%" style="TABLE-layout:fixed">
<tr>
<td style="width:100%;overflow:hidden;text-overflow:ellipsis;"><nobr>긴텍스트</nobr></td>
</tr>
</table>
위처럼 text-overflow 의 ellipsis 를 사용하면 되는데 이는 overflow 와 항상 같이 사용해야 하며 <nobr>을 반드시 사용해야합니다.
table 의 TABLE-layout:fixed 도 반드시 있어야 합니다.
그리고 table과 td도 각각 width를 지정해 주는것이 좋습니다.
단 이 방법은 익스플로어 6+에서만 가능합니다. -_-;
Firefox에서 사용하면 ... 은 나오지 않습니다.
문자열이 길은데 ... 으로 자르지 않고 줄을 넘기려면
<table width="100%">
<tr>
<td style="width:100%;word-break:break-all;">긴텍스트</td>
</tr>
</table>
이것도 익스플로어 6+에서만 가능합니다.
'공부 > HTML CSS' 카테고리의 다른 글
마우스 대면 미리보기(툴팁) (1) | 2011.12.19 |
---|---|
html 색상코드 표 (0) | 2011.08.08 |
HTML TABLE 총정리 (0) | 2011.06.13 |
html 색상코드 표
원하는 색깔을 드래그해서 복사하십시오. | |||||||||
#93DAFF | #98DFFF | #9DE4FF | #A2E9FF | #A7EEFF | #ACF3FF | #B0F7FF | #B4FBFF | #B9FFFF | #C0FFFF |
#87CEFA | #91D8FA | #A5D8FA | #AFDDFA | #B9E2FA | #C3E7FA | #CDECFA | #D7F1FA | #E1F6FA | #EBFBFF |
#00BFFF | #0AC9FF | #14D3FF | #1EDDFF | #28E7FF | #32F1FF | #3CFBFF | #46FFFF | #96FFFF | #C8FFFF |
#00A5FF | #00AFFF | #00B9FF | #00C3FF | #00CDFF | #00D7FF | #00E1FF | #00EBFF | #00F5FF | #00FFFF |
#1EA4FF | #28AEFF | #32B8FF | #3CC2FF | #46CCFF | #50D6FF | #5AE0FF | #6EE0FF | #6EEAFF | #78F3FF |
#1E90FF | #289AFF | #32A4FF | #3CAEFF | #46B8FF | #50C2FF | #5ACCFF | #64D6FF | #6EE0FF | #78EAFF |
#96A5FF | #A0AFFF | #AAB9FF | #B4C3FF | #BECDFF | #C8D7FF | #D2E1FF | #DCEBFF | #E8F5FF | #F4FFFF |
#86A5FF | #90AFFF | #9AB9FF | #A4C3FF | #AECDFF | #B8D7FF | #CCE1FF | #E0EBFF | #EBF5FF | #F9FFFF |
#6495ED | #6E9FED | #78A9ED | #82B3ED | #8CBDED | #96C7ED | #A0D1F7 | #AADBFF | #B4E5FF | #BEEFFF |
#0078FF | #0A82FF | #148CFF | #1E96FF | #28A0FF | #32AAFF | #3CB4FF | #46BEFF | #50C8FF | #5AD2FF |
#0064FF | #0A6EFF | #1478FF | #1E82FF | #288CFF | #3296FF | #3CA0FF | #46AAFF | #50B4FF | #5ABEFF |
#0000FF | #3232FF | #5050FF | #646EFF | #6478FF | #6482FF | #648CFF | #6496FF | #64A0FF | #64AAFF |
#4169E1 | #4B73E1 | #557DE1 | #5F87E1 | #6991E1 | #739BE1 | #7DA5E1 | #87AFEB | #91B9F5 | #9BC3FF |
#0064CD | #0A6ECD | #1478CD | #1E82CD | #288CD2 | #3296D7 | #3CA0E1 | #46AAEB | #50B4F5 | #5ABEF5 |
#5A5AFF | #6464FF | #6E6EFF | #7878FF | #8282FF | #8C8CFF | #A0A0FF | #B4B4FF | #C8C8FF | #D2D2FF |
#7B68EE | #8572EE | #8F7CEE | #9986EE | #A390EE | #AD9AEE | #B7A4EE | #C1AEEE | #CBB8EE | #D5C2EE |
#6A5ACD | #7E6ECD | #8878CD | #9282CD | #9C8CCD | #A696CD | #B0A0CD | #BAAAD7 | #C4B4E1 | #CEBEE1 |
#0000CD | #2828CD | #4646CD | #6464CD | #6E6ED7 | #7878E1 | #8282EB | #8C8CF5 | #9696FF | #A0A0FF |
#00008C | #14148C | #28288C | #3C3C8C | #50508C | #646496 | #7878AA | #8C8CBE | #A0A0C8 | #B4B4DC |
#483D8B | #52478B | #5C518B | #665B8B | #70658B | #7A6F95 | #84799F | #8E83A9 | #988DB3 | #A297BD |
#000069 | #1E3269 | #323C73 | #3C467D | #3C5087 | #3C5A91 | #46649B | #506EA5 | #5A78AF | #6482B9 |
#3DFF92 | #47FF9C | #51FFA6 | #5BFFB0 | #65FFBA | #6FFFC4 | #79FFCE | #75FFCA | #7AFFCF | #7FFFD4 |
#55EE94 | #5FEE9E | #69EEA8 | #73EEB2 | #7DEEBC | #87EEC6 | #91F8D0 | #9BFFDA | #A5FFE4 | #AFFFEE |
#66CDAA | #70D2B4 | #7AD7BE | #84DCC8 | #8EE1D2 | #98EBDC | #9DF0E1 | #A2F5E6 | #A7FAEB | #ACFFEF |
#AAEBAA | #B4F0B4 | #BEF5BE | #C8FAC8 | #D2FFD2 | #DCFFDC | #E1FFE1 | #E6FFE6 | #EBFFEB | #F0FFF0 |
#80E12A | #8AE634 | #94EB3E | #9EF048 | #A8F552 | #B2FA5C | #BCFF66 | #C1FF6B | #C6FF70 | #CBFF75 |
#52E252 | #5CE75C | #66EC66 | #70F170 | #7AF67A | #84FB84 | #89FB89 | #8EFB8E | #93FB93 | #98FB98 |
#64CD3C | #6ED746 | #78E150 | #82EB5A | #8CF064 | #96F56E | #9BFA73 | #A0FA78 | #A5FA7D | #AAFA82 |
#13C7A3 | #18CCA8 | #1DD1AD | #22D6B2 | #27DBB7 | #2CE0BC | #31E0C1 | #36E0C6 | #3BE0CB | #40E0D0 |
#46B4B4 | #50BEBE | #5AC8C8 | #64D2D2 | #6EDCDC | #73E1E1 | #78E6E6 | #7DEBEB | #82F0F0 | #87F5F5 |
#20B2AA | #2ABCB4 | #34C6BE | #3ED0C8 | #48DAD2 | #52E4DC | #57E9E1 | #5CEEE6 | #61F3EB | #66F8F0 |
#5F9EA0 | #69A8AA | #73B2B4 | #7DBCBE | #87C6C8 | #91D0D2 | #96D5D7 | #9BDADC | #A0DFE1 | #A5E3E6 |
#3CB371 | #46BD7B | #50C785 | #5AD18F | #64DB99 | #6EE5A3 | #73EAA8 | #78EFAD | #7DF4B2 | #82F9B7 |
#2E8B57 | #389561 | #429F6B | #4CA975 | #56B37F | #60BD89 | #65C28E | #6AC793 | #6FCC98 | #74D19D |
#228B22 | #2C952C | #369F36 | #40A940 | #4AB34A | #54BD54 | #5EC75E | #63CC63 | #68D168 | #6DD66D |
#497649 | #538053 | #5D8A5D | #679467 | #719E71 | #7BA87B | #80AD80 | #85B285 | #8AB78A | #8FBC8F |
#006400 | #0A6E0A | #147814 | #1E821E | #288C28 | #329632 | #3CA03C | #41A541 | #46AA46 | #4BAF4B |
#008C8C | #0A9696 | #14A0A0 | #1EAAAA | #28B4B4 | #32BEBE | #37C3C3 | #3CC8C8 | #41CDCD | #46D2D2 |
#008080 | #0A8A8A | #149494 | #1E9E9E | #28A8A8 | #32B2B2 | #37B7B7 | #3CBCBC | #41C1C1 | #46C6C6 |
|
|
#ffffff |
#fff8ff |
#ffefff |
#ffe8ff |
#fffff8 |
#fff8f8 |
#ffeff8 |
#ffe8f8 |
#ffffef |
#fff8ef |
#ffefef |
#ffe8ef |
#ffffe8 |
#fff8e8 |
#ffefe8 |
#ffe8e8 |
#ffffdf |
#fff8df |
#ffefdf |
#ffe8df |
#ffffd8 |
#fff8d8 |
#ffefd8 |
#ffe8d8 |
#ffffcf |
#fff8cf |
#ffefcf |
#ffe8cf |
#f8ffff |
#f8f8ff |
#f8efff |
#f8e8ff |
#f8fff8 |
#f8f8f8 |
#f8eff8 |
#f8e8f8 |
#f8ffef |
#f8f8ef |
#f8efef |
#f8e8ef |
#f8ffe8 |
#f8f8e8 |
#f8efe8 |
#f8e8e8 |
#f8ffdf |
#f8f8df |
#f8efdf |
#f8e8df |
#f8ffd8 |
#f8f8d8 |
#f8efd8 |
#f8e8d8 |
#f8ffcf |
#f8f8cf |
#f8efcf |
#f8e8cf |
#efffff |
#eff8ff |
#efefff |
#efe8ff |
#effff8 |
#eff8f8 |
#efeff8 |
#efe8f8 |
#efffef |
#eff8ef |
#efefef |
#efe8ef |
#efffe8 |
#eff8e8 |
#efefe8 |
#efe8e8 |
#efffdf |
#eff8df |
#efefdf |
#efe8df |
#efffd8 |
#eff8d8 |
#efefd8 |
#efe8d8 |
#efffcf |
#eff8cf |
#efefcf |
#efe8cf |
#e8ffff |
#e8f8ff |
#e8efff |
#e8e8ff |
#e8fff8 |
#e8f8f8 |
#e8eff8 |
#e8e8f8 |
#e8ffef |
#e8f8ef |
#e8efef |
#e8e8ef |
#e8ffe8 |
#e8f8e8 |
#e8efe8 |
#e8e8e8 |
#e8ffdf |
#e8f8df |
#e8efdf |
#e8e8df |
#e8ffd8 |
#e8f8d8 |
#e8efd8 |
#e8e8d8 |
#e8ffcf |
#e8f8cf |
#e8efcf |
#e8e8cf |
#dfffff |
#dff8ff |
#dfefff |
#dfe8ff |
#dffff8 |
#dff8f8 |
#dfeff8 |
#dfe8f8 |
#dfffef |
#dff8ef |
#dfefef |
#dfe8ef |
#dfffe8 |
#dff8e8 |
#dfefe8 |
#dfe8e8 |
#dfffdf |
#dff8df |
#dfefdf |
#dfe8df |
#dfffd8 |
#dff8d8 |
#dfefd8 |
#dfe8d8 |
#dfffcf |
#dff8cf |
#dfefcf |
#dfe8cf |
#d8ffff |
#d8f8ff |
#d8efff |
#d8e8ff |
#d8fff8 |
#d8f8f8 |
#d8eff8 |
#d8e8f8 |
#d8ffef |
#d8f8ef |
#d8efef |
#d8e8ef |
#d8ffe8 |
#d8f8e8 |
#d8efe8 |
#d8e8e8 |
#d8ffdf |
#d8f8df |
#d8efdf |
#d8e8df |
#d8ffd8 |
#d8f8d8 |
#d8efd8 |
#d8e8d8 |
#d8ffcf |
#d8f8cf |
#d8efcf |
#d8e8cf |
#cfffff |
#cff8ff |
#cfefff |
#cfe8ff |
#cffff8 |
#cff8f8 |
#cfeff8 |
#cfe8f8 |
#cfffef |
#cff8ef |
#cfefef |
#cfe8ef |
#cfffe8 |
#cff8e8 |
#cfefe8 |
#cfe8e8 |
#cfffdf |
#cff8df |
#cfefdf |
#cfe8df |
#cfffd8 |
#cff8d8 |
#cfefd8 |
#cfe8d8 |
#cfffcf |
#cff8cf |
#cfefcf |
#cfe8cf |
ddbbbb | eecccc | ffdddd |
ddc3bb | eed4cc | ffe5dd |
ddccbb | eeddcc | ffeedd |
ddd4bb | eee5cc | fff6dd |
ddddbb | eeeecc | ffffdd |
d4ddbb | e5eecc | f6ffdd |
ccddbb | ddeecc | eeffdd |
c3ddbb | d4eecc | e5ffdd |
bbddbb | cceecc | ddffdd |
bbddc3 | cceed4 | ddffe5 |
bbddcc | cceedd | ddffee |
bbddd4 | cceee5 | ddfff6 |
bbdddd | cceeee | ddffff |
bbd4dd | cce5ee | ddf6ff |
bbccdd | ccddee | ddeeff |
bbc3dd | ccd4ee | dde5ff |
bbbbdd | ccccee | ddddff |
c3bbdd | d4ccee | e5ddff |
ccbbdd | ddccee | eeddff |
d4bbdd | e5ccee | f6ddff |
ddbbdd | eeccee | ffddff |
ddbbd4 | eecce5 | ffddf6 |
ddbbcc | eeccdd | ffddee |
ddbbc3 | eeccd4 | ffdde5 |
#FFF56E | #FFFA78 | #FFFA82 | #FFFF8C | #FFFF96 |
#FFE650 | #FFEB5A | #FFF064 | #FFF56E | #FFF978 |
#FFD232 | #FFD73C | #FFDC46 | #FFE150 | #FFE65A |
#FFC300 | #FFC800 | #FFCD00 | #FFD200 | #FFD700 |
#FF9100 | #FF9B00 | #FFA500 | #FFAF00 | #FFB900 |
#FFDBC1 | #FFE0C6 | #FFE5CB | #FFEAD0 | #FFEFD5 |
#FFD0A1 | #FFD5A6 | #FFDAAB | #FFDFB0 | #FFE4B5 |
#FFA98F | #FFB399 | #FFBDA3 | #FFC7AD | #FFD1B7 |
#FF9E7D | #FFA887 | #FFB291 | #FFBC9B | #FFC6A5 |
#E1B771 | #E6C17B | #EBC680 | #F0CB85 | #F5D08A |
#E19B50 | #E6A55A | #EBAA5F | #EBAF64 | #F0B469 |
#CD853F | #CD8F49 | #D29953 | #D7A35D | #DCAD67 |
#D2691E | #D27328 | #D27D32 | #D7873C | #DC9146 |
#FFDCE1 | #FFE1E6 | #FFE6EB | #FFEBF0 | #FFF0F5 |
#FFCFDA | #FFD4DF | #FFD9E4 | #FFDEE9 | #FFE3EE |
#FFB6C1 | #FFBBC6 | #FFC0CB | #FFC5D0 | #FFCAD5 |
#FF9E9B | #FFAAAF | #FFB4B9 | #FFBEC3 | #FFC8CD |
#FF88A7 | #FF92B1 | #FF9CBB | #FFA6C5 | #FFB0CF |
#FF5675 | #FF607F | #FF6A89 | #FF7493 | #FF7E9D |
#FFAAFF | #FFBEFF | #FFC8FF | #FFD2FF | #FFDCFF |
#FFAFE6 | #FFB4EB | #FFB9F0 | #FFBEF5 | #FFC3FA |
#FF82FF | #FF8CFF | #FF96FF | #FFA0FF | #FFAAFF |
#FF46C5 | #FF50CF | #FF5AD9 | #FF64E3 | #FF6EED |
#3DFF92 | #47FF9C | #51FFA6 | #5BFFB0 | #65FFBA |
#6FFFC4 | #79FFCE | #75FFCA | #A5FFE4 | #AFFFEE |
#98EBDC | #9DF0E1 | #A2F5E6 | #A7FAEB | #ACFFEF |
#AAEBAA | #B4F0B4 | #BEF5BE | #C8FAC8 | #D2FFD2 |
#DCFFDC | #E1FFE1 | #E6FFE6 | #EBFFEB | #F0FFF0 |
#80E12A | #8AE634 | #94EB3E | #9EF048 | #A8F552 |
#B2FA5C | #BCFF66 | #C1FF6B | #C6FF70 | #CBFF75 |
#228B22 | #2C952C | #369F36 | #40A940 | #4AB34A |
#54BD54 | #5EC75E | #63CC63 | #68D168 | #6DD66D |
#008C8C | #0A9696 | #14A0A0 | #1EAAAA | #28B4B4 |
#32BEBE | #37C3C3 | #3CC8C8 | #41CDCD | #46D2D2 |
#ACF3FF | #B0F7FF | #B4FBFF | #B9FFFF | #C0FFFF |
#32F1FF | #3CFBFF | #46FFFF | #96FFFF | #C8FFFF |
#00D7FF | #00E1FF | #00EBFF | #00F5FF | #00FFFF |
#93DAFF | #98DFFF | #9DE4FF | #A2E9FF | #A7EEFF |
#00BFFF | #0AC9FF | #14D3FF | #1EDDFF | #28E7FF |
#00A5FF | #00AFFF | #00B9FF | #00C3FF | #00CDFF |
#BECDFF | #C8D7FF | #D2E1FF | #DCEBFF | #E8F5FF |
#90AFFF | #9AB9FF | #A4C3FF | #AECDFF | #B8D7FF |
#6495ED | #6E9FED | #78A9ED | #82B3ED | #8CBDED |
#96C7ED | #A0D1F7 | #AADBFF | #B4E5FF | #BEEFFF |
#0078FF | #0A82FF | #148CFF | #1E96FF | #28A0FF |
#32AAFF | #3CB4FF | #46BEFF | #50C8FF | #5AD2FF |
#0078FF | #0A82FF | #148CFF | #1E96FF | #28A0FF |
#FFFFFF | #F4F4F4 | #DDDDDD |
#C0C0C0 | #ADADAD | #ADADAD |
#989898 | #808080 | #666666 |
#4B4B4B | #262626 | #000000 |
#FFF7F7 | #FFECEC | #FFCCCC |
#FF9999 | #FF6666 | #E54C4C |
#FF0000 | #E60000 | #CC0000 |
#B30000 | #990000 | #660000 |
#EFDCDC | #DEB8B8 | #CE9595 |
#AF5050 | #8C4040 | #7B3838 |
#660000 | #590D0D | #4C1919 |
#430909 | #391313 | #231010 |
#FF967E | #FF6947 | #FF4419 |
#FF3000 | #E62B00 | #B82200 |
#FFCE9F | #FFA147 | #FF8A19 |
#FF7E00 | #E87100 | #CC6400 |
#C58A52 | #AD733A | #7F654C |
#80542B | #603F20 | #6B5540 |
#FFEFBF | #FFDC74 | #FFD047 |
#FFC519 | #FFC000 | #F3B600 |
#F2F9E8 | #D9EFB9 | #C4E693 |
#ABDC65 | #90D133 | #74C600 |
#69B319 | #61A500 | #549000 |
#549000 | #264200 | #182605 |
#F2F8F8 | #D6E9E7 | #9ECCC7 |
#79B9B1 | #268F81 | #006F61 |
#EDF9FF | #CEEEFF | #65CBFF |
#00A0F3 | #0080C6 | #0060FF |
#0092E0 | #0060FF | #0060FF |
#003A9D | #003A9D | #0F3067 |
#FFD6ED | #FFA2D6 | #FF82C8 |
#FF59B6 | #FF2DA4 | #E60081 |
#FFE2FE | #FFB9FC | #FF71F8 |
#FF00F6 | #BD00B6 | #9C0095 |
#E7DCEF | #CAB2DB | #B594CD |
#9D71BD | #68269A | #4D0088 |
색상코드표
|
'공부 > HTML CSS' 카테고리의 다른 글
마우스 대면 미리보기(툴팁) (1) | 2011.12.19 |
---|---|
테이블/DIV태그에서 글자길어지면 자동으로 잘라주고 ...넣기 (0) | 2011.08.19 |
HTML TABLE 총정리 (0) | 2011.06.13 |