분류 전체보기 33

Percona MySQL 감사로그 설정

8.4 기준컴포넌트 설치(MySQL 클라이언트)-- 컴포넌트 설치INSTALL COMPONENT 'file://component_audit_log_filter';-- 설치 확인SELECT * FROM mysql.component;-- 감사 로그 설정 확인SHOW VARIABLES LIKE 'audit_log%';-- 감사 로그 파일 위치SELECT @@datadir; 설정-- 설치 후에 다음을 실행-- DB 툴에서는 실행되지 않고, MySQL 직접 접근하여 실행해야 함.SOURCE /usr/share/mysql/audit_log_filter_linux_install.sql;-- 다음 내용부터는 DB툴에서 실행 가능SET @filter_json = '{ "filter": { "class": { "na..

DB 2025.12.28

[DB] 풀 인덱스 스캔, 인덱스 전용 스캔(커버링 인덱스)

커버링 인덱스란?쿼리를 구성하는 컬럼이 모두 인덱스 컬럼일 경우, 이때 해당 인덱스를 커버링 인덱스라고 합니다.예시 )-- IDX_TEMP -> id, column1, column2SELECT id, column1, column2FROM TB_TEMP;SELECT id, column1FROM TB_TEMPWHERE id = '1'-- 여기에 인덱스 외에 다른 컬럼을 사용하게 된다면 커버링 인덱스가 아닙니다.-- 이 경우에 EXPLAIN 조회 시, Extra에 Using index가 조회됩니다 풀 인덱스 스캔이란?말 그대로 인덱스 전체를 스캔한다는 의미입니다.풀 테이블 스캔 보다는 부하가 덜하지만, 그래도 인덱스 전체를 스캔하기 때문에 부하가 낮지는 않습니다. 풀 인덱스 스캔이 발생할 수 있는 경우 1..

DB 2025.12.28

[Android] ViewModel 간단 정리

1. ViewModel의 역할ViewModel은 화면의 상태(State)를 관리하는 역할을 합니다.UI에 필요한 비즈니스 로직을 ViewModel에서 처리함으로써,UI 코드와 비즈니스 로직을 명확하게 분리할 수 있습니다.또한 ViewModel은 화면 구성 변경(예: 가로/세로 회전) 이 발생하더라도데이터를 유지할 수 있기 때문에 안정적인 화면 상태 관리를 가능하게 합니다. 2. remember / rememberSaveableremember와 rememberSaveable을 사용해도 상태 관리는 가능합니다.두 API 모두 상태를 기억한다는 공통점이 있지만, 동작 방식에는 차이가 있습니다.항목구성 변경(회전 등) 시 값 유지직렬화 필요비고항목구성 변경 시 값 유지 상태직렬화 필요비고remember❌ 초기화..

[Android] Jetpack Compose - Navigation

먼저 Navigation을 설명하기 전에,Jetpack Compose의 화면 전환에 대한 이해가 조금 필요하다.Compose는 Activity가 하나만 있고, Single Activity안에서 Navigation을 통해 화면을 전환한다.화면은 @Composable 함수로 구현되고 갱신은 Recomposition을 통해 이루어진다. 상태는 ViewModel, State로 관리한다.blue book Recomposition은 상태가 변경될 때, UI 갱신하는 것을 의미한다.다른 웹프레임워크 처럼, 상태변수 값이 변경 되면, 관련 된 UI가 갱신 된다.사용법먼저 build.gradle.kt(app) > dependencies에 다음을 추가해준다 implementation("androidx.navigation:..

S3 Presigned URL 생성 후 사용 방법

S3 스토리지에서 업로드/다운로드 링크를 생성하는 방법입니다.아래에서는 링크를 생성하는 예제만 작성할 것이고,링크 생성 전, 사용자 인증, 권한 체크 등 필요한 보안 절차는 반드시 있어야 합니다. 1. Maven 의존성 추가 software.amazon.awssdk s3 2. application.yml 설정이 설정 내용 중 키 값 같은 것은 원하는 대로 하시면 됩니다.cloud: aws: s3: bucket: ${BUCKET_NAME} credentials: access-key: ${AWS_ACCESS_KEY} secret-key: ${AWS_SECRET_KEY} region: ${REGION_NAME} 3...

AWS 2025.11.27

S3 Presigned URL 간략 정리

Presigned Url ?Presigned Url은 클라이언트가 직접 AWS S3에 접근할 수 있도록 임시 권한을 부여한 URL입니다.Url 생성 과정은 대략 아래와 같습니다.AWS Credentials(Access, Secret Key)로 서명(Signature) 생성만료기한 설정해당 서명이 포함된 URL 생성클라이언트는 AWS 인증 없이 해당 파일에 대한 업로드나 다운로드가 가능합니다.여기서 AWS 인증을 하지 않는 이유는 위의 과정에서 이미 Credentials를 가지고 인증하고 서명했기 때문입니다.요약하면 S3에서 해당 파일만 특정 시간 동안 읽거나 쓸 수 있는 권한을 미리 서명해서 만든 Url 이라고 보시면 될 것 같습니다. 보안상 안전한 이유AWS Credentials의 Secret Key를..

AWS 2025.11.27

[Android] Jetpack Compose 기본 컴포넌트

1. ScaffoldScaffold는 화면의 기본 레이아웃을 담당한다.아래와 같이 사용 가능하다.내용에 보면 innerPadding 이라는 Scaffold에서 자체적으로 넘겨주는 파라미터가 있다.PaddingValues 타입의 값을 넘겨주는데, 기기 상단(푸시아이콘, 시간 등)과 하단의 공간 Padding 값이다.이 값을 사용하지 않으면, 상단과 하단의 공간까지 전체를 차지하여 표시한다.@Composablefun ScaffoldTemplate() { Scaffold( contentWindowInsets = WindowInsets.safeDrawing, topBar = { TopAppBar( title = { Text("타이틀") }, ) },..

[Kotlin] 기본 문법 예제

1. 함수fun helloWorld(): Unit { // Unit -> void 와 같음. println("Hello World") } fun add(a: Int, b: Int): Int { return a + b } // 아래처럼 축약 가능 fun add(a: Int, b: Int): Int = a + b 2. 변수기본적으로 val, var 변수가 있다.타입 뒤에 ?를 붙여서 nullable 여부도 지정이 가능하다.Nullable, NonNull에 대해서는 다른 글에서 설명fun hi() { val a: Int = 10 // val은 변할 수 없음 - 상수 var b: Int = 10 // var은 재대입 가능 val c = 100 // type은 써주지 않아도 상관없음 - ..

[Kotlin] 기본 문법 비교 (vs Java)

1. 기본 문법 비교(vs Java) 항목JavaKotlin비고클래스 정의public class Person {}class Person접근제한자 기본값: Java=default, Kotlin=public변수 선언int a = 10;val a = 10 (불변), var a = 10 (가변)Null 안전성String s = null; (가능)var s: String? = null? 붙여야 null 허용. 컴파일러가 NPE 방지문자열 템플릿"Hello " + name"Hello $name" 또는 "Hello ${user.name}"조건문if(...) { ... } else { ... }동일, 하지만 표현식 가능: val max = if (a > b) a else bKotlin은 값 반환 가능삼항 연산자int ..