Redis Transaction 문서 번역 Redis Transactions는 MULTI, EXEC, DISCARD, WATCH를 사용하여 명령어 그룹을 한번에 실행해 주며, 다음 두가지 사항을 보장한다. 트랜잭션 환경 에서 모든 명령어들은 serialized 되어 순서대로 실행된다. 다른 client가 실행한 요청이 중간에 실행 되는 일은 없다. 이것은 명령어가 single isolated 하게 동작하도록 보장한다. EXEC 명령어는 트랜잭션 안에서 다른 명령어를 실행시킨다. 그래서 client가 EXEC을 실행 시키지 않은 채 레디스와 연결이 끊겼다면 다른 명령어들은 실행 되지 않는다. 대신, EXEC 명려어가 실행 되면 모든 명령어들은 실행 된다. append-only file(persistence..
회사에서 Redis Pub/Sub을 사용 검토하며 알아본 내용을 간단하게 정리 Pub/Sub 방식 Publisher와 Subscriber는 서로 디커플링 되어 있어 누가 메시지를 발행 하는 지, 누가 메시지를 구독 하는 지 알지 못한다. 이런 특징은 Redis Pub/Sub이 큰 규모로 확장될 수 있도록 하고, 다양한 네트워크 토폴로지를 가질 수 있게 한다. Publisher가 channel에 메시지를 발행 하면 그 채널을 구독 하고 있는 Subscriber는 Redis가 push 해주는 메시지를 전달 받게 된다. Redis는 채널을 구독 하고 있는 모든 Subscriber들에게 메시지를 push 해준다. 패턴 일치 구독 glob 스타일 패턴으로 채널을 구독 할 수 있다. 예를 들어 # 구독 PSUBSC..
1. 인스타그램이 뭔가요? 인스타그램은 유저들이 사진과 비디오를 올리고 다른 유저들과 공유 할 수 있는 소셜 네트워킹 서비스 이다. 인스타그램 유저들은 정보를 공개/비공개 설정을 할 수 있다. 퍼블릭 으로 공유된 모든것들은 다른 유저에게 보여질 수 있고, private 하게 공유된 컨텐츠는 특정 사람들만 볼 수 있다. 인스타그램은 Facebook, Twitter, Flickr, Tumblr와 같은 다른 sns와 공유하기가 가능하다. 2. 시스템 요구사항 우리는 인스타그램 디자인을 하기위해 다음과 같은 요구사항을 충족시켜야 한다. Functional Requirements 사용자는 사진을 업로드/다운로드 하고 볼 수 있어야 한다. 사용자는 사진/비디오 제목을 검색할 수 있어야 한다. 사용자는 다른 사용자를..
Extension Model 5.1. Overview JUnit5 에서는 Extension 이라는 개념으로 JUnit4의 Runner, TestRule, MethodRule 을 모두 대체 한다. 5.2. Registering Extensions Extension 은 선언적으로(@ExtendWith), 프로그래밍적으로(@RegisterExtension), 혹은 자동으로(ServiceLoader) 등록할 수 있다. 5.2.1. Declarative Extension Registration 개발자는 하나 이상의 Extension을 test interface, test class, test method에 선언적으로 선언 함으로서 등록 할 수있다. JUnit 5.8 부터 @ExtendsWith 어노테이션은 클래스..
educative 의 시스템 디자인 인터뷰 가이드를 번역한 글 이다. 1. 문제 이해 및 설계 범위 확정 질의를 통해 요구사항을 파악한다. 디자인 질문은 정답이 없다. 최종 산출물을 선명히 도출해내기 위한 질문에 공을 많이 들이면 인터뷰를 성공적으로 진행할 가능성이 높아진다. 따라서 질의를 통해 면접관이 제시한(?) 시스템이 어떤 점에 포커싱 하고 있는지를 명확히 해야한다. tweet like system 아래와 같은 질문을 할 수 있다. 사용자가 트윗을 포스팅 하고 다른 사람을 follow 할 수 있나요? 사용자의 타임라인을 생성하고 표시 해 줘야 하나요? 트윗에 사진과 비디오가 포함 되어 있나요? 백엔드만 개발? 프론트엔드 까지? 유저가 트윗을 검색 할 수 있나요? 인기 있는 토픽을 표시해 줘야 하나..
개발 들어가기 앞서 요구사항을 완벽히 분석하고 설계한 후 개발에 들어가진 못했다. 변명을 하자면... 그런 습관이 잘 들어있지 않았고 시간이 부족했다. 그래서 개발을 하다가 더 좋은 방법이 생각나 중간 중간 변경하기도 했다. 채점자 리뷰에서도 이 부분과 관련해 지적을 받은게 있어서 앞으로 설계에 대해 신경을 좀 더 써야겠다고 생각했다. DB 설계 테이블 테이블 이름 역할 song 노래 정보 저장 album 앨범정보 저장 playlist playlist 정보 저장 playlist_song playlist와 playlist에 들어있는 곡 정보를 담고 있는 테이블 테이블간 관계 한개의 앨범에 여러 노래가 담길 수 있으니 album과 song의 관계는 1:n 관계로 간단하게 정했다. playlist와 song의..
블로그를 옮기며 예전에 썼던 글을 옮겨왔습니다. 오랜만에 구직활동을 시작했다. 결국 과제탈락(채점 결과 상위 3%라고 써져 있었는데ㅠㅠ) 이지만 실무에서 스프링부트를 사용하지 않았음에도 긍정적인 피드백을 받아 용기도 얻을 수 있었고 나쁘진 않았던 경험이었다. 이대로 그냥 좋은 경험 이었다 하고 넘어가 버리면 또다시 실력이 원점으로 돌아갈 것 같아서 과제를 하며 했던 생각, 개발 의도를 적어 놓으려 한다. 그리고 채첨관들의 리뷰 + 스터디원들의 리뷰 + 셀프 리뷰를 통해 코드를 개선해보고 최종 마무리를 해보려 한다. 순서 순서는 설계 리뷰 내용 개선 방향 으로 진행하려 한다.
... import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; ... @ExtendWith(SpringExtension.class) public class TestTest { @Mock EntityRepository entityRepository; @AutoSource @ParameterizedTest public void create_test(Req..
- Total
- Today
- Yesterday