Rethinking Application Security에서 인상적인 구절에 대해 몇 마디.

Discovering security problems early in the development cycle is only the first step toward creating more secure and reliable applications, says Parasoft's Wayne Ariola in an interview with Artima. For developers to work effectively in a security-conscious environment, addressing security-related coding issues must be integrated in developers' daily workflow

요즘 CI 기반으로 일을 하면 할 수록 굳이 보안 문제(Security)가 아니더라도 프로젝트 초기에 팀 작업에 통합하고 지속적으로 유지하면 좋다는 확신이 선다. 비슷한 맥락의 글이 또 있다.

Agile development practices have promoted the idea of continuous testing and defect detection. Not waiting for a separate Q&A cycle to detect errors late in the development cycle makes errors easier and cheaper to address. That's especially true of coding defects that can result in security violations.

아래 글은 많은 경우 개발팀이 고객을 설득시켜야 하는 이유를 이야기하고 있다.

Developers generally want to do the right thing with regard to security, but there is always a communication gap between management and the development team. Management may wish to focus on the functionality and making a deadline, and may not be that cognizant of the security implications of the software that's being developed and ultimately released. Developers, on the other hand, may know about potential security problems, but they seldom have the opportunity to communicate that to their managers, and especially to communicate that regularly.

대부분의 고객은 특정 단위 시스템 혹은 모듈 개발이 끝나면 더 이상 해당 부분은 작업이 없을 것으로 기대한다. 하지만, 그 안에서 충분한 시간을 가지고 반복작업을 할 여유가 없었다면 기능 구현을 완료했더라도 구조적인 개선이나 품질향상을 위한 시간이 또 필요하기 마련이다. 실로 엄청난 반복의 위력을 이해하지 못하기에 더욱 그러하다.

그리고 매우 공감하는 이야기. 책으로는 해당 내용을 읽고 '안다'고 하면서 자신의 코드나 모델에는 반영하지 못하는 수많은 사람들을 현장에서 볼 수 있었다. 오히려 말과 산출물의 품질이 같은 경우는 일부 고수들 뿐이다.
By the same token, developers may also not have many opportunities to learn about the security implications of their code. While many developers know about the basics of security, it's not easy to relate those abstract concepts to the actual code they're working on. Code reviews afford that opportunity, but those may not happen early enough in a project where remediation of the security-related problems can be done.

지난 글 보기>

2007년 버전: 반복의 필요성:당연하지만 행하기 힘든 일
2006년 버전: 반복(Iteration)의 어려움
이올린에 북마크하기(0) 이올린에 추천하기(0)

엠파스 블로그에 2006/09/08 (금) 17:26 에 올린 것을 옮깁니다.

새로운 고객사의 프로젝트 시작 시점의 회의에 참가하고 왔다.
주요 이슈는 프로젝트에 반복을 적용하느냐 하는 문제였다.
전반적인 분위기는 반복에 긍정적이어서
넘어야 할 장애물을 찾아보는 쪽으로 방향이 선회 되었다.
나름대로 좋은 시간이었기에 반추하고 싶었는데
마침 ologist 님의 답글[각주:1]과 관련된 내용이라 정리해본다.

more..


반복을 하는 이유를 간단하게 이야기 하면
  • 위험을 빨리 만나기 위해(위험을 조기에 처리)
  • 개발팀 전체의 학습

    두 가지로 간단하게 정리할 수 있을 것 같다.
    분석/설계 기법에 익숙하지 않은 작업자가 수행하는 경우가 대부분인 현실을 감안하면
    분석/설계가 길어질수록 개발자들은 불안해한다.
    '내가 설계한 것이 과연 맞을까?'
    '요구사항이 바뀌면 안되는데'
    불안한 가운데 문제가 터지면 스트레스는 증폭된다.
    그래서 팀의 분위기가 지속적으로 부정적인 기운으로 덮이는 경우를
    많은 프로젝트 후반부에는 어렵지 않게 볼 수 있다.

    분석/설계를 컨설팅한다지만, 나 스스로도 분석/설계 산출물이 불안정하다는 것을 알고 있다.
    경험을 통해 내가 배운 것은 '완벽하게 분석/설계를 할 수 없다'는 사실이다.
    그래서 찜찜하더라도 적절한 수준으로 분석/설계를 하고 나서
    구현을 해봄으로써 검증을 받을 수 있다.
    반복이 주는 첫번째 이점은 빠르게 검증을 해보게 되면서
    자신감이 생기고, 자신감은 사람을 긍정적으로 만들어 생산성을 높여준다.

    그러나, 세상에 공짜는 없다.
    반복은 먼저 산출물의 형상관리를 기본으로 전제한다.
    산출물이 진화해간다는 사실을 관리하는 사람 입장에서 볼 때는 골치 아픈 일이다.
    종이로 된 문서가 아니라 코드와 모델을 적극 활용해야 하는 이유가 여기에 있다.

    또한, 모든 단계가 waterfall에 비해 짧아져서 기민함이 요구된다.
    쉬운 말로 예전보다 부지런해져야 한다.
    그러나 이보다 더 큰 것은 변화를 수용해야 한다는 점이다.
    반복을 전제한 작업은 waterfall과는 너무나도 다르다.
    익숙하지 않은 어떤 것을 수용한다는 것은 나이가 들수록 더 많은 용기가 필요한 일이다.

    반복은 결국...
    분석/설계/구현이 제대로 될 때까지 적정한 양의 작업을 진행해보고
    확신이 서면 작업량을 늘려가겠다는 접근을 조직화 한 것에 불과하다.
    결국, 프로젝트 내에서 꾸준히 학습하면서 더 나은 산출물을 내도록
    끊임없이 노력하겠다는 자기 선언이다.(너무 거창한가?)

    그리고, 요구사항 변경에 맞서서 싸우는 것이 아니라(?)
    요구사항 변경을 적극적으로 수용할 수 있도록 유연하게 대처하겠다는 것이다.
    프로세스에 변경이 가해지는 것의 바탕은 나를 바꾸겠다는 점이 전제해야 의미가 있다.
    이러한 무거운 결정엔 아니러니하게 복잡한 분석이 별 도움이 되지 않는다.
    결국은 의지의 문제니까.

    이야기가 길어졌다. 오전에 회의에 참석하면서 프로젝트에 잔뼈가 굵은 분들에 의해서
    반복을 적용하게 되면 짚어봐야 할 문제들이 뭔가 알 수 있었다.

    1. 인력 조달문제
    사람까지 자원으로 보는 것이 좀 아쉽지만.. 역시 인적 자원이 제일 중요하다.
    반복을 하게 되면 조기에 (구현만 하는) 개발자를 투입해야 한다.
    대개 SI 업체의 경우는 개발자를 유동적으로 활용한다.
    능력있는 직원은 프로젝트 끝나기도 전에 다른 곳에 투입되기도 하던
    관행을 고려하면 인력 배치 문제를 해결해야 한다.
    프리랜서나 인력 파견 업체를 통해 직원을 구하면 구인이 어려울 수 있다.
    어찌 보면, 이러한 관행 자체에 개선의 여지가 있다고 볼 수도 있다.

    2. 장비 조달 및 개발 환경 구축
    구매 프로세스를 밟다보면 장비 조달이 늦어지는 경우가 많다.
    조직이 클 수록 계획대로 진행되기가 힘들다.
    개발 환경 구축은 하드웨어에 의존적인 것들이 많아서
    역시 함께 어려움을 겪는다.

    3. 레거시 문제
    레거시 연동이나 데이터 이행(Migration)이 결부된 경우라면
    시뮬레이션 시스템이나 데이터가 필요할 수도 있다.
  • 이올린에 북마크하기(0) 이올린에 추천하기(0)