본문 바로가기
[Effective Unit Testing] Chap2. 좋은 테스트란? [Effective Unit Testing] Chap2. 좋은 테스트란? -좋은 테스트의 고려 사항은 아래와 같다. 테스트 코드의 가독성과 유지보수성 프로젝트 안에서, 그리고 소스 파일 안에서 코드는 적절히 구조화되어 있는가? 테스트가 무엇을 검사하는가? 테스트는 안정적이고 반복 가능한가? 테스트가 테스트 더블을 잘 활용하는가? ... 2.1. 읽기 쉬운 코드가 유지보수도 쉽다.-자동화된 테스트는 결함을 효과적으로 막아주지만, 테스트 역시 코드인지라 가독성 문제에서 벗어날 수는 없다.읽기 어려운 코드는 검증하기도 어렵고, 결과적으로 테스트를 조금만 작성하는 사태로까지 이어진다.또 그렇게 작성된 테스트는 우리가 생각하는 좋은 테스트와는 거리가 멀다.제품의 구조와 API 가 테스트를 고려하지 않고 만들어졌다.. 2019. 2. 27.
Linux 가 Desktop 으로 잘 쓰이지 않는 이유 Linux 가 Desktop 으로 잘 쓰이지 않는 이유 http://itvision.altervista.org/why.linux.is.not.ready.for.the.desktop.current.html -Java 나 .Net 과 같이 platform independent 한 프로그램을 만들 수 있는 언어들이 있는데, 왜 무료 OS 인 Linux 가 인기가 없을까 궁금해서 찾아보았다. 위 링크 자료는 매년 업데이트 되는 것으로 보이며, 최신판은 2016 Edition 이다. Hardware support -하드웨어 회사들이 Linux 용 드라이버를 잘 지원하지 않는다. 드라이버 회사들이 Linux 용 드라이버를 지원하지 않거나, 제약된 범위에서 지원하곤 한다. (완전 핵심만 지원) Open source .. 2017. 11. 17.
Harddisk Interface 정리 ( IDE, SATA, SCSI, SAS ) Harddisk Interface 정리 ( IDE, SATA, SCSI, SAS ) http://skymeet.tistory.com/43 -IDE ( Integrated Drive Electronics ) 가장 오래된 규격 데이터를 병렬로 전송한다는 뜻에서 PATA ( Parallel Advanced Technology Attachment ) 라고도 부른다. 최신 규격 UDMA6 모드에서는 초당 133.3MB 전송속도를 낸다. 현재는 초기 IDE 보다 성능 향상된 E-IDE ( Enhanced IDE ) 규격을 사용하는데, 일반적으로 현재 IDE 라고 부르는 녀석이 E-IDE 이다. -SATA ( Serial Advanced Technology Attachment ) SATA1 에서는 초당 150MB S.. 2017. 5. 6.
[Java Concurrency] 활동성 최대로 높이기 #1 [Java Concurrency] 활동성 최대로 높이기 #1 - 안정성(safety)와 활동성(liveness) 사이에는 밀고 당기는 힘이 존재하는 경우가 많다. 스레드 안전성을 확보하기 위해서 락을 사용하곤 하는데, 락이 우연찮게 일정한 순서로 동작하다 보면 락 순서에 따라 데드락이 발생하기도 한다. 시스템 자원 사용량을 적절한 수준에서 제한하고자 할 때 스레드 풀이나 세마포어를 사용하기도 하는데, 동작하는 구조를 정확하게 이해하지 못하고 있다면 더 이상 자원을 할당받지 못하는 또 다른 형태의 데드락이 발생할 수 있다. - 자바 어플리케이션은 데드락 상태에서 회복할 수 없기 때문에 항상 프로그램의 실행 구조상 데드락이 발생할 가능성이 없는지 먼저 확인해야 한다. 10.1. 데드락 - 데이터베이스 시스템.. 2017. 5. 1.
[Java Concurrency] 작업 실행 [Java Concurrency] 작업 실행 - 앱이 해야 할 일을 "작업"이라는 단위로 분할하면 프로그램의 구조를 간결하게 잡을 수 있고, 트랜잭션의 범위를 지정함으로써 오류에 효과적으로 대응할 수 있고, 작업 실행 부분의 병렬성을 자연스럽게 극대화 할 수 있다. 6.1. 스레드에서 작업 실행 - 프로그램에서 일어나는 일을 작업이라는 단위로 재구성하고자 한다면 가장 먼저 해야 할 일은 작업의 범위를 어디까지로 할 것인지 정하는 일이다. 원론적으로 보자면 작업은 완전히 독립적인 동작을 말한다. 독립성이 갖춰져 있어야 병렬성을 보장할 수 있다. 작업을 스케쥴링하거나 부하 분산(load balancing)을 하고자 할 때 폭넓은 유연성을 얻으려면 각 작업이 앱의 전체적인 업무 내용 가운데 충분히 작은 부분을.. 2017. 4. 24.
CentOS vs. Ubuntu 간단 비교 CentOS vs. Ubuntu 간단 비교 http://webdir.tistory.com/111http://periar.tistory.com/entry/CentOS-vs-Ubuntu-%EC%84%BC%ED%86%A0%EC%8A%A4-%EC%9A%B0%EB%B6%84%ED%88%AC -CentOS ( 센토스 ) 는 레드햇 계열Ubuntu ( 우분투 ) 는 데비안 계열 -리눅스 관련 패키지들이 대부분 이 두가지에 대해서는 default 로 지원을 한다. -Ubuntu 는 데스크탑에 중점을 두고 개발중이며, 여러 가지 시도를 많이 하고 있는, 개발 진행이 활발한 OS 이며,CentOS 는 RedHat 계열의 상용 서버 배포판인 RedHat Enterprise 를 무료로 배포한 버전이라고 보면 되기 때문에 안정.. 2017. 4. 19.
[Java Concurrency] 객체공유 [Java Concurrency] 객체공유 3.1. 가시성 - 일반적으로 특정 변수의 값을 가져갈 때 다른 스레드가 작성한 값을 가져갈 수 있다는 보장도 없고, 심지어는 값을 읽지 못 할 수도 있다. 메모리상의 공유된 변수를 여러 스레드에서 서로 사용할 수 있게 하려면 반드시 동기화 기능을 구현해야 한다. - 재배치(reordering) 현상을 조심해야 한다. 재배치 현상은 특정 메소드의 소스코드가 100% 코딩된 순서로 동작한다는 점을 보장할 수 없다는 점에 기인하는 문제이다. 단일 스레드로 동작할 때는 차이점을 전혀 알아챌 수 없지만 여러 스레드가 동시에 동작하는 경우에는 확연하게 나타날 수 있다. - 동기화 기능을 지정하지 않으면 컴파일러나 프로세서, JVM 등이 프로그램 코드가 실행되는 순서를 임.. 2017. 4. 17.
[Effective Java] 외부에 제공하는 모든 API 요소에 대해 문서화 주석을 넣자. [Effective Java] 외부에 제공하는 모든 API 요소에 대해 문서화 주석을 넣자. - 사용 가능한 API 라면 반드시 문서화해야 한다. 만일 문서화 주석 규칙에 친숙하지 않다면 배워야 한다. - API 를 문서화하려면, 외부에 제공하는 모든 클래스, 인터페이스, 생성자, 메소드, 필드의 선언부 앞에 문서화 주석을 넣어야 한다. 만일 어떤 클래스가 직렬화될 수 있다면 직렬화 형태도 문서화해야 한다. - 문서화 주석이 빠진 API 를 사용하는 것은 실망스럽고 에러가 생길 가능성이 많다. 유지보수 하기 쉬운 코드를 작성하려면 외부에 공개되지 않는 대부분의 클래스, 인터페이스, 생성자, 메소드, 필드에 대해서도 문서화 주석을 작성해야 한다. - 메소드의 문서화 주석에서는 메소드와 클라이언트 사이의 계.. 2017. 1. 23.
[android] 디컴파일링시 Plain Text 로 노출되면 안 되는 정보들 숨기기 [android] 디컴파일링시 Plain Text 로 노출되면 안 되는 정보들 숨기기 -아주 간단하게는 각 character 들에 특정값을 더하고 빼기정도를 하는 것으로 인코딩할 수 있다. 하지만 보안 레벨 측면에서는 상당히 조악한 방법으로, 명석한 디컴파일러(사람기준)들은 이정도는 아주 간단하게 디코딩 할 수 있다. - 그럼 어떻게 안정적으로 만들 수 있을까? 너무 어렵지 않으면서 나름 안정성을 줄 수 있는 방법은 sign key 에서 특정 값을 추출해서, 보안적으로 안정성이 높은 알고리즘으로 encoding/decoding 을 하면 된다. Encrypt ( Encoding )SecretKey key = null;byte[] encryptedByte = null;try{PackageInfo packag.. 2015. 12. 24.
반응형