[Git] .gitignore 적용이 안되는 경우
·
IT/Git
[Git] .gitignore 적용이 안되는 경우 git rm -rf --cached . git add .
[MySQL] ORDER BY Optimization
·
Database/MySQL
MySQL ORDER BY Optimization MySQL Order by 사용시 인덱스를 사용 조건에 충족하다면 인덱스를 이용해서 정렬을 하겠지만 인덱스를 사용할 수 없는 경우에는 filesort를 사용을 한다. ORDER BY 인덱스 사용 충족 조건 Order by는 꼭 인덱스와 매치가 안되더라도 인덱스를 사용할 수도 있다. 각설하고 실제 예시를 통해 알아보자. SELECT * FROM t1 ORDER BY col_a, col_b; 테이블 t1에 복합 인덱스로 index (col_a, col_b) 가 생성되어 있다고 가정을 하자. MySQL의 Optimizer는 실행시 인덱스를 읽는게 효율적이라고 생각 한다면 인덱스를 사용할 것이고 그것을 통해서 추가적인 정렬하는 자원을 방지 할 수도 있다. SEL..
[통계] 정규화(Normalization)와 표준화(Standardization)
·
IT/수학
정규화 Normalization정규화는 통계학에서 여러가지의 의미를 가지고 있으며 주로 서로 다른 척도를 가진 것들에 대해서 공통의 척도를 갖도록 조정 하는 것으로 사용 된다. 보통 평균화 이전에 사용하며 교육 평가 점수를 정규화 하는 경우 분포를 정규분포로 맞추기 위해서 사용을 한다.날짜주식 A 주식 B2010-01-0110,00010,0002011-01-019,00050,0002012-01-0111,000100,0002013-01-0115,000150,000주식 A 종목과 주식 B 종목의 데이터 셋을 가지고 있다고 가정해보자. 각 주식 종목들의 범위는 [9000~15000], [10000~150000] 을 알 수 있다. 주식 A 종목에 비해서 주식 B 종목의 범위가 휠씬 넓다. 따라서 두개의 주식 종..
[Docker] 도커 사용하지 않는 볼륨, 이미지 삭제하는 방법
·
Infrastructure/Docker
[Docker] 도커 사용하지 않는 볼륨 삭제하는 방법 docker volume rm $(docker volume ls -qf dangling=true) [Docker] 도커 사용하지 않는 이미지 삭제하는 방법 docker image prune -a
Intellij에서 Kotlin을 Java로 변환 확인 하는 방법
·
Kotlin & Java
Intellij에서 Kotlin을 Java 변환 확인 하는 방법, 인텔리제이에서 코틀린을 자바 변환 확인 하는 방법 코틀린 컴파일 자바로 Decompile Kotlin class Person(val name: String) { val isKim: Boolean get() = name.startsWith("김") val maskingName: String get() = name[0] + (1 until name.length).joinToString("") { "*" } } Java public final class Person { @NotNull private final String name; public final boolean isKim() { return StringsKt.startsWith$defa..
[Kafka] 카프카 컨슈머
·
Infrastructure/Kafka
카프카 컨슈머 Kafka Consumer는 사용자가 제어하며 poll 메소드를 호출하여 카프카 브로커에서 데이터를 가져올 수 있다. 일반적으로 Consumer의 group.id와 가져올 topic을 지정한다. 같은 group.id를 사용하는 Consumer를 묶어서 Consumer Group이라고 한다. // KafkaConsumer ... set properties of consumer val consumer = consumerFactory(props).createConsumer() consumer.subscribe(listOf("topic-name")) while (true) { val records = consumer.poll(Duration.ofMillis(100)) records.forEach ..
[Kafka] 카프카 프로듀서
·
Infrastructure/Kafka
카프카 프로듀서 프로듀서는 카프카 프로듀서 API를 포함하여 구성된 애플리케이션을 마라혀 브로커에 특정 토픽의 파티션에 메시지를 전달하는 역할을 합니다. 프로듀서가 전달하는 메시지의 구조는 다음과 같습니다. Topic (토픽) Partition (특정 파티션 위치) Timestamp (생성 시간) Header (헤더) Key (키) Value (값) 카프카 서버에 메시지를 전송하는 책임을 가지고 있으며 데이터를 전송하기 위한 전략을 가지고 있다. 재시도는 어떻게 할 것 인지 데이터 전송 시 Compression은 어떻게 할 것 인지 데이터 전송 시 Serializer는 어떤것을 사용할 것인지 어떤 Partition으로 데이터 전송을 할 것인지 Compression (압축) 메시지 압축 옵션을 사용하였다면..
[Kafka] 카프카 메시지 브로커
·
Infrastructure/Kafka
카프카 구조 Zookeeper (주키퍼) 분산 코디네이션 서비스를 제공하는 오픈소스 프로젝트로 직접 어플리케이션 작업을 조율하는 것을 쉽게 개발할 수 있도록 도와주는 도구이다. API를 이용해 동기화나 마스터 선출 등의 작업을 쉽게 구현할 수 있게 해준다. Broker (브로커) Kafka 서버를 의미하며 한개의 Cluster 내에 여러개의 Kafka 서버를 실행시킬 수 있다. Topic (토픽) 메시지가 생산되고 소비되는 주체 Partition (파티션) 하나의 토픽내에서 토픽의 메시지가 분산되어서 각자 저장되는 단위 (위 카프카 아키텍쳐대로면 한개의 토픽에서 3개의 파티션으로 저장 관리되고 있다.) 파티션은 내부가 Queue로 구성이 되어있어서 순서를 보장하지만, Partition끼리의 순서를 보장하..
[Kafka] 카프카 에러 핸들링 패턴
·
Infrastructure/Kafka
Pattern 1: Stop on error (에러시 중지) 모든 이벤트들이 순서 보장과 함께 에러 없이 처리 되어야 하는 경우에 사용함. (예를 들어, CDC) 처리 도중 에러가 발생한다면 어플리케이션은 중단되며 수동 개입이 필수적이다. Source 토픽의 이벤트는 다른 경로를 사용하지 않는다. Pattern 2: Dead letter queue (실패 대기열 큐) 일반적인 시나리오로 메인 스트림이 계속되는 동안 어플리케이션에서 처리가 불가하다면 Error 토픽으로 향하도록 함. 이 방식에서는 재시도를 위한 프로세스를 요구하거나 지원하지 않는다. 즉, 이벤트는 성공적으로 처리되거나 Error 토픽이다. 일반적인 상황에서 어플리케이션은 Source 토픽의 각 이벤트를 처리하고 Target 토픽으로 생성한..
Jetbrains IDE용 Git 팁
·
IT/Git
Push 하지 안았고 Commit만 한 상태에서 변경 사항이 있다면 Undo Commit을 활용 다시 Changes 리스트로 복구할 수 있다. 또한, Commit 메시지 수정이 필요하다면 다음처럼 수정을 할 수도 있다.
[MySQL] Show Index
·
Database/MySQL
SHOW INDEX Statement SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name [{FROM | IN} db_name] [WHERE expr] mysql> SHOW INDEX FROM City\G *************************** 1. row *************************** Table: city Non_unique: 0 Key_name: PRIMARY Seq_in_index: 1 Column_name: ID Collation: A Cardinality: 4188 Sub_part: NULL Packed: NULL Null: Index_type: BTREE Comment: Index_comment: ***************..
[Web Hacking] Challange 54 풀이
·
IT/Web
https://webhacking.kr/challenge/bonus-14/ x = new XMLHttpRequest(); var results = [] function callback(res) { results.push(res); } x.onreadystatechange = () => { if (x.readyState === 4) { callback(x.response); } }; for(i=0;i
[Web Hacking] Challange 24 풀이
·
IT/Web
https://webhacking.kr/challenge/bonus-4/ view-source 방법 extract 함수로 변수 추출을 하는데 SERVER와 COOKIE를 변수로 추출한다. 여기서 서버는 헤더 정보, 쿠키는 쿠키 정보를 가지고 있는데 쿠키에 REMOTE_ADDR 키를 가진 값을 생성한다. 그리고 나서 string replace를 함수들을 통과 했을 때 127.0.0.1 이 나오도록 쿠키 값을 수정해준다. 정답 값은 "112277...007.....007.....1"
[Web Hacking] Challange 16 풀이
·
IT/Web
https://webhacking.kr/challenge/js-3/ Challenge 16 * 페이지 소스 코드를 보면 mv함수에서 document location을 이동시키는 부분이 있다. Console에서 mv(124) 입력하면 된다.
[보안] Cookie bomb attack
·
IT/Web
Cookie Bomb Attack Cookie Bomb는 비정상적인 크기의 쿠기 값으로 생성하여 공격하는 방법. 일반적인 HTTP Request 프로토콜에서는 Request/Respons로 나누어지고 각각 Header/Body로 나누어진다. 그 중에 Request Header가 너무 클 경우 413(Request Entity Too Large) 혹은 400(Bad Request) 에러를 발생 시킨다. 공격을 해소하기 위해서는 Client 쿠키가 초기화 하지 않는 이상 계속 이어진다. 많이 사용 되는 Web Server의 Header 허용 사이즈 Web Server Size Nginx 4KB ~ 8 KB Apache Web Server 8KB Tomcat 8KB ~ 48KB 공격 방법 XSS나 유저 트래킹..
[Web Hacking] Challange 26 풀이
·
IT/Web
https://webhacking.kr/challenge/web-11/ view-source 소스 코드를 보면 $_GET['id']로 url query id 값을 가져와서 preg_match 확인 후 admin 글자가 있다면 exit 하도록 되어 있다. 그 다음줄에서 urldecode를 진행 하니 ASCII 코드표를 확인 후 URL Encoding을 한다. 한번만 인코딩 하면 접속시 'admin'으로 변경 되니 두번 인코딩 하여 ?id=%2561%2564%256d%2569%256e으로 접속
[Web Hacking] Challange 15 풀이
·
IT/Web
https://webhacking.kr/challenge/js-2/ 페이지 소스를 보면 alert 창 띄우고 document location을 /으로 이동 시키도록 되어있다. url 주소를 뒤에 ?getFlag 추가하여 접속
[보안] XSS HTML Image 태그 주의할 점 - 2
·
IT/Web
[보안] HTML Image 태그 주의할 점 - 2 route 및 controller 작성 path("something.png", SomethingView.as_view()) class SomethingView(View): def get(self, request, *args, **kwargs): print(request.headers) print(request.GET) return HttpResponse(status=204) HTML Image 작성 해당 이미지가 출력되는 곳에서 local storage에 xxx 키값으로 저장되어 있는 값을 가져오고자 한다. 결과 만약 local storage, cookie 등의 비휘발성의 데이터가 사용자 Client에 저장되어 있고 특정 키 값을 추적하여 확인한다면 서..
[보안] XSS HTML Image 태그 주의할 점
·
IT/Web
[보안] HTML Image 태그 주의할 점 회사를 다니며 상용 서비스를 운용과 개발을 해왔는데, 그 길지도 않은 기간동안 악의적인 목적으로 혹은 학습 목적으로 보이는 경우의 운용중인 서버를 바라보는 공격적인 행위가 있었다. 그 때의 추억을 되새기며 몇가지 간단한 것들에 대해서 한번 정리 해볼려고 한다. 이미지 파일에 스크립트를 삽입하는 방법 샘플 예시 https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/ How To Bypass CSP By Hiding JavaScript In A PNG Image Hide a malicious JavaScript library in a PNG image and tweet it, then include it in..
[Python] 파이썬 Thread and Pool Manager
·
Python/Python
[Python] 파이썬 Thread and Pool Manager GitHub 주소 https://github.com/sanggi-wjg/py-thread-manager 코드 import os from pool_manager import PoolManager def calculate(x): print(f"[{os.getpid()}] func: {x}\t\t", r := x ** 5 ** 2, flush=True) return r manager = PoolManager() manager.add_task(calculate, [i for i in range(2, 22)]) manager.run_map() manager.add_task(calculate, [i for i in range(2, 22)]) mana..