application.properties 암호화하기로컬에서 개발할 때는 DB 경로나 비밀번호 등 노출이 되어도 걱정이 없지만, 환경에 따라 이는 중요한 정보가 될 수 있으므로 노출 방지가 필요하다.특히, 깃허브와 같이 오픈된 공간에 올리게 될 경우 DB 경로와 비밀번호를 모두에게 노출되기 때문에 이를 방지하기 위해 암호화가 필요하다. Jasypt 라이브러리jasypt 라이브러리란 Java, Spring 등에서 암복호화를 지원해주는 오픈소스이다. Jasypt 라이브러리 적용build.gradle에 의존성 추가implementation("com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5") Configuration 클래스 추가@Configurationc..
RestClientRestClient는 RestTemplate의 후속 기능으로, Spring 6 버전에서 지원되는 새로운 HTTP 클라이언트RestClient는 기본적으로 동기 방식의 HTTP 클라이언트로 설계되었다.서버에서 제공하는 RESTful API와 상호작용하는데 사용된다.Spring WebFlux에서의 비동기 처리 지원을 포함하고 있지 않으며, 기본적으로 동기 HTTP 요청을 수행한다. WebClientWebClient는 Spring 5에서 Spring WebFlux의 일환으로 도입된 클라이언트이다.비동기 및 반응형 프로그래밍을 지원하는 WebClient는 RestTemplate의 대안으로 제공된다.WebClient는 비동기적이고 반응형이며, 매우 유연하고, 더 나은 성능을 제공하는 HTTP 클..
프로젝트 개발시 암묵적인 룰로 Service 인터페이스를 두고 ServiceImpl라는 구현체인 클래스를 생성해서 개발하곤 했었다. 그러다보니 왜 나누는건지에 대한 의문이 생겨 찾아보았고, 좋은 자료를 참고하여 그 내용을 정리해보려 한다. Service와 ServiceImpl 패턴으로 설계하는 이유 하나의 인터페이스를 구현하는 여러 구현체가 있고 기능에 따라 적절한 구현체가 들어가서 다형성을 주기 위함이다. 또한 인터페이스와 구현체를 분리함으로써 객체 간의 결합도를 낮추어 변화에 유연한 개발을 할 수 있기 때문. (Loose Coupling) 구현체 클래스를 확장하거나 수정하더라도 이를 사용하는 클라이언트의 코드에 영향을 주지 않는다. 그러나, 실제로 구현한 코드를 살펴보면 인터페이스와 구현체 클래스가 ..
상황 스프링 부트 프로젝트를 생성한 후 처음 서버를 실행하면 어플리케이션 시작에 발생하는 에러 *************************** APPLICATION FAILED TO START *************************** Description: Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class 원인 해당 프로젝트 내에 DB 관련 정보가 정의되어 있지 않기 때문. 스프링은 자동으로 DB를 사용한다고 설정되어있으므로 DB 설정을 해주지 않은..