SqsNameMapping 를 구현하는 과정에서 비악이 일어나는 코드를 작성하게 되었습니다.
비약이란?
비약은 논리나 사고방식이 '중간과정을 건너 뛰었다'는 뜻으로, 상대방의 논지전개에 있어 허구성을 지적하거나, 실현가능성이 희박한 내용을 과장하는것을 지적하는 말 입니다.
아래 코드는 2단계를 뛰어 넘어서는 비약된 코드이다.
@Component
@ConfigurationProperties(prefix = "aws.xxx")
public class XxxNameMapping implements Mapping {
private Map<String, String> queue;
@Override
public String get(String type) {
return queue.get(type);
}
}
왜일까?
1단계
XxxNameMapping 은 XxxConfig 에 속한다. 즉, XxxConfig 가 아닌 다른 위치에서 사용한다.
2단계
Application.yml 의 Properties 를 가져와 전역적으로 사용하고 있다.
Application.yml 과의 맵핑을 바로 했다.
이게 문제다.
맵핑을 하기 위한 정보는 최종적으로 고려해야 한다.
그러므로 이를 변경하게 되면 아래와 같다.
import java.util.HashMap;
import java.util.Map;
public class XxxNameMapping implements Mapping {
private Map<String, String> queue = new HashMap<>();
@Override
public String get(String type) {
return queue.get(type);
}
public void add(String key, String value) {
queue.put(key, value);
}
}
@Configuration
public class SqsConfig {
@Value("${xxx.member-joined}")
String memberJoinedQueueName;
@Bean
public Mapping mapping(){
XxxNameMapping xxxNameMapping = new XxxNameMapping();
xxxNameMapping.add(MemberJoined.class.getName(), memberJoinedQueueName);
return xxxNameMapping;
}
@Bean
public QueueMessagingTemplate queueMessagingTemplate(AmazonSQSAsync amazonSQSAsync) {
return new QueueMessagingTemplate(amazonSQSAsync);
}
}
새로운 xxx.Foo 와 같이 @Value 가 생겨날 것이다. 이런 부분의 대한 자동화는 추후에 고민해야될 문제이다.
'가치관 쌓기 > 개발 돌아보기' 카테고리의 다른 글
개발자는 '빨리 나아가지 않는 방법'을 수련해야 한다. (0) | 2022.02.09 |
---|---|
개발자들이 문서화를 하는 이유는 뭘까? 왜 하는거지? (2) | 2022.01.24 |
소프트웨어 아키텍처? 그거... 먹는건가? (0) | 2021.09.02 |
Layered Architecture 의 단점이 무엇이라고 생각하는가? (7) | 2021.07.26 |
직접 코딩으로 느껴본 Spring Data JPA와 Spring Data JDBC 의 차이점 (0) | 2021.07.18 |
댓글