본문 바로가기

반응형
CATEGORY 43

2017 스프링 캠프 첫번째날 후기 올해 첫 대규모 세미나인 스프링 캠프에 참석하게 되었습니다. 어벤져스급 연사님들이 나오시는 세미나에서 하루 동안 많은 꿀팁들을 얻을 수 있었습니다. 모든 것을 다 정리하고 싶은 욕심은 넘쳤지만 정신없이 듣느라 간략하게 제 느낌(?)데로 정리해 보았습니다.0.index1.keynote(박성철님)2.프로세스와 스레드, NIO 그리고 리액티브 스트림(부종민님)3.Async & Spring(토비님)4.Spring Web Flux(토비님)5.Spring Cloud Data Flow(정윤진님)6.gㅏ벼운 RPC, gRPC(빠르고 가벼운 Polyglot RPC framework)(오명운님)1.keynote(박성철님)멍하게 듣다가 시간이 흘러갔습니다. 예전 피씨의 탄생 초창기부터 현재까지 그리고 앞으로는 어떻게 흘러갈.. 2017. 4. 22.
토비의 스프링 | 6장. AOP3 - 프록시 팩토리빈과 포인트컷 프록시 팩토리 빈 방식의 장점/한계장점데코레이터 패턴과 같은 프록시를 도입하려고 했을 때 고민했던 문제점을 거의 완벽하게 해결해 준다.다이내믹 프록시를 이용하여 타깃 인터페이스를 구현하는 클래스를 일일이 만들지 않아도 된다.하나의 핸들러 메소드를 구현하여 부가기능 코드의 중복 문제를 해결한다.DI 설정만으로 다양한 타깃 오브젝트에 적용 가능하다.한계하나의 클래스 안에 여러개의 메소드 적용은 가능하지만 여러 개의 클래스에 공통적인 부가기능을 제공하는 일은 불가능하다.하나의 타깃에 여러 개의 부가기능을 적용하려 할 때도 문제이다.트랜잭션, 보안 기능, 기타 부가기능을 담은 프록시를 추가하려 해도 설정 코드는 그만큼 추가로 늘어나는 한계가 생긴다.TransactionHandler 오브젝트가 프록시 팩토리 빈 .. 2017. 4. 17.
토비님과 저녁식사 후 생각 정리 태기님의 소개로 토비님과 저녁식사를 하면서 궁금했던 질문들을 정리! 1. 디자인패턴을 선행해야하는가?- NO. 디자인패턴은 소통을 위한 언어. 개발을 충분히 한 후 디자인패턴을 한번쯤 보아도 좋다. 2. 웹개발에 알고리즘이 중요한가?- NO. 진짜 할꺼 없으면 해라. 다만 기본적인 방법들이 있다는 것은 알아야함(자료구조처럼). 자바 API와 라이브러리에서 이미 고도화된 것들을 제공하고 있다. 그것을 잘 쓰면 된다. 3. 객체지향을 더 잘하려면 어떻게 해야하는가?- 팁은 없다. 많이 해봐야한다. 책을 읽고 이해하는 것도 중요하지만 자신이 직접 고민하고 구현해 보는게 가장 빠른 길! 4. 웹 개발자가 리액티브 프로그래밍을 잘 해야하는가?- No. 웹 개발 백엔드쪽에서는 리액티브를 할 일이 거의 없다. 안드로.. 2017. 4. 14.
토비의 스프링 | 6장. AOP2 - 다이내믹 프록시 6.3 다이내믹 프록시와 팩토리 빈우리는 트랜잭션 경계설정과 비즈니스 로직 코드를 분리하기 위해 전형적인 전략 패턴을 사용하였다.부가기능은 자신이 핵심기능을 가진 것처럼 꾸며서 클라이언트가 자신을 거쳐 핵심기능을 사용하도록 했다.그렇게 하기 위해 인터페이스를 통해 부가, 핵심기능을 접근도록 하였다.이렇게 마치 자신이 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 것을 대리자, 대리인과 같은 역할을 한다고 하여 프록시(Proxy)라 부른다. 프록시를 통해 최종적으로 요청을 위임받아 처리하는 실제 오브젝트를 타깃(tartget) or 실체(real subject)라 부른다.프록시의 특징은 타깃과 같은 인터페이스를 구현했다는 것과 프록시가 타깃을 제어할 수 있는 것이다... 2017. 4. 7.
Freemarker Macro 이해하기 서버 템플릿 엔진으로 Freemarker를 많이 사용해 왔지만 궁금했던 함수들은 그때그때 Freemarker docs에서 확인해 보고 따로 정리는 하지 않았었습니다. 모든 것을 다 정리할 필요는 없을것 같고 그동안 해깔려했던 macro 함수를 간단한 예제를 통해 정리해 보았습니다. 모든 소스는 github에 있습니다.1. macro란?macro는 반복되는 구문에 대해 틀(템플릿)을 미리 지정해 놓고 호출하여 사용할 수 있게 해주는 함수입니다. 파라미터를 넣을수도 있고 nested, return 함수를 사용하여 유연하게 응용하여 사용할 수 있습니다. 또한, macro는 선언 위치에 상관없이 사용가능 합니다.(마치 자바스크립트의 호이스팅같은...) 기본 구조는 다음과 같습니다. ... ... ... Targ.. 2017. 4. 7.
토비의 스프링 | 6장. AOP AOP는 IOC/DI, 서비스 추상화와 더불어 스프링의 3대 기반기술의 하나이다. 이 장에서는 AOP의 등장배경, 도입 이유, 장점이 무엇인지 살펴본다.6.1 트랜잭션 코드의 분리비즈니스 로직과 트랜잭션 경계설정의 분리를 통해 성격이 다른 코드를 각각 독릭적인 코드로 만들 수 있다.public void upgradeLevels() throws Exception { TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition()); try { upgradeLevelsInternal(); this.transactionManager.commit(status); } catch (Exception .. 2017. 4. 5.
Spring Boot 환경에서 webpack dev server 사용하기 Spring Boot에서 Webpack을 사용하며 script 개발시 webpack --watch를 사용하여 디버깅하였습니다. Boot의 devtool를 설정하여 live reloading이 가능하였지만 watch기능이 bundle파일을 아예 새로 만들어 주는 형식이라 실시간으로 변경을 감지하지 못하였고 그에 따라 디버깅이 굉장히 불편했습니다. 프론트 개발시에도 실시간 디버깅을 위해 webpack-dev-server를 사용하였고 이제는 F5를 손에서 떼버리게 되었습니다. (부끄럽게도 처음에는 Spring 환경에서 webpack-dev-server를 못쓰는줄 알았습니다...) 모든 코드는 github에 있으며 아래는 이에 관한 설정내용입니다.저의 주 개발환경이 freemarker(Server Tmeplat.. 2017. 3. 24.
실서비스에서 CoffeeScript를 ES6로 변환하기 사내의 모바일웹 프로젝트의 프론트 환경이 CoffeeScript로 개발되어 있어 여러가지 불편을 겪었습니다. 이는 오랫동안 풀어야 할 숙원사업(?)이였는데 이를 해결하며 느꼈던 점, 절차, 노하우를 공유하고자 합니다. 제가 느꼈던 CoffeeScript 환경의 문제와 Webpack + ES6 도입 이유를 정리해 보았습니다.CoffeeScript 개발환경 문제전역객체 사용의 남발(CoffeeScript와는 무관합니다)기존 코드가 모듈화 되어 있지 않았습니다.(CoffeeScript와는 무관합니다)그래서 의존 관계 파악이 어려웠고 유지보수, 기능 개발에 제한이 있었습니다.개발 진행중 수정된 사항을 즉시 변환해 주는 컨버팅 도구(Webpack, browsify)를 쓰고 있지 않아 개발진행이 느렸습니다.Coff.. 2017. 3. 22.
2017 AWSomdeDay 후기 클라우드 관련 다양한 부스!규모가 큰 행사인 만큼 세종대 컨벤션 홀에서 진행되었습니다.클라우드 환경으로의 이행과 새로운 기술력 확보의 필요성피드백 여부에 따라 50달러 AWS Credit 제공솔루션즈 아키텍트, 아마존웹서비스(김일호) 아마존 웹서비스란 어떤 것인가?, 어떠한 아이디어로 도출되었나 등을 설명해 드립니다.온라인 서비스를 하다가 왜 갑자기 클라우드 서비스를 하게 되었을까?온라인 쇼핑 서비스입니다. 모든 고객들이 안전하게 서비스를 사용하려면 엄청난 인프라 기술들이 들어가 있을 겁니다.이러한 것들을 외부에도 공개하여 이롭게 하기 위해 클라우드 서비스를 하게 되었습니다클라우드 컴퓨팅 시장의 개척자(2006)1만 시간의 법칙처럼 아마존 웹 서비스는 10년 동안의 시간 동안 노하우를 내재화하여 고객분들.. 2017. 3. 19.