티스토리 뷰

Log/.TIL

[TIL]171113-1119

가그린민트 2017. 11. 15. 09:40

11 / 15 (수) ~ 19 (일)

당분과 카페인은 목 밑까지 차오르고, 콧등에 서리는 날선 현실감은 스스로에게 포섭된 그를 끄집어낸다. 도피란 그저 희망없는 망상이라는 사실을 새삼 되새긴다. 감각은 때론 체계적인 사고보다 더욱 생생한 인상을 마음속에 남기는 것 같다. (새벽의 감성에 쓰는 뻘글..)

이번주 TIL 작성한 것들을 날려서 한번 회고해보는 시간을 가져본다. (지금 2시인데 ㅡㅡ?) 이번 주는 포비가 페이스북에 남긴 구인관련 글이 무언가의 이별을 고하는 것 같아 다소 먹먹한 한 주였다. 이번 주에 학습하려 했던 주제들은 DI 프레임워크, Node JS 및 socket io vs Websocket, Jenkins CI 환경, Docker, DB Migration 도구 그리고 니콜라스의 카카오 코딩(HTML + CSS) 등..

DI 프레임워크 실습을 하면서 Bean Factory에 대해 학습할 수 있었고 운 좋게도 정진욱 님께서 마침 포스팅을 하셔서 덕분에 DI, DIP, IoC에 대한 개념이 좀 더 명료해졌다. 그런데 지금 보니 DI 쪽에 실습을 빼먹은 부분이 있다. 다음주엔 이 부분을 먼저 봐야겠다.

두번째로 Node JS관련 주제들.. 자료를 적당히 찾아봤으나 포스팅을 하지 않아서인지 뭔가 찝찝하다. 흠.. 그동안 node js를 Single Thread 기반의 Event Loop, 비동기 IO 처리등을 하는 Javascript로 짜여진 백엔드 서버 정도로 생각했는데, 비동기 이벤트 주도의 javascript runtime이라는 정의가 더 명확한 것 같다. 앞의 설명은 주로 활용되는 예들의 특징이랄까.. 그리고 조대협님의 블로 포스팅 중 node js도 File IO 등 OS에 따라 non-blocking function을 제공하지 않는 경우에 내부적을 Thread pool을 사용한다는 점은 인상적이었다. 아무튼 한번은 정리를 해야할텐데..


Hump day엔 Java외의 주제로 시간을 채우고 싶었고, 니콜라스의 카카오 클론코딩 이론편을 통해 HTML + CSS를 학습하는 시간을 가졌다. 고급 기술을 접했다기 보다는 CSS를 이루는 기본 개념들을 경험하는 시간들이었다.

목요일부턴 마지막 프로젝트라고 할 수 있는 Trello 개발 프로젝트를 시작했다. 로컬 개발 환경을 구축하기 위해 몇가지 Controller 및 DTO 등 작성 및 로깅 셋팅을 하고 테스트한 후 AWS EC2에 배포하였다. 이번에 Restful로 작성하는 컨셉이어서 그런지 Test code가 다소 생소하기도 했고(RestAssured라든지 ResponseEntity를 활용하는 부분 등) 빌드도구로 gradle을 처음 써보고 DB로 mysql을 바로 연결하면서 다소 시간이 소요되었다.

개발 서버환경은 금방 구성할 줄 알았는데, 이것도 결론적으로는 하루정도 소요되었다. 처음에 java 9를 설치하였다가 gradle을 지원하지 않아 다시 설치하였고, CentOS 7로 구축하여 jenkins까지 연동하였으나, docker 설치하려보니 yum repository 문제로 다소 해메다가 ubuntu로 구축하였다. 하지만 결국 CentOS 7에서 docker 설치를 성공하여 그냥 CentOS 로 진행하게 되었다.

그리고 오랫만에 쉘 스크립팅을 작성하였다.

jenkins 구동중에도 작은 이슈가 있었는데, 스크립트로 실행시 정상구동되는 것이 jenkins에서 진행시 에러가 나던 부분, process tree killer 문제 등을 해결하면서 프로세스의 자원이나 권한 등의 문제를 생각할 수 있었다. 전에 Travis CI로만 구성해봤어서 아쉬웠었는데 이번 기회에 Jenkins를 경험할 수 있어서 좋았다.

그리고 주말에는 Docker를 학습했다. 결국은 성공하지 못했다 ㅠㅠ 이틀 내내 해메는 통에 docker 및 docker compose에 대한 두려움도 사라졌고 명령어들도 다소 익숙해졌는데.. 왜 link가 되지 않는 것인지.. distDocker로 빌드한 것을 사용하는 것과 docker container에서 gradler build한 것을 그냥 실행하는 것과 무슨 차이가 있는걸까.. MySQL Container는 제대로 올라온 것 같은데.. 흠..

이번에 Docker를 학습하면서 느꼈던 점은 git과 kickstart, VMware를 합쳐놓은 인상이었다. VMware 같이 단일 host에 뭔가 여러가지를 띄울수 있지만, Docker는 Hypervisor를 사용하여 하드웨어를 가상화한다기 보다는 기존의 파일시스템에서 일부 디렉토리를 할당하는 것 같다(리눅스 커널단에서 제공하는 격리 기능(cgroups, namespace)를 활용하여). 그리고 그 공간에 여러 어플리케이션을 설치 및 세팅하고 패키지화해서 재활용하는 부분이 kickstart 서버와 비슷한 느낌이었다. git과 유사하다는 점은 이런 이미지들의 버전 관리 기능이 제공되고 docker hub 같은 저장소에 이미지를 push / pull하여 공유할 수 있다. 그리고 이 이미지를 실행하면 프로세스 같은 그것을 container라고 한다. 주말에 한 주의 마무리를 짓지 않고 이런 저런 욕심을 내서 그런지(그런데 심지어 해결하지도 못한!), 다소 정리가 되지 않은 한 주가 되어 버렸다. (결국 영어회화 과제들도 못하고..) 반성하자.

주말에 코드스쿼드 온 심리상태 ??

11 / 13 (월) ~ 14 (화)

어제보다 나은 오늘이 되자. 그래서 노력하고 있고 그렇게 나는 날마다 모든 면에서 점점 좋아지고 있다.. 고 생각했다.하지만 요새 들어 과거의 나에게 놀라는 순간들이 많다. '이걸 내가 썼다고? 이런 어려운 문제들을 고민했었다고? 내가 이런 것도 했었나?'

갑자기 이 만화가 생각나는건 왜일까..

열심히 살았던 나였기에, 오늘의 나는 그를 이겨내기가 녹록치 않다. 아니, 패배의 연속이다. 월요일을 그렇게 흘려보내고 (DI 프레임워크 실습 중 재귀의 늪에 빠져) 화요일은 좀 더 시간을잘게 쪼개고, 의도적 학습과 작은 성공들로 채우려 했다. 이제 아침 영어 회화는 제법 재미가 붙은 것 같다. 회사를 다닐때에 하루의 시작으로, 조깅하고 까페에서 전공과 무관한 책을 읽는 것을 꽤 좋아했었는데, 흠.. 나를 전혀 모르는 사람들과 익숙치 않은 언어로 대화하고 까페에서(강남 파고다 11층) 이렇게 TIL을 작성하고 하루를 시작하는 것도 꽤 즐겁다. DI에는 3시간을 할당했으나, MVC 실습 중에 있었던 ControllerAdvice나 HandlerMethodArgumentResolver 주제와 관련하여 tram 덕분에 좋은 인사이트를 (간접적으로) 얻을 수 있어, 관련 주제들을 좀 더 찾아 보았다. 덕분에 빈팩토리에 대해서도 한번 더 생각해볼 수 있었다.

그리고 Java 8 Lambda에서 Checked Exception을 보내는 것과 관련하여 pobi와 tram이 남긴 글을 통해 functional interface 활용 방안에 대해서 한번 생각해보았다. (어제 잠깐 brian이 orm만드는 것을 옆에서 지켜보다 proxy에 대해 잠깐 들으면서도 느꼈지만, 좀더 다양한 스타일의, best practice들을 많이 접할 필요가 있겠다는 생각이 들었다.)

일단은 DI 프레임워크 실습이 일부 마무리되어 Pull Request를 보냈다. 밤코 끝나고 집에와서 (전에 읽다 포기한) 최범균님의 Spring 4.0을 훑어보면서 이런 생각이 들었다. '이번 과정을 통해 나는 Spring에 스며들어 있는 개념들 중 극히 일부를 경험해보았을 뿐이지만, 스스로 학습할 수 있을 정도는 된 것 같다.'

오늘 하루 아쉬웠던 점은 node js 및 socket io와 websocket 비교 등에 대해서 내용을 정리하고 싶었는데, (자꾸 번뇌가 들어) 마무리 짓지 못해 아쉽다. event-driven, non-blocking 등의 개념은 이전에 정리를 해봤었기에 이해하는데 크게 무리가 없었는데, '소켓' 개념이 좀 낯설다.

소켓은 내가 알기로는 OSI 7 Layer 5계층의 기술로, 응용 프로그램간 세션 수립/유지/종료에 사용되는 것이다. 여기서 세션이란, 두 사용자(User든 Process든)간의 작업 시작부터 끝까지의 논리적인 연결이라고 나 나름대로 정의해두고 있다. 그리고 C언어 처음 배울 때 잠깐 했었던 소켓프로그래밍을 떠올려 보면 소켓은 포트를 열고 기다리는 것이 데몬과 같은 느낌이었는데.. websocket이 브라우저 호환성이 있다는 점이 이해가 잘 되지 않는다. 직접 구현해보거나 동작방식을 좀 더 공부해야 이해가 될 듯하다. 뭔가 websocket도 그렇고 socket io도 그렇고 애플리케이션 계층에서 Http(80포트)에 한정되어(서버와 클라이언트간 양방향 웹 푸시를 보내는 것과 관련하여) 세션의 유지를 polling, long polling, streaming 등의 기법으로 구현하는 것 같은데.. 흠.. 





'Log > .TIL' 카테고리의 다른 글

[TIL]171127-1203  (0) 2017.11.29
[TIL]171120-1126  (0) 2017.11.21
[TIL]171106-1112  (0) 2017.11.07
[TIL]171030-1105  (0) 2017.10.31
[TIL]171023-1029  (0) 2017.10.24
댓글
링크
최근에 달린 댓글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Total
Today
Yesterday