디자인 패턴디자인 패턴 = 객체지향 설계시 발생하는 문제에 대한 해결책을 패턴 형태로 만든 것GoF가 처음으로 구체화함.생구행 3가지생 = 추빌팩프싱 -> 프로토타입구 = 퍼플어브데프컴 -> 어뎁터, 프록시행 = 나머지들 -> 옵저버, 이터레이터 등 결합도자스제외공내 내부 결합도가 젤 쎔 응집도기순교절시논우 기능적 응집도가 젤 쎔 테스트 커버리지구결조 조변다 여기서 결정문 == A && B이고 조건문은 A, B 각각임.즉, if, else로 처리할텐데 if 안에있는게 결정문, 각각이 조건문 1. 구문 커버리지 -> if 안쪽, 밖 문장중 하나라도 실행되면 ok -> 어떤 조건이라도 ㄱㅊ은듯2. 결정 커버리지 -> 결정문(A&&B)가 T, F 한번씩 해야함.-> T T / F T -> a&&b가 T, ..
전체 글
지인분과 함께 책 리뷰를 시작해보고자 했다.취업 준비를 하면서 어떤 부분을 좀더 공부하고 준비하면 더 좋을까? 를 생각해봤을 때,백엔드 개발을 준비하는 과정에서 디비는 뗄레야 뗄 수 없는 관계라고 생각한다.그만큼 디비가 중요하고 어떻게 하면 빠르게 데이터를 가져올지, 어떻게 하면 안정적으로 데이터를 가져올지, 어떻게 하면 데이터를 일관되게 저장할지 등이 요구된다. 물론 DBA와 백엔드 개발자의 역할은 다르다고 생각한다.하지만 백엔드 개발자라고 해서 DB에 대해서 잘 모르면 아무리 DB 서버를 최적화 한다고 해도 성능 문제나 안정성 측면에서 문제가 발생할 수 있다. 따라서 나는 DB에 대해서 중점적으로 공부해보기로 했고 부트캠프에서 만났던 다른 분 한분과 책을 읽고 리뷰하기로 했다.개발 일기에는 MySQL..
최근 면접 질문으로 JWT의 무상태성에 대해서 듣게 되었다.내 옆의 지원자 분께서 받은 질문인데"JWT가 stateless해서 좋다면 session보다 무조건 JWT를 쓰면 좋겠네요?" 라는 질문을 하셨다.물론 stateless하다는 점에서 서버 부하가 줄어들기 때문에 좋은건 맞다고 생각한다. 하지만 access token과 refresh token을 같이 쓴다면 refresh token을 서버에서 관리해야 하기 때문에 (정확히는 서버쪽 디비) 완전히 stateless하지는 않다고 생각한다.또한 jwt token 자체를 탈취당한다면 서버 입장에서는 탈취 유무를 모르기 때문에 쉽게 악용 가능하다.(물론 탈취하는거 자체는 어려울 것이다.) 이때 이 탈취에 대한 대비책으로 RTR(Refresh Token Ro..
데이터가 많은 경우, 트래픽이 문제되는 경우 샤딩 기법을 사용해서 더 적은 데이터 셋, 트래픽 분산을 처리할 수 있다.이전에는 애플리케이션 레벨에서 직접 DataSource 커스텀, ShardingSphere - jdbc를 사용해서 샤딩을 구현해보았다.하지만 RDBMS에서 샤딩을 구성했고 현재 momo 프로젝트에서는 채팅 메시지 저장 목적으로 MongoDB를 사용하기에 MongoDB에서 샤딩을 어떻게 적용하는지 궁금해졌다.따라서 샤딩을 MongoDB의 샤딩 방법을 공부하고 프로젝트에 적용해 볼 예정이다. 1. DB 레벨에서의 샤딩MongoDB는 DB 레벨에서의 샤딩을 지원해준다.이전 애플리케이션 레벨에서는 서버측에서 라우팅 처리를 해서 디비에 직접 연결했다. 즉, 추상화가 덜 되었다고 말할 수 있다. 하..
주제파티셔닝과 샤딩이 어떻게 동작하는지 파악하기 동기데이터베이스는 인덱스를 통해서 데이터를 빠르게 가져올 수 있다. 하지만 인덱스라고 해서 만능은 아니라고 생각한다.인덱스 자료구조를 유지하기 위해 계속 정렬을 해야하는 단점이 있고 절대적인 데이터의 양이 많아진다면 인덱스를 활용한다고 해도 성능이 안좋아지게 된다.이를 위한 기술로 파티셔닝과 샤딩이라는 기술이 존재한다고 알고있다. 이론적으로만 알고 있을 뿐 실제로 어떻게 동작하는지 궁금해서 찾아보기로 했다. 알게 된 내용1. 파티셔닝[ 파티셔닝 ]파티셔닝은 하나의 논리적 테이블을 물리적으로 여러 조각으로 분할해서 저장하는 것을 의미한다.하나의 DB 서버에서 하나의 테이블을 여러 파티션에 나눠서 저장하는 것이고 수평적 파티셔닝과 수직적 파티셔닝이 존재..
주제데이터베이스 인덱스에 대해서 자세히 탐구하기 동기학교 수업으로 데이터베이스를 배우고 실제로 다양한 데이터베이스를 다뤄보며 데이터베이스를 어느정도 이해했다고 생각했다. 또한 인덱스를 통해 빠르게 데이터에 접근하고 어떤 자료구조로 구성되는지, 논리적으로 저장되는게 아닌 실제 물리적으로 저장되는것 또한 안다. 그런데 인덱스의 종류도 생각보다 다양하고 (커버링 인덱스, 복합 인덱스 등) 인덱싱 자료구조 또한 여러가지 종류가 있다. 이전까지는 단순히 어떤 컬럼에 대해서 인덱스를 만들면 그 인덱스 자료구조에서 데이터를 빠르게 가져온다. 라고 추상적으로만 알고 있었던거 같다.더 자세하고 확실하게 알고싶어서 이번에 데이터베이스의 인덱스에 대해서 깊게 공부하고 정리할 것이다. 알게된 내용1. 인덱스 개본 개념인덱..
주제데이터베이스란 무엇인가? 동기데이터베이스가 무엇인지는 알고 어떻게 사용하는지, 어떤 상황에서 어떤걸 쓰는게 좋은지는 안다.하지만 데이터베이스가 탄생한 배경에 대해서 궁금해졌다.(최근에 웹의 탄생 배경에 대한 유튜브를 보고)파일 시스템에서 출발한건 알지만 어떤 문제가 있어서 이렇게 된건지. 이런것들을 좀 찾아서 공부해보자. 알게된 내용1. 데이터베이스의 역사 [ 파일 시스템, 초기 데이터베이스 ]초기 데이터베이스는 단순한 파일 시스템을 사용했다. 데이터는 파일로 저장되고, 프로그램은 직접 파일을 읽고 데이터를 관리했다.이 방식은 관리가 어렵고 데이터 접근성이 낮았다. 첫번쨰로 데이터 중복과 일관성 문제가 있다.같은 데이터가 여러 파일에 중복 저장되어 공간 낭비로 이어졌고 중복 저장되기 때문에 한 파일..
주제자바 GC(Garbage Collector)의 동작 원리와 알고리즘별 특징 - G1 GC 동기채팅 서비스 개발 중 RabbitMQ를 구현하면서 대규모 트래픽에 RabbitMQ의 메모리가 소진되어 다운되는 상황이 발생했다.이때 JVM으로 돌아가고 있던 Java WAS는 어떻게 메모리를 관리하는걸까가 궁금해졌다.평소 GC가 자동으로 쓰레기 메모리를 해제해준다고 알고있었는데 이걸 어떻게 아는지 궁금했다. 알게된 내용1. GC (Garbage Collector)란?[ Garbage Collector란? ]GC는 Garbage Collector(가비지 컬렉터)으로 자동으로 객체에 할당된 메모리를 '자동으로' 해제해주는 친구이다.C나 C++를 사용할 때를 생각해보면 동적으로 생성한 객체들에 대해서는 free나 ..