네이버를 만든 기술, 읽으면서 배운다 (자바편)

http://book.naver.com/bookdb/book_detail.nhn?bid=8797287

이 책은 네이버 기술 블로그인 ‘헬로월드’(http://d2.naver.com/helloworld)에서 자바와 관련된 엄선된 글들을 엮은 책이다. 국내 최대 규모의 포탈을 운영하는 네이버의 기술 블로그이기에 퀄리티가 아주 훌륭하다.

다루는 주제의 범위는 자바 8 API, 가비지 콜렉션, 스레드 덤프, JVM, JDBC 등이다. 그리고 이 주제들을 1) API의 상세 소개 및 내부 구현 소개, 2) 실제로 겪었던 장애 상황의 해결 사례 소개의 두가지 종류로 다루고있다.

그 중에서도 2번에 해당하는 내용을 읽다보면 나도 겪어봤던 상황이거나 혹은 네이버 정도 대규모 서비스를 해야만 겪을 수 있는 상황이겠거니 하는 생각에 호기심이 생겨 마치 소설책을 읽듯이 몰입해서 읽게된다.

상대적으로 1번에 해당하는 글들은 해당 기술에 깊은 관심을 갖고있지 않다면 집중력이 조금 떨어진다. 하지만 속독으로라도 눈에 익혀두면 반드시 보답을 받는 순간이 찾아온다.

한 예로 실무에서 서비스중인 API Gateway가 실제 프로덕션에서는 아무 문제 없는데 이상하게 staging 혹은 development 환경에서만 가끔씩 DB연결이 타임아웃되곤 했다. Apache Commons DBCP는 아래처럼 간단한 설정을 적용해서 사용중이었다.

BasicDataSource datasource = new BasicDataSource();
datasource.setDriverClassName(driverClassName);
datasource.setUrl(url);
datasource.setUsername(username);
datasource.setPassword(password);
datasource.setMaxTotal(maxTotal);
datasource.setMaxIdle(maxIdle);
datasource.setMaxWaitMillis(maxWaitMillis);

return datasource;

문제의 원인은 프로덕션 환경은 AWS를 이용중이었고 staging과 development 환경은 Azure를 이용하는데 있었다. Azure는 단일 VM에 대해서도 TCP connection idle timeout의 기본값을 4분으로 지정해두고 최대 30분까지 설정할 수 있게 되어있다. 그래서 DBCP의 커넥션 풀 안에서 4분 이상 사용되지 않았던 커넥션들은 나중에 사용될때마다 이미 끊겨버린 Azure의 대답을 하릴없이 기다리고 있었다.

이 때 이 책에서 DBCP의 validation 관련 설정, Evictor 스레드 관련 속성을 읽었던 것이 기억나서 해당 내용을 참조하고 커넥션이 끊기기 전에 유효성 쿼리를 보내고, 유휴기간이 일정 시간 이상 지나면 커넥션을 제거하도록 하는 설정을 추가 한 뒤 문제를 해결할 수 있었다.

...
datasource.setValidationQuery("SELECT 1"); // MySQL
datasource.setTestWhileIdle(true);
datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEviction);
datasource.setNumTestsPerEvictionRun(numTest);
datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTime);
...

해당 설정들의 개념은 어렵지 않더라도 어떤 값을 설정해야 할 지에 대해서는 경험이 없는 나같은 프로그래머의 경우 어려움을 겪는다. 이 책에서는 설정값을 정하는 노하우도 함께 소개해줌으로써 길 잃은 초보 프로그래머들이 어려움에서 벗어날 수 있도록 도와준다.

전체적으로 보자면 나처럼 경험은 적지만 직접 알려줄 사수가 없는 경우에는 사무실 책상에 비치해두고 틈날때마다 목차를 익히고 필요한 내용에 대해 읽어보고 관련된 다른 자료를 더 살펴보면서 성장할 수 있는 기회를 주는 선배같은 책이라는 생각이 든다.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.