반응형

분류 전체보기 199

[Redis] 사용시 주의사항

Redis 사용시 주의사항    O(N) 명령어대부분의 명령어는 O(1)의 시간복잡도를 갖고 있지만, 일부 명령어의 경우 O(N)의 시간복잡도를 갖고 있는데요..!Redis는 Single Thread 로 동작하기 때문에, 오래 걸리는 명령어 수행시 전체적으로 애플리케이션 성능이 저하될 수 있습니다.keyssmembershgetallsort KEYS지정된 패턴과 일치하는 모든 key 조회하는 명령어로 prod 환경에서는 사용하지 않는 것이 권장 됩니다.$ keys * 1) "jobs" 2) "member" 3) "java-station:burgers" 4) "fruits" 5) "result" 6) "user:2:fruits" 7) "points" 8) "user:log-in:25-01-02" 9) "k1..

[Redis] 데이터 타입 활용

Redis 데이터 타입 활용 Redis 에서 제공하는 데이터 타입을 이용한 예시들을 알아봅시당~!StringsOne Time PasswordOne Time Password 란 인증을 위해 사용되는 임시 비밀번호를 의미 합니다.(회원가입 시 잠깐 사용되는 비밀번호) OTP 인증 과정Distributed Lock분산 락 이란 분산 환경의 다수의 프로세스에서 동일한 자원에 접근할 때, 동시성 문제를 해결하기 위해 사용되는 방법 입니다.자주 사용하는 RDB에 레코드 락을 걸어서 해결할 수 도 있지만, Redis를 이용해서도 여러 프로세서에서 데이터를 변경하는 문제를 막을 수도 있습니다. 참고RDB의 레코드 락을 사용하면 훨씬 안전하게 일관성을 유지할 수 있지만, 레코드가 존재하지 않는 경우에는 락을 사용할 수 ..

[Redis] 특수 명령어

Redis 특수 명령어 Redis는 Expiration 가 필요해!redis 는 기본적으로 in-memory 데이터베이스로 동작하기 때문에 저장된 모든 데이터가 서버의 메모리를 차지합니다.데이터가 계속해서 쌓기이만 한다면 메모리가 가득차게 되서 성능 저하 또는 서버가 중단될 수 있습니다.또한, 캐싱 레이어(caching layer)로 많이 사용되기 때문에 redis 에서 조회한 데이터가 최신 데이터가 아닐 확률이 있습니다.(일정 시간 이후에 최신 데이터가 필요하다면, 해당 데이터를 삭제해야 합니다.) 따라서, 데이터를 일정 시간이 지나면 삭제하여 불필요한 메모리를 사용을 방지할 수 있습니다.(데이터가 만료 되자마자 물리적으로 바로 삭제되지는 않고, 만료라고 표시했다가 백그라운드에서 주기적으로 삭제) 정리..

[Redis] Redis 특징과 데이터 타입 소개

Redis 특징 In-memory모든 데이터를 ram 에 저장(backup / snapshot 제외)Sigle thread단일 thread 로 모든 task 를 처리Cluster mode다중 노드에 데이터를 분산 저장하여 안정성과 고가용성을 제공안정성: Redis는 고속으로 데이터를 읽고 쓰는 데 최적화되어 있지만, 트래픽이 급증하면 단일 노드로 처리하기 어렵습니다.고가용성: 만약 마스터 노드가 장애가 발생하면, 클러스터 내 슬레이브 노드 중 하나가 자동으로 승격되어 마스터 역할을 대신합니다. 이를 통해 서비스 중단을 최소화합니다.마스터 노드는 데이터를 저장하고 처리하며, 슬레이브 노드는 복제본을 유지PersistenceRDB(Redis Database) + AOF(Append only file) 통해 ..

[MySQL] PreparedStatement(Binding Query)

[MySQL] PreparedStatement(Binding Query) StatementJava 에서 쿼리문을 사용할 때 preparedStatement 를 사용해보신 경험이 있을 것 입니다.PreparedStatement는 java.sql 패키지에 있는 Statement 를 상속받은 interface 인데요!Statement 는 SQL을 실행할 때 사용하는 interface 입니다. PreparedStatementBinding QueryPreparedStatement 는 Binding Query 라고 많이 알려져 있습니다.Java 의 jdbc를 이용해서 코딩하는 경우 아래처럼 PreparedStatement 객체를 이용하여 코드를 작성할 수 있습니다.pstmt = connection.prepareSt..

[MySQL] Error Handling

DB를 사용하다가 에러가 발생한 경험은 서버 개발자라면 무조건 있을 것 같은데요.바로 DBA에게 해당 사실을 공유하거나, 담당 개발자를 부른 경험이 있을까요? 서버 연결이 안돼요~~쿼리 에러 났어요~~ 그런데, 담당자가 부재중이거나 다른 업무로 바쁘다면…?! ㅠㅠ최소한 어떤 에러가 발생했고, 어떻게 하면 에러를 핸들링 할 수있을지 알아 봅시다! MySQL 에러 구분Global Errorserver-side 와 client-side 공용으로 발생Server Errorserver-side 에서만 발생ERROR 1146 (42S02): Table ‘test.no_such_table’ doesn’t exist일부 Server Error는 client-side 로 전달 됩니다.Client Errorclient-s..

[MySQL] 쿼리 실행 구조

쿼리 실행 구조쿼리를 실행하는 관점에서 MySQL의 구조를 간략하게 그림으로 표현하면 위와 같습니다. 이를 기능별로 나눠서 표현하면 아래와 같습니다.쿼리 파서전처리기옵티마이저실행엔진핸들러(스토리지엔진) 기능들에 대해서 상세하게 알아봅시다~! 쿼리 파서쿼리 파서는 사용자 요청으로 들어온 쿼리 문장을 토큰으로 분리하여 트리 형태의 구조로 만들어 내는 작업을 의미 합니다.쿼리 문장의 기본 문법 오류를 발견하고 사용자에게 오류 메시지를 전달합니다. 참고토큰이란 MySQL이 인식할 수 있는 최소 단위의 어휘나 기호를 의미 합니다. 전처리기파서 과정에서 만들어진 파서 트리를 기반으로 쿼리 문장에 구조적인 문제점이 있는지 확인합니다.각 토큰을 테이블 이름이나 컬럼 이름, 또는 내장 함수와 같은 개체를 매핑하여 해당 ..

[MySQL] Lateral Derived Table 활용하는 방법

Lateral Derived Table 이란?!Derived Table(파생 테이블)은 쿼리의 from 절에서 서브쿼리를 통해 생성되는 임시 테이블을 의미합니다.일반적으로 Derived Table은 선행 테이블의 컬럼을 참조할 수 없으나, Lateral Derived Table은 참조 가능합니다.정의된 Dervied Table 앞부분에 LATERAL 키워드를 추가해서 사용 합니다.참조한 값을 바탕으로 동적으로 결과를 생성할 수 있습니다.  동작 방법select e.emp_no, s.sales_count, s.total_salesfrom employees eleft join lateral( select count(*) as sales_count, ..

[MySQL] Stored Function 에서 많이 하는 실수 방지하기

MySQL FunctionMySQL 함수는 MySQL 서버에 내장되어 있는 Built-in Function과 사용자가 직접 C/C++ 언어로 개발해서 플러그인 할 수 있는 User Defined Function 이 존재합니다.그리고 Stroed Function 이 존재하는데요. MySQL Function 종류Built-in FunctionUser Defined Function(UDF)Stored Function Stored FunctionStored Function는 기본적으로 DETERMINISTIC, NOT DETERMINISTIC 로 구분할 수 있습니다.반드시 둘 중 하나의 속성만 가지게 됩니다. DETERMINISTIC(확정적)동일 상태와 동일 입력으로 호출동일한 결과를 반환여기서 입력은 함수의 ..

[MySQL] left join 아무생각 없이 사용하고 있는 것은 아니지?

inner join 과 left join 개념 체크!아래와 같은 테이블이 존재한다고 합시다! memberidnameteam_id1세웅12임하33민영24민주25소영16영민null7영소null teamidname1서버 개발팀2클라이언트 개발팀3디자인팀 inner joininner join 은 테이블의 교집합을 반환합니다.즉, 테이블간에 모두 존재하는 결과만 반환하게 됩니다.예를 들어 member 와 team 테이블이 존재할 때 inner join을 사용하게 되면, 현재 존재하는 team에 속해있는 member 만 반환하게 됩니다.select m.id, m.name, m.team_id, t.name from member minner join team t on t.id = m.team_id; idnameteam..

반응형