Spring Data Redis는 Key-Value 구조의 자료구조만 사용하기 때문에 다른 자료구조도 테스트 해보기 위하여 RedisTemplate를 직접 만들어서 학습 테스트를 진행해봤습니다. redisTemplate.opsForValue(); 를 사용하여 key-value 자료구조에 대해서 Primitive Type, Reference Type 두 경우에 대해서 테스트를 진행해보고자 하였습니다. @DisplayName("redisTemplate key-value 형식으로 기본형 타입 저장") @Test void saveValueOpsPrimitiveType() { // given ValueOperations stringObjectValueOperations = redisTemplate.opsForVa..
Redis TTL 이슈 레디스의 학습 테스트를 진행 하던 중 TTL 설정 시 발생하는 이슈를 확인 할 수 있었다. 다음과 같은 도메인이 있다. @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @RedisHash(value = "fruits", timeToLive = 1) public class Fruits { @Id private String id; private String name; private Integer stock; @Indexed private LocalDateTime createdAt; @Builder private Fruits(String name, Integer stock, LocalDateTime createTime) { thi..
최종 프로젝트를 진행하면서 멀티 모듈 설계에서 겪었던 이슈들을 몇 가지 공유하고자 한다. 먼저, 초기에 계획 된 우리 팀의 멀티모듈 구조는 다음과 같이 설계되었다. 위 사진처럼 멀티모듈 구조를 레이어별로 가져가기로 했다. 레이어별로 구조를 가져가기 이전에 먼저 모듈을 어떻게 가져가는 것이 좋을지에 대해 팀원들과 얘기를 나누었다. 하지만, 프로젝트 기간이 짧은 만큼 도메인이 많이 발생 할 것으로 예상되지 않고 멀티 모듈을 구성했을 때 모듈 별로 부트 서버를 따로 띄울 일이 프로젝트 구조 상 발생하지 않을 것 같다는 전제에서 시작했다. 고민을 레이어별로 모듈을 나누는 것과 도메인 별로 모듈을 나누는 것 두 가지를 고려했기 때문에 자연스럽게 레이어 별로 모듈을 가져가기로 결정하였다. 참고로, 멀티모듈을 어떻게..
프로그래머스 데브코스에 참여한지 이제 거의 6개월이 다 되어간다. 현재는 최종 프로젝트 기간 중 QA 기간이라 포스팅을 쓸 시간이 생긴 것 같아 하루에 겪었던 이슈들을 하나씩 정리해보려고 한다. 그 중에서는 일정 관리 부분이 가장 중요했던 것 같다고 생각하여 이를 얘기해보고자 한다. 서론 프로젝트를 진행하기 전에 프로그래머스에서 '일하는 우리'의 지윤정님의 강의를 통해 협업에 임하기 전에 배워야 할 태도와 애자일 방식의 프로젝트 관리를 방법을 간단하게 배우게 되었다. 저번 1차 클론 코딩 프로젝트에서는 제대로 진행이 되지 않았지만, 최종 프로젝트에서는 애자일한 협업을 한 번 해보고자 마음을 먹었다. 팀원분들이 대부분 내향적인 성격을 가지신 MBTI I로 구성이 되어있었다. 스크럼을 이끌어가는 것은 그래도..
서두 동작을 설명하기 이전에 지역 데이터를 스프링의 캐시 기반으로 조회를 하려고 했던 배경에 대해서 먼저 소개하겠습니다. 현재 진행 중인 프로젝트에서는 사용자들이 자신의 선호지역 혹은 자신이 검색하고자 하는 지역들을 선택 할 수 있습니다. 이를 클라이언트에서 불러오기 위한 방법을 2가지를 떠올렸습니다. 1. 먼저 시를 선택하면 시에 해당하는 id 값을 서버에 보내서 구를 가지고 오는 api를 호출한다. 2. 구가 도착하면 다시 구를 선택하고 구에 해당하는 id 값을 서버에서 보내서 동을 가지고 오는 api를 호출한다. 3. 마지막으로 동을 선택한다. 위와 같은 과정은 먼저 3번의 네트워크를 타야하고, 유저가 어떤 시, 구, 동을 선택할지 예상 할 수 없었습니다. 캐시를 사용한다고 하더라도 각 시에 호출,..
1차 면접 글을 올리고 난 후 많은 시간이 흘렀다. 포스팅을 준비해둔 주제는 정말 많았는데, 우선순위를 정하면서 포스팅을 뒤로 미루다보니 이제서야 적게 되었다. 하지만, 면접 당시 그 날의 기억은 뚜렷하고 내용을 잘 정리해두었기에 늦었지만 작성을 해본다. 면접 전 임원 면접은 첫 경험이었다. 따라서, 무엇을 준비해야 하는지 어떤 것을 준비해가야 할 지 면접에 대한 질문은 무엇이 나올지에 대해서 준비를 많이 했던 것 같다. 하지만, 여러가지 예상 질문들을 미리 준비를 했었는데, 임원 면접을 봤던 동료들에게 조언을 구하니 사실 그런 질문들은 미리 준비한다고 해서 예상 질문들로 보통 나오지 않는다. 그런 것 보다는, 다른 분야를 준비하다가 왜 이쪽 분야를 준비하게 되었는지에 대한 시나리오가 더 중요 할 것 같..
멀티 모듈을 적용한 계기 우리 팀이 진행한 캐치 테이블을 클론 코딩한 Dev-table 에서는 다음과 같은 기능을 구현하고자 하였다. 유저의 예약, 웨이팅 점주의 예약, 웨이팅 예약, 웨이팅을 알려줄 수 있는 알림 처음에는 이러한 기능들을 모두 하나의 모듈에서 처리하도록 구성을 해두었다. 즉, 다음과 같은 패키지 구조가 나타나게 된다. devtable ㄴ src ㄴ main ㄴ domain ㄴ reservation ㄴ application ㄴ OwnerReservationService ㄴ UserReservationService ㄴ presentation ㄴ OwnerReservationController ㄴ UserReservationController ㄴ waiting ㄴ application ㄴ O..
NHN의 T면접은 매번 채용시장에서 찾고자 하는 인재에 따라 인터뷰 방식이 달라지는 느낌이었다. T 면접을 보기 전에 도움이 될 만한 다른 포스팅 자료가 있는지를 알아봤는데 참고할 만한 자료가 많이 없었다. NHN T 면접에 대해서 어디까지 얘기를 할 수 있을까? 생각을 해봤을 때 어떤 문제가 나왔는지보다 어떤 방식으로 진행되는지만 간략하게 얘기를 하는 것이 좋을 것 같다. 기술 인터뷰 진행 전 인터뷰 방식에 써있는 것처럼 알고리즘 문제를 풀 수 있는 시간이 주어진다. 해당 시간동안 주어진 문제를 풀고 해당 문제를 바탕으로 기술 면접관들과 어떻게 풀어나갔는지, 더 좋은 해결 방안은 없을 지 서로 소통을 하면서 문제를 풀어나가는 방식이다. 준비를 해나가는 과정에서 알고리즘을 어느정도까지 알아야 하나요? 라..