finerss's world!

About Spring

공부/Spring2011. 12. 12. 21:25

-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는 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 로드밸런싱

공부/기타2011. 11. 8. 16:21

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...)

세션관리, 서버/방화벽 로드밸런싱, 네트워크 서비스 품질 보장


L7 스위치 :

L4 스위치의 서비스 단위 로드밸런싱을 극복하기 위해 포트 + 데이터 페이로드 패턴을 이용한 패킷 스위치

(e-mail 내용/제목, URL ...)

connection pooling(시스템 부하 감소), Traffic Compression (컨텐츠 압축 전송), 보안 기능


L4 vs L7 :
공통점 : 스위치로 들어온 패킷을 적절한 목적지로 전송해줌 (불필요한 패킷은 drop시킴)

차이점 :
기능과 역할은 동일하나 패킷을 분석하는 인텔리전스가 다름

L7은 보안 기능 강화

(DOS/SYN 공격 방어, CodeRed/Nimda 등 감염 패킷 필터링, 네트워크 자원 독점 방지 등)

L7 스위치에 대한 오해 :
L7 스위치는 레이어 7 계층을 위한 스위치이다.

: 기본적으로 L2, L3 및 부분적으로 L4 스위치를 지원한다. 레이어5 세션 계층 위주이다.

L7 스위치는 URL 기반 스위치다.

: L7 스위치 기능에 대한 일부분을 말한 것이다.

L7 스위치는 모든 TCP/UDP 포트(0-65535)에 대한 인지가 가능하다.

: 알려진 일반 포트에 대한 세션처리는 가능하지만, 순간적으로 사용하는 임시 포트는 제한적이다.

sticky session :
L4 스위치를 통해 분배된 서비스 세션은 하나의 연결 요청에 1~n 중에 한 대의 서버에 분배된다.
여러 번 시도해도 그 때마다 1~n 중에 한 대에 분배되므로, 같은 서버에 접속될 확률은 1/n이 된다.
그러나 처음에 접속했던 서버와 같은 서버에 계속 연결시킬 수 있다.
바로 sticky 옵션이다.
(일반적인 상태)
사용자A -> L4 -> 1번서버
사용자A -> L4 -> 3번서버

(sticky 상태)
사용자A -> L4 -> 1번서버
사용자A -> L4 -> 1번서버

기존 사용자의 세션 상태를 timeout 시간 내에는 계속 유지시켜주는 것이 sticky session이다.

timeout 시간은 60분 이내로 조절 가능하다.
sticky session의 문제점 :

L4 스위치의 가장 큰 목적(?)인 로드밸런싱이 제대로 동작하지 않을 수 있다.
개별 사용자가 사용할 경우에는 세션 timeout이 있으므로 어느 정도 로드밸런싱을 충족시킨다.
하지만 프록시서버를 사용하는 경우 문제가 된다.
예를 들어 회사에서 외부로 나가는 경우 각 PC의 IP가 아니라 프록시서버의 IP를 달고 나간다.
여러 사람이 timeout 시간 내에 접속하는 경우, 계속해서 한 서버에만 로드가 집중된다.
(외부에서 보기에는 동일한 사람으로 보이므로)


대안 :

SSL이나 기타 다른 보안모듈을 이용해서 인증된 특정 사용자에 대해서 Cookie/DB에 기록 후
해당 사용자에 대해서만 세션을 유지하도록 한다. (단점 : performance 저하 및 기타 cost)
그래서 L7 스위치를 사용한다.

< L7 스위칭 방식 >

URL 스위칭 :

URL 주소에서 특정 String을 검사하고, 검색된 문자열을 기준으로 부하를 분산시키는 방식이다.
http://www.test.com/test.html 이라는 주소로 사용자들이 웹페이지를 요청한다.
해당 페이지는 이미지가 빈번히 변경되고, 이미지 크기도 크다. (전체적으로 로딩이 느리다)
이런 경우, client의 http request 내용에 html이 들어가면, 메인 웹서버로 전송하고..
해당 request에 jpg 등의 이미지를 요청하는 경우 이미지 웹서버로 분산할 수 있다.

Cookie 스위칭 :
Http header의 cookie 값에 따른 특정 String을 기준으로 부하를 분산하는 방식이다.
Cookie 값 필드를 보고 설정된 분류 기준에 따라 어느 서버로 보낼지 결정한다.


Content 스위칭 :
legacy한 L7 스위칭은 URL/Cookie 스위칭을 사용했으나,
최근 L7 스위칭은 Content 스위칭 방식을 이용한다.
기존에는 제한적인 기능, 즉 호스트네임, URL, Cookie 를 기준으로 로드밸런싱을 하였으나,
L7 content 스위칭은 추가적인 기능을 지원한다.
Http header 의 모든 필드를 기반으로 한다.
XML content를 기반으로 한다.
XML tags 나 multiple Http header를 기준으로 복잡한 로드밸런싱을 구현한다.
Cookie 와 http header의 insertion과 deletion을 포함한 contents-rewrite 기능을 지원한다.
alternate한 url이나 도메인의 redirecting request를 지원한다.



'공부 > 기타' 카테고리의 다른 글

토드 단축키  (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

 

[ 웹 서버와 WAS(Web Application Server)의 정의 ]

웹서버와 WAS는 비슷한 개념이기 때문에 같이 또는 다르게 사용되는 단어 가운데 하나이다. 인터넷 확산 초기에는 웹서버라는 개념으로 통칭해서 사용했지만, 시간이 지남에 따라 WAS를 더 많이 사용하고 있다. 인터넷 사용자가 증가함에 따라, 각 웹 사이트는 보다 많은 사용자에게 원활한 서비스를 제공하기 위해 기능적인 layer를 나누게 되었고 여기서 웹서버와 WAS의 구분점이 생기게 된 것이다.

기능적으로만 본다면, 거의 대부분의 웹 서버가 웹 애플리케이션을 동작시킬 수 있겠지만 모두 웹 서버 혹은 WAS라고 부르는 것보다는 어떤 기능을 수행하는지에 따라, 즉 기능상의 분류를 통해 구분지어 사용해야 할 것이다.

구분

웹서버

WAS

설명

1. 웹브라우저(Web Client)에게 컨텐츠를 제공하는 서버이다. 즉 정적인 HTML이나 jpeg, gif같은 이미지를 HTTP 프로토콜을 통해 웹 브라우저에 제공한다.


2.
최근에는 웹서버에서도 내부 애플리케이션을 동작시킬 수 있는 컨테이너를 내장하고 있다.

서버단에서 애플리케이션을 동작할 수 있도록 지원한다. 일반적으로 컨테이너라는 용어로 쓰인다. 초창기에는 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)의 경우에는 표준판의 자바 가상 머신을 기반으로 확장된 라이브러리 집합을 정의한 것이기 때문에 자바 가상 머신의 종류로 분류하기 애매하다. 마이크로시스템즈에서 제공하는 자바 가상 머신 말고도 각 운영체제 개발사가 제공하는 자바 가상 머신이 있으며, GNUGCJ아파치 소프트웨어 재단(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이다.

'공부 > 용어' 카테고리의 다른 글

트랜젝션이란  (0) 2011.12.13


웹페이지가 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>
<url>http://finerss.tistory.com</url>
</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에서 특수한 의미로 사용되는 문자다.하지만 문자그대로를 테이터로 표현해야 할경우가있는데
그럴경우 밑에표와같이 엔티티 레퍼런스로 표현을 해줘야한다.
  
                 개체
                표현 문자
                  &lt;;                      <
                  &gt;                      >
                  &amp;                      &
                  &apos;                      '  
                  &quot;                      "



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



- 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

플렉스란?

공부/Flex2011. 8. 25. 10:35

플렉스는 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

Flex공부시작

공부/Flex2011. 8. 24. 17:44


한장한장 공부할때 마다 그흔적들을 남기면서

정리하여, 후에 간편하게 보면서 참고할수있도록 해야겠다

책은 okgosu의 플렉스4.5& 플래시빌더 정석

'공부 > Flex' 카테고리의 다른 글

XML과 MXML의 이해  (0) 2011.08.25
플렉스 UI 컴포넌트 정리  (0) 2011.08.25
플렉스란?  (0) 2011.08.25


게시판이나 리스트를 보여 줄때 텍스트가 너무 길어지면 보기 흉한 경우가 있다.

이때는 대부분 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

원하는 색깔을 드래그해서 복사하십시오.
#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



#FFB6C1 #FFBBC6 #FFC0CB #FFC5D0 #FFCAD5 #FFCFDA #FFD4DF #FFD9E4 #FFDEE9 #FFE3EE
#FFAAAF #FFB4B9 #FFBEC3 #FFC8CD #FFD2D7 #FFDCE1 #FFE1E6 #FFE6EB #FFEBF0 #FFF0F5
#FF9E9B #FFA8A5 #FFB2AF #FFBCB9 #FFC6C3 #FFD0CD #FFD5D2 #FFDAD7 #FFDFDC #FFE4E1
#FF7A85 #FF848F #FF8E99 #FF98A3 #FFA2AD #FFACB7 #FFB1BC #FFB6C1 #FFBBC6 #FFC0CB
#FF5675 #FF607F #FF6A89 #FF7493 #FF7E9D #FF88A7 #FF92B1 #FF9CBB #FFA6C5 #FFB0CF
#FF82FF #FF8CFF #FF96FF #FFA0FF #FFAAFF #FFB4FF #FFBEFF #FFC8FF #FFD2FF #FFDCFF
#FF7DB4 #FF87BE #FF91C8 #FF9BD2 #FFA5DC #FFAFE6 #FFB4EB #FFB9F0 #FFBEF5 #FFC3FA
#FF69B4 #FF73BE #FF7DC8 #FF87D2 #FF91DC #FF9BE6 #FFA5F0 #FFAAF5 #FFAFFA #FFB4FF
#FF1493 #FF1E9D #FF28A7 #FF32B1 #FF3CBB #FF46C5 #FF50CF #FF5AD9 #FF64E3 #FF6EED
#DB7093 #DB7A9D #DB84A7 #E08EB1 #E598BB #EAA2C5 #EAB1D4 #EFACCF #F4BBDE #F4B6D9
#D7567F #DC6089 #E16A93 #E6749D #EB7EA7 #F088B1 #F592BB #FA9CC5 #FFA6CF #FFB0D9
#C71585 #C71F8F #C73399 #C73DA3 #CC47AD #D151B7 #D65BC1 #E065CB #EA6FD5 #F479DF
#CD1039 #CD1F48 #CD2E57 #CD3861 #CD426B #D24C75 #D7567F #DC6089 #E16A93 #E6749D
#B9062F #B91A4D #BE2457 #C32E61 #C8386B #CD4275 #D24C7F #D75689 #DC6093 #E16A9D

#FAEB78 #FAF082 #FAF58C #FAFA96 #FAFAA0 #FAFAAA #FAFAB4 #FAFABE #FAFAD2 #FAFAD2
#FFDC3C #FFE146 #FFE650 #FFEB5A #FFF064 #FFF56E #FFFA78 #FFFA82 #FFFF8C #FFFF96
#FFC81E #FFD228 #FFD732 #FFDC3C #FFE146 #FFE650 #FFEB5A #FFF064 #FFF56E #FFF978
#FFB400 #FFBE0A #FFC314 #FFC81E #FFCD28 #FFD232 #FFD73C #FFDC46 #FFE150 #FFE65A
#FDCD8C #FDD296 #FDD7A0 #FDDCAA #FDE1B4 #FDE6BE #FDEBC8 #FDF5D2 #FDF5DC #FDF5E6
#FAC87D #FACD87 #FAD291 #FAD79B #FADCA5 #FAE1AF #FAE6B9 #FAEBC3 #FAEBCD #FAEBD7
#FFA500 #FFAF0A #FFB914 #FFC31E #FFCD28 #FFD732 #FFDC37 #FFE13C #FFE641 #FFEB46
#FF9100 #FF9B00 #FFA500 #FFAF00 #FFB900 #FFC300 #FFC800 #FFCD00 #FFD200 #FFD700
#FF8200 #FF8C0A #FF9614 #FFA01E #FFAA28 #FFB432 #FFB937 #FFBE3C #FFC341 #FFC846
#FFA98F #FFB399 #FFBDA3 #FFC7AD #FFD1B7 #FFDBC1 #FFE0C6 #FFE5CB #FFEAD0 #FFEFD5
#FFA374 #FFAD7E #FFB788 #FFC192 #FFCB9C #FFD0A1 #FFD5A6 #FFDAAB #FFDFB0 #FFE4B5
#FF9473 #FF9E7D #FFA887 #FFB291 #FFBC9B #FFC6A5 #FFD0AF #FFD0AF #FFD5B4 #FFDAB9
#FF7F50 #FF895A #FF9364 #FF9D6E #FFA778 #FFB182 #FFBB8C #FFC091 #FFC596 #FFCA9B
#CD853F #CD8F49 #D29953 #D7A35D #DCAD67 #E1B771 #E6C17B #EBC680 #F0CB85 #F5D08A
#D2691E #D27328 #D27D32 #D7873C #DC9146 #E19B50 #E6A55A #EBAA5F #EBAF64 #F0B469
#AE5E1A #B86824 #C2722E #CC7C38 #D68642 #E0904C #E59551 #EA9A56 #EF9F5B #F4A460
#8B4513 #8B4F1D #8B5927 #8B6331 #906D3B #957745 #9F814F #A48654 #A98B59 #AE905E

#FF9696 #FFA0A0 #FFAAAA #FFB4B4 #FFBEBE #FFC8C8 #FFD2D2 #FFDCDC #FFE6E6 #FFF0F0
#F08080 #F08A8A #F09494 #F59E9E #FAA8A8 #FAB2B2 #FAB7B7 #FABCBC #FAC1C1 #FAC6C6
#F56E6E #F57878 #F58282 #F58C8C #F59696 #F5A0A0 #F5AAAA #FAB4B4 #FABEBE #FAC8C8
#F06464 #F06E6E #F07878 #F08282 #F08C8C #F09696 #F4A0A0 #F4AAAA #F4B4B4 #FEBEBE
#FF0000 #FF3232 #FF4646 #FF5050 #FF5A5A #FF6464 #FF6E6E #FF7878 #FF8282 #FF8C8C
#EB0000 #EB3232 #EB4646 #EB5050 #EB5A5A #EB6464 #F06E6E #F57878 #FA8282 #FA8C8C
#CD0000 #CD3C3C #CD4646 #CD5050 #D25A5A #D76464 #DC6E6E #E17878 #E68282 #EB8C8C
#CD5C5C #CD6666 #CD7070 #CD7A7A #D28484 #D78E8E #DC9898 #E6A2A2 #EBACAC #F0B6B6
#B90000 #B93232 #B93C3C #B94646 #B95050 #BE5A5A #C35F5F #C86464 #CD6969 #D26E6E
#B22222 #B24040 #B24A4A #B25454 #B75E5E #BC6868 #C17272 #CB7776 #CB7C7C #D08180
#A52A2A #AA3E3E #AF4848 #B45252 #BE5C5C #C36666 #CD7070 #CD7A7A #D28484 #D78E8E
#800000 #803232 #853C3C #8F4646 #945050 #9E5A5A #A36464 #AD6E6E #B77878 #C18282

#CD853F #CD8B45 #CD904A #D2954F #D29A54 #D79F59 #D7A45E #E1A963 #E1AE68 #E6B36D
#DB631F #E56D29 #E57733 #EA813D #EF8B47 #EF904C #F49551 #F49A56 #F49F5B #F4A460
#D2691E #D27328 #D77D32 #D7873C #DC9146 #E19B50 #E6A055 #EBA55A #F0AA5F #F5AF64
#A0522D #A05C37 #A06641 #A5704B #AA7A55 #B4845F #B98E69 #C39873 #CDA27D #D7AC87
#8B4513 #8B4F1D #8B5927 #8B6331 #906D3B #9A7745 #A4814F #AE8B59 #B89563 #C29F6D
#DA70D6 #DF75DB #E47AE0 #E97FE5 #EE84EA #F389EF #F88EF4 #FD93F9 #FF98FE #FF9DFF
#BA55D3 #BF5AD8 #C45FDD #C964E2 #CE69E7 #D36EEC #D873F1 #DD78F6 #E27DFB #E782FF
#9932CC #9E37D1 #A33CD6 #A841DB #AD46E0 #B24BE5 #B750EA #BC55EF #C15AF4 #C65FF9
#9400D3 #9905D8 #9E0ADD #A30FE2 #A814E7 #AD19EC #B21EF1 #B723F6 #BC28FB #C12DFF
#942894 #9E329E #A83CA8 #B246B2 #BC50BC #C65AC6 #D064D0 #DA6EDA #E478E4 #EE82EE
#8c008c #960a96 #a014a0 #aa1eaa #b428b4 #be32be #c83cc8 #d246d2 #dc50dc #e65ae6
#800080 #8a0a8a #941494 #9e1e9e #a828a8 #b232b2 #bc3cbc #c646c6 #d050d0 #da5ada
#834683 #8d508d #975a97 #a164a1 #ab6eab #b578b5 #bf82bf #c98cc9 #d396d3 #dda0dd
#828282 #8c8c8c #969696 #a0a0a0 #aaaaaa #b4b4b4 #bebebe #c8c8c8 #d2d2d2 #dcdcdc
#000000 #282828 #323232 #3c3c3c #464646 #505050 #5a5a5a #646464 #6e6e6e #787878

컬러 이름 16진수
red #FF0000
crimson #DC143C
firebrick #B22222
maroon #800000
darkred #8B0000
brown #A52A2A
sienna #A0522D
saddlebrown #8B4513
indianred #CD5C5C
rosybrown #BC8F8F
lightcoral #F08080
salmon #FA8072
darksalmon #E9967A
coral #FF7F50
tomato #FF6347
sandybrown #F4A460
lightsalmon #FFA07A
peru #CD853F
chocolate #D2691E
orangered #FF4500
orange #FFA500
darkorange #FF8C00
tan #D2B48C
peachpuff #FFDAB9
bisque #FFE4C4
moccasin #FFE4B5
navajowhite #FFDEAD
wheat #F5DEB3
burlywood #DEB887
darkgoldenrod #B8860B
goldenrod #DAA520
gold #FFD700
yellow #FFFF00
lightgoldenrodyellow #FAFAD2
palegoldenrod #EEE8AA
khaki #F0E68C
darkkhaki #BDB76B
lawngreen #7CFC00
greenyellow #ADFF2F
chartreuse #7FFF00
lime #00FF00
limegreen #32CD32
yellowgreen #9ACD32
olive #808000
olivedrab #6B8E23
darkolivegreen #556B2F
forestgreen #228B22
darkgreen #006400
green #008000
seagreen #2E8B57
mediumseagreen #3CB371
darkseagreen #8FBC8F
lightgreen #90EE90
palegreen #98FB98
springgreen #00FF7F
mediumspringgreen #00FA9A
teal #008080
darkcyan #008B8B
lightseagreen #20B2AA
mediumaquamarine #66CDAA
cadetblue #5F9EA0
steelblue #4682B4
aquamarine #7FFFD4
powderblue #B0E0E6
paleturquoise #AFEEEE
lightblue #ADD8E6
lightsteelblue #B0C4DE
skyblue #87CEEB
lightskyblue #87CEFA
mediumturquoise #48D1CC
turquoise #40E0D0
darkturquoise #00CED1
aqua #00FFFF
cyan #00FFFF
deepskyblue #00BFFF
dodgerblue #1E90FF
cornflowerblue #6495ED
royalblue #4169E1
blue #0000FF
mediumblue #0000CD
navy #000080
darkblue #00008B
midnightblue #191970
darkslateblue #483D8B
slateblue #6A5ACD
mediumslateblue #7B68EE
mediumpurple #9370DB
darkorchid #9932CC
darkviolet #9400D3
blueviolet #8A2BE2
mediumorchid #BA55D3
plum #DDA0DD
lavender #E6E6FA
thistle #D8BFD8
orchid #DA70D6
violet #EE82EE
indigo #4B0082
darkmagenta #8B008B
purple #800080
mediumvioletred #C71585
deeppink #FF1493
fuchsia #FF00FF
magenta #FF00FF
hotpink #FF69B4
palevioletred #DB7093
lightpink #FFB6C1
pink #FFC0CB
mistyrose #FFE4E1
blanchedalmond #FFEBCD
lightyellow #FFFFE0
cornsilk #FFF8DC
antiquewhite #FAEBD7
papayawhip #FFEFD5
lemonchiffon #FFFACD
beige #F5F5DC
linen #FAF0E6
oldlace #FDF5E6
lightcyan #E0FFFF
aliceblue #F0F8FF
whitesmoke #F5F5F5
lavenderblush #FFF0F5
floralwhite #FFFAF0
mintcream #F5FFFA
ghostwhite #F8F8FF
honeydew #F0FFF0
seashell #FFF5EE
ivory #FFFFF0
azure #F0FFFF
snow #FFFAFA
white #FFFFFF
gainsboro #DCDCDC
lightgrey #D3D3D3
silver #C0C0C0
darkgray #A9A9A9
lightslategray #778899
slategray #708090
gray #808080
dimgray #696969
darkslategray #2F4F4F
black #000000

#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

색상코드표
snow #FFFAFA
ghostwhite #F8F8FF
whitesmoke #F5F5F5
gainsboro #DCDCDC
floralwhite #FFFAF0
oldlace #FDF5E6
linen #FAF0E6
antiquewhite #FAEBD7
papayawhip #FFEFD5
blanchedalmond #FFEBCD
bisque #FFE4C4
peachpuff #FFDAB9
navajowhite #FFDEAD
moccasin #FFE4B5
cornsilk #FFF8DC
ivory #FFFFF0
lemonchiffon #FFFACD
seashell #FFF5EE
honeydew #F0FFF0
mintcream #F5FFFA
azure #F0FFFF
aliceblue #F0F8FF
lavender #E6E6FA
lavenderblush #FFF0F5
mistyrose #FFE4E1
white #FFFFFF
black #000000
darkslategrey #2F4F4F
dimgrey #696969
slategrey #708090
lightslategrey #778899
grey #BEBEBE
lightgrey #D3D3D3
midnightblue #191970
navyblue #000080
navy #000080
cornflowerblue #6495ED
darkslateblue #483D8B
slateblue #6A5ACD
mediumslateblue #7B68EE
lightslateblue #8470FF
mediumblue #0000CD
royalblue #4169E1
blue #0000FF
dodgerblue #1E90FF
deepskyblue #00BFFF
skyblue #87CEEB
lightskyblue #87CEFA
steelblue #4682B4
lightsteelblue #B0C4DE
lightblue #ADD8E6
powderblue #B0E0E6
paleturquoise #AFEEEE
darkturquoise #00CED1
mediumturquoise #48D1CC
turquoise #40E0D0
cyan #00FFFF
lightcyan #E0FFFF
cadetblue #5F9EA0
mediumaquamarine #66CDAA
aquamarine #7FFFD4
darkgreen #006400
darkolivegreen #556B2F
darkseagreen #8FBC8F
seagreen #2E8B57
mediumseagreen #3CB371
lightseagreen #20B2AA
palegreen #98FB98
springgreen #00FF7F
lawngreen #7CFC00
green #00FF00
chartreuse #7FFF00
mediumspringgreen #00FA9A
greenyellow #ADFF2F
limegreen #32CD32
yellowgreen #9ACD32
forestgreen #228B22
olivedrab #6B8E23
darkkhaki #BDB76B
khaki #F0E68C
palegoldenrod #EEE8AA
lightgoldenrodyellow #FAFAD2
lightyellow #FFFFE0
yellow #FFFF00
gold #FFD700
lightgoldenrod #EEDD82
goldenrod #DAA520
darkgoldenrod #B8860B
rosybrown #BC8F8F
indianred #CD5C5C
saddlebrown #8B4513
sienna #A0522D
peru #CD853F
burlywood #DEB887
beige #F5F5DC
wheat #F5DEB3
sandybrown #F4A460
tan #D2B48C
chocolate #D2691E
firebrick #B22222
brown #A52A2A
darksalmon #E9967A
salmon #FA8072
lightsalmon #FFA07A
orange #FFA500
darkorange #FF8C00
coral #FF7F50
lightcoral #F08080
tomato #FF6347
orangered #FF4500
red #FF0000
hotpink #FF69B4
deeppink #FF1493
pink #FFC0CB
lightpink #FFB6C1
palevioletred #DB7093
maroon #B03060
mediumvioletred #C71585
violetred #D02090
magenta #FF00FF
violet #EE82EE
plum #DDA0DD
orchid #DA70D6
mediumorchid #BA55D3
darkorchid #9932CC
darkviolet #9400D3
blueviolet #8A2BE2
purple #A020F0
mediumpurple #9370DB
thistle #D8BFD8
snow1 #FFFAFA
snow2 #EEE9E9
snow3 #CDC9C9
snow4 #8B8989
seashell1 #FFF5EE
seashell2 #EEE5DE
seashell3 #CDC5BF
seashell4 #8B8682
AntiqueWhite1 #FFEFDB
AntiqueWhite2 #EEDFCC
AntiqueWhite3 #CDC0B0
AntiqueWhite4 #8B8378
bisque1 #FFE4C4
bisque2 #EED5B7
bisque3 #CDB79E
bisque4 #8B7D6B
PeachPuff1 #FFDAB9
PeachPuff2 #EECBAD
PeachPuff3 #CDAF95
PeachPuff4 #8B7765
NavajoWhite1 #FFDEAD
NavajoWhite2 #EECFA1
NavajoWhite3 #CDB38B
NavajoWhite4 #8B795E
LemonChiffon1 #FFFACD
LemonChiffon2 #EEE9BF
LemonChiffon3 #CDC9A5
LemonChiffon4 #8B8970
cornsilk1 #FFF8DC
cornsilk2 #EEE8CD
cornsilk3 #CDC8B1
cornsilk4 #8B8878
ivory1 #FFFFF0
ivory2 #EEEEE0
ivory3 #CDCDC1
ivory4 #8B8B83
honeydew1 #F0FFF0
honeydew2 #E0EEE0
honeydew3 #C1CDC1
honeydew4 #838B83
LavenderBlush1 #FFF0F5
LavenderBlush2 #EEE0E5
LavenderBlush3 #CDC1C5
LavenderBlush4 #8B8386
MistyRose1 #FFE4E1
MistyRose2 #EED5D2
MistyRose3 #CDB7B5
MistyRose4 #8B7D7B
azure1 #F0FFFF
azure2 #E0EEEE
azure3 #C1CDCD
azure4 #838B8B
SlateBlue1 #836FFF
SlateBlue2 #7A67EE
SlateBlue3 #6959CD
SlateBlue4 #473C8B
RoyalBlue1 #4876FF
RoyalBlue2 #436EEE
RoyalBlue3 #3A5FCD
RoyalBlue4 #27408B
blue1 #0000FF
blue2 #0000EE
blue3 #0000CD
blue4 #00008B
DodgerBlue1 #1E90FF
DodgerBlue2 #1C86EE
DodgerBlue3 #1874CD
DodgerBlue4 #104E8B
SteelBlue1 #63B8FF
SteelBlue2 #5CACEE
SteelBlue3 #4F94CD
SteelBlue4 #36648B
DeepSkyBlue1 #00BFFF
DeepSkyBlue2 #00B2EE
DeepSkyBlue3 #009ACD
DeepSkyBlue4 #00688B
SkyBlue1 #87CEFF
SkyBlue2 #7EC0EE
SkyBlue3 #6CA6CD
SkyBlue4 #4A708B
LightSkyBlue1 #B0E2FF
LightSkyBlue2 #A4D3EE
LightSkyBlue3 #8DB6CD
LightSkyBlue4 #607B8B
SlateGray1 #C6E2FF
SlateGray2 #B9D3EE
SlateGray3 #9FB6CD
SlateGray4 #6C7B8B
LightSteelBlue1 #CAE1FF
LightSteelBlue2 #BCD2EE
LightSteelBlue3 #A2B5CD
LightSteelBlue4 #6E7B8B
LightBlue1 #BFEFFF
LightBlue2 #B2DFEE
LightBlue3 #9AC0CD
LightBlue4 #68838B
LightCyan1 #E0FFFF
LightCyan2 #D1EEEE
LightCyan3 #B4CDCD
LightCyan4 #7A8B8B
PaleTurquoise1 #BBFFFF
PaleTurquoise2 #AEEEEE
PaleTurquoise3 #96CDCD
PaleTurquoise4 #668B8B
CadetBlue1 #98F5FF
CadetBlue2 #8EE5EE
CadetBlue3 #7AC5CD
CadetBlue4 #53868B
turquoise1 #00F5FF
turquoise2 #00E5EE
turquoise3 #00C5CD
turquoise4 #00868B
cyan1 #00FFFF
cyan2 #00EEEE
cyan3 #00CDCD
cyan4 #008B8B
DarkSlateGray1 #97FFFF
DarkSlateGray2 #8DEEEE
DarkSlateGray3 #79CDCD
DarkSlateGray4 #528B8B
aquamarine1 #7FFFD4
aquamarine2 #76EEC6
aquamarine3 #66CDAA
aquamarine4 #458B74
DarkSeaGreen1 #C1FFC1
DarkSeaGreen2 #B4EEB4
DarkSeaGreen3 #9BCD9B
DarkSeaGreen4 #698B69
SeaGreen1 #54FF9F
SeaGreen2 #4EEE94
SeaGreen3 #43CD80
SeaGreen4 #2E8B57
PaleGreen1 #9AFF9A
PaleGreen2 #90EE90
PaleGreen3 #7CCD7C
PaleGreen4 #548B54
SpringGreen1 #00FF7F
SpringGreen2 #00EE76
SpringGreen3 #00CD66
SpringGreen4 #008B45
green1 #00FF00
green2 #00EE00
green3 #00CD00
green4 #008B00
chartreuse1 #7FFF00
chartreuse2 #76EE00
chartreuse3 #66CD00
chartreuse4 #458B00
OliveDrab1 #C0FF3E
OliveDrab2 #B3EE3A
OliveDrab3 #9ACD32
OliveDrab4 #698B22
DarkOliveGreen1 #CAFF70
DarkOliveGreen2 #BCEE68
DarkOliveGreen3 #A2CD5A
DarkOliveGreen4 #6E8B3D
khaki1 #FFF68F
khaki2 #EEE685
khaki3 #CDC673
khaki4 #8B864E
LightGoldenrod1 #FFEC8B
LightGoldenrod2 #EEDC82
LightGoldenrod3 #CDBE70
LightGoldenrod4 #8B814C
LightYellow1 #FFFFE0
LightYellow2 #EEEED1
LightYellow3 #CDCDB4
LightYellow4 #8B8B7A
yellow1 #FFFF00
yellow2 #EEEE00
yellow3 #CDCD00
yellow4 #8B8B00
gold1 #FFD700
gold2 #EEC900
gold3 #CDAD00
gold4 #8B7500
goldenrod1 #FFC125
goldenrod2 #EEB422
goldenrod3 #CD9B1D
goldenrod4 #8B6914
DarkGoldenrod1 #FFB90F
DarkGoldenrod2 #EEAD0E
DarkGoldenrod3 #CD950C
DarkGoldenrod4 #8B6508
RosyBrown1 #FFC1C1
RosyBrown2 #EEB4B4
RosyBrown3 #CD9B9B
RosyBrown4 #8B6969
IndianRed1 #FF6A6A
IndianRed2 #EE6363
IndianRed3 #CD5555
IndianRed4 #8B3A3A
sienna1 #FF8247
sienna2 #EE7942
sienna3 #CD6839
sienna4 #8B4726
burlywood1 #FFD39B
burlywood2 #EEC591
burlywood3 #CDAA7D
burlywood4 #8B7355
wheat1 #FFE7BA
wheat2 #EED8AE
wheat3 #CDBA96
wheat4 #8B7E66
tan1 #FFA54F
tan2 #EE9A49
tan3 #CD853F
tan4 #8B5A2B
chocolate1 #FF7F24
chocolate2 #EE7621
chocolate3 #CD661D
chocolate4 #8B4513
firebrick1 #FF3030
firebrick2 #EE2C2C
firebrick3 #CD2626
firebrick4 #8B1A1A
brown1 #FF4040
brown2 #EE3B3B
brown3 #CD3333
brown4 #8B2323
salmon1 #FF8C69
salmon2 #EE8262
salmon3 #CD7054
salmon4 #8B4C39
LightSalmon1 #FFA07A
LightSalmon2 #EE9572
LightSalmon3 #CD8162
LightSalmon4 #8B5742
orange1 #FFA500
orange2 #EE9A00
orange3 #CD8500
orange4 #8B5A00
DarkOrange1 #FF7F00
DarkOrange2 #EE7600
DarkOrange3 #CD6600
DarkOrange4 #8B4500
coral1 #FF7256
coral2 #EE6A50
coral3 #CD5B45
coral4 #8B3E2F
tomato1 #FF6347
tomato2 #EE5C42
tomato3 #CD4F39
tomato4 #8B3626
OrangeRed1 #FF4500
OrangeRed2 #EE4000
OrangeRed3 #CD3700
OrangeRed4 #8B2500
red1 #FF0000
red2 #EE0000
red3 #CD0000
red4 #8B0000
DeepPink1 #FF1493
DeepPink2 #EE1289
DeepPink3 #CD1076
DeepPink4 #8B0A50
HotPink1 #FF6EB4
HotPink2 #EE6AA7
HotPink3 #CD6090
HotPink4 #8B3A62
pink1 #FFB5C5
pink2 #EEA9B8
pink3 #CD919E
pink4 #8B636C
LightPink1 #FFAEB9
LightPink2 #EEA2AD
LightPink3 #CD8C95
LightPink4 #8B5F65
PaleVioletRed1 #FF82AB
PaleVioletRed2 #EE799F
PaleVioletRed3 #CD6889
PaleVioletRed4 #8B475D
maroon1 #FF34B3
maroon2 #EE30A7
maroon3 #CD2990
maroon4 #8B1C62
VioletRed1 #FF3E96
VioletRed2 #EE3A8C
VioletRed3 #CD3278
VioletRed4 #8B2252
magenta1 #FF00FF
magenta2 #EE00EE
magenta3 #CD00CD
magenta4 #8B008B
orchid1 #FF83FA
orchid2 #EE7AE9
orchid3 #CD69C9
orchid4 #8B4789
plum1 #FFBBFF
plum2 #EEAEEE
plum3 #CD96CD
plum4 #8B668B
MediumOrchid1 #E066FF
MediumOrchid2 #D15FEE
MediumOrchid3 #B452CD
MediumOrchid4 #7A378B
DarkOrchid1 #BF3EFF
DarkOrchid2 #B23AEE
DarkOrchid3 #9A32CD
DarkOrchid4 #68228B
purple1 #9B30FF
purple2 #912CEE
purple3 #7D26CD
purple4 #551A8B
MediumPurple1 #AB82FF
MediumPurple2 #9F79EE
MediumPurple3 #8968CD
MediumPurple4 #5D478B
thistle1 #FFE1FF
thistle2 #EED2EE
thistle3 #CDB5CD
thistle4 #8B7B8B
grey0 #000000
grey1 #030303
grey2 #050505
grey3 #080808
grey4 #0A0A0A
grey5 #0D0D0D
grey6 #0F0F0F
grey7 #121212
grey8 #141414
grey9 #171717
grey10 #1A1A1A
grey11 #1C1C1C
grey12 #1F1F1F
grey13 #212121
grey14 #242424
grey15 #262626
grey16 #292929
grey17 #2B2B2B
grey18 #2E2E2E
grey19 #303030
grey20 #333333
grey21 #363636
grey22 #383838
grey23 #3B3B3B
grey24 #3D3D3D
grey25 #404040
grey26 #424242
grey27 #454545
grey28 #474747
grey29 #4A4A4A
grey30 #4D4D4D
grey31 #4F4F4F
grey32 #525252
grey33 #545454
grey34 #575757
grey35 #595959
grey36 #5C5C5C
grey37 #5E5E5E
grey38 #616161
grey39 #636363
grey40 #666666
grey41 #696969
grey42 #6B6B6B
grey43 #6E6E6E
grey44 #707070
grey45 #737373
grey46 #757575
grey47 #787878
grey48 #7A7A7A
grey49 #7D7D7D
grey50 #7F7F7F
grey51 #828282
grey52 #858585
grey53 #878787
grey54 #8A8A8A
grey55 #8C8C8C
grey56 #8F8F8F
grey57 #919191
grey58 #949494
grey59 #969696
grey60 #999999
grey61 #9C9C9C
grey62 #9E9E9E
grey63 #A1A1A1
grey64 #A3A3A3
grey65 #A6A6A6
grey66 #A8A8A8
grey67 #ABABAB
grey68 #ADADAD
grey69 #B0B0B0
grey70 #B3B3B3
grey71 #B5B5B5
grey72 #B8B8B8
grey73 #BABABA
grey74 #BDBDBD
grey75 #BFBFBF
grey76 #C2C2C2
grey77 #C4C4C4
grey78 #C7C7C7
grey79 #C9C9C9
grey80 #CCCCCC
grey81 #CFCFCF
grey82 #D1D1D1
grey83 #D4D4D4
grey84 #D6D6D6
grey85 #D9D9D9
grey86 #DBDBDB
grey87 #DEDEDE
grey88 #E0E0E0
grey89 #E3E3E3
grey90 #E5E5E5
grey91 #E8E8E8
grey92 #EBEBEB
grey93 #EDEDED
grey94 #F0F0F0
grey95 #F2F2F2
grey96 #F5F5F5
grey97 #F7F7F7
grey98 #FAFAFA
grey99 #FCFCFC
grey100 #FFFFFF