2015-한 해를 돌아보며 — IT 중심

2015년도 마지막 날. IT개발자로서의 나의 흔적을 이리저리 살펴본다.

올해 SlideShare에 올렸던 Cache in ApiGateway — 개인적으로 별 2개 (5개 만점). Cache라서 성능이야기를 재미 있게 하고 싶었는데, 내공과 경험의 부족이 여실했다. 나중에 보강하고 싶은 주제이다.

How to customize Spring Boot — 별 4개. Spring Boot의 내부 동작원리 설명으로 나름 공을 들여서 분석해서였는지 반응은 좋았다.

이 2개의 자료 외, 눈을 씻고 보아도 세상에 뿌린 씨앗이 없으니, 거둘 것도 없어서 나는 2015년의 마지막 날 심히 우울하였다.

그러나 오늘은 아직 8시간이 남았다. 2015년이 다 가기 전, 내가 IT 개발자로서 올 한 해 고민하고 공부하고 관심가졌던 흔적들을 살펴보며 기록에 남기려한다.

지금 나와 함께 있는 사람들, 회사의 예전 동료들, 프로젝트를 함께 했던 사람들, 온라인에서 몇 마디로 스쳐 지나갔던 사람들, 심지어 서로 글의 흔적들만 좇고 있는 사람들까지도, 내가 아래 정리한 고민을 통하여 약간이라도 도움을 받는다면, 혹은, “열심히 살고 있구나!” 하는 응원의 마음을 품어 주신다면, 감사할 따름이다.

그리고 요즈음 더더욱 범람하는 기술로 인해 IT 개발자로 먹고 살아가는 일에 고민이 많은 때, 나와 비슷한 것으로 고민하는 분들이 계시다면, 일말의 도움이 되기를 바란다.


올 해 2015년도에는 나를 비롯한 개발자들에게 꿀같은 좋은 소식들이 있었다. 임작가, 정개발, 데니스의 나는 프로그래머다 방송과 한국에서도 드디어라이브 코딩 방송의 시대가 열렸다는 것이고, 이곳의 도움을 개인적으로 많이 받았다. 이 자리를 빌어서 감사드린다.


올 해 개인적으로 가장 관심이 갔던 것은

1. 깔끔한 REST JSON 기반 Spring 서버 설계에 대한 고민

DB 없이 Cache로만 동작하는 REST Server를 깔끔하게 정리하고 싶었는데 어떻게 만들어야 유지보수가 편할까에 대한 고민이 있었다.

결론부터 이야기하면

  • DO(Domain Object) : ex) Api
  • DTO(Data Transfer Object): ex) ApiDto(Create,Update, Response)
  • lombok: DTO, DO 자동 생성
  • ModelMapper: DO와 DTO간 필드 복사
  • hibernate validator: Annotation 기반 Validation

를 사용하는 것이다.

내부적으로는 DO로 가지고 있고, DTO로 Create, Update, Response에 따라서, 필드와 Validation을 각각 다르게 처리할 수 있어서, 외부에 비밀정보와 같은 정보를 숨길 수 있다. DTO로 인한 사용 불편함은 lombok과 ModelMapper를 통해서 해결한다.

보통 Hibernate validator에서는 group 기능을 이용해서 Create와 Update를 분리해서 체크하는 것이 더 복잡해 보인다.

주고 받는 Data를 DO나 DTO가 아닌 JSON String으로 바로 보내는 경우가 있는데 나중에 REST 문서를 Generate 한다면 field 정보가 없는 JSON String은 불편할 것 같다.

위의 문제로 고민하고 있을 때, 백기선님의 아무고나 시리즈(Sprin Boot 기반으로 아무거나 만들어 보는 것)를 통해서 최종 결론을 내게 되었다. (감사합니다.)

2. Spring Security OAuth 2 커스터마이징

OAuth 클라이언트 연동은 많이 해봤는데 올해 OAuth 서버 개발에 대한 미션이 있었다. OAuth 서버는 보통 Node 기반 Java 기반 오픈 소스들이 많았는데 그중 Java는 Spring Security OAuth CloudFoundry User Account and Authentication (UAA)가 가장 많이 끌렸다.

다만 UAA는 넘사벽 오픈 소스였다. (코드가 거대하고 너무너무 복잡하다. 이 UAA 서버의 운영경험이 Spring Boot Actuator로 만들어졌다)

어찌 되었든 OAuth에 대해서는 워낙 많이 사용해서 Apress Advanced API Security 라고 하는 보안 책이 있는데 해당 책을 개인적으로 추천한다.

암튼 OAuth 서버를 커스터마이징 하기 위해서

Spring-Security-OAuth, Spring Boot를 사용했었다.

물론 Spring Security OAuth를 먼저 공부하면 힘들다. 당연 Spring Security를 먼저 이해하고 접근해야 한다. 개인적으로 spring-camp의 이수홍님 Spring Security Slideshare로 기본 개념 잡고(감사합니다.), Spring 사이트 맨날 들락날락 했던 기억이 난다.

Spring Security OAuth는 코드는 상당히 복잡했던 기억이 난다.

Customizing의 핵심 포인터는 4가지 정도

  • 외부 Configuration 설정 부분을 Customizing 에서 최대한 내부 코드를 안건드리기
  • Login과 상관없이 clientId 기반으로 동작되도록 변경
  • TestCase가 복잡해서 내가 필요한 쉬운 방법으로 수정.
  • 토큰 저장소가 db인데 redis 기반으로 변경하고 싶었다. 욶이 좋게도 다른 외국 개발자가 미리 만들어 놓아서 pull request를 던져 놓았었다.

이 때, Spring Boot를 처음 사용해봤는데, 그 매력에 흠뻑 빠졌던 기억이 난다. 잘몰라서 인터넷 열심히 찾아 헤맸는데 결론은 항상 spring boot 공식 사이트와 코드로 귀결된다.

Spring Security OAuth는 이제 사용하지 않아서 기억도 가물가물하다.

3. Async와 성능에 대한 관심

성능을 올리기 위해서 Sync 방식에서 Async에 대해서 심각한 고민이 있었다. (상황에 따라서 다르겠지만…)

  • Async Servlet
  • Async Processing in Spring MVC
  • HttpAsyncClient(Reactor 패턴)

등등의 작업을 하다 보니 더욱 대용량 트래픽 처리에 대해서 관심을 가졌고 학습을 해보았다.

Welcome to the Async World

아래 4개의 책이 올 해 읽어본 책이다.

  • Apress- Java I-O, NIO and NIO.2은 Java 개발자로 IO에 대해서 개념 잡기 좋은 책 (특히 NIO와 NIO2에 대해서)
  • 한빛미디어- 자바 네트워크 소녀 네티 가 출간,
  • Actor 패턴인 임백준의 아카 시작하기 Akka 개념잡기 책,
  • 그리고 이건 다른 동네 이야기 이지만 Message Queue를 이용한
     에이콘-기업통합패턴 Enterprise Integration Pattern (대충 훑어봄)

대용량 트래픽에 대한 고민들.

ApiGateway로 routing을 할 때, 외국에서는 go로 만들거나, nginx에 lua 스크립트로 붙이는 경우도 있고, Netty로 Akka로 tomcat 없이 직접 다 구현하다던데(?)… 난 어디까지 해야할까? 난 그런 것을 경험해 볼 수 있고, 그런 것을 만들어볼 역량이 될까에 대한 의문점들이 생겼다.


아 집중력이 떨어지고 있다.


4. Java 설계 및 개발에 대한 지속적 얉은 관심

올해 김영한님의 JPA 책 출간으로 JPA 사용 문턱이 낮아지고 (정말 원한다면 Spring Data JPA로 인터페이스 선언만으로 뚝딱 REST 서비스 만들 수 있는 세상.) 개인적으로 DDD하면 Eternity(조영호)님의 블로그가 정말 꿀같은 정보들이 많은데 객체지향 기초 책 출간 소식에 멀리서 환호했었고, DDD와 PoEAA의 재조명이 있었다.

(이쪽은 개인적으로 JPA 현장 경험이 없고, 설계는 약한 부분이라…그래도 포기하지 말고 필요할 때, 사용할 수 있도록 관심있게 지켜보아야함 평생.)

  • 에이콘-자바 ORM 표준 JPA 프로그래밍-김영한
  • 위키북스-객체지향의 사실과 오해-조영호
  • 위키북스-도메인 주도 설계-에릭 에반스 저/이대엽 역
  • 위키북스-엔터프라이즈 애플리케이션 아키텍처 패턴- 마틴 파울러 저/최민석 (이 책은 경품으로 받아놓고 아직도 안보고 있는 책…. 손이 안감 -_-;)

5. Java 개발자에서 다른 언어로 갈아타고 싶은 고민.

많은 사람들의 이야기

Enterprise 환경에서는 자바만한게 없어요. Eco 시스템도 훌륭해요. 알면서 그래요. 다른데 이직하려면 어찌되었던 주무기가 있어야 하잖아요. 자바나 우선 똑바로 하세요. Java8 완전 좋아요. Modern Java 공부하세요. jdk8로 변경만 하면 성능 몇십 % 올라요. Scala 좋잖아요. Java Eco 시스템과 Function Programming도 같이 할 수 있고요. 서비스 회사들은 다 Scala 써요. 데이터 분석 하면 Scala 아니면 Python이에요. Spark, Akka가 다 Scala로 만들어 졌잖아요.

아… 다른 언어를 주무기로 한다는게 과연 쉬운일은 아니다. (나와 같은 팔랑귀에게는 ㅎㅎ)

어찌되었든 Java외에 다른 언어를 위한 나의 애정행각의 시작.

  • 브루스 테이트의 세븐 랭귀지 — 임백준 역

-> erlang 엄청 좋은데. 글쎄 문제 생기면 그냥 process 죽이고 다시 띄운데. 매력적인 언어야. rabbitmq랑 couchbase가 erlang 으로 만들어져서 성능 좋잖아. 나 그거 공부해볼까? (사람들 왈: elixir가 대세에요. erlang 할 바에는 그거 하세요.) 아 그래… (그냥 하던거나 잘하자.)

  • 케빈님의 모던 자바 (자바 8) — 못다한 이야기 시리즈(중간까지 시청, 추후 시청예정)

-> 와 java8 엄청 좋다 lamda, stream 오호.. .좋다. 근데 왜 나는 Scala 공부를 해야한다는 압박감이 계속 생길까??

Java Eco 시스템과 Function Programming 이라는 두마리 토끼를 잡기 Scala에 대한 압박(나도 Scala 공부 좀 본격적으로 해볼까?)

  • JPub-스칼라로 배우는 함수형 프로그래밍
     -> 1부만 4번 본 책. 완독 실패(초보자가 학습하기 어려움.)
  • Programming in Scala, 2nd edition (Artima, 2011)
     -> 초기 책으로는 이 책을 추천함. (대충 훑어만 봄.)
  • 모나드 괴담-https://e.xtendo.org/haskell/ko/monad_fear/slide#1
     -> 모나드 라는 용어 몰라도 된다는 글. (아싸~ 위로가 되는 글)

6. 나는 Backend 개발자야. 리눅스와 네트웍 및 성능을 잘 알아야해. 이게 살 길 이야

  • 조대협의 서버 사이드-소프트웨어 개발과 테스트
  • 조대협의 서버 사이드-대용량 아키텍처와 성능 튜닝

-> 1월달에 사서 기억이 … 아무튼 항상 조대협님의 블로그는 자주 가는 인기 사이트

  • 제이펍-그림으로 공부하는 시스템 성능구조
     -> … 좋았어요. 하지만 생각보다 어려움.
  • Systems Performance Enterprise and the Cloud(위키북스-시스템 성능 분석과 최적화-브렌든 그레그 저/오현석,서형국 공역)
     -> 영문판으로만 가지고 있었는데 기본적인 리눅스 구조 설명해주고, 튜닝관련해서 알아야 할 구조 설명해주고, 성능 방법 알려주고 실제 분석함. (다 이해할 수 없지만… 난 개발자니까…감 잡는데 필요해 보임.)
     -> 필요할 때마다 끼고 보아야 할 책으로 보임.
  • 올해 리눅스와 네트웍에 대한 좋은 블로그 글 들이 너무 많았던 한 해 시스템 엔지니어 분들께서 좋은 글들을 너무 많이 써주셨어요.

7. 도대체 나는 언제 Big Data 해 볼 수 있는거야?

내가 비록 경험하지 않아도 이 책 하나 때문에 위로가 되는 책.

Oreilly-Designing Data Intensive Applications

정식 출간을 기다리고 있는 책.


올해를 돌이켜보면 관심있게 본 것 중에 Front 쪽은 거의 없네요.

살기 위해 backend 쪽에 좀 많이 집중했던 것 같네요.

내년에는 어떤 일들이 기다리고 있을까요?

2015년 마지막날.

2016년에 인사 드릴께요. 새해 복 많이 받으세요.

Show your support

Clapping shows how much you appreciated gilwonOh’s story.