본문 바로가기

반응형

전체 글

(16)
Spring - bean factory pattern (injecting Collections) Spring 프레임워크의 서비스를 개발할때, interface 를 통해 공통적인 기능을 명시하고 이를 참조하는클래스를 여러개 생성하여 개발을 하게 되는 경우가 있는데, 각 클래스에 enum 으로 별칭을 정해주고 factory class 를 구현하여 필요한 bean 을 get 할 수 있도록 개발하곤합니다. 문제는 원하는 클래스를 enum 값으로 얻기위해 bean 숫자만큼 항상 길어지고 보기싫은 코드가 생성되어야합니다. 이에 대한 개선을 한 후 내용을 정리합니다. 간단한 예제 Rest API 를 구현 후 설명하려고합니다. ※ 지극히 개인적인 코드 스타일을 공유하는 목적의 포스팅입니다 ※ 공통적으로 동물의 타입을 리턴하며 소리를 지를 수 있는 기능을 명세한 interface 를 생성합니다. 해당 interfa..
spring boot sql script 한글 깨짐 현상 Spring boot sql script 한글 깨짐 현상 Spring에서는 초기에 scheme 생성 및 데이터를 세팅하는 여러 가지 메커니즘을 제공한다. Spring 기본값으로 classpath 루트에 schema.sql, data.sql 파일이 있다면 서버 시작 시 자동으로 스크립트를 실행하게되며 보통 schema.sql은 DDL 스크립트를 명시해두고, 데이터를 위한 DML 문은 data.sql 파일로 작성한다. 토이 프로젝트를 Spring boot 로 개발한 후 Window에서 실행하는 테스트 중에 이슈가 발생했다. 로컬에선 이상없는데 배포하니까 오류나요! 가끔 로컬에선 완벽하다고 생각해도, 배포시에 문제가 생기는 경우가 많이 있다. 이번 경우도 배포 후 실행해보니 DB에서 load한 값만 한글이 깨..
Spring boot, annotation 정리 Spring boot annotation 들의 간단한 키워드 정리 Annotation 설명 @ComponentScan @Componen와 @Service, @Repository, @Controller, @Configuration이 붙은 클래스 Bean들을 찾아서 Context에 bean등록을 해주는 Annotation ApplicationContext.xml 에 이런식으로 xml에 bean을 직접등록하는 방법도 있고 위와 같이 애노테이션을 붙여서 하는 방법도 있음 base-package를 넣으면 해당 패키지 아래에 있는 컴포넌트들을 찾고 그 과정을 spring-context-버전(4.3.11.RELEASE).jar에서 처리한다. @Component로만 표기하지 않고 어노테이션을 분리하여 @Reposito..
Java8 functional interface Functional Interface Abstract Method가 하나인 인터페이스 람다식 사용이 가능 FunctionalInterface annotation을 안붙여도 되지만, 붙이는 것을 권장 Java SDK 8의 java.util.function 패키지에는 수많은 Functional Interface들이 등록있다. 대표적인 finctional interface를 구현해본 코드 Cunsumer import java.util.function.Consumer; public class ConsumerFunction { private static void consumerExamples() { final Consumer print = value -> System.out.println(value); print..
하노이의 탑 알고리즘 (with Java) 하노이의 탑 원반이 n개인 하노이 탑이 어떻게 이동되는지 몇번 이동하는지 구해보자 조건 하노이의 탑은 위 그림과 같이 크기 가 다른 원반이 한 기둥에 놓여져 있고 원반을 모두 왼쪽에서 오른쪽으로 옮겨야 한다. 원반은 큰 것이 아래로 가게 쌓아야 하며 작은 원반 위에 큰 원반이 올 수 없다. 원반을 옮길 때에는 가장 위에 쌓여있는 원반 부터 옮겨야 한다. 탑은 3개로 고정하고 원판(disk)의 개수를 입력받아 원판의 옮겨지는 횟수를 출력 public class PracticeMain { static int count = 0; public static void main(String[] args){ Scanner scanner = new Scanner(System.in); int number = scanner..
Thread join ( Thread 종료 대기) Thread join method: Thread의 종료를 기다림 Toy project에서 메인 작업외의 별도 계산작업을 위한 작업 스레드가 종료될 때까지 기다리다가 실행되어야 할 상황이 있었다. Thread class의 join method에 간단 예제. package ThreadJoin; public class ThreadMain { public static void main(String[] args){ System.out.println("Main thread start.."); Runnable runnable = new CustomRunnable(); Thread thread = new Thread(runnable); thread.start(); System.out.println("Main threa..
@Valid BindingResult 으로 검증 및 에러처리 Spring 프로젝트 중 @Valid annotation을 이용해 간단하게 validation 방법에 대해 알아본다 입력 값을 전달받았을 때, Controller 에서 @Valid annotation 으로 지정된 필드값에 대해서 검증을 진행하고 조건에 부합하지 못할 시에 알맞게 오류처리하는 방법에 대해 알아보자 1. maven dependency 추가 javax.validation validation-api 2.0.1.Final org.hibernate hibernate-validator 5.2.2.Final 2. VO에 어노테이션을 valid 설정을 한다. @Pattern(regexp = "^[_0-9a-zA-Z-]+@[0-9a-zA-Z]+(.[_0-9a-zA-Z-]+)*$", message = "no..
Mysql to Oracle 마이그레이션(SQL Developer Migration Workbench) / SQLDeveloper mysql connector 설정 예전에 Tibero DB를 사용해보기 위해 toy project를 했을 때, Tibero에서 제공해주는 마이그레이션 툴을 사용하여 oracle 스키마 및 데이터를 tibero에 이전해본 적이 있었다. (tbMigrator) mysql 기반으로 되어 있는 시스템을 oracle 로 변경해야 할 일이 있어 Oracle도 마이그레이션 관련 서비스를 제공해주지 않을까 하며, 서치하니 sqldeveloper에 해당 기능이 포함되어있는 버전이 있다고 하여 진행해보았다. 1. oracle 홈페이지(www.oracle.com) 접속하여 로그인 후 downloads 이동 2. SQL Developer Migration Workbench 이동 (https://www.oracle.com/database/technologies..