본문 바로가기

코드의 비밀스러운 일생6

[2부 코드의 비밀스러운 일생] Chapter12 불안전 콤플렉스 안전한 소프트웨어를 구축할 책임은 누구에게 있을까? 그 골칫덩어리는 우리의 것이다! 위험 도둑이 랩톱이나 PDA를 훔쳐서 보안이 안 된 민감한 데이터를 읽을 수 있다 결함이 있는 입력 루틴이 악용되면 많은 종류의 손상을 일으킬 수 있다 권한 상승이란 제한된 접근 권한을 가진 사용자가 시스템을 속여 보안 수준을 얻는 것 통신을 할 때, 데이터가 암호화되지 않은 상태로 불안전한 매체를 통과하면 도중에있는 모든 컴퓨터가 그 데이터를 빨아들여서 읽을 수 있다 보안이 코드 작성뿐만 아니라 시스템 관리와도 관련이 있다 조심성 없는 사용자가 쓸데없이 시스템을 열어두어서 공격 받기 쉬운 상태로 내버려둘 수 있다 시스템에 대한 접근 허용을 느슨하게 설정해 두면 사용자들이 시스템의 민감한 부분에 접근 할 수 있다 컴퓨터 .. 2017. 11. 15.
[2부 코드의 비밀스러운 일생] Chapter11 속도의 필요성 이 장의 내용 왜 효울적인 코드가 중요한가 효율적인 코드 설계하기 기존 코드의 성능 향상시키기 인생에는 속도를 높이는 것보다 더 중요한 일이 있습니다. - 마햐트마 간디 다른 어떤 이유보다 더 많은 컴퓨팅 죄악이 효율성이라는 이름으로 - 효율성을 성취하지도 못하면서 - 자행됩니다. 맹목적인 어리석음으로 인한 것보다 더 많습니다. - W. A. 울프 (유명한 컴퓨터 과학자) 최적화는 소프트웨어 개발을 위협하는 망령이다!! 최적화는 낡아빠진 주제라서 이미 모든 사람들이 그에 대한 의견을 내놓았고, 똑같은 충고가 재삼재사 거론되어 왔다. 그럼에도 불구하고 아직도 많은 코드들이 현명하게 개발되지 못하고 있다 효율성, 성능, 필요하지 않은 최적화 등을 하고 있다. 최적화란 무엇인가? 최적화 순수한 의미는 개선을 .. 2017. 11. 14.
[2부 코드의 비밀스러운 일생] Chapter10 잭이 빌드한 코드 빌드: 고급 언어 프로그램을 배포 가능한 실행 파일로 변환하는 작업 우리는 C컴파일러에 어떤 옵션이 넘겨지는지 모른다거나, 오브젝트 파일에 어떤 수준의 설비가 남겨지는지 모른다며느 당신은 그 빌드 시스템에 대해 진정한 통제권을 가지고 있다고 할 수 없다! 언어 장벽 세 개의 주요한 메커니즘 인터프리트 언어, 컴파일 언어, 바이트 컴파일 언어 인터프리트 언어 특정한 빌드 국면을 거칠 필요가 없다 Perl, Python, JavaScript 장점은 개발 속도 프리컴파일: 소스파일을 실행하기 전에 빌드 JIT(Just-in-Time)컴파일: 함수 각각을 실행에 임박했을 때 컴파일하는 방법 스크립트 언어도 포함 컴파일 언어 개별적인 소스 파일 가각이 중간 오브젝트 파일로 컴파일되고, 그 다음에 오브젝트 파일들이.. 2017. 11. 12.
[2부 코드의 비밀스러운 일생] Chapter9 결함 찾기 인생의 진실 대부분의 버그는 부주의로 일어난다. 많은 부주의한 실수들은 잡아낼 수 있는 것이고, 예방까지 할 수 있는 것 방어적 프로그래밍과 지각 있는 테스트가 우리의 주된 무기 버그의 본성 버그가 어떻게 태어나고 생존하고 박멸 될 수 있는지 알아두는 것은 가치 있는 일이다 컴파일 실패 최고의 에러 감지하기가 가장 쉽고, 고치기도 가장 쉽기 때문이다. 가장 직접적이고, 가장 분명하다 런타임 붕괴 에러가 컴파일 에러처럼 눈부시게 분명히 보이기 때문이다 예기치 못한 동작 여러 시간 전에 실행되었던 코드 내부의 사소한 로직 때문 지상에서의 관점 문법에러 컴파일러의 경고 스위치를 모두 켜놓고 빌드하자 빌드에러 프로젝트를 대청소한 다음에 아무 것도 없는 상태에서 다시 빌드하자 큰 타격을 입을 기회가 생기기 전에 .. 2017. 11. 10.
[2부 코드의 비밀스러운 일생] Chapter8 시험 보는 시간 테스트는 코드 공예에 있어서 필수불가결한 요소 프로그램을 잘 작성하는 사람이라면 디버깅보다 테스트를 훨씬 더 많이 할 것이다. 에러(error) 당신이 일을 잘못하는 것을 에러라고 한다 사람이 행하는 동작 소프트웨어에 결함을 일으키는 원인 결함(fault) 결함은 에러의 결과 소프트웨어 안에 실체가 존대한다 고장(failure) 결함과 마주치면 그로 인해 고장이 일어날 수도 있다 버그(bug) 버그는 구어체 용어, 종종 결함과 동의어로 사용 소프트웨어 개발자로서 코드를 테스트하는 방법에 초점을 맞추자 누가, 무엇을, 언제, 왜? 왜 테스트를 하나 테스트는 결함이 없다는 사실은 절대 보여줄 수 없다 결함이 있다는 사실만 보여줄 뿐이다 누가 테스트를 하나 소스 코드의 테스트는 소스 코드를 작성한 프로그래머의.. 2017. 10. 29.
[2부 코드의 비밀스러운 일생] Chapter7 프로그래머의 도구 상자 훌륭한 기술자로 만드는 것은 이런 도구의 사용이다. 멋진 코드를 다듬어내기 위해서는 숙련된 기술자, 훌륭한 툴, 코드를 다듬는 방법의 마스터가 필요 프로그래밍은 정말로 툴이 없으면 안 되는 분야 그럼 eclipse는 무슨 IDE로 만들었을까? 소프트웨어 툴이란? 프로그램을 빌드하는 프로그램 복잡성 아주 특정한 작업을 수행하는 것부터 전체 프로젝트에 관련된 것까지 사용 빈도 계속 사용되고, 필요할 때 엄청난 가치가 있다 인터페이스 예쁜 GUI 혹은 명령행 인터페이스 통합 그래픽 통합 개발 환경 비용 무상에서 유상까지 품질 왜 툴 걱정을 해야 하지? 툴은 우리가 일을 할 수 있게 만들어줄 뿐이다. 적절한 일에 적절한 툴을 적용할 줄 아는 것도 능숙한 프로그래머가 되기 위한 조건 중 하나 생활을 편하게 만들 .. 2017. 10. 28.