현재 회사에서 내가 관리하고 있는 코드는 만들어진지 굉장히 오래된 코드여서 레거시 코드및 사용하지 않는 코드가 많다. 현재 노력하고 있는 것은, 틈틈이 생 자바 프로젝트나, Spring 3.x 프로젝트를 스프링 부트로 전환하거나, 안쓰는 코드를 제거하는 작업이다. 기존 코드를 읽으면서 평소 의구심이 드는 코드가 있었는데 내용은 다음과 같다. Service 클래스가 있는데, 이 서비스 클래스에 대한 Service인터페이스를 만들어서 관리가 되어야하나? 이런 코드가 너무많은데? Service인터페이스만 없어져도 많은 파일이 줄어들 것 같은 느낌이 들었다. 만약, OrderService라는 서비스를 구현하고자 한다면 아래와 같이 OrderService관련 파일이 두개가 되는 것이다. 즉, 아래와 같다. in..
FeignClient를 사용할때 @GetMapping을 이용하고, 객체를 전달하도록 인자로 전달하였으나, 뭔가 자동으로 POST요청으로 전달되는 것으로 보였다. 다음의 예제는 해당 문제를 재현하기위한 코드들이다. 이 재현 코드에는 총 세개의 클래스가 쓰였다. MyController MyFeign MyParam @RestController public class MyController { private final MyFeign feign; @Autowired public MyController(MyFeign feign) { this.feign = feign; } @GetMapping("/test") public void getTest(MyParam param) { System.out.println(Stri..
일반 제약회사에서 전산담당자로 있다가 2020년에 3년만에 다시 개발자로서 위메프라는 회사에 오게 되었는데 많은것이 바뀌어 있었다 스프링대신 스프링 부트를 쓰고있었고, 데이터베이스 관련해서는 모두 HikariDataSource라는 것을 사용하고 있었다. (마치 당연한 것 처럼) 개인적으로 이런걸 보면, 뭔가 누가만들었는지 알고싶고 해당 명칭을 지은 근원을 보고싶은법. 나는 히카리하면 개인적으로 가장 먼저 떠오르는게 옛날 아프리카TV의 BJ 히카리가 떠오른다. 해당 BJ가 일본인BJ였던 만큼 이 라이브러리를 만든 개발자도 일본과 관련이 있는 개발자가 아닐까 생각이 들었다. (히카리CP를 만든 개발자의 github 주소 : https://github.com/brettwooldridge brettwooldri..
현재 Spring In Action 5판 Rest API를 공부중인데, HATEOAS(Hyper Media As The Engine Of Application State) 부분을 공부하고 있다. HATEOAS란, API로 부터 반환되는 리소스에 해당 리소스와 관련된 하이퍼 링크들이 포함되는 것이다. 따라서 클라이언트가 최소한의 API URL만 알면 반환되는 리소스와 관련하여 처리 가능한 다른 API URL들을 알아내어 사용할 수 있는것이다. 그런데, 책에 나온대로 실습을 진행중, 클래스가 나오지 않는 부분이 있다. 살펴보니 Hateoas의 버전이 업그레이드 되면서, 클래스명이 아래와 같이 바뀌었다고 하니 숙지하도록 하자. 아래의 것 외에도 많은데 대표적으로 변한게 아래와 같다고한다. 더 자세한 사항은 다..
위와같이 하면 다음의 에러가 뜬다. The content of element type "resultMap" must match "(constructor?,id*,result*,association*,collection*,discriminator?)". 그런데,, 아래와 같이하면 에러가 뜨지 않는다.. collection태그는 가장 나중에 붙이나보다.
스프링 시작하기 스프링은 스프링 애플리케이션 컨텍스트(ApplicationContext 이건 스프링에서 클래서로 제공된다) 라는 컨테이너를 제공하는데, 이것은 애플리케이션 컴포넌트(스프링에서 빈이라 불리는 객체들을 뜻하는 것으로 이해)들을 생성하고 관리한다. 그리고 애플리케이션 컴포넌트 또는 빈들은 스프링 애플리케이션 컨텍스트 내부에서 서로 연결되어 완전한 애플리케이션을 만든다. 빈의 상호 연결은 의존성 주입(Dependency Injection 즉 DI로 스프링을 사용하는 회사의 면접등에서 자주 묻는데, 사용할 객체들을 외부로 부터 전략패턴을 통해 주입받는것으로 이해) 이라고 알려진 패턴을 기반으로 수행된다. 즉, 애플리케이션 컴포넌트에서 의존(사용)하는 다른 빈의 생성과 관리를 자체적으로 하는 대신 ..
스프링 부트를 공부하면서 H2 데이터베이스를 많이 쓰는것 같다. 많이 쓰는곳은 Test할때 in-memory 데이터베이스를 사용하는 형식으로 사용할 때인데, 특징을 좀 알고 싶어서 해당 사이트에 들어가서 Quick-Start를 간단히 공부를 해보고자 한다. H2 데이터 베이스의 특징 매우 빠르고, 오픈소스이고, JDBC API를 제공한다. Embedded 그리고 인메모리 데이터베이스이다. 브라우저 기반 콘솔 어플리케이션이다. 대략 2MB의 jar 파일 사이즈이다. H2데이터베이스는 임베디드 모드나 서버모드로 사용이 가능하다. 만약 임베디드 모드로 사용하려면 다음의 절차를 따른다. h2*.jar 파일을 클래스패스에 추가한다.(H2는 어떠한 의존관계도 갖지 않는다.) JDBC 드라이버 클래스를 사용한다. :..
이번에 알림설정 기능을 개발하다가 FeignClient라는 어노테이션을 발견하게 되었다. 인터페이스 상단에 @FeignClient라고 선언 후, 약간의 설정값만 넣으면 해당 인터페이스 자체가 HTTP 클라이언트가 되어서 서버로 HTTP요청을 할 수 있는 기능으로 보인다. 일단, 인터넷을 리서치하여 기능의 구현은 하였지만, 생각의 정리차 포스팅으로 남긴다. 소개 Feign은 Netflix에서 만든 선언적 Http 클라이언트이다. 여기서 선언적이란 말은 Spring에서 선언적 트랜잭션이라는 용어와 비슷한데, 소스코드가 아닌 어노테이션 선언만으로 트랜잭션을 적용하게 하는 기술이다. Feign에서의 선언적 Http클라이언트 역시 어노테이션 선언만으로 Http 클라이언트를 만들 수 있고 이를 통해서 Http Ap..
form값을 가져올 때 Form - VO 의 데이터 바인딩을 하려는 목적을 갖고 코드를 작성하였으나 계속 데이터 바인딩 실패와 관련된 오류가 떴다. 이에대한 해결책은 다음의 코드를 Controller에 선언해 두면 Date타입과 String 타입이 바인딩 될 수 있다. @InitBinder public void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); }
Spring Boot를 이용해서 Google Cloud Storage에 접근하는 샘플코드를 작성하였다. 연결을 위한 설정은 다음의 링크를 참고한다. 2019/12/29 - [IT/Spring Boot] - Spring Boot + Google Cloud Platform 이용하기 Spring Boot + Google Cloud Platform 이용하기 작업환경 IDE : STS(Spring Tool Suite) Build Tool : Maven 나의 작업환경은 위와같이 STS+Maven이다. 현재 나는 웹 에디터에서 이미지를 올릴떄, 로컬이 아닌 구글 클라우드의 스토리지에 올리는 작업을 진행하.. honeyinfo7.tistory.com 작업순서 1. Google Cloud Storage에 버킷을 생성 2..