2016년 4월 2일 토요일

4월 1주차 소식들..

하드웨어

IBM의 OpenPOWER 플렛폼이 구글의 데이터 센터에 채용될 예정이라는 소식.. 탈 x86을 선언한 구글의 선택은 IBM으로 결론이.. 연산 가속을 위한 Open CAPI/NVLink 인터페이스 채용이 특징인데 Open CAPI의 경우 범용 연산 가속기인 GPU 대신 FPGA 칩과 연결되는 인터페이스이다. 인텔의 경우 인수한 알테라의 FPGA칩을 통합한 커스텀 Xeon칩을 생산하고 있는 걸로 보이는데 아무래도 가격 하락의 압박을 받게 되지 싶고 AMD의 경우 Zen 프로세서부터 HyperTransport 대체 인터페이스가 나올 예정인데 IBM과 비슷한 형태로 가지 않을까 예상이.. 링크

소프트웨어

Windows 10에 네이티브로 동작하는 Ubuntu 리눅스의 사용자 모드와 Bash 쉘에 대한 소식.. 아마도 올해 가장 놀라운 뉴스 중 하나가 되지 않을까 생각이.. 서버 개발자 같은 경우는 더이상 맥을 고집할 필요가 없어져서 WWDC에서 애플도 뭔가 대응책을 내놓을 것 같긴 한데 과연.. 패스트링의 Build 14316 버전에 포함되어 배포됨.. 링크 링크

MS가 인수한 안드로이드와 iOS에서 C#과 .NET 구동을 위한 Xarmarin 프로젝트가 비주얼 스튜디오의 플러그인 제공과 함께 SDK를 오픈소스로 공개 할 것이라는 소식.. 링크


보안

Facebook의 WhatsApp 메신저가 End-to-End 암호화 기능을 기본으로 제공하게 되었다는 소식.. 링크

브라우저가 아닌 PHP, Python, Go 언어의 API에서 SSL/TLS 인증과 관련한 연구 결과 취소된 인증(Revoked Certification)에 대한 검사를 전혀 하지 않는 문제가 있어 관련 코드를 직접 작성해야 된다는 소식.. 링크

Node.js의 패키지 관리자인 NPM의 보안 취약점을 이용해 NPM 생태계 내부에 악성코드를 전파시킬 수 있는 문제가 발견 되었다는 소식..

관련된 몇가지 문제는 다음과 같다 npm install 명령어를 실행 해서 패키지를 설치 할 때 라이프사이클 스크립트가 같이 실행 되는데 명령어를 실행한 사용자의 권한에 따라 root로 실행될 수 있다는 점. NPM이 사용하는 SemVer 버전 관리 시스템 상에서는 패키지를 원하는 특정 버전으로 고정하는 것이 매우 힘들다는 점(내부 참조 패키지들 버전이 범위로 지정될 수 있기에..). NPM Author 계정의 자동 로그아웃 기능이 없기 때문에 패키지가 언제든 퍼블리싱 되어 악성코드를 포함한 패키지가 전파될 수 있다는 점. NPM은 리소스에 대한 검증이나 커뮤니티의 리뷰 절차 같은 것이 없다는 점들이 언급 되었다..

임시방편으로 라이프사이클 스크립트를 제한하는 방법은 다음과 같다.
### Install package without running scripts
npm install [pkgname] --ignore-scripts
### Disable scripts execution globally
npm config set ignore-scripts true

링크

2016년 3월 26일 토요일

3월 4주차 소식들..

보안

Java의 버전업과 함께 과거에 패치 되었던 결함이 다시 문제가 되었던 것에 대한 긴급패치가 릴리즈 되었다는 소식.. 특이한점은 이번 패치에서 이 문제를 전혀 새로운 버그로 규정했다는게(?).. 링크

무선키 해킹을 통해 차량 문을 열고 시동을 걸 수있는 24종의 차량에 대한 소식.. 링크


미분류

인텔을 CPU를 만드는 회사로 만든 주역이었던 앤디 그로브의 별세 소식.. 링크


소프트웨어

윈도10 레드스톤 빌드 14295가 PC와 모바일 버전 모두 패스트링에 배포됨.. 링크

2016년 3월 24일 목요일

경험 많은 자바 개발자와 아키텍트가 조심해야할 10가지 함정

원문 : http://zeroturnaround.com/rebellabs/watch-out-for-these-10-common-pitfalls-of-experienced-java-developers-architects/

좀 오래된 글이긴 하지만 아직도 유효한 글인듯 싶어서 정리해 봅니다. 코드 예제는 원문의 링크에..

#10 Dependency Injection(이하 DI)의 잘못된 사용 혹은 잘못된 이해
DI를 이용하여 미리 정의된 객체를 삽입 하는 것 까진 좋지만 다른 객체의 초기화를 위해 의존성이 삽입 된 객체에 트레인 코드(. 연산자를 이용한 기차 처럼 길게 연결된 코드)를 사용하는 것과 같은 형태는 좋지 않다. 그냥 DI만 쓰시오..

#9 Java를 Perl을 사용하듯 쓰는경우
시스템이 커질수록 런타임 보다 컴파일 타임에 문제를 발견할 수 있는 것이 중요하다. 팩토리 형태의 코드의 매게변수로 스트링을 사용하게 되면 잘못된 스펠링의 변수가 전달되면 런타임에 문제가 발생하는 경우가 있다. 자바는 타입 언어이기 때문에 enum과 같은 타입을 이용하여 문제를 방지할 수 있다.

#8 OOP를 이해하지 못해 C를 사용하듯 자바를 쓰는경우
if-else와 instanceof를 통해 객체를 구분하여 캐스팅을 통해 이용하기 보다는 인터페이스나 추상 클래스의 상속과 메소드 오버라이딩을 이용하는 편이 코드가 간결하고 유지보수가 쉬워진다.

#7 객체의 라이프사이클을 이해하지 못해 과도하게 Lazy loading을 사용하는 경우
Lazy loading을 사용하지 전에 체크할 요소.
1. 정말 고비용의 객체인건가?(그것에 대해 어떻게 정의 할 것인가?)
2. 객체가 사용되지 않는 경우가 있어 생성되어 있을 필요가 없는가?

Lazy loading을 사용할 경우 해당 객체의 정확한 로딩 시점을 알아야 하기 때문에 디버깅을 힘들게 할 수 있어 디플로이 시점에 모두 로딩되게 하면 관련 이슈를 사전에 발견할 수 있다. 개인적으론 개발과 배포 시점의 구성을 다르게 가져가는 방법도 고민해 볼만하지 싶은.. 

#6 'Gang Of Four'(GOF) 책을 종교와 같은 수준으로 의존 하는 경우
책의 적절한 사용법은 서문에 나와있으니 참고하시오... 이미 안티패턴이 된 #5의 싱글턴과 같은 패턴도 있음..

#5 안티패턴이 된 싱글턴을 사용하는 경우
최근의 DI 프레임웍에선 더이상 사용할 필요가 없어짐.. (사실 Spring 프레임웍의 경우 빈 생성시 기본 조건이 싱글턴인..)

#4 메소드의 가시성을 무시하는 경우
public 메소드의 경우 가능한 작고 간결해야 하며 재사용 가능한 라이브러리를 작성하는 경우 이러한 점이 더 중요해진다. private 메소드로 지정 되어야 할 메소드가 단위 테스트를 위해 public으로 지정되는 케이스가 종종 있는데 이런 경우는 지양되어야 한다.

#3 NIH(Not Invented Here) 증후군이나 프로젝트에 특화된 StringUtils와 같은 것으로 고통받는 경우
충분히 테스트 된 현존 솔루션들을 활용하라. 예를 들면 Apache Commons, Guava, joda Date와 같은 것들이 있다. 특히나 익숙하지 않은 영역의 작업을 하게 될 경우 이런 점에 대한 사전 조사를 충분히 하자.

#2 환경에 의존적인 빌드
환경에 의존적인지 체크할 수 있는 시나리오..
1. 어느날 회사에 새 개발자인 톰이 왔다.
2. 톰에게 기본적인 설명을 하였고 설명을 들은 그는 자신이 좋아하는 개발 환경으로 세팅 했다
3. 톰은 소스 저장소로부터 소스를 체크아웃 한다.
4. 톰은 어떤 빌드 시스템을 이용하는지 파악 하는데 5분을 소모했다.
5. 톰은 단하나의 커맨드로 어플리케이션 빌드를 실행하고 그것은 성공했다.

조건을 만족하지 못한다면 문서화와 빌드시스템에 대해 다시 생각해볼 필요가 있다.

#1 리플렉션/인트로스펙션을 사용하는 경우
리플렉션은 이슈가 발생할 경우 이해하기 어렵게 하고 디버그가 힘들어지며 고치기 어렵게 만든다. 리플렉션을 사용하는 것은 시한 폭탄을 심는 것과 같다. 리플렉션을 사용하지 않더라도 잘 설계된 객체의 계층적 구조를 이용해 좀더 깔끔하게 해결할 수도 있다.

보너스 : 정말로 병목을 유발하는 요소가 어디인지 아는 경우에만 최적화를 시도하라
추측하지 말고 측정하라!
1. 현재 시스템을 유효한 측정 방법을 이용해서 벤치마크 하라
2. 변경을 가한다.
3. 다시 벤치마크 한다.
4. 가해진 노력과 퍼포먼스 향상 비율에 대해 평가한다


2016년 3월 17일 목요일

Spring 4 WebSocket


스프링 프레임워크 4.2 에서 웹소켓을 이용한 통신에 대한 소개 영상인데 개인적으로 꽤 재미있게 봐서 기억용으로 글을 남긴다. WebSocket은 Node.js 프로젝트 때 게임 세션 서버 만드느라 Redis를 브로커로 해서 이용해보고 Java로는 구현 해본적이 없는데 한번 만들어 봐야 겠다는 생각이 드는..

동영상의 내용은 웹에서 클라이언트와 서버의 통신 방식이 단방향에서 양방향으로 변해온 역사에 대한 간략한 소개를 포함하고 있고 HTML5의 EventSource를 이용하여 HTTP 프로토콜 위에서 동작하는 Server Sent Event에 대한 예제 그리고 양방향 통신과 관련하여 TCP/IP 레벨에서 동작하는 WebSocket, SockJS, Stomp 프로토콜에 대한 예제들을 다루고 있다.

메시지 브로커와 관련한 내용에는 어플리케이션의 메모리 공간을 이용하는 심플 브로커의 구현 코드와 시스템의 스케일 아웃을 위해 RabbitMQ와 같은 전담 브로커를 이용하는 코드 그리고 StompClient와 User Principal을 이용한 클라이언트 간의 메시지 전달에 대한 예제를 소개하고 있으며 메시지 보안과 관련한 간략한 코드 소개로 마무리 되는 영상이다.

2016년 3월 15일 화요일

3월 3주차 소식들..

보안

퀄컴의 스냅드래곤 칩을 사용하는 장비의 커널의 보안 결함으로 인해 루트 권한을 취득하여 멀웨어를 심을 수 있는 문제가 있다는 소식.. 제조사마다 커스텀된 커널을 사용하다 보니 정확히 추정하긴 어렵지만 안드로이드 4.4.4 KitKat 이전부터 영향을 받는 것으로 보인다고.. 최근들어 커널의 보안 결함을 이용한 해킹 사례가 증가하는 추세.. 링크

애플의 DRM 관리 기술의 헛점을 이용하여 탈옥하지 않은 iOS 장비에 대해 멀웨어를 설치할 수 있는 문제가 발견되었다는 소식.. 중국에서 발생한 사례로 정상적인 앱을 스토어에 등록하여 FairPlay 인증 코드를 취득한 뒤 윈도우에 iTunes와 비슷한 소프트웨어를 배포하여 취득한 인증 코드로 멀웨어를 설치하는 형태라고.. 앞으로는 눈에 보이지 않게 멀웨어의 배포만으로 이런 일들이 일어날 가능성이 높다는 소식.. 링크


미분류

구글의 모회사인 알파벳이 보스턴 다이나믹스를 매각할 것이라는 소식.. 매입이 예상되는 회사로 도요타와 아마존이 거론 되는 듯한.. 링크

Dropbox가 비용 문제로 아마존의 클라우드 서비스를 떠나 자체 데이터 센터로 모든 데이터를 옮기기로 했다는 소식.. 넷플릭스의 행보와는 반대로 가는 케이스가.. 링크

GDC 2016 개막.. AMD의 오프닝 이벤트를 통해 알게 된 몇가지 소식을 정리 하자면 듀얼 Fiji 칩을 탑제한 그래픽 카드가 Radeon Pro Duo 라는 이름으로 드디어 출시 됐는데 FirePro 계열 기능도 함께 지원되서 게이머와 크리에이터 모두를 만족시킬 제품의 형태로 출시 된다는 소식.. 그 밖에 토탈 워 : 워해머는 DX12를 지원하고 어쎄신 크리드의 차기작이 VR 버전이 될거라는 소식이 있었던..

이번 GDC는 VR이 단연 화두이고.. 웹에서는 브라우저를 가진 회사가 헤게모니를 쥐는 느낌이었는데 VR은 소프트웨어 기술의 집합체인 게임 엔진이 그 역할을 할 것 으로 보임.. 게임 서버쪽의 트렌드의 경우는 알파고와 같은 형태의 구성이 앞으로의 트렌드가 될 것으로 예상되는..

마지막으로 흥미로웠던 소식은 MS의 크로스플렛폼 멀티플레이 지원 소식인데.. 개발사의 지원에 달리긴 했지만 앞으로의 게임들은 PC와 콘솔의 제약없이 함께 멀티플레이를 즐길 수 있을 것 이라고.. 이말은 현존 플렛폼인 PC, XO, PS4, WiiU 플레이어가 함께 멀티플레이를 즐기는 것이 가능해 진다는 소식.. 링크1 링크2

2016년 3월 10일 목요일

3월 2주차 소식들..

하드웨어

AMD의 외장 그래픽카드 연결 기술인 XConnect 기술 발표.. 썬더볼트 3 인터페이스를 사용하는데 제약 사항으론 썬더볼트 3가 PCIe 3.0 4레인 만을 사용한다는 점과 지원하는 그래픽카드의 최소 사양이 R9 280x 부터라고.. PC도 그렇지만 어떤 형태로든 앞으로의 콘솔 게이밍 시스템에도 영향을 미치지 않을까 싶은.. 링크

미분류

이메일 시스템을 개발한 Ray Tomlinson의 타계소식.. 링크

소프트웨어

MS의 이클립스 재단 참여소식.. Azure 클라우드 지원 강화가 목적인듯한... 링크

모질라 재단의 파이어폭스의 차세대 브라우저 엔진으로 개발중인 Servo 엔진의 꽤 인상적인 벤치마킹 소식.. Rust 언어 기반에 GPU 가속 렌더 백엔드 기능을 포함한 Mac OS X에서 벤치 영상이.. 링크

MS SQL의 리눅스 지원 소식.. R 을 인수하면서 해당 기능역시 MS SQL에 포함 되었고 요즘 MS의 행보를 봐선 리눅스 지원이 놀랍지는 않은.. 링크

보안

Java의 최근 패치로 2013년에 패치됐던 보안 결함이 다시 문제가 되고 있다는 소식.. 영향 받는 버전은 Java SE 7 Update 97, Java SE 8 Update 74, Java SE 9 Early Access Build 108 이라고.. 자바와 관련된 웹 플러그인은 조심하는 편이.. 링크

맥 OS X를 대상으로 한 최초의 랜섬웨어가 등장. 인기있는 BitTorrent 클라이언트인 Transmission의 랜섬웨어를 포함한 위조된 클라이언트가 배포되서 애플에서 해당 버전을 차단 했다는 소식.. Transmission 2.92 버전에선 문제가 해결 됐다고 하며 얼마전 Mint Linux의 위조된 배포판 사건과 같이 인기있는 오픈소스 소프트웨어를 타겟으로 비슷한 사건이 증가하는 느낌이.. 링크

2016년 3월 3일 목요일

3월 1주차 소식들..

소프트웨어

윈도우즈 인사이더 프리뷰의 FastRing에 RedStone 14279 빌드가 배포 됨.. 링크 

보안

Cisco의 Nexus 스위치 장비가 하드코딩 된 인증키를 사용해서NX-OS의 루트권한을 탈취할 수 있는 문제가 발견되어 패치가 배포 되었다는 소식.. 링크

TLS 프로토콜의 RSA 암호화 시스템의 취약점을 이용해 동일한 클라이언트 키를 이용하고 있는 SSLv2 서버에 접근 권한을 얻어내는 DROWN(Decrypting RSA with Obsolete and Weakened eNcryption)이라는 공격법에 대한 소식.. OpenSSL 라이브러리의 경우 현재는 패치가 나온 상태.. 아마도 브라우저부터 각종 프로그래밍 라이브러리를 비롯해서 서버까지 광범위한 패치들이 나오지 싶은; 링크