기술을 기술하다

UriComponentsBuilder로 URI 생성하는 방법
Controller에서 URI을 불러와 작업하는 경우Controller에서 결과를 반환할 때 URI와 관련된 작업이 필요할 때가 있다. 대표적인 예로 POST 요청에서 Resource를 새로 생성한 경우를 들 수 있겠다. 이 경우 반환할 때 Header의 Location에 새로 생성한 Resource의 URI를 포함시켜 결과를 반환해야 한다. 기존에 사용하던 방법기존에는 ‘java.net.URI’ 클래스를 이용해 URI 객체를 생성한 뒤 이 객체를 Header에 포함시키는 방법을 사용했다. 이 방법에 큰 문제가 있는 것은 아니...
레거시 코드를 점진적으로 개선한 경험
프로젝트를 이어받다.저는 작년(2019년) 6월 말에 새로운 회사로 이직하였습니다. 첫 번째로 받은 업무는 새롭게 개발 중이던 관리자용 시스템을 이어받아 완성 시키는 것이었습니다. 기존에 개발자 한 분께서 맡아 개발해왔지만, 관리자용 시스템이라 우선순위가 다른 프로젝트들보다 낮아 꽤 오랜 기간 미완성 상태로 남겨졌던 프로젝트였습니다. 그러나, 이미 기존 시스템 기반으로 어느 정도 구현이 된 상태였고 실제 배포되어 일부 기능들은 업무 담당자들이 사용하고 있었습니다. 그렇기에 해당 프로젝트는 이미 작성된 코드량이 꽤 되었죠. 이 ...
[실수노트] 캐싱된 메서드는 변경 불가능한(Immutable) 객체를 반환토록 하자
상황호출될 때마다 같은 값을 반환할 것으로 기대되는 Service의 한 메서드를 캐싱 처리 하였다. 캐싱 처리한 메서드는 카테고리 데이터를 DB에서 가져와 리스트 형태로 반환하는 메서드였다. 카테고리 데이터가 자주 바뀌지 않아 긴시간 동안 같은 결과값을 반환하는데 매번 DB를 조회하는 것은 리소스를 낭비하는 것이기에 캐싱 처리를 하였다. 그런데, 배포를 하고보니 데이터 출력이 이상했다. 특정 화면에서 카테고리를 조회할 때 새로운 카테고리가 생기고 조회를 계속 할수록 새롭게 생긴 카테고리는 중복되어 출력되었다. 여기서 끝이 아니...