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이기 때문입니다.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages