전체 글
-
테스트 코드 실습교육 자료 2022. 7. 11. 23:45
JUnit5 - 자바 단위 테스팅 프레임워크 - https://junit.org/junit5/docs/current/user-guide/#writing-tests - https://www.petrikainulainen.net/programming/testing/junit-5-tutorial-writing-parameterized-tests/ AssertJ - 테스트 코드 가독성을 높여주는 자바 라이브러리 - https://assertj.github.io/doc/#assertj-core-assertions-guide TDD - Test Driven Development (테스트 주도 개발) - 프로덕션 코드보다 테스트 코드를 먼저 작성하는 개발 방법 - TFD(Test First Development) +..
-
좌충우돌 Coroutine 적용기실무에서 알게된 내용 2022. 7. 1. 01:41
최근 담당하고 있는 서비스에 Coroutine을 적용할 기회가 있었다. 이에 Coroutine를 적용하면서 알게 된 내용을 정리해보고자 한다. 참고로 코루틴 개념을 처음 접한 건 3년 전 어드민 서비스를 만들 때 Generator함수를 사용해 보면서 였다. Coroutine이란 무엇일까? 사람들마다 정의가 조금씩 다를 순 있겠지만 나는 코루틴을 비동기 프로그래밍을 하기 위한 일시 정지 가능한 경량화된 스레드(light-weight thread)라고 정의를 내린다. 그럼 경량화된 스레드란 무엇일까? 이것에 앞서 프로세스와 스레드의 개념부터 우선 정리해 보고자 한다. 흔히 프로세스는 실행되고 있는 프로그램(disk에 있는 program이 memory에 올라간 상태) 또는 OS로부터 시스템 자원을 할당받는 작..
-
모듈간 의존성 개선 및 정리 작업실무에서 알게된 내용 2022. 6. 30. 10:08
Edge API 전환 작업을 진행하며, 추가로 모듈 간 의존성을 개선 및 정리하는 작업을 조금 진행했었다. 아직, 완벽하다고 말할 수 있는 상태는 아니지만 해당 작업을 진행하며 개인적으로 고민했던 사항들을 아래와 같이 정리해 봤다. 참고로, 내가 담당하고 있는 서비스의 모듈은 아래와 같이 총 7개로 구성돼 있다. internal api external api service domain common common-web client 1. api 모듈(internal/external)이 의존하고 있는 모듈 (as-is: 5개, to-be: 4개) common common-web api 모듈(internal/external)에서 각각 선언해서 사용하고 있던 request/response 객체를 common-w..
-
로그가 간헐적으로 중복 노출되는 이슈실무에서 알게된 내용 2022. 6. 29. 08:56
작업했었던 프로젝트를 배포하고 모니터링을 하는데, 로그가 간헐적으로 중복 노출되는 이슈가 있었다. 사실 처음에는 다른 로그들은 한 번씩만 남고 있는 상태였기 때문에 로그가 중복 노출될 거라는 생각은 전혀 하지 못했다. 따라서, 당연히 휴먼에러로 인해 애플리케이션 레벨에서 의도치 않게 작업이 여러 번 수행되고 있을 거라는 생각을 가장 먼저 했다. 하지만, 아무리 생각해봐도 애플리케이션 레벨의 이슈는 아닌 것 같았다. 왜냐하면, 간헐적으로 중복 노출됐던 로그 중 하나가 아래 코드 부분이었는데 DB로부터 데이터를 읽어와서 publish 메소드를 호출하는데, 여기서 간헐적으로 해당 메소드가 여러 번 호출되는 건 로직상 불가능하다고 생각했기 때문이다. 또한, 이 시점에 중복 노출됐던 로그 정보를 자세히 확인해 봤..
-
ClientAbortException은 언제 발생하는가?실무에서 알게된 내용 2022. 6. 23. 08:05
서비스 모니터링을 하다가 아래처럼 ClientAbortException(java.io.IOExceiption: Broken pipe)이 발생하고 있는 것을 확인했다. 이에 해당 Exception이 언제 발생하는지를 분석해 봤다. 일단 해당 로그를 보면서 가장 눈에 띄었던 포인트는 특정 API를 호출하는데 4초가 걸리는 점과 예외 메시지에 org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe이 있다는 점이었다. 이를 근거로 클라이언트 쪽에서 API 응답 시간이 오래 걸리니까 서버에서 응답을 내려주기 전에 커넥션을 끊어 버려서 그런가?라는 의심을 했었다. 코드를 분석해보니 아래 빨간 네모 부분에서 Excepti..