스프링개발자/201 - 일반
-
22. 스태틱 vs 싱글톤 (Static vs Singleton)스프링개발자/201 - 일반 2020. 10. 29. 10:43
오늘 회사에서 코드리뷰를 받다가, 해당 클래스가 Spring Component(Singleton)인데, 왜 그 안에 static method를 썼냐고 질문을 받았다. 스태틱과 싱글톤에대해 생각해본 적이 거의 없어서, 알아보았는데, 정리된 내용을 여기에 적는다. 먼저, 스태틱과 싱글톤은 비교는 apple to apple의 올바른 비교의 대상이다. 스태틱 클래스는 스태틱 메소드만을 구현 할 수 있다. 인스턴스를 만들 수 없고, 생성자도 갖지 않으며, 거의 Utility 성 함수의 모음 같은 역할이다. 성능도 스태틱이 빠르다. 싱글톤에서는 OOP의 장점을 살려서 interface, override, lazy loading 등등 프로그램적으로 활용할 수 있는 여지가 많다. 결론적으로 @Component 에서는 ..
-
21. MongoDB를 꼭 써야해?스프링개발자/201 - 일반 2020. 10. 19. 02:34
1. 개요 우리 팀은 vehicle route optimization을 제공하는 팀이다. 고객마다 중요하게 생각하는 parameter들이 다르기 때문에 이 값들을 db에 configuration, objective 등의 형태로 SQL을 통해 저장한다. 최근 NoSQL(MongoDB)를 사용하기 시작했는데, schema에 딱히 얽매이지 않고 데이터 구조가 나중에 바뀌더라도, 코드의 큰 변화 없이 그냥 저장하면 되기 때문에, 고객 metrics를 저장하기 위해 사용하고 있다. 이와중에, 고객이 보낸 입력 데이터와 우리의 결과(return) 값들을 저장하는 logging framework를 우리가 직접 몽고로 만들기로 했다. (Splunk가 고객 입력데이터중 몇몇 필드를 masking 하는 문제가 있어서이다)..
-
20. @Scheduled 어노테이션스프링개발자/201 - 일반 2020. 10. 17. 04:40
1. 개요 Cron Job처럼, 주기적으로 실행해야되는 action들을, 스프링 레벨에서 구현 할 수 있다. (본 예제는 기존에 진행하던 코드를 포함하고있습니다) 2. 스프링 설정 @EnableScheduling 어노테이션을 Configuration 레벨에 추가한다. package com.example.monorepo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.scheduli..
-
19. 자바 인터페이스 with code body스프링개발자/201 - 일반 2020. 10. 2. 04:41
자바8부터 인터페이스에도 코드를 쓸 수 있다. default 혹은 static 메소드에 한해서. 인터페이스 변수(variable)를 갖는 것도 가능하다 1. 코드를 품은 인터페이스 public interface Objective { int offset = 2; // 변수도 선언 및 초기화 가능 default int solve(int a, int b) { return offset + a + b; // 코드를 품은 녀석 } int guess(int a, int b); // 원래 쓰는 방식 } 2. 인터페이스 구현체s public class MulObjective implements Objective { @Override public int solve(int a, int b) { return offset + ..
-
18. Git 브랜치 프로텍션(Branch Protection Rule)스프링개발자/201 - 일반 2020. 9. 7. 12:41
다음의 상황을 막을 수 있다. 1) Master branch에 직접 push 2) 내가 PR을 만들고 approve 3) 아무도 PR을 approve하지 않았는데 merge 하기 4) build failure가 branch를 merge 하기 5) PR을 approval 받고 난뒤에 추가로 commit해서 merge하기 1. git repo 관리자 권한(admin) Settings 메뉴가 보여야 한다. Settings -> Branches 2. 설정 위의 그림과 같은 설정을 많이 쓴다. 마스터 브랜치에 적용한다 1번항목은 PR을 merge하기 위한 최소 approve 갯수 2번은 approve이후에 new commit이 있으면 기존 approve가 취소된다(팀의 상황마다 유동성 있게 하자) 3번은 지정된 ..
-
17. 자바 스트림스프링개발자/201 - 일반 2020. 9. 7. 04:29
자바8부터 쓸 수 있는 Java Stream. 이게 무엇이고 어떠한 장점이 있는지, 그리고 꼭 써야할지 생각해본다. 1. 자바 스트림이 무엇인가? Introduced in Java 8, the Stream API is used to process collections of objects. A stream is a sequence of objects that supports various methods which can be pipelined to produce the desired result. >>> 자바 8에서 소개된, 스트림 API는 List등의 collection 객체를 다루는데 유용하게 쓰인다. >>> 스트림이란 연속된 하나이상의 객체인데, 스트림은 여러 메소드를 지원하며 >>> '파이프라인'이..
-
16. 도커(Docker)를 사용해보자스프링개발자/201 - 일반 2020. 8. 3. 02:30
[배경] 도커(Docker)를 쓰면 어플리케이션이 환경에 얽매이는 문제를 해결해준다. 예를들어, 내 어플리케이션의 데이터베이스가 MySQL인데, 도커를 쓰면 다른 OS시스템에 갈때마다 설정을 다시 할 필요가 없다. MongoDB, Jenkins 등등 다른 환경 dependency또한 하나의 도커에 모두 올려서 구동하면, 어디에서나 나의 도커 환경을 불러와서 별도의 셋업없이 바로 구동할 수 있는 Platform as a service(PaaS)이다. 로컬에서 도커를 띄우는 연습을 해보자. 도커개념 설명 유튜브 비디오 by "얄팍한 코딩사전" https://www.youtube.com/watch?v=tPjpcsgxgWc [학습목표] 도커가 무엇인지 이해한다 도커를 설치할 수 있다 도커 이미지를 설치할 수 있..
-
15. 외부 API를 호출해보자스프링개발자/201 - 일반 2020. 8. 1. 07:06
[배경] Vehicle Routing Problem(VRP)에서 Routing을 하기 위해서는 맵 정보가 필요하다. A,B,C 라는 장소가 있으면 A에서 B까지의 거리, A에서 C 까지의 거리, B에서 A까지 등등, 3x3 matrix가 필요하다. 이 Matrix를 ODMatrix라고 부른다. OD는 Origin Destination의 약자이다. ODMatrix를 구하는 가장 쉬운 방법은, 두 위치의 lat,long coordinate의 차이를 구해서 속도로 나눠서 travel time을 구하는 단순한 방법도 있다. 하지만 교통상황 등을 고려하기 위해서 현실에서는, Heremaps와 같은 mapping provider 외부 api를 호출한다. 이 글에서 Heremaps의 api를 호출해서 이 OD Mat..