항해 플러스 코육대 참여 회고

Study-programing|2023. 10. 3. 22:27

목차

  • 기능 구현 및 설명
  • 참여 소감
  • 링크 페이지

기능 구현 및 설명

이번 코육대를 참여하며, 기존에 한번도 해보지 않은 분야인 FE 로 도전해보기로 하였으며, 특히 React 학습에 중점을 두었다.
결코(ㅋㅋㅋ) 좋은 코드라 할 수 없는 부분도 많지만, 경력과 무관하게, 일주일만의 React 도전기 라는걸 감안하며 봐주면 감사드리겠다.

가장 중요시한 부분

개인적으로 FE 개발 결과물을 평가해야 할 때 가장 중요시 하는 부분은, 웹은 이용자가 어떤 사이즈로 볼지 알 수 없다는 부분이었다.
그러다보니, 반응형 웹 개발에 가장 많은 시간을 쏟게 되었다.

반응형 구현

아래는 일부 예시이다.

#HiddenWord{
    position: relative;
    width: 100%;
    text-align: center;
    font-size: 4vh;
    font-weight: bold;
    margin-top: 0.5em;
    margin-bottom: 0.5em;
}

예시와 같이, font-size 등도 모두 vh 또는 vw 를 사용하여 화면 크기에 따라 다른 크기로 변화하도록 설계하였다.
다양한 사이즈에서 동적으로 허용되는걸 확인하였다.

State 구현

  const [selectedWord, setSelectedWord] = useState("");
  const [hiddenWord, setHiddenWord] = useState([]);
  const [disabledAlphabets, setDisabledAlphabets] = useState([]);
  const [errorCount, setErrorCount] = useState(0);
  //gameStatus 0:start, 1:win, 2:lose
  const [gameStatus, setGameStatus] = useState(0);

위 예시에서와 같이, 각종 값들은 React의 State 를 사용하여 관리하였다. State 라는 개념이 처음엔 다소 어색했는데, 사용하다보니 익숙해지기는 개뿔 여전히 객체지향이 그립다.

Hanging Man

생각보다 공을 들인 부분이 HangingMan 의 구현이다.
이거 하드코딩아닌 하드코딩아닌 하드코딩으로 해놨다.

const renderHangingMan = () => {
    return (
      <svg height="100%" width="100%" viewBox="0 0 250 200">
        {/* Base */}
      <path d="M 50 200 Q 75 190 150 200" style={{stroke:"#000", strokeWidth:4, fill:"none"}} />
      {/* Vertical Pole */}
      {errorCount > 0 && <path d="M 100 200 Q 105 125 100 50" style={{stroke:"#000", strokeWidth:3, fill:"none"}} />}
      {/* Horizontal Pole */}
      {errorCount > 0 && <path d="M 100 50 Q 125 45 150 50" style={{stroke:"#000", strokeWidth:3, fill:"none"}} />}
      {/* Rope */}
      {errorCount > 1 && <path d="M 140 50 Q 142 60 140 70" style={{stroke:"#000", strokeWidth:3, fill:"none"}} />}
      {/* Head */}
      {errorCount > 2 && <circle cx="140" cy="80" r="10" style={{stroke:"#000", strokeWidth:2, fill:"#fff"}} />}
      {/* Arms */}
      {errorCount > 3 && <path d="M 140 90 Q 145 100 160 110" style={{stroke:"#000", strokeWidth:2, fill:"none"}} />}
      {errorCount > 3 && <path d="M 140 90 Q 135 100 120 110" style={{stroke:"#000", strokeWidth:2, fill:"none"}} />}
      {/* Hands */}
      {errorCount > 4 && <circle cx="162" cy="112" r="2" style={{stroke:"#000", strokeWidth:3, fill:"#fff"}} />}
      {errorCount > 4 && <circle cx="118" cy="112" r="2" style={{stroke:"#000", strokeWidth:3, fill:"#fff"}} />}   
      {/* Body */}
      {errorCount > 5 && <path d="M 140 90 Q 140 100 140 120" style={{stroke:"#000", strokeWidth:2, fill:"none"}} />}
      {/* Legs */}
      {errorCount > 6 && <path d="M 140 120 Q 145 130 160 140" style={{stroke:"#000", strokeWidth:2, fill:"none"}} />}
      {errorCount > 6 && <path d="M 140 120 Q 135 130 120 140" style={{stroke:"#000", strokeWidth:2, fill:"none"}} />}
      {/* Feet */}
      {errorCount > 7 && <ellipse cx="162" cy="142" rx="4" ry="2" style={{stroke:"#000", strokeWidth:3, fill:"#fff"}} />}
      {errorCount > 7 && <ellipse cx="118" cy="142" rx="4" ry="2" style={{stroke:"#000", strokeWidth:3, fill:"#fff"}} />}

        {/* Eyes */}
        {errorCount > 2 && errorCount <= 7 && (
          <>
            <circle cx="137" cy="78" r="1" style={{fill:"#000"}} />
            <circle cx="143" cy="78" r="1" style={{fill:"#000"}} />
          </>
        )}
        {/* Angry Eyebrows when 5 errors */}
        {errorCount > 4 && errorCount <= 7 && (
          <>
            <line x1="136" y1="76" x2="138" y2="74" style={{stroke:"#000", strokeWidth:1}} />
            <line x1="144" y1="76" x2="142" y2="74" style={{stroke:"#000", strokeWidth:1}} />
          </>
        )}
        {/* Mouth */}
        {errorCount > 2 && errorCount <= 7 && (
          <line x1="137" y1="83" x2="143" y2="83" style={{stroke:"#000", strokeWidth:1}} />
        )}
        {errorCount > 7 && (
          <>
            {/* Eyes turned into X */}
            <line x1="135" y1="76" x2="139" y2="80" style={{stroke:"#000", strokeWidth:1}} />
            <line x1="135" y1="80" x2="139" y2="76" style={{stroke:"#000", strokeWidth:1}} />
            <line x1="141" y1="76" x2="145" y2="80" style={{stroke:"#000", strokeWidth:1}} />
            <line x1="141" y1="80" x2="145" y2="76" style={{stroke:"#000", strokeWidth:1}} />
          </>
        )}
      </svg>
    );
  };

이거 맞냐구요?
아뇨 오답 같은데요... 근데 돌잖아요?

SVG로 그려낸 행맨인데, 여기에 React 잖아? 조건문을 박아버렸다.
CSS로 행맨을 State 에 따라 구워낸다. 이거 맞아? 아뇨 뚱인데요.

Game Status

처음엔 게임 상태를 찾아내는걸 매번 조건문으로 했었다. 그러다가 발견한 useEffect 님이 나를 구원하셨으니...

  //Check game status
  useEffect(() => {
    if (errorCount >= 8) {
      setGameStatus(2);
    } else if (!hiddenWord.includes("_")) {
      setGameStatus(1);
    } else {
      setGameStatus(0);
    }
  }, [errorCount, hiddenWord]);

이제 errorCount 와 hiddenWord 에 따라 알아서! GameStatus 가 변경된다.
이게 기적이지...

기타 제약조건들

행맨의 제약조건들은 아래와 같다.
출처 : 항해 플러스 : 제 1회 코육대

미션

  1. 가족들이 함께 볼 수 있도록 프론트도 구현해서 배포하세요.
  2. 문제를 선택할 수 있도록 영어 단어를 랜덤으로 3개 띄워주세요.
  3. 선택한 문제의 단어를 글자 단위로 숨깁니다. (e.g., "apple" -> "_ _ _ _ _")
  4. 화면에 26개 알파벳을 띄워주세요.
  5. 선택한 알파벳과 정답을 비교합니다.
  6. 일치하는 알파벳이 있을 경우 기존 UI에서 사라지고 해당 위치에 표시됩니다.
  7. 틀릴 경우 기존 위치에서 알파벳이 빨간색으로 바뀌고, 오류 횟수를 증가시킵니다.
  8. 오류 날 때마다 ‘교수대-밧줄-머리-팔-손-몸통-다리-발’ 순서로 그려서 그림이 완성되면 ‘실패’ 를 띄웁니다. (오류 횟수 8번 이상은 실패)

제약 사항

  • 랜덤으로 띄워주기 위해 영어 단어는 30개 이상 등록되어 있어야 합니다.
  • 등록된 영어 단어의 글자 수는 최대 10개입니다.
  • 사용자가 모든 글자를 맞추거나 오류 횟수가 8번 이상일 경우 게임이 종료됩니다.
  • 게임이 종료되면 정답을 표시하고 결과 메시지를 출력하세요.

이걸 맞춰나가는건 어렵지 않아서 딱히 할말이 없을 무 이시겠다.
하다가 막히면, 챗지피티 님이 도와주신다. 챗멘.

참여 소감

이렇게 누가 등 떠밀지 않으면, 새로운 기술스택은 쌓이질 않는다.
기회 만들어준 항해 플러스에게 감사를 드리며, 태어나서 처음 작성해본 FE 결과물 특히 React 는 진짜 머리털 나고 처음이니 이쁘게 봐주시길 바란다.

 

문제시 일단 머리털을 밀어보겠다.
그럼 머리털 나고 처음만큼은 실현(강제) 되지 않겠나?

 

조금 불평좀 하자면,

참여 링크 

항해 플러스 : 제 1회 코육대

댓글()

Bessel 타원의 변경 (localdata.go.kr 제공 데이터 오차 보정)

Study-Machine Learning/GIS|2021. 2. 20. 01:24

근 회사에서 주로 다루는 데이터는 GIS(Geographic Information System) 데이터 이다.

 

국내 위치 데이터를 다루는 분들 이라면 다 아실, localdata.go.kr 에서 데이터를 내려받아 사용 중 인데...

 

x, y 좌표가 어떤 좌표계 인지 정보가 없다.

좌표계?

지구는 완벽한 원이 아닌 타원형 이다.
사실, 타원조차 아닌 감자 처럼 찌그러진 모양이다. 

따라서, 지구를 타원형인 타원체(Ellipsoid)로 정의하여 해당 타원에서의 위치를 표현하게 된다.
이 때, 어떤 타원체를 사용할지/어떤 기준점을 사용할지를 정의하게 되는데

이를 좌표계 라고 부른다.

우리가 많이 사용하는 위경도 도 좌표계의 일종으로 WGS84 라고 부른다.

따라서, 열심히 서치를 하다 보면, 이런 글을 발견하게 되는데,

중부원점TM...??

여기서 EPSG 란, 다양한 좌표계의 코드로 이해하면 된다! (ex. 위경도계, WGS84 는 epsg:4326 이다!)

중부원점TM은 Bessel 타원을 사용하는 좌표계이다.

그런데 말입니다

제공되는 데이터를 epsg:2097 기준으로 위경도계(epsg:4326) 으로 변경하면, 몇백미터 다른 위치에 있는 위치로 표기가 되는걸 확인 가능하다.

 

대체 무슨일이 벌어지고 있는걸까?

 

앞에서, 지구를 특정한 타원체로 정의해서 위치를 표기한다고 했는데, 타원체 끼리는 당연히 오차가 발생할 수 있다.

국제 표준 타원체는 Bessel 타원체(TM타원체)가 아닌 UTM타원체 이므로 차이가 발생하는 것 이다.

 

사실, 이는 미미한 차이이다. 그런데 왜 몇백미터나 되는 차이가 발생하게 될까?

 

좌표계는 정해진 원점으로부터 삼각측량을 통해 정해지게 되는데, 이 중 중부원점 이란, 경기도 연천에 있는 원점이다. 헌데, 과거 측량 당시 기술의 한계로 오차가 발생하였다고 한다.

https://linuxism.ustd.ip.or.kr/833

 

그럼, 오차를 보정하는 방법은 없을까?

 

사실 이미 보정하여, 새로운 epsg 코드를 부여한 상태이다.

 

EPSG:5174 가 그것이다.

 

중부원점 이외에도, 일본에 있는 동부원점, 제주에 있는 제주원점, 울릉도에 있는 울릉원점 등도 모두 보정된 좌표계가 존재한다.

 

 

*보정된 서부원점(Bessel) - KLIS에서 서부지역에 사용중

EPSG:5173

+proj=tmerc +lat_0=38 +lon_0=125.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs +towgs84=-115.80,474.99,674.11,1.16,-2.31,-1.63,6.43

 

*보정된 중부원점(Bessel): KLIS에서 중부지역에 사용중

EPSG:5174

+proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs +towgs84=-115.80,474.99,674.11,1.16,-2.31,-1.63,6.43

 

*보정된 제주원점(Bessel): KLIS에서 제주지역에 사용중

EPSG:5175

+proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=550000 +ellps=bessel +units=m +no_defs  +towgs84=-115.80,474.99,674.11,1.16,-2.31,-1.63,6.43

 

*보정된 동부원점(Bessel): KLIS에서 동부지역에 사용중

EPSG:5176

+proj=tmerc +lat_0=38 +lon_0=129.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs +towgs84=-115.80,474.99,674.11,1.16,-2.31,-1.63,6.43

 

*보정된 동해(울릉)원점(Bessel): KLIS에서 울릉지역에 사용중

EPSG:5177

+proj=tmerc +lat_0=38 +lon_0=131.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs  +towgs84=-115.80,474.99,674.11,1.16,-2.31,-1.63,6.43


출처: https://www.osgeo.kr/17 [OSGeo(Open Source GeoSpatial) 한국어 지부 - OSGeo Korean Chapter]

 

 

그럼 여기서 의문이 생긴다...

localdata.go.kr 에서는 왜... 보정 안된 좌표계로 안내해 줬을까...

 

그건 우리가 영원히 풀어야 할 숙제 일지도 모른다...

 

 

 

WGS84와 앞서 적은 Bassel 좌표계 만이 존재할까?

아니다.(왜?)
이번에 확인한 바와 같이, 기존 좌표계는 오차가 생기므로, 
국제적 표준 타원체인 GRS80(WGS84 타원체와 거의 같은 타원체)
를 사용하는 다른 표준을 많이 사용한다.

*서부원점(GRS80)-falseY:50000
EPSG:5180

+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +units=m +no_defs



*중부원점(GRS80)-falseY:50000: 다음지도에서 사용중인 좌표계

EPSG:5181

+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +units=m +no_defs



*제주원점(GRS80)-falseY:55000

EPSG:5182

+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=550000 +ellps=GRS80 +units=m +no_defs



*동부원점(GRS80)-falseY:50000

EPSG:5183

+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +units=m +no_defs



*동해(울릉)원점(GRS80)-falseY:50000

EPSG:5184

+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +units=m +no_defs


그럼 위 좌표계가 전부일까?

아니다.(왜?)

한반도 전체를 하나의 좌표계로 나타낼 때 많이 사용하는 좌표계입니다.

*UTM-K (Bessel): 새주소지도에서 사용 중

EPSG:5178

+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=bessel +units=m +no_defs +towgs84=-115.80,474.99,674.11,1.16,-2.31,-1.63,6.43


*UTM-K (GRS80): 네이버지도에서 사용중인 좌표계

EPSG:5179

+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs 


출처: https://www.osgeo.kr/17 [OSGeo(Open Source GeoSpatial) 한국어 지부 - OSGeo Korean Chapter]

 

그럼 왜 이렇게 많은 좌표계가 존재할까?

 

이는 두가지 이유 때문이다. 

 

먼저, GRS80 계열 좌표계와 Bassel 계열 좌표계 두가지가 존재한다. 

다음으로, 앞서 지구는 감자 모양인데, 좌표계를 만들기 위해, 임의의 타원체를 정의했다고 적었다. 

 

당연히 지역마다 고도 차로 인해, 같은 원점을 사용하면 오차가 크게 발생할 것 이다. 

따라서 지역마다 다른 원점을 사용하여 측량의 정확성을 키우자 함 이다. 

 

굳이 하나를 덧붙이자면,

새로운 (발전한) 좌표계를 국가 표준으로 삼더라도, 기존 좌표계를 활용하는 데이터를 모두 일괄 변환하는것이 어렵거나,
기존 데이터를 사용하던 시스템이 더이상 동작하지 않을 수 있기 때문에, 과거부터 제공해온 데이터들은 과거 좌표계를 사용하는 경우가 많은것이, 다양한 좌표계가 혼용되는 현상의 이유라 할 수 있겠다.

 

국내 제공되는 데이터를 사용한다면, 

좌표계를 항상 주의하여 확인해보길 바라며 이만 마치도록 하겠다. 

 

 

 

댓글()

도메인이 만료되었었다...

카테고리 없음|2020. 1. 19. 15:00

한동안 블로그를 잊고 있었는데

알고보니 도메인이 만료되어있었다....

 

그저 눈물...

 

각종 검색엔진에서도 이제 검색이 잘 안되지 않을까 하는 걱정이 되는군...

댓글()

EAL -Evaluation Assurance Level- 보증등급

Study-security/System security|2018. 12. 19. 18:08

서론

 이 블로그를 보면, 또 WhoAmI 페이지를 보면 알 수 있겠지만, 나의 테크 스택은 독특한 편이다.

컴퓨터 공부의 시작은 Security(정보보안)으로 시작하였으며, 학부때는 서버 시스템을 열심히 공부하였고, 지금은 모바일 환경에서 저전력을 보고 있었다. 그리고 최근 몇개월 사이엔 딥러닝을 공부하고 있었다.


 안타깝게도, 모바일 환경에서 저전력을 연구하던 내용은 빛을 보지 못하고 접게 되었다. 결과가(대부분 모바일 앱에서(특정 타겟 -게임, 웹브라우징 등-이 아닌) 5%정도의 전력 이득) 나오기는 했다. 하지만, 접게 되었으니까 논문은 없고... 내 머릿속에만 있으면서 누구한테 말도 못하는 그런 상황이다. 나같은 떠버리에겐 너무 가혹한 상황이다.


 사실 이게 중요한게 아니다. 기존 석사 과정 2년간 하던 모바일 저전력 연구를 접은 지금 새로운 연구 주제가 결국 돌고 돌아 Secure OS 가 되었다. 그래서 오랜만에 보안 내용을 보게 된것이다. 이 무슨 수미쌍관적인 운명인지. 어쩌면 내 테크 트리는 이 연구를 위함이 아녔을까? Security-System-Mobile 이 합쳐진 Secure OS를 보기 위한...?


 그럼, 이제 잡설은 줄이고, EAL에 대해 서술해 보도록 하겠다.


본론

 감히 예측해 보건데, 이 글을 읽으시는 여러분은 EAL에 대해 처음 들어본 상황에서 열심히 구글링하고 계시지 않은가? 물론, Google은 내 블로그를 별로 안좋아 하니, 네이버 에서 보셨을 수도 있겠다. (구글신님 저를 굽어 살피소서)


[네이버에서는 2번에 있지만, 구글에서는 첫 페이지에 보이지 않는다]


 각설하고, EAL을 나도 얼마전 까지 처음 들어봤었다. 앞서 서론에서 적은바와 같이, 최근에 연구 주제를 바꾸게 되어서 보기 시작한 내용이기도 하다. 그럼 EAL (Evaluation Assurance Level) 은 무엇일까?


EAL?


 EAL은 CC(Common Criteria, 캠퍼스 커플이 아니다.) 에서 만든 소프트웨어의 평가 보증 을 위한 등급이다. 1999년 발효되었으며, 총 1에서 7까지 7단계로 나누어져 있다. 이는 같은 기관에서 만든 여러 규칙에 따라 작성된 문서를 통해 검증되며, 이 규정을 위한 설명과 문서들을 정의해 놓았다. 

 

 각 문서는 총 6가지의 클래스로 나누어 정리 가능하며 아래와 같다.

  • Development : 개발

  • Guidance docrument : 설명서

  • Life-cycle support : 생명주기 지원

  • Security Target evaluation : 보안목표 명세서 평가

  • Tests : 시험

  • Vulunerability assessment : 취약성 평가

-Common Criteria for Information Technology Security Evaluation 및 KISA의 한글 번역본 참조-


 각 클래스는 다시 여러개의 패밀리로 분류되며, 각 EAL레벨 별로 클래스 마다 지켜야 하는 패밀리의 종류와 레벨이 다르게 지정되어 있다. 


 EAL 레벨 별 차이는 여러가지가 있지만 레벨 별 대표적인 특징만 정리한다면 아래와 같다.


[나름 EAL 버전 별 특성을 정리해 보았다]


아래 정리는, Common Criteria for Information Technology Security Evaluation 과 KISA의 한글 번역본을 참조하여 작성하였으며, KISA의 정보보호제품 평가제출물 작성 가이드 도 일부 참고 하였으나, 자의적으로 정리하였으므로 문서와 다른 내용/표현이 있을 수 있다.


EAL1 - 기능적인 시험

 기능과 인터페이스에 대한 명세를 필요로 한다. 또한 제한적인 보안 명세서가 필요하다. 제한적인 보안 명세서라 함은, 단순히 프로그램(이하 TOE: Target Of Evaluation)이 만족해야 하는 보안 요구사항을 명확히 제시하는 것 만으로 충분하다. TOE의 기능이 설명서에 서술된대로 동작한다는 증거를 제공해야 한다.


EAL2 - 구조적인 시험

 EAL1에 추가적으로 보안 아키텍쳐에 대한 구조 명세와 설계 명세가 추가된다. 이외에도 형상관리 시스템과 배포 절차에 대한 증거가 포함되는 등 구조적으로 안전함으로 보증한다. 또한 TOE명세에 기반한 독립적인 시험을 요구한다. 

 EAL2는 기존 시스템을 안전하게 하거나, 개발자와의 접촉이 어려울 경우, 즉 독립적으로 보증된 보안성을 필요로 할 경우 적용 가능하다.


EAL3 - 체계적인 시험 및 검사

 EAL2에 추가적으로, TOE의 보안 구조 설계 명세가 필요하다. 또한 TOE의 형상괸리와 배포 절차 이외에도 개발환경 통제의 보증을 제공하여야 한다. 보다 완전한 범위의 보안 기증성 시험과 개발과정에서 TOE가 변경되지 않도록 하는 매커니즘과 절차를 요구한다. 

 EAL3는 설계 단계에서 기존 개발방법론의 많은 변화 없이 보안공학을 적용할수 있다. 실질적으로 소프트웨어 공학적인 재접근 없이, TOE및 TOE개발에 대한 조사를 필요로 할 경우 적용 가능하다. 


EAL4 - 체계적인 설계, 시험 및 검토

 EAL3에 추가적으로 완전한 인터페이스 명세와 TOE 모듈 설계 명세 그리고 TSF(TOE Security Functional, TOE 보안 기능)에 대한 구현의 표현의 일부를 필요로 한다. 구현의 표현은 소스코드 또는 하드웨어 다이어그램 등 실제 구현에 근접한 내용을 의미한다. 공격자의 침투 공격에 대한 내성을 제공된 기능명세, TOE 설계, 구현의 표현, 아티켁쳐 설계, 설명서 증거 등에 근거한 취약성 분석에 의해 뒷받힘 해야 한다.

 EAL4는 상업적 개발 방법론에 기반한 시용적인 보안공학(Security engineering)으로 최대한의 보증을 얻을 수 있도록 한다. 전통적인 상용 TOE에 비교적 높은 수준의 보증된 보안성을 요구하며, 추가적인 비용을 지불할 용의가 있는 경우에 적용 가능하다.


여기까지 EAL 1~4 까지의 내용을 정리한 표는 아래와 같다.

[EAL1~4 등급별 구분 항목 표[각주:1]]



EAL5 - 준정형화된 설계 및 시험

 EAL4에 추가적으로 준정형화된 설계 명세와 보다 구조화된(분석 가능한)구조를 필요로 한다. 또한 모듈화된 TSF설계가 요구된다. 

 EAL5는 엄격한 상업적 개발 방법론에 기반한 보안공학으로부터 최대한의 보증을 얻을 수 있도록 한다. 엄격한 상업적 개발 방법론이란 전문적인 보안공학 기법을 완화시켜 응용하는 것을 말한다.


[EAL4와 5의 차이[각주:2]]



EAL6 - 준정형화된 설계 검증 및 시험 

 EAL5에 추가적으로 정형화된 보안 정책 모델과, 기능과 TOE의 준정형화된 명세를 통해 보증을 제공한다. 이를 통해 준정형 검증을 하도록 한다. 보다 포괄적인 분석, 구조화된 구현의 표현, 보다 체계적인 구조(예: 계층화), 보다 포괄적이고 독립적인 취약성 분석, 개선된 형상관리와 개발환경 통제 등을 요구한다.

 EAL6은 개발자가 심각한 위험으로부터 높은 가치의 자산을 보호하기 위한 최상의 TOE를 생산하기 위하여 엄격한 개발환경에서 보안 공학 기법을 응용하여 얻을 수 있는 높은 보증을 제공한다.

[EAL 5와 6의 차이 비교]



EAL7 - 정형화된 설계 검증 및 시험

 EAL7은 정형화된 표현, 정형화된 일치성 입증, 포괄적인 시험을 이 용한 포괄적인 분석을 요구함으로써 EAL6보다 높은 보증을 제공한다.

마치며

EAL1 ~ 4 까지는 보안성의 증가가 이뤄지고, 5~7까지는 준정형 명세에서 정형 검증까지 정형화된 검증이 강해지는 구조를 가지고 있는것을 확인 가능하다. 여기까지로 이 글을 마치며, 각 기준 항목들과, 항목별 설명에 대하여 정리한 표를 아래에 첨부하며 마무리 짓도록 하겠다.



[EAL 패밀리 별 문서 설명, 클릭하여 확대]


  1. 국제공통평가기준(ISO 15408) 국제공통평가기준(ISO 15408) IT 보안성 평가 IT 보안성 평가․인증 가이드 (요약) - KISA [본문으로]
  2. 서동수. 공통평가기준에서의 EAL5 평가기준 분석. 정보과학회지, 2007, 25.5: 33-37. [본문으로]

댓글()