Skip to content

SamsungSignature/SamsungSignature-OpenSource

Repository files navigation

Signature Common

GitHub last commit (branch) GitHub License

해당 라이브러리는 Signature 서비스에서 사용되는 공통 모듈을 모은 라이브러리입니다.

Quick Starter

1. Add Dependency


build.gradle

repositories {
    mavenCentral()
    maven { url 'https://jitpack.io' }
}

dependencies {
    implementation 'com.github.SamsungSignature:signature-common:0.0.6'
}

2. RestControllerAdvice


공통으로 사용하는 에러 처리용 RestControllerAdvice입니다.

SignatureConfig.java

@Configuration
public class SignatureConfig {
    @Bean
    public SignatureAdvice signatureAdvice() {
        return new SignatureAdvice();
    }
}

3. ResponseEntityFactory


반복되는 ResponseEntity<MessageBody<Void>> 와 같은 클래스를 생성해주는 유틸입니다.

예시는 아래와 같습니다.

ResponseEntityFactory.java

@GetMapping("/v1/signature/response-example")
public ResponseEntity<MessageBody<String>> signatureResponseExample() {
    return ResponseEntityFactory.ok("Hello", "Signature GetMethod!");
}

@PostMapping("/v1/signature/response-example")
public ResponseEntity<MessageBody<String>> signatureResponseExample() {
	return ResponseEntityFactory.ok("Hello", "Signature PostMethod!");
}
{
	"message": "Hello",
	"data": "Signature GetMethod!"
}

이 외에도 헤더를 추가하여 전송할 수 있는 ResponseEntityFactoryWithHeaders와 예외 처리를 담당하는 ResponseEntityExceptionFactory가 있습니다.

4. RedisUtils

redis에 data를 저장하고 불러오는 유틸입니다.

application.yml

spring:
  redis:
    host: {redis.host}
    port: {redis.port}

RedisConfig.java

public class RedisConfig {
	private final RedisProperties redisProperties;

	@Bean
	public ObjectMapper objectMapper() {
		ObjectMapper objectMapper = new ObjectMapper();
		return objectMapper;
	}

	@Bean
	public RedisConnectionFactory redisConnectionFactory() {
		return new LettuceConnectionFactory(redisProperties.getHost(), redisProperties.getPort());
	}

	@Bean
	public RedisTemplate<byte[], byte[]> redisTemplate() {
		RedisTemplate<byte[], byte[]> redisTemplate = new RedisTemplate<>();
		redisTemplate.setConnectionFactory(redisConnectionFactory());
		return redisTemplate;
	}
}

RedisUtils.java

@RequiredArgsConstructor
public class redisService{
	private final RedisTemplate<byte[], byte[]> redisTemplate;
	private final ObjectMapper objectMapper;
	private static final int data = 1;
	private static String signatureKey = "Hello, Signature!";
	
	public String insert(){
		
		return RedisUtils.put(
			redisTemplate,
            		objectMapper,
			data,
			"key-",signatureKey);
    }

	public String insertInExpiredTime(){
		return RedisUtils.putWithExpiredTime(
			redisTemplate,
			objectMapper,
			1000,
			data,
			"key-",signatureKey);
	}

	public int select(){
		return RedisUtils.get(
			redisTemplate,
			objectMapper,
			Integer.class,
			"key",signatureKey);
	}
}

5. ApiUtils

서버간의 Api 비동기 통신을 할 수 있는 유틸입니다.

ApiConfig.java

public class ApiConfig{
	@Bean
	public WebClient webClient(){
		return WebClient.builder()
            .baseUrl("http://localhost:8080")
            .build();
	}
}

ApiUtils.java

@RequiredArgsConstructor
public class ApiService {
    private final WebClient webClient;
	
	public void getMethod() {
		Mono<MessageBody> response = ApiUtils.get(
			webClient,
			"/v1/signature/response-example",
			MessageBody.class);
	}

	public void postMethod() {
		Mono<MessageBody> response = ApiUtils.post(
			webClient,
			"/v1/signature/response-example",
			MessageBody.class);
	}
}

Dependencies

해당 프로젝트에서 사용하는 라이브러리의 모음입니다.

2.15.3을 사용하는 이유는 현재(2024.03.13) Spring Boot에서 사용하는 버전이 2.15.3이기 때문입니다.