전체 글

전체 글

    웹소켓을 통한 양방향 통신

    웹소켓을 통한 양방향 통신

    개요 몇가지 조건을 가진 작은 프로젝트를 생각하였다. n명이 같은 페이지에 접속해 있을 때 어느 유저가 값을 보낸다면 n명의 화면에 반영되어야한다. 따로 DB는 사용하지않는다. 구상 몇개의 키워드를 생각하였다. 양방향통신 websocket sse 웹소켓과 sse 중 웹소켓을 선택했다. sse는 서버에서 클라이언트로 보낼 수 있어 클라이언트는 보내지는 못하고 받기만 한다. 이 경우 나는 유저가 값을 보내고 그 값을 받아야하기때문에 단방향인 sse보다는 웹소켓이 더 적합하다고 생각했다. WebSocket 웹소켓은 HTML5에서 새롭게 추가된 것으로 실시간 양방향 데이터 전송을 한다. 일반 웹 서버가 http 프로토콜을 이용해 통신하였다면 웹소켓은 ws프로토콜을 사용한다. http 프로토콜은 stateless..

    AWS Route53 도메인 이전 후 오류를 해결하기위해

    발생route53을 통해 구입한 기존 다른 계정의 도메인을 다른 계정으로 이전이전 방법 포스팅 링크 (44bits님)분명히 도메인 이전이 완료됐는데 라우팅 대상을 설정하였음에도 페이지 접속 시 DNS_PROBE_FINISHED_NXDOMAIN 라는 도메인 네임을 찾지 못하는 에러만 발생그에 따라 자연스레 https를 설정하기위해 acm인증서의 발급 상태가 검증 대기 중에 머물러있음 원인windows나 linux에서 WHOIS 유틸리티를 사용하여 도메인에 대한 정보를 검색WHOIS에서 출력되는 Name Server와 Route 53 → 도메인 → 등록된 도메인 → “자신의 도메인” → 이름 서버 가 동일한지 확인cmd에서 whois를 통한 Name ServerRoute 53의 이름 서버 (현재는 같지만 해..

    String str = ""; 과 String str = new String("");

    문자열의 생성Java에서는 두가지 방식으로 문자열을 선언할 수 있다.String str1 = new String("madplay"); String str2 = "madplay";new 연산자를 사용하면 heap 메모리에 적재가 되고 리터럴의 경우에는 heap안의 상수풀에 적재가 된다. 이것을 그림으로 표현하자면 다음과 같이 된다. 비교 equals, ==간단히 equals는 객체의 값으로 비교하고 ==는 객체의 주소값으로 비교하게 된다.String str1 = new String("aaa"); String str2 = new String("aaa"); System.out.println(str1 == str2); // false System.out.println(str1.equals(str2)); // t..

    DBMS의 트랜잭션과 @Transactional

    DBMS의 트랜잭션트랜잭션제일 먼저 DBMS의 전체적인 구조에 대해서 그림을 통해 나타내보기로했다.DBMS마다 구조가 다르기는 하지만, 위의 그림처럼 질의 처리기와 저장 시스템로 구분되어진다. 데이터베이스 시스템은 보통 비휘발성 저장 장치인 디스크에 데이터를 저장하며 전체 데이터베이스의 일부분을 메인 메모리에 유지한다. DBMS는 데이터를 고정 길이의 페이지로 저장하며, 디스크에서 읽거나 쓸 때에 페이지 단위로 입출력이 이루어진다. 메인 메모리에 유지하는 페이지들을 관리하는 모듈을 보통 페이지 버퍼 관리자 또는 버퍼 관리자라고 부르는데, DBMS의 많은 주요 모듈 중에서 매우 중요한 모듈 중의 하나이다.DBMS에서 트랙잭션 관리에 있어서 버퍼 관리자의 버퍼 관리 정책이 매우 중요한 결정을 가져오게 된다...

    Docker에서 localhost란 ?

    문제발생구성환경Spring boot 2.7.3Java 11Docker 20.10.17Windows 10MySQL(Local) 8.0.29MySQL(Docker) 5.7.39 docker-compose.ymlversion: '3' services: database: container_name: mysql_db image: mysql/mysql-server:5.7 environment: MYSQL_DATABASE: users_db MYSQL_ROOT_HOST: '%' MYSQL_ROOT_PASSWORD: root TZ: 'Asia/Seoul' ports: - "3307:3306" command: - "mysqld" - "--character-set-server=utf8mb4" - "--collation-se..

    MySQL Select 조회 성능을 위한 Index 적용기

    MySQL Select 조회 성능을 위한 Index 적용기

    문제발생 어느 날부터 “NFT 연관 키워드 사이트 [링크]“ 에서 키워드를 불러오는데 10초이상이 소요 문제원인 프론트단은 빨리 로딩되는 반면 백엔드단의 api를 불러오는데 시간이 소요됨 소요시간: 10.35초 데이터가 10,000 ~ 100,000 일 때는 체감되지않았지만 약 5,000,000 ~ 9,700,000 (현재) 값을 where절을 이용해여 select 시 체감되는 시간의 증가 현재 데이터양 해결방안 1. 현재 필요한 데이터 외 나머지를 삭제한다. 2. where절에 사용되는 컬럼을 INDEX로 설정해준다. 채택 사실상 현재는 필요없는 데이터를 지우는 1번 방법이 더 낫지만 많은 데이터를 핸들링해볼 수 있는 2번 방법으로 채택 SELECT 컬럼 FROM 테이블명 WHERE cerated_da..

    DFS, BFS

    DFS (Depth-First Search)깊이 우선 탐색그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 동작 방식Stack 자료구조 이용탐색 시작 노드를 Stack에 삽입하고, 방문 처리스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문처리하고, 방문하지 않은 인접 노드가 있으면 스택에서 최상단 노드를 꺼낸다.위 2, 3번 과정을 더 이상 실행할 수 없을 때까지 반복한다. 방문처리스택에 한 번 삽입되어 처리된 노드가 다시 삽입되지않게 체크이를 통해 각 노드를 한 번씩만 처리 가능 1 → 2 → 7 → 6 → 8 → 3 → 4 → 5 Stack에 기초하므로 재귀 함수를 이용하여 간결하게 구현 가능소요시간 : O(N) public class DFSExamRecurs..

    분산락 (Distributed Lock)

    락 (Lock) ?정의DB에서 트랜잭션 처리의 순차성을 보장하기 위한 방법 중 하나락의 획득이라는 거은 자원을 사용해도 된다는 의미이며, 다른 프로세스는 현재 락을 획득한 프로세스가 잠금을 건 자원에 대해서 사용할 수 없다. 분산락DB 등 공통된 저장소를 이용하여 자원의 사용여부를 체크하기때문에 전체 서버에 동기화된 처리가 가능하다.필요이유서버가 여러 대인 경우 여러 서버로 API가 분산 호출된다.→ 서버들간에 동기화된 처리가 필요하고, 여러 서버에 공통된 락을 적용해야 하기 때문에 분산락을 이용한다.분산 서버 동시성 제어 분산 서버 동시성 제어위 상황과 같이 한 자원에 대해서 여러 요청들이 공유할 때, 각 분산 DB의 동기화가 여러 요청의 동기화 속도를 따라가지 못한다.이 때 데이터의 정합성은 깨지고,..