본문 바로가기

프로젝트 & TIL/일별 공부 기록 (백엔드 스쿨)

(98)
84일차 - MongoDB Sharded Cluster Sharded Cluster - 모든 샤드는 레플리카 셋으로 구성되어 있다. * 샤딩 : 하나의 큰 데이터를 여러 장비에 걸쳐서 데이터를 분할하는 과정. Scale-out을 위한 솔루션 * 샤드 : 분할된 데이터셋의 모음 - Shard, Router, Config Server로 구성됨 - 모든 컬렉션이 샤딩될 필요는 없다. - 샤딩은 Shard Key를 선정해야 하고 해당 필드에는 인덱스가 만들어져 있어야 한다. - 컬렉션 단위 > 청크 단위로 분할(샤딩)한다. - Ranged Sharding, Hashed Sharding(균등한 분산 => 권장), Zone Sharding(주로 다른 방식과 함께 사용) 장점 - 용량의 한계를 극복할 수 있다. - 데이터 규모, 부하가 크더라도 처리량이 좋다. - 고가용..
83일차 - Stomp를 이용한 채팅 기능 구현하기 의존성 추가하기 - build.gradle dependencies { ... implementation 'org.springframework.boot:spring-boot-starter-websocket' implementation 'org.webjars:sockjs-client:1.5.1' implementation 'org.webjars:stomp-websocket:2.3.4' } Config 파일 수정 @Configuration @EnableWebSocketMessageBroker public class StompWebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoint..
82일차 - 웹소켓을 이용한 기본적인 채팅 기능 구현하기 Websocket 의존성 추가하기 - build.gradle dependencies { ... implementation 'org.springframework.boot:spring-boot-starter-websocket' } Handler @Slf4j @Component public class WebSockChatHandler extends TextWebSocketHandler { @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { String payload = message.getPayload(); log.info("payload {}", payload); T..
81일차 - 프로젝트 진행 시 참고사항 * 프로젝트 진행 시 참고사항 - xampp 오류 발생했을 때 : Explorer 클릭 > mysql > backup 폴더의 내용을 data 폴더로 붙여넣기(data 기존 내용은 삭제) - EXPLAIN ~ : 실행계획을 보여준다. EXPLAIN SELECT * FROM TABLE - UPSERT : INSERT + UPDATE => 일단 생성 시도, 데이터가 존재하지 않으면 생성, 존재하면 업데이트
80일차 - MongoDB Replica Set Replica Set - HA Solution Member [Client Application ---> Primary ---> Secondary] Primary - Read/Write 요청 모두 처리 - Write를 처리하는 유일한 멤버 - Replica Set에 하나만 존재할 수 있음 Secondary - Read에 대한 요청 처리 - 복제를 통해 Primary와 동일한 데이터 셋을 유지 - Replica Set에 여러 개 존재 가능 Fail-Over Primary가 이용 불가능해지면 선출 알고리즘에 의해 Secondary 중 하나가 Primary로 승격된다. Arbiter : 데이터를 들고 있지 않은, Primary 선출에만 참여하는 멤버(P-S-A 방식은 권장되지는 않음 => Secondary가 죽..
79일차 - MongoDB MongoDB의 기본 데이터베이스 admin - 인증과 권한 부여 역할 - 일부 관리 작업을 하려면 admin DB에 대한 접근이 필요함 local - 모든 mongod instance는 local DB를 소유한다. - oplog와 같은 replication 절차에 필요한 정보를 저장 - startup_log와 같은 instance 진단 정보를 저장 - local DB 자체는 복제되지 않는다. config - sharded cluster에서 각 shard의 정보를 저장 RDBMS와의 차이점 Table -> Collection Row -> Document Column -> Field - Database => Collection => Document => Field Collection의 특징 - 동적 스키마..
78일차 - Data Binding Data Binding Converter Interface @GetMapping("/") public PersonResponse getPerson(@RequestHeader("person") Person person) { ... } /// @Component public class PersonConverter implements Converter { @Override public Person convert(String source) { return objectMapper.readValue(source, Person.class); } } public class Person { private String name; private int age; } S(Source) ---> T(Target)으로 변환해준다...
77일차 - C언어 C언어에서는 객체를 스택에 만들 수 있다. C언어에서는 배열을 스택에 만들 수 있다. 스택의 모든 것들은 컴파일 타임에 미리 사이즈가 계산되어야 한다. 이 때 등장한 것이 동적할당(malloc, C++ 의 new) 이다. 동적할당은 그때 그때 필요한 용량을 힙 지역에서 바로 할당받는다. 그렇기 때문에 상황에 맞는 최적화가 가능하다. 동적할당을 받았다면 수동으로 반납 처리를 해야 한다. 자바에서는 반납 처리가 거의 자동이다. 자바에서는 스택에서 객체(배열 포함)를 만드는 것을 없애버렸다. => 문법적인 간결함을 위해