Redis가 싱글 스레드로 만들어진 이유
·
TIL
Redis가 싱글 스레드로 만들어진 이유 단일 스레드로 설계된 이유에는 성능최적화, 복잡성 감소, 데이터 일관성 유지가 있음단일 스레드 모델은 멀티스레드 모델에 비해 설계와 구현이 상대적으로 간단함-> 멀티스레드 환경에서 발생하는 동시성문제를 해결하기 위한 복잡한 동기화 메커니즘이 필요없기 때문 (단일 스레드는 여러 스레드가 동시에 동일한 데이터를 수정하려고 할 때 발생할 수 있는 데이터 불일치 문제를 방지하고 모든 명령어가 순차적으로 처리되기 때문에, 복잡한 락(lock) 메커니즘 없이도 데이터의 일관성을 자연스럽게 유지할 수 있음) Redis는 주로 메모리 내에서 빠르게 수행되는 I/O 작업을 처리하는 인메모리 데이터베이스로 설계되어, 매우 빠른 응답 시간을 제공하고, 단일 스레드 이벤트 루프를 사용..
[JAVA] Lv.1 하샤드 수
·
코딩테스트/프로그래머스
문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/12947 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 설명 문제 풀이제한조건을 보고 두가지 방법을 생각함1. 10000부터 나누기를 하여 몫을 더하는 방법2. 입력으로 들어온 x를 String 배열로 변환하여 인덱스로 더하는 방법그 중 2번의 방법으로 문제를 풀이함.구현 순서는 아래와 같다.- x를 문자열 배열로 변환- 합을 저장할 변수(x_sum) 초기화- 반복문을 돌며 인덱스별 문자열 값 더하기- if문을 사용하여 x가 x_sum 값으로 나눠지면 true, 아니면 false를 return..
[JAVA] 25192번 인사성 밝은 곰곰이
·
코딩테스트/백준
https://www.acmicpc.net/problem/25192레벨 : 실버 4 문제풀이ENTER 이후 처음 입력되는 채팅은 이모티콘이라 생각하면 쉽다처음에는 ENTER가 처음 한번만 입력되고 그 뒤에는 채팅내용인 줄 알았는데 예제 입력 2를 보면 ENTER가 여러번 입력되고, ENTER 이후 채팅 참여자들의 첫번째 채팅이 이모티콘이라는 것을 이해 함반복문과 Set을 이용해서 문제를 풀음입력받은 N만큼 log를 입력받고, set에 채팅을 친 사람들을 모았다.ENTER가 들어온 경우 set의 사이즈를 result에 추가한 후, set을 초기화해서 다시 set에 ENTER 이후 새로 채팅을 친 참여자의 이름을 모았다.코드import java.io.BufferedReader;import java.io.IO..
데이터베이스 인덱스
·
TIL
데이터베이스 인덱스란?데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조 ( 백과사전의 색인과 같음 )저장되는 컬럼의 값을 사용해서 항상 정렬된 상태를 유지함 (이로 인해 insert, update, delete의 성능이 안 좋아짐)장점테이블을 조회하는 속도와 성능을 향상시킬 수 있음시스템 부하를 줄일 수 있음단점DB의 약 10%가량 저장공간이 필요인덱스 관리(정렬된 상태)를 위해 추가 작업 필요잘못 사용하는 경우 성능이 저하될 수 있음(CREATE, DELETE, UPDATE가 빈번한 경우)인덱스를 사용하면 좋은 경우규모가 작지 않은 경우join이나 where, order by에 자주 사용되는 컬럼데이터의 중복도가 낮은 컬럼인덱스의 자료구조대표적으로는 해시 테이블과 B+Tree가 있음해시테이블k..
[JAVA] Scanner vs BufferedReader
·
TIL
코딩테스트를 java로 하다 생긴 의문점Scanner말고 BufferedReader를 사용하는 이유가 뭘까?단순하게 속도가 빠르다는 것말고 차이점이 무엇인지 알아보기 위해서 찾아봄 1. BufferedReader를 사용하는 이유단순하게. BufferedReader가 Scanner보다 훨씬 빠름BufferedReader가 내부적으로 버퍼를 사용해서 한 번에 많은 양의 데이터를 읽기 때문추가적으로 StringTokenizer를 통해 공백 기준으로 나눠줘야 함Scanner는 내부적으로 정규식을 사용하여 파싱하기에 상대적으로 느림입력이 많을수록 Scanner와 BufferedReader 간의 성능 차이 커짐 2. Scanner vs BufferedReader항목ScannerBufferedReader + Stri..
Entity Manager 엔티티 매니저
·
TIL
JPA 요소 및 흐름JPA의 요소와 흐름은 위 그림과 같음엔티티 매니저는 이름과 같이 엔티티를 관리하는 요소인데, 이게 무슨 역할을 하고 왜 필요한지 알아보기 위해서는 영속성 컨텍스트에 대해 알아야 함영속성 컨텍스트영속성 컨텍스트란? 엔티티를 영구적으로 저장하는 환경이자 엔티티 인스턴스를 효율적으로 관리하는 공간임영속성 컨텍스트는 1차 캐싱, 쓰기 지연, 변경 감지를 활용하여 영속 로직을 효율적으로 관리함 1차 캐시엔티티와 그 식별자가 Map 형태로 저장되어 있는 캐시1차 캐시에 엔티티가 있으면 db 접근 없이 연산을 수행할 수 있음위 사진을 보면 영속화한 후 조회하는 동안 select문이 없음 → 영속성 컨텍스트 안 1차 캐시에서 쿼리 처리(DB 접근을 줄여줌)쓰기 지연 (Write-behind)엔티티..
2563 색종이 Python
·
코딩테스트/백준
https://www.acmicpc.net/problem/2563문제 해석10*10 크기의 검은 색종이를 100*100 도화지 위에 붙임 -> 이때 검은 영역의 넓이를 구해라 아이디어0으로 채운 100*100 격자 준비(Board)색종이가 덮는 칸 1로 변환마지막에 1의 개수로 넓이 반환 코드import sysinput = sys.stdin.readlineN = int(input())board = [[0] * 100 for _ in range(100)]for _ in range(N): x, y = map(int, input().split()) for r in range(y, y + 10): for c in range(x, x + 10): board[r][c] =..
분산 트랜잭션에서 일관성을 보장하는 방법
·
TIL
분산 트랜잭션이란?2개 이상의 네트워크에서 이루어지는 시스템 간의 트랜잭션임(위키백과)DB가 분리되어 있으니까, DB 작업도 분리되어 있을 수 밖에 없음.모놀로식에서는 DB 트랜잭션 하나로 여러 서비스 로직을 원자적으로 처리할 수 있었지만, MSA 환경에서는 DB를 분리해서 원자성이 지켜지기 어려움하지만 분산 트랜잭션도 다른 트랜잭션처럼 ACID를 갖춰야하고, 원자성의 경우 all-or-nothing을 보증해야 함 → MSA환경에서 분리된 데이터베이스에 각각 접근하여 작업하지만, 이게 하나의 작업인 것처럼 동작해야하는 것임분산 트랜잭션을 관리할 프로세스로는 2PC와 Saga패턴이 있음 2PC(Two Phase Commit) - 강한 일관성간단하게 말하면 모든 서비스가 트랜잭션을 수행할 준비가 됐을 때만..