티스토리 뷰
지난 한주동안에는 중간발표 피드백으로 받은 내용을 적용해보는 시간으로
slow query 발생시 슬렉메세지 전송하는 코드를 작성했다.
slackconfig 내용
@Slf4j
@Configuration
public class SlackConfig {
@Value("#{environment['slack.key']}")
public String slackKey;
public final WebhookResponse send(String text) {
try {
WebhookResponse response = null;
Slack slack = Slack.getInstance();
String webhookUrl = slackKey;
System.out.println();
Payload payload = Payload.builder().text(text).build();
response = slack.send(webhookUrl, payload);
return response;
} catch (IOException e) {
log.error(e.getMessage(), e);
throw new RuntimeException(e);
}
}
}
실제 사용되는 메서드에서 만들어준 @LogExecutionTime 어노테이션을 붙여주면된다.
@Slf4j
@Component
@Aspect
@RequiredArgsConstructor
public class LogAspect {
private final StopWatchRepository stopWatchRepository;
private final EmailService emailService;
private final SlackConfig slackConfig;
@Around("@annotation(LogExecutionTime)")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
Object proceed = joinPoint.proceed();
stopWatch.stop();
log.info("total mills : " + stopWatch.getTotalTimeMillis() + " ms");
log.info("total nanos : " + stopWatch.getTotalTimeNanos() + " ns");
log.info("method name : " + joinPoint.getSignature().getName());
StopWatchTable stopWatchTable = StopWatchTable.builder()
.method(joinPoint.getSignature().getName())
.mills(stopWatch.getTotalTimeMillis())
.nanos(stopWatch.getTotalTimeNanos())
.build();
stopWatchRepository.save(stopWatchTable);
// SlowQuery Checking & Send To BackEnd Developers
if(stopWatchTable.getMills() > 10000) {
emailService.sendMailDevelopersToSlowQuery(stopWatchTable);
String text = stopWatchTable.getMethod() + " 서비스 메소드에서 " + stopWatchTable.getMills() / 1000 + "초 이상 걸리는 Slow Query가 발생했습니다";
slackConfig.send(text);
}
return proceed;
}
}
그리고 도서 검색 후 상세 정보를 위한 도서 정보를 api로 받아오기위한 @Scheduled을 사용했다.
@Scheduled(cron = "0 0/10 * * * *")
위 처럼 메소드에 달게되면 매 시간 10분 마다 돌게된다.
추가적으로 poi를 사용해 검색한 리스트를 엑셀로 뽑는 기능을 적용했다.
적용하고 나서 테스트를 하는 과정에서 엑셀 인스턴스를 생성하는 인스턴스를 HSSFWorkbook에서 XSSFworkbook으로
변경했다. 그 이유로는 outside allowable range로 최대엑셀 행수인 65536를 초과했기 때문에 그 이상 다운로드를 위해서
Workbook wb = new HSSFWorkbook();
Workbook wb = new XSSFWorkbook();
다음주 부터는 받아온 도서 상세 내용을 이용해 상세 페이지를 어떻게 구성할지에 대한 작업을 할 예정이며 elasticsearch를 적용하긴 했으나 어디서 사용할지 사용처가 불명확한 상태이기때문에 더 알아봐야할것같다.
그리고 모의면접을 봤는데 진행하고 있는 프로젝트에 대한 설명을 하고 난뒤 어필하고 싶은 기술 스펙을 이야기해보라는 요청에 jpql과 querydsl의 사용하는 이유에 있어서 이야기를 했다. 컴파일시 오류가 나는지 아니면 런타임시 오류가 나는지 이런 이유때문에 querydsl을 사용해 개발자가 개발하기에 더 용이하기때문에 querydsl을 사용한다는 이야기를 했다.
기술을 사용하면서 어떤 이유로 사용하는지에 대한 생각은 중요하다는 생각을 하게해주는 모의면접시간이였다.

- Total
- Today
- Yesterday
- method
- backoffice
- ssl
- JWT토큰
- EC2
- EntitiyManagerFactory
- badrequest
- 풀텍스트
- 알고리즘
- 협업
- instance
- python
- 코드해석
- querydsl
- ajax
- wil
- 환경세팅
- POI
- IOC
- this
- 김영한
- joinfetch
- JPA
- java
- .jks
- DI
- 항해99
- Spring
- DTO
- JPQL
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |