본문 바로가기

Spring

(5)
AbstractRoutingDataSource AbstractRoutingDataSource란? spring-jdbc 모듈에 포함되어 있는 클래스로써, 여러 DataSource를 등록하고 특정 상황에 맞게 원하는 DataSource를 사용할 수 있도록 추상화한 클래스이다. 이 친구가 나오게 된 배경은? Spring Boot를 사용해 Database Sharding 처리 니즈로 인해 생겨난 것으로 보인다. 알고있다시피 NoSQL에서는 샤딩 기능에 대해 많은 편의를 제공하고 있으며 RDBMS의 몇몇 벤더들 또한 샤딩 기능을 제공하기 위한 방법들은 제공중에 있을 것이다. 그러나 Spring에서는 이러한 NoSQL, RDBMS에 의존해서 샤딩을 구현하지 않고 Spring Boot로 편리하게 설정을 추상화하여 사용할 수 있는 방법을 만들고자 이러한 친구가 생..
QueryDSL QueryDSL 이란 ? - 스프링에서 Type-Safe한 쿼리르 보장하기 위해 제공되는 Domain Specific Language - 일반적으로 SQL은 Type Check가 불가능하고 실행되기 전까지 작동 여부를 확인하기가 어렵다. QueryDSL은 이러한 부분을 보완하여 Java로 Type-Safe 하게 개발할 수 있도록 제공해주는 프레임워크 이다 - Repository 인터페이스에서 메서드명이 너무 길어지거나, 메서드명으로 쿼리문을 만들기 까다로운 조건일 때 유용하게 쓰일 수 있다 왜 필요할까? - 위에서 언급한 것처럼 Type Check가 불가능하고 실행되기 전까지 작동여부를 알 수 없음을 보완하기 위해서 - SQL이 class처럼 Type이 있고 Java코드로 작성할수 있으면 편하지 않을까?..
Spring Cloud Data Flow 이직을 했더니, 주로 배치 job을 수행하고 MSA 구조로 구성된 작업들이 많이 있었다. 이들은 기존에 Jenkins로 batch Job을 수행시키고 있었지만 최근부터 개발되는 작업들은 모두 Spring Cloud Data Flow를 사용하려는 경향이 있어 이를 공부하고자 이 글을 남긴다. 근데 생각보다 Google에 자료가 많이 없다. 잡다한 설명들은 다 빼고 키워드 위주로 내가 이해한것들을 기록하고자 남긴 것이니 설명이 다소 부족할 수 있는점 이해 바란다. 아직 Docker에 대한 이해도 모자라서, 업무를 진행 해 가면서 이 글을 더욱더 깊이있게 채워나갈 예정이다. 혹시 틀린 내용이 있다면 댓글 달아주세욥. Spring Cloud Data Flow이란 ? 런타임 환경에서, Spring Boot App..
토비의 스프링 2장 - 테스트 2장을 읽고난 후 든 생각, '테스트'는 개발의 '전부'이자, '테스트'가 없으면 '개발'도 없다 TDD 방식이 너무 매혹적으로 다가왔고, 차주부터는 반드시 적용해볼 생각이다 토비님의 정리 - 테스트는 자동화돼야 하고, 빠르게 실행할 수 있어야 한다 - main()테스트 대신 JUnit 프레임워크를 이용한 테스트작성이 편리하다 - 테스트 결과는 일관성이 있어야 한다. 코드의 변경 없이 환경이나 테스트 실행 순서에 따라 결과가 달라지면 안된다 - 테스트는 포괄적으로 작성해야 한다. 충분한 검증을 하지 않는 테스트는 없는것보다 나쁠 수 있다 - 코드 작성과 테스트 수행의 간격이 짧을수록 효과적이다 - 테스트하기 쉬운 코드가 좋은 코드다 - 테스트를 먼저 만들고 테스트를 성공시키는 코드를 만들어가는 테스트 주..
토비의 스프링 1장 - 오브젝트와 의존관계 책의 정리 내용 - 책임이 다른 코드는 분리한다. 관심사별로 클래스를 나누기 - 그 중에서, 추후 수정이 있을것 같은 클래스는 인터페이스로 구현해서, 인터페이스의 정의부와 구현부로 나눈다 > 이렇게 하면 인터페이스의 구현부가 달라지더라도, 이 인터페이스를 참고하는 쪽에서는 수정할 부분이 없기때문(전략패턴) - 결국 한쪽의 기능 변화가 다른쪽의 변경을 요구하지 않아도 되게 했고(낮은 결합도), 자신의 책임과 관심사에만 순수하게 집중하는(높은 응집도) 깔끔한 코드를 만들 수 있다 - 오브젝트가 생성되고 여타 오브젝트와 관계를 맺는 작업의 제어권을 IoC(Inversion of Control) 컨테이너로 넘겨서 오브젝트가 자신이 사용할 대상의 생성이나 선택에 관함 책임으로부터 자유롭게 만들어 줬다 - 전통적인..