본문 바로가기

반응형
전체 글 43

Spring Boot + Envers로 엔티티 이력관리하기 너무나 쉽고 편한 기능이라 쓸까말까 고민했었는데 한글화된 문서가 거의 없어서 일단 쓰기로 했습니다. 삽질보다는 공식 문서의 영문 해석능력에 따라 적용시간을 단축시킬 수 있습니다. 또, 스프링 캠프 2017에서 김영한님이 발표해 주신 자료영상을 찾아 보시면 이해하기 훨씬 수월하실 겁니다.개요Hibernate Envers 프로젝트는 각각의 대상 엔티티의 이력관리를 간편하게 도와줍니다. 정말 간단하게 적용하자면 @Audited어노테이션만 붙이면 끝납니다. 사실 Envers를 알기전까지 저는 제가 대상으로 하는 히스토리용 테이블을 따로 생성하여 json 형식으로 데이터를 저장하고 불러오곤 하였습니다. 뭐 상황에 따라 적용하는 방식의 이점이 있겠지만 Envers를 적용한다면 대상 테이블과 똑같은 테이블에 rev(.. 2017. 9. 6.
[도서 리뷰] 실전 스프링 부트 워크북 후기Spring Boot 특징제가 가장 마음에 들었던 부분은 책 표지가 이쁘장하게 꾸며져 있어 좋았습니다. 개인적으로 부트의 녹색을 좋아해서;;ㅎㅎ 일단 구성은 대부분의 스프링 부트 책과 비슷하게 스프링 부트의 주요 특징과 기능에 대해 초반 정리가 들어갑니다. 스프링 부트가 왜 필요한지 어떠한 점이 좋아서 써야하는지 등을 잘 정리해 놓았습니다.Spring Boot CLI중반에는 스프링 부트의 CLI 위주로 설명이 되어 있습니다. 대체적으로 실제 스프링 부트 개발시 IDE로 개발하기에 CLI를 써본적이 한번도 없었습니다. 왠만하면 클릭 몇번으로 원하는 의존성을 가져올 수 있고 실행도 간편하기에 따로 사용해 보진 않았지만 이런게 있다는 것을 알게되는 계기(?)였습니다.Spring Boot 프로젝트이 책의 또.. 2017. 7. 4.
Spring Boot & OAuth2 기반 소셜 댓글 시스템 개발하기 회사에서의 잉여력 + 개인의 잉여력을 가지고 회사에도 도움 + 개인적인 공부에도 도움이 되는 프로젝트를 진행해 보고 싶었습니다. 제가 맡고 있는 서비스에 아쉬운점이 소셜 댓글이 없다는 것인데(ㅠ.ㅠ) 아쉬움도 달래고 공부도 하고 제 서비스에 댓글기능도 붙일겸 직접 소셜 인증(페이스북, 구글, 트위터, 카카오) & 간단한 댓글 Getting Started를 개발하기로 야심찬 계획(?)을 세웠습니다. 모든 소스는 github에 있습니다.개요목표는 페이스북, 구글, 트위터, 카카오 등 국내에서 많이 쓰이는 서비스들의 OAuth인증을 통한 댓글 시스템 구현하기! 여기서 트위터를 제외한 다른 인증은 모두 OAuth2를 사용합니다. Spring에는 이를 구현한 고마운 라이브러리인 Spring Social과 Spri.. 2017. 6. 24.
Gradle에 task 여러개 실행하도록 설정하기 기존에는 task를 grunt 하나만 돌리다가 이번에 webpack, grunt를 함꼐 쓰게 되면서 Gradle Build시 task를 순차적으로 모두 수행하도록 설정해 보았습니다.import org.apache.tools.ant.taskdefs.condition.Os task grunt(type:Exec) { workingDir "./" if (Os.isFamily(Os.FAMILY_WINDOWS)) { //on windows commandLine "cmd", "/c", "grunt" } else { //on linux commandLine "grunt" } } compileJava.dependsOn grunt기존에 1개만 처리되는 task는 위와 같은 방식입니다. 여기서 타입을 Exec으로 받아서 하.. 2017. 6. 9.
Parameter AOP 설정하기 간단 팁 보통 메소드단위의 AOP를 많이 사용하시는데 유저정보에 대한 값을 파라미터에서 AOP방식으로 캐치하여 User객체로 전환시키는 방법을 간단한 예제를 통해 알아보겠습니다.@Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface User { }위의 예제소스를 보시면 User 어노테이션을 PARAMETER타입으로 선언하였습니다. 어노테이션의 매개변수가 필요하시다면 내부에 생성하시면 됩니다.@Controller public class Controller { @GetMapping(value = "/test") public String test(@User User user, HttpSession session) { ..... 2017. 6. 9.
DDD 입문 후기 최범균님의 DDD강의를 들으며 개인적으로 새로 알게되고 중요하다고 생각되는 포인트만 정리하였다.인프라스트럭처고수준쪽 페키지에 인터페이스를 만들어 두고 이를 구현한 클래스는 인프라스트럭처에 둔다.모듈 구성너무 빡세게 제한을 두면 힘들다...상황과 팀에 따라 유연하게~적절한 아키텍처를 구현해서 상호협의적으로 가는게 좋다.아키텍처 설계시DIP구조를 먼저 머리속에 넣어두는 것(좋은 설계로 가는 길)즉, 저수준과 고수준을 놔눠두는 것응용 서비스에 도메인 로직을 넣지 말자CQRS상태를 바꾸는 기능 - JPA조회하는 기능 - MySQL위의 상황에 대해 두 개의 Model을 구성한다.벨류 매핑별도 테이블이라고 무조건 Entity로 생각하지 말자.일단 Value인지 아닌지 먼저 고민한 후에 그 다음에 엔티티로 적용하는게.. 2017. 5. 20.
[노력은 왜 우리를 배신하는가] 1만시간의 재발견 후기 박재성 강사님의 추천을 받고 읽게 되었다. 알게된지 거의 1년 정도가 지난 뒤에... 기존에 나왔던 1만 시간의 법칙이 왜 제대로 적용되지 못하는지 그 이유에 대해 여러 연구를 통한 결과를 도출하고 있다. 그 핵심에는 심적 표상, 의식적인 연습, 목적의식 있는 연습 등 이다.심적 표상심적 표상이란 우리가 어떠한 대상을 추상적이거나 대상 그 자체로 생각하는 것이 아닌 자신만의 심적 이미지로 생각하는 방식이라 해석했다. 예를 들어 어떠한 사람은 숫자를 외울때 그 숫자자체를 외우는 사람이 있을 것이고 어떤 사람은 몇 개의 묶음으로 외울 수도 있다. 또 다른 사람은 자신만의 상응하는 이미지를 반영하여 외울 수도 있다. 이러한 방식의 사람중 누가 더 빠르고 정확하게 외울 것인가? 짐작하다시피 제일 마지막 사람이 .. 2017. 5. 14.
토비의 스프링 | 6장. AOP4 - AOP란 무엇인가? 이제까지 UserService에 트랜잭션을 적용해 온 과정을 되짚어 보자.1. 트랜잭션 서비스 추상화트랜잭션 적용을 비즈니스 로직과 함께 넣었을 때 문제가 발생한다. 트랜잭션을 제외한 부분에서 수정작업이 있더라도 트랜잭션 적용 코드를 수정해야 하는 심각한 문제가 있었다. 그래서 인터페이스와 DI를 통해 무엇을 하는지를 남기고 분리하는 트랜잭션 추상화를 수행하였다. 트랜잭션 적용은 더 이상 비즈니스 로직 코드에는 영향을 주지 않고 독립적으로 변경할 수 있게 되었다.2. 프록시와 데코레이션 패턴여전히 비즈니스 로직에는 트랜잭션을 어디에 적용할지 경계설정을 담당하는 코드가 남아 있었다. 이를 제거하기 위해 DI를 이용한 데코레이터 패턴을 적용하였다. 클라이언트가 인터페이스와 DI를 통해 접근하도록 설계하고 데.. 2017. 5. 2.
2017 스프링 캠프 두번째날 후기 어제에 이어 두번째날의 몇 개의 세션을 선택하여 후기를 남깁니다. 오로지 제 관점에서 썼습니다.0.index1.keynote(정상혁님)2.Reactive Spring(Spring 5 & Reactor)(정윤진님)3.Dooray 서비스 적용 사례를 통해 본 Spring Data JPA 실무 적용 How-To(신동민님)4.Spring Cloud Stream을 활용한 실시간 콘텐츠 배포 시스템 구축기(이경일님)5.스프링 부트를 대하는 자세(권용근님)6.스프링 데이터 Envers(김영한님)1.keynote(정상혁님)네이버 PaaS 소속발표자료는 여기있습니다.RowMapperResultSetExtractorList의 아이템 개수를 모를 때에도 LinkedList 대신 ArrayList로 변경AbstractCach.. 2017. 4. 23.