Introduction 최근에 어떤 애플리케이션을 만들면서 겪은 일입니다. 조직이나 그룹별로 서로 다른 Database 에 접근해야 했습니다. 걔다가 그 조직은 동적으로 증가할 수 있었기 때문에 Predefine 할 수 없었습니다. 결국 사용자별 DB 요청 시에 Datasource 연결을 달리 해야 하는 이슈가 있었는데 다행도 스프링에서는 위 문제를 해결할 수 있는 추상 클래스를 제공하고 있었습니다. 이 글에서는 간단한 코드로 Spring에서 런타임 시 동적으로 Datasource를 결정하는 방법을 알아보겠습니다. 구성 build.gradle 최신 버전의 spring boot 와 mybatis, mysql connector 등의 dependency 포함하고 있는 간단한 build.gradle 파일입니다...
Reactive Programing 요즘 리엑티브 또는 Rx(RxJava, RxJs 등..) 라는 용어를 많이 듣게 됩니다. 한마디로 말하면 논 블로킹 이벤트 기반 비동기 스트림 데이터 프로그래밍을 위한 패러다임입니다. 이렇게 말해도 감은 잘 오지 않습니다. 사실 Reactive 한 프로그래밍 개발을 위해서 필요한 개념이나 API 등을 쉽게 배울수 있는건 아닌 것 같습니다. 그래서 이 문서에서 해볼 건 "그래서 실제로 Reactive 하게 프로그래밍을 하면 어떻게 되는데?" 라는 질문에 대답을 아주 간단한 코드로 알아보려 합니다. 물론 내용은 아 뭐 이런 게 되는구나 정도이지 이건 Reactive Programing의 극히 일부입니다. Spring 5(WebFlux) + Spring Boot 2.x Sp..
코딩도장이라는 사이트가 있습니다.http://codingdojang.com/ 각종 알고리즘 퀴즈를 풀수 있는 곳 이죠 요즘 다시 문제들을 풀어보고 있는데 난이도 lv1 문제중에 이런 문제가 있더군요 "0~9까지의 문자로 된 숫자를 입력 받았을 때, 이 입력 값이 0~9까지의 숫자가 각각 한 번 씩만 사용된 것인지 확인하는 함수를 구하시오" 위에 내용을 정규식으로 한번 풀어 봤습니다.1var regex = /^(?=\d*0)(?=\d*1)(?=\d*2)(?=\d*3)(?=\d*4)(?=\d*5)(?=\d*6)(?=\d*7)(?=\d*8)(?=\d*9)\d{10}$/;cs 전방탐색을 이용한 방법이고 이것을 응용하면 보통 많이 쓰는 패스워드 양식을 검증하는 정규식도 만들어 낼수 있습니다.
개발을 하다 보면 IP 처리를 위한 여러 가지 작업을 할 때가 있습니다. 그럴 경우 사용 가능한CIDR 주소체계에 대한 계산을 해주는 유틸 클래스가 있어 소개해 보려 합니다.해당 CIDR의 시작 IP, 끝IP, Broadcast IP, Network IP,IP 포함 여부등을 확인할 수 있습니다. SubnetUtils maven commons-net commons-net 3.6 SubnetTest.java1234567891011121314151617181920212223242526package subnet; import org.apache.commons.net.util.SubnetUtils; public class SubnetTest { public static void main(String[] args)..
객체지향의 요소중에 정보은닉이 있습니다.자바도 객체 지향언어이 때문에 정보은닉을 위한 멤버 필드나,메서드의 외부 노출을 대한 범위를 정할 수 있는아래 표와 같은 4가지 접근 제어자를 제공합니다. 접근 제어자 클래스 패키지 상속 패키지 외부 Private Y N N N Default Y Y N N Protected Y Y Y N Public Y Y Y Y 1.Privateprivate 은 멤버필드 나 메서들의 접근 범위를 클래스 내부로 제한합니다. 또한 클래스나 인터페이스는 private일 수 없고인터페이스에 선언된 메서드 나 필드 역시 private 일 수 없습니다. Person.java123456789101112package info.m2sj; public class Person { private St..
추상클래스 와 인터페이스는 언제 사용하면 될까요? 추상클래스, 인터페이스는 혼자서는 인스턴스화 될 수 없으면 자바에서 상속을 위해 사용할 수 있는 기법입니다.그럼 언제 추상클래스를 사용하고 인터페이스를 사용할까요?자바8+ 이상부터는 인터페이스의 큰 변화가 생겼지만 (java 8 interface change) 여기서는 논외로 두겠습니다.우선 추상 클래스 와 인터페이스의 스펙상 차이점을 알아보겠습니다. 추상클래스단일 상속추상 메서드와 구현 메서드 두 가지 모두를 가질 수 있음접근제어자 public,private,protected 메서드,변수를 가질 수 있음 인터페이스다중 상속메서드 바디를 가질 수 없음접근제어자는 public 메서드 만 가능 (접근제어자 생략시 default 값이 public), 클래스(s..
클래스(static) 메서드는 언제 정의 할까요?자바에서 class 를 만들 때 흔히 말하는 static 메서드는 혹은 클래스 메서드는 언제 정의해서 사용하면 될까요?우선 인스턴스 메서드와 클래스 메서드와의 구조적 차이점을 알아 보겠습니다. - 인스턴스 메서드 인스턴스에 속해 있습니다. 클래스에 의해 생성된 모든 객체들을 인스턴스라고 합니다. 즉 인스턴스 메서드를 사용하기 위해서는 객체를 생성해야 됩니다.- 클래스 메서드 Class 에 속해 있습니다. 인스턴스 생성없이 클래스참조만으로 사용할수 있습니다. 그렇다면 클래스 메서드는 언제 만들면 될까요?소나타라는 자동차가 있습니다. 길에 나가 보면 소나타가 한두 대가 아니죠, 내 친구 차도 소나타고 윗집 아저씨의 차도 소나타입니다.각각의 소나타 차량들을 객체..
스프링의 의존성 주입, (필드 vs 생성자)스프링의 의존성 주입방법에는 여러 가지가 있지만 아마 가장 많이 쓰이고 있는게 @autowired 를 통한 필드 주입일 것입니다. 하지만 여기서는 생성자 주입을 이용했을 때의 장점을 알아보겠습니다. 아래는 각각의 의존성 주입을 위한 간단한 샘플 코드 입니다. Field injection123456public class Member { @Autowired private ProductService productService;} Colored by Color Scriptercs Constructor injection12345678public class Member { private final ProductService productService; @Autowired ..
Google 이란 이름은 무한 신뢰하게 됩니다. ^^;Guava 는 그러한 Google 에서 만든 오픈소스 라이브러리입니다. (과일을 이야기 하는 것이 아닙니다.ㅎㅎ)가독성 있는 코드를 작성하기 위한 많은 유틸 클래스를 제공합니다.이하 Guava 를 이용한 간단한 샘플 코드입니다. 추후 계속 업데이트할 예정입니다. Test Guava Version 12345 com.google.guava guava 12.0.1cs 1.문자열 length 기준으로 split 하기12345678String fruits = "사과딸기레몬포도";Iterable split = Splitter.fixedLength(2).split(fruits); //2자 단위로 split Iterator iterator = split.iterat..
- Total
- Today
- Yesterday