멀티 모듈 프로젝트란? 멀티 모듈 프로젝트를 처음 알게된 건 2017년 초였습니다. 당시에 저는 단일 프로젝트를 사용하고 있었습니다. 예를 들어 제가 회원 시스템을 개발 한다고 하면 member internal api member external api member batch 와 같이 서로 독립된 프로젝트 단위로 가지고 있었습니다. 이런 구조를 가지고 있을 때 가장 큰 문제점은 시스템의 중심 Domain 이 가져야할 구조와 규칙 등을 동일하게 보장해주는 메커니즘 이 없다는 것 입니다. {: style="width:75%; display:block; margin:40px auto 0;"} 개발자는 동일한 Domain 을 가지고 있는 위 3가지 어플리케이션을 열심히 복&붙하며 개발을 하게 됩니다. 매우 귀찮..
요즘 기존 프로젝트의 일부를 새로운 프로젝트로 떼어내는 작업을 하고 있다. 노후된 프로젝트인 점과 내가 알고있는 프로젝트가 아니라는 점이 지옥을 맛보게 해주고 있다. 정리를 하다보니 기능이 중복된, 프로젝트의 성격 이상으로 많은 정보를 제공하는, 불필요하게 많은 정보를 요구하는 등 이상한 End Point들이 발견되었다. 아마 오랜시간 요구사항이 점점 늘어나면서 불가피하게, 혹은 요구했었지만 이제는 다르게 사용하는 API가 되었지 않을까 생각한다. 정리를 위해 이 API들을 사용하는 서비스들에 대해서 전부 조사를 해야했고, 굉장히 많은 시간을 소비해야 했다. 정리를 하고난 후 보니 중복된 것, 사용되지 않는 것, 불필요한 요구, 제공 스펙, 그리고 그것들을 위한 테스트 코드들이 보였다. 현재와 미래의 모..
Spring Boot 기반의 자동 설정을 위한 AutoConfiguration 클래스를 만들다가 발생한 이슈를 작성합니다.주의할 점을 보기 전 알아야 할 것!@Conditional 이란?스프링4에서 도입된 어노테이션으로 조건부로 Bean을 스프링컨테이너에 등록하는 역할을 합니다. 이 어노테이션은 Condition Interface 사용하여 특정 조건부로 등록되도록 만들 수 있습니다. 그리고 현재의 스프링 프레임워크에서는 미리 정의된 Condition Interface 구현체를 가지고 있는 @Conditional 어노테이션의 파생 어노테이션들이 있습니다.주의점을 적을 어노테이션은 아래 어노테이션들 입니다.@ConditionalOnClass : 특정 Class 파일이 존재하면 Bean 을 등록.@Condit..
Spring Boot 에서 properties 설정에 대한 깨달음을 얻어 정리하고자 글을 작성합니다.몇 시간 전까지만 해도 이 글은 @PropertySource Yaml 사용하기 라는 글로 작성될 뻔 하였던 글 입니다.제가 처음 위의 주제로 글을 작성하기로 마음 먹은 이유는@PropertySource 의 Yaml 미지원@ConfigurationPropeties 의 locations Deprecated때문입니다.까려고 찾아보다가, 내가 잘못 알았구나 하는 깨달음에 바로 글을 작성합니다.발단저의 10번째 블로깅이였던 스프링 부트, YAML 적용 이라는 블로그에서 소개하였던 @ConfigurationProeprties 의 locations 이 Spring Boot 1.4 를 이후로 Deprecated 되었습니..
개발자에게 재능기부란? 재능기부를 가장하여 기술 사용과 습득의 목마름을 해소한 경험(자기개발?)을 기록으로 남겨봅니다.본 내용에서 최대한 기술적인 이야기를 빼려고 노력했습니다.기술 사용과 습득의 목마름..AWSAWS를 다룰 줄 아는 것이 기술스택이 된 요즘에 개발자로서 AWS를 공부해야겠다는 생각을 많이들 하고 있을 것 입니다. 저도 오래 전부터 그런 생각을 가지고 세미나도 참여해보고, 관련 이론들도 찾아보고 했지만, 역시 개발자는 직접해보는 것이 최고라고 생각합니다!그렇지만! EC2에 어플리케이션 한번 올려보고, S3에 파일 한번 올려보면 끝인 것일까요? 웹어플리케이션을 개발하며 localhost:8080을 띄우고 끝이라는 상황과 비슷하지 않을까요?아쉽지만, 제 주변에는 AWS를 운용하고 있는 환경이 ..
Spring에서 ORM을 사용하여 개발을 하며, Transaction을 이해할 때 쯔음 닥쳐온 혼란이 있습니다.지인에게 자신있게 Transaction을 설명해주기 위해 Spring Boot로 빠르게 어플리케이션을 올렸고@GetMapping("/member/{memberIdx}") public String member(@PathVariable Long memberIdx, Model model) { Member member = memberRepository.findOne(memberIdx); model.addAttribute("name", member.getName()); model.addAttribute("team", model.getTeam().getName()); return "index"; } Tra..
Redis란?Remote Dictionary Server의 약자오픈 소스 소프트웨어휘발성이면서 영속성을 가진 key-value 저장소Redis는 NoSQLNoSQL은 데이터 간의 관계를 정의하지 않고 고정된 스키마를 갖지 않는 새로운 형태의 데이터베이스로서, 관계형 데이터베이스(RDBMS)를 경량화한 데이터베이스 입니다. 관계형 데이터베이스의 특징 을 제거하고 만들어진 다른 모든 형태의 DBMS를 칭하 기도 하며, SQL 계열 질의어를 사용할 수 있다는 사실 을 강조한다는 면에서 “Not Only SQL”로 불리기도 합니다.Redis는 이러한 NoSQL의 종류 중 하나입니다.데이터 모델NoSQL이 가지고 있는 대표적인 데이터 모델은 아래와 같습니다.Key-Value하나의 Key에 하나의 Value를 갖는..
(1) 스프링, isomorphic, 서버사이드 렌더링(2) 스프링, isomorphic, 서버사이드 렌더링 - Handlebars Spring + Nashorn을 통해 isomorphic할 첫번째 클라이언트 템플릿 엔진은 handlebars! 1. handlebars란? Handlebar.js(이하 핸들바)는 자바스크립트의 템플릿 엔진 중 하나로 Mustache를 기반으로 구현한 템플릿 엔진입니다. Mustache는 콧수염모양의 {{ }} Bracket을 이용하여 data를 표현하는 것을 의미하며, 이를 이용하면 html페이지에서 HTML+Bracket의 구성으로 디자이너와 개발자가 협업할 때도 디자이너에게도 이해하기 쉬운구조로써 협업을 하는데도 도움이 됩니다. (참고 : 돛단배의 항해일지) 다양한 f..
(1) 스프링, isomorphic, 서버사이드 렌더링(2) 스프링, isomorphic, 서버사이드 렌더링 - Handlebars SPA(Single Page Web Application)가 등장하고 활성화됨으로인해 클라이언트 렌더링은 사용자에게 더 나은 경험을 제공하기 위한 중요한 요소가 되었습니다. 그렇다면 어디까지 서버에서 렌더링하고 어디부터 클라이언트에서 렌더링해야할까 고민을 하게 됩니다. 어디까지 서버에서 렌더링해야 할까에서 고려해야할 첫번째는 SEO(검색 엔진 최적화) 입니다. 네트워크상에는 컨텐츠를 수집하는 다양한 bot들이 존재합니다. 대표적으로 구글봇이 있습니다. 봇의 수집된 콘텐츠는 여러 검색엔진의 검색대상으로 분류될 수 있습니다. 대부분 봇들은 자바스크립트를 실행하지 못하며, 구글봇..
Spring Boot에서 YAML 환경변수를 지원한지가 꽤 되었는데 아직 properties를 사용하는 프로젝트가 많이 있습니다. 이것을 YAML로 꼭 변경해야 하나 하는 물음이 생겨서 관련 내용을 정리해보았습니다. YAML이란? XML, C, 파이썬, 펄, RFC2822에서 정의된 e-mail 양식에서 개념을 얻어 만들어진 '사람이 쉽게 읽을 수 있는' 데이터 직렬화 양식이라고 합니다. (WIKI 참고) 이 양식은 JSON에 포함되며 계층적인 설정 데이터를 정의하는데 매우 편리한 문법을 가지고 있습니다. Spring Boot의 지원 'spring-boot-starter'에서는 자동으로 SnakeYAML 'starter POM`'를 제공하며, SpringApplication 클래스는 클래스패스 상에 Sn..