분류 전체보기 475

[Spring] querydsl orderby null - 동적 정렬 스킵하기

queryDsl 에서 OrderSpecifier 를 사용하여 동적으로 정렬할 컬럼을 지정할 수 있습니다. (참고) ✨이번 게시글에서는, 동적 정렬 시 특정조건에서는 정렬을 하지않는 방법에 대해서 정리해보겠습니다. 👏🏻 사건의 발단은 이렇습니다. where 절의 BooleanExpression 처럼, null 을 반환하면 조건에 무시될 것이라 생각해서 OrderSpecifier 에서 조건에 맞지않으면 null 을 반환하여 orderBy 를 무시하자라는 무식생각으로 접근을 해보았습니다. public List getSortFiledEntityList(String field) { return queryFactory .select(..) .from(qEntity) .orderBy(sortByField(field)..

Spring/Spring Boot 2023.02.03

[Java] LocalDate.now() mocking - 정적 메소드 테스트 하기

이번 포스팅에서는 LocalDateTime 혹은 LocalDate 의 now() 를 테스트를 위해 mocking 하는 방법에대해 공부해보고자 합니다. (포스팅에 나오는 모든 코드는 회사 코드의 형식을 유지하면서 수정한것이기 때문에 뭔가 이상할 수 도 있습니다. 👍) 📌 얼마전에 오늘 일자로 특정 날짜가, 몆 주차이인지 계산하는 로직을 작성하여 이를 테스트하고자 했습니다. 하지만 막상 테스트를 짤려하니, LocalDate.now() 메소드는 static 메소드이긴 때문에 목킹하여 항상 성공하는 테스트 케이스를 작성하는데에 어려움이 있었서, 찾아보니 2가지 방법을 찾을 수 있었습니다. 첫번쨰는, Mockito를 이용하여서도 static method 를 mocking 하는 것이고 (PowerMock 을 이용해..

2022년 회고. 26살, 내가 개발자가 되기까지의 기록

얼마만에 써보는 회고인지 모르겠다. 언제나 그렇지만 특히나 이 글은 나를 위한 글. 그래서 독백체다. 22.02 월에 졸업을 하고, 22.05 월에 취직을 했다. 19.05월, 23살에 전역을 해 남은 5학기 중 3번의 성적장학금을 받았다. 졸업 전 2년 6개월간, 1번의 외부 개발동아리(멋쟁이 사자처럼)를 참여, 1번의 해커톤 참가•수상을 했으며, 졸업작품을 낸 캡스톤 디자인에서 학과 1등으로 졸업을 했다. 21.09월에 마지막학기를 다니며 4개월간 부트캠프(내일배움캠프) 를 진행했고 22.03~05 간 3번의 스터디, 23군데의 지원, 모의면접을 포함해서 약 20번의 면접을 보았고 2군데의 스타트업에 합격을 해 현재 반려동물 플랫폼 서비스 회사의, Spring Back-end 개발자로 재직 중 이다...

[System Design Interview] 06. ⚙️ 키-값 저장소 설계하기(2) - 분산 저장소 구현에 필요한 기술적 고려사항들

가상 면접 사례로 배우는 대규모 시스템 설계 기초 (System Design Interview) - 저 : 알렉스 쉬, 역 : 이병준 을 읽고 정리한 글입니다. 6 장에서는 비 관계형 데이터베이스라 불리우는, 키-값 저장소에 대해서 이야기하면서 아래 조건에 해당되는 키-값 저장소를 분산 시스템에서의 조건으로 설계해봅니다. 1. 키-값 쌍의 크기는 10KB 이하이다. 2. 큰 데이터를 저장할 수 있어야 한다. 3. 높은 가용성을 제공해야 한다. 따라서 시스템은 설사 장애가 있더라도 빨리 응답해야한다. 4. 높은 규모 확장성을 제공해야한다. 따라서 트래픽 양에 따라 자동적을 ㅗ서버 증설/삭제가 이루어져야 한다. 5. 데이터 일관성 수준은 조정이 가능해야 한다. 6. 응답 지연시간(latency)은 짧아야한다..

[System Design Interview] 06. ⚙️ 키-값 저장소 (비 관계형 데이터베이스) 설계하기(1) - CAP 이론 정리

가상 면접 사례로 배우는 대규모 시스템 설계 기초 (System Design Interview) - 저 : 알렉스 쉬, 역 : 이병준 을 읽고 정리한 글입니다. 6 장에서는 비 관계형 데이터베이스라 불리우는, 키-값 저장소에 대해서 이야기하면서 아래 조건에 해당되는 키-값 저장소를 분산 시스템에서의 조건으로 설계해봅니다. 1. 키-값 쌍의 크기는 10KB 이하이다. 2. 큰 데이터를 저장할 수 있어야 한다. 3. 높은 가용성을 제공해야 한다. 따라서 시스템은 설사 장애가 있더라도 빨리 응답해야한다. 4. 높은 규모 확장성을 제공해야한다. 따라서 트래픽 양에 따라 자동적으로 서버 증설/삭제가 이루어져야 한다. 5. 데이터 일관성 수준은 조정이 가능해야 한다. 6. 응답 지연시간(latency)은 짧아야한다..

[Spring] service 단위 테스트 하기 - DB 와 독립된 테스트 환경 구축 (service unit test)

📌 이번 포스팅의 목적은 "Repository 에 의존하지 않는 Service Test" 와 "항상 성공하는 테스트 환경" 을 구축해보는 것입니다! 지금 사내에서는 service : repository = 1:1 구조로 가고있는데 repository 에서 조회하는 데이터 값의 조건에 따라서 다르게 흘러가는 로직을 테스트하고 싶었습니다. 한마디로 Repository 의 의존도를 가지고있는 Service 레이어를 테스트하고싶었는데 유닛테스트로 빠르게, 데이터베이스에 의존하지 않게 테스트하면서 Mocking 보다는 실제환경과 유사하게 테스트환경을 구축하고 싶었습니다. 👏🏻 즉, 조건을 정리하자면 유닛테스트 테스트에서 Repository 의존도 분리 mocking 말고 실 데이터 사용 항상 성공하는 테스트 작성..

[JAVA] 그 날의 주차 구하기 (week of day)

저는 일관성 있는 데이터를 저장하기위해서, 주 간 어떤날을 입력하든 그 주의 특정 요일 날짜를 반환하는 로직이 필요했습니다. 이에 대한 해답을 자바 8 이후로 나온 날짜및 시간 작업 라이브러리 중, TemporalAdjuster 와 DayOfWeek Enum 클래스를 사용하였습니다. Code public final class DateUtil { private final LocalDate date; public static DateUtil of(final LocalDate date) { return new DateUtil(date); } public int getCompareDayOfWeekNumber(final DayOfWeek dayOfWeek) { return dayOfWeek.getValue() -..

Java/Java 문법 2023.01.12

Zapier 사용해서 Velog Slack 연동하기 (벨로그 구독 포스팅 및 댓글 알림 받기)

이미 사내 블로그에 쓴 내용이지만, 회사 계정이 사라지는 경험을 하였기에.. 소중한 저의 경험을 개인블로그에 그대로 옮겨 적습니다 😂 해당 포스팅의 목표는 2가지 였습니다. Velog 에 새로운 포스팅 시 Slack 알림 Velog 에 댓글 작성시 Slack 알림 Velog Posting 알림은 Slack RSS 를 이용해서 쉽고 간편하게 설정할 수 있었지만 댓글 연동은 정보 거의 없어 폭풍 서치를 해야했습니다 Slack APP Library - Email 사용하기 (참고) slack for gmail 사용하기 Zapier 사용하기 저는 여기서 3번이 Zapier 를 사용했고 그이유로 다음과 같습니다. Zapier 는 Event Trigger → Action 의 구독형 이벤트 기반 방식의 동작을 취하는 ..

[System Design Interview] 05. ⚙️ 안정해시란?

가상 면접 사례로 배우는 대규모 시스템 설계 기초 (System Design Interview) - 저 : 알렉스 쉬, 역 : 이병준 을 읽고 정리한 글입니다. 5장에서는 안정 해시 설계에 대한 내용을 다룹니다. 이번 글에서는, 안정 해시가 왜 필요하며 어떻게 동작하는지에 대해서 이야기합니다. [목차] 해시 키 재배치 문제 안정 해시란 안정 해시 동작 과정 안정 해시 장점 📌 01. 해시 키 재배치 문제 (rehash) 해시 키 재배치 문제란, 안정 해시로 인해 풀고자하는 문제입니다. 해시 키 재배치 문제가 일어나는 상황 예시 보통 N개의 서버가 있고, 아래와 같은 해시 함수를 사용하여 부하를 균등하게 나누고 있다고 가정합니다. 클라이언트에서는, 이렇게 계산된 serverIndex 값을 이용해 데이터에 ..

[System Design Interview] 04. 트래픽 처리율 제한 장치의 설계 (rate limiter)❗️❗️

가상 면접 사례로 배우는 대규모 시스템 설계 기초 (System Design Interview) - 저 : 알렉스 쉬, 역 : 이병준 을 읽고 정리한 글입니다. 4 장의 내용은, 다양한 시스템 입장에서의 트랙픽 처리율을 제한하는 설계에 대해서 이야기합니다. 책의 내용을 참고해서 정리하였기 때문에, 처리율 제한 장치의 자세한 구현 방법 보다는, 이것이 무엇이고 왜 사용해야하는지 처리율 제한 장치를 설계할 떄 어디에 두어야하는지, 어떤 목표를 가지고 알고리즘이 존재하는지 등에 대해서 이야기합니다. 처리율 제한 장치란 처리율 제한 장치의 위치 (클라이언트, 서버) 처리율 제한 알고리즘에 대해서 분산 서비스 환경에서 고려해야할 점 그 외에, 처리율 제한 시 고려해야할 것 들 [목차] 처리율 제한장치란 처리율 제..