목록Study (22)
DevYGwan
요즘 들어, 테스트 코드에 관심히 생겨 테스트 코드를 공부하고 있습니다. 예전에는 단순히 내가 일일이 기능을 사용해보면서 제대로 기능이 수행되는지 확인하는 식의 수동 테스트로 테스트 코드를 별도로 짜지 않고 기능 구현 위주로 코드를 작성했습니다. 단순히 "내가 직접 사용해보면서 테스트해보면 되겠지" 라는 안일한 생각을 가지고 주어진 테스크를 만족하기 위한 기능 구현 위주의 개발을 했었습니다. 그러다보니 계속해서 문제가 발생하더라구요... 그래서 이번 기회에 테스트 코드를 제대로 짜보자 라는 생각이 들었습니다. 더이상 미루면 안될 것 같더라구요... ㅎㅎ ※ 테스트 코드란 간단하게 말해서 소프트웨어의 기능과 동작을 테스트하는데 사용되는 코드로, 작은 코드 단위(클래스 & 메서드)를 독립적으로 검증하는 테..
요즘 들어 서버 유지/보수에 관심이 생겨 모니터링 하는 방법에 대해서 공부를 했습니다. 모니터링은 크게 " 데이터 수집 -> 통합 -> 시각화 " 로 이루어져 있습니다. 이를 구현할 수 있는 여러가지 기술이 있지만, 제가 사용한 방법은 Actuator, Promethues, Grafana를 사용해서 모니터링을 하는 방법을 선택했습니다. 제가 이 방법을 선택한 이유는, Spring Actuator가 스프링에서 공식으로 지원하는 라이브러리이다. 대표적인 Spring 모니터링 라이브러리 중 하나이다. 관련 자료들이 많다. 등이 있습니다. 저는 대부분 어떤 기술을 선택할 때, 신뢰할 수 있는 자료인가를 젤 먼저 확인하고 이 후 자료들이 많은지를 기준으로 선택하는 것 같습니다. 물론 자료가 없다면, 공식 문서나 ..
프로젝트를 진행하다보니, 사용자 데이터 조회시 최근 사용자의 데이터를 조회할 일이 많다는 것을 알게 되었습니다. 이를 매번 DB를 통해 조회하는 것보다 캐싱해 조회하는 것이 성능상 이점이 있겠다 라는 생각이 들었습니다. 또한 사용자 데이터는 자주 바뀌지 않기 때문에 캐시를 도입하는게 유리하다고 생각했습니다. 정리하자면, 제가 캐시를 도입한 이유는,최근 사용자 데이터를 조회할 일이 많다. (캐시 히트율이 높다.)사용자 데이터는 수정이 빈번하게 일어나지 않는다.데이터가 손실돼도 큰 서비스 장애를 발생시키지 않는다. (다시 DB에서 가져오면 되기 때문에)입니다. 그렇다면 캐시를 도입했을때의 기대 효과는 어떤게 있을까요? 제가 생각하는 캐시를 도입했을 때의 주 효과는 캐시 히트가 됐을 경우 DB에 접근하지 않고..
코드를 짜다보면 항상 이런 생각이 듭니다. 좋은 코드란 무엇일까? 객체 지향적으로 코드를 짜려면 어떻게 짜는 것이 좋을까? 좋은 코드는 코드의 양이 많아질때 위력을 발휘한다고 생각합니다. 코드의 양이 적고 나 혼자 작업한다면, 사실 단순히 잘 동작하는 코드가 중요하지 좋은 코드를 작성하는 것이 많이 중요하지는 않다고 생각합니다. 하지만 코드의 양이 많아지고 남들과 협업하는 환경에서 단순히 기능만을 위한 코드를 작성한다면 이건 이기적인 마음이라고 생각합니다. 다른 사람이 내가 작성한 코드를 보고 이해하고 코드를 추가 및 수정해야되는데, 코드를 봤을때 해당 코드가 너무 지저분하다면, 코드를 이해하는데 너무 많은 시간을 사용해야 하기 때문입니다. 실제로 내가 코드를 작성하는 것보다 남의 코드를 보고 이해하는..
Spring으로 서버를 개발하는 개발자라면, @Transactional 어노테이션은 많이 익숙할 것이라고 생각합니다. 서비스 로직을 작성할때 대부분 한번에 DB접근으로 끝나는 것이 아닌 여러번의 DB접근을 할 상황이 생기고 이를 한 트랜잭션으로 묶기 위해서 주로 사용하는 것이 @Transactional 어노테이션입니다. 여태까지 이렇게 간단히 한 트랜잭션으로 DB접근을 묶고 싶을때 이 어노테이션을 사용했습니다. 그러다보니 생긴 문제가 있어 이를 공유하려고 합니다. 회사에서 카카오 발신 프로필 제거 로직을 구현하던 도중 제가 처한 문제 상황은 다음과 같습니다. 키 값이 여러개 들어왔을때 이를 제거하는 로직을 구현하는 중입니다. 이때 키 값 각각을 하나의 트랜잭션으로 처리해야합니다. 이를 한 클래스 내에서 ..