본문 바로가기

All

(30)
AOP에 걸린 Method의 Parameter 이름 가져오기 먼저, AOP가 뭔지에 대해 알아보자.Aspect-Oriented Programming 이란 프로그램 구조에 대해 또 다른 사고방식을 제공함으로써 Object-Oriented Programming을 보완한다. OOP 모듈성의 핵심 단위는 클래스인 반면, AOP는 모듈화 단위가 관점(Aspect)이다. @Transactional이 대표적인 예이다. 공통의 기능(트랜잭션)을 분리 및 모듈화하여 여러 코드(insertUser, selectMoney)에 쉽게 적용할 수 있게 해준다. 특정 계정의 ID와 token을 통해 유효한지 확인하는 코드가 프로젝트 전반에 산재해 있다고 가정을 해보자. 그리고 이를 비즈니스 코드와는 크게 관계없는 하나의 공통된 관점으로 판단을 하고, AOP를 적용시켜보자. 자세한 코드는 g..
Spring Boot 1으로 Todo List를 만들어 보자 이번 게시글에서는 Todo List 만들기에 앞서 간단하게 세팅과 필수적인 기능들을 살펴보도록 하자. 대상은 Spring Project는 해봤으나 Boot는 접하지 못한 분들이다. Spring의 개념적인 부분보다는 동작하는 기능에 무게중심을 둘 예정이다.개념에 좀 더 관심이 있다면, 토비의 스프링이나 공식 문서를 확인하도록 하자. ( Spring Project, Spring Boot )개발 환경은 Mac OS와 Intellij로 진행이 되지만 Window나 이클립스를 쓰더라도 충분히 따라올 수 있을 것으로 보인다. 코드는 Github에 있으니 같이 보면서 하는 것이 도움이 될 것 같다. (본문코드와 조금 다를 수도 있다.) 이 포스팅은 크게 Project 생성, API구현, Test Code 작성 3가지..
Java의 ScheduledExecutorService를 이용해서 스케줄러를 만들어보자 ScheduledExecutorService는 concurrent 패키지에 포함되어 있으며, '일정 시간 후' 또는 '주기적'으로 command(작업)를 실행시켜줄 수 있는 녀석이다.스프링을 사용했다면 간편하게 @Scheduled를 사용했겠지만, 쌩 자바를 쓸 일이 있어서 ScheduledExecutorService를 사용해봤다. 코드 자체가 직관적이기 때문에 거두절미하고 코드를 보자.import java.time.Duration; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; impo..
[Jackson] JsonInclude 속성에 대해 알아보자. Json 형식으로 데이터를 주고받을 때 Jackson의 ObjectMapper를 자주 이용한다.그런데 기본값으로 Serialize 하게 되면 null, "" 같은 (상황에 따라) 필요 없는 값 또한 모두 변환시켜준다.이를 아래의 메소드를 통하여 Serialize할 때 원하는 값만을 포함시킬 수 있다.objectMapper.setSerializationInclusion();아래 주석처럼 어노테이션으로도 이용할 수 있다. 객체마다 Include 방식이 다르면 어노테이션을 활용하자.그럼, 다양한 데이터를 가진 객체로 테스트를 해보자. jackson-databind 2.9.5를 기준으로 테스트가 진행되었다.@Getter //@JsonInclude(JsonInclude.Include.ALWAYS) public s..
Java로 날씨 알림 서비스를 만들어보자 (OOP, Clean Code) 개발동기비 오는 날만 알림을 받고 싶다. 세상에 좋은 날씨 애플리케이션은 많다. 그러나 매일 날씨 애플리케이션을 확인하는 것은 번거롭고, 내가 딱 필요한 정보만을 제공해주는 서비스도 (아마) 없다. 그래서 날 위한 서비스를 내가 만들기로 했다. 왜? 난 개발자니깐 작년에 개발실력을 향상하기 위해 온갖 서적과 영상 등을 봤다. 점차 이러한 학습량은 많아졌고, 아는 듯한 느낌은 많이 들었다. 그러나 막상 해보니 겉만 조금 알고 있었고 한계에 직면했다. 다르게 표현하자면 실질적으로 해보지 않고 한 행위들은 마치 연애를 책으로 배운듯한 느낌이 들었다. 그래서 올해부터는 실질적인 코딩에 좀 더 집중하기로 했다. 신경쓴 것OOPClean Code Test Code스케치 간단하다.스케줄러를 통해서 7시가 되면날씨 A..
Java의 List를 상황에 맞게 생성해보자 ( asList(), emptyList(), singletonList() ) 우리는 평소에 개발을 하면서 자바의 List를 많이 쓴다.이번 글에서는 List를 상황에 맞게, 좀 더 우아하게 사용하는 방법을 알아보도록 하겠다.1. 기본적인 List 생성List list = new ArrayList(); list.add("민수"); list.add("미선"); list.add("석훈");ArrayList는 최초에 생성자를 통해 객체를 만들 때 스태틱에 있는 빈 Array를 할당하는 작업만 한다.private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; }이후 add() 메소드를 실행하게..
생애 첫 기술세미나 (MSA) 스프링캠프 가기 전 Ahea에서 주최하는 세미나에 참석을 했다. 주니어급 개발자들이 스터디를 통해 나온 결과물들을 발표하였고, 나와 비슷한 나이대의 분들도 저렇게 열심히 한다는 것에 대해서 나는 강한 동기가 부여되었다. 그렇지만 아직은 때가 아니라고 판단하여 스터디원 모집을 외면했다. 그러나 Spring Camp가 더 큰 동기를 부여해주었고, 아직 부족한 점은 많지만 일단 지르고 보자는 생각으로 Ahea에 연락을 하였고 스터디에 동참하게 되었다. 이것저것 작은 것을 하며 2017년이 지나고, 2018년 1월 각자 스터디 주제를 정하여 개인 스터디를 진행하였다. 이직한 곳에서 MSA로 아키텍처를 변경하고 있는 까닭에 나는 MSA에 대해 공부하기로 하였다. 3개월간의 개인 스터디가 진행되었고, 스터디원 간의..
[MSA] #6 Spring Cloud Netflix [MSA] #1 Monolithic Architecture 란?[MSA] #2 Microservice Architecture 란?[MSA] #3 Circuit Breaker[MSA] #4 API Gateway[MSA] #5 Service Discovery[MSA] #6 Spring Cloud Netflix 스프링과 전 세계에서 MSA를 제일 잘하는 기업 중 하나인 Netflix에선 이미 MSA 구축을 편하게 하는 많은 기술과, 갖가지 이슈에 대한 해결책 또한 제공을 하고 있습니다. Spring Cloud Netflix는 자동 환경 설정과 Spring Environment 및 다른 Spring 프로그래밍 모델 관념의 바인딩을 바탕으로 Spring Boot 어플리케이션을 위한 Netflix OSS(Open ..