# 인바운드 & 아웃바운드

 

방화벽이란

서버와 서버 간 통신을 하는데 있어서

정의된 보안 규칙에 기반하여

네트워크 트래픽을 제어하는 보안 시스템이다.

쉽게 말하자면

어떤 곳에서 파티가 열렸는데

그 파티에 참석하려면 파티 인원으로 등록된 인원만 출입이 가능하다

파티장 앞에서 등록된 사람만 들여보내주는 역할을 하는게

바로 방화벽의 역할이다.

 

서버간 통신을 하다보면

데이터가 서버로 들어오는 경우가 있고

데이터가 서버밖으로 나가는 경우가 있다.

이때, 데이터가 서버로 들어오는 경우를 인바운드라 하고

데이터가 서버 밖으로 나가는 경우를 아웃바운드라 생각하면 된다.

 

예를 들자면

첨부파일을 서버에 저장한다 = 인바운드

첨부파일을 다운로드 한다 = 아웃바운드

한가지 더 알아야 할 것이 있는데 데이터 전송 방식이다.

데이터 전송 방식은 TCP와 UDP가 있는데

TCP는 신뢰성을 우선시하고

UDP는 성능을 우선시한다.

 

1,2,3이라는 데이터를 보낸다고 생각하자.

TCP 프로토콜은 데이터를 받는 입장에서 1,2,3 순서대로 데이터를 받겠지만

UDP 프로토콜은 1,2,3으로 오든 2,3,1로 오든 데이터를 받기만 하면 된다.

그리고

TCP는 받는 쪽에서 데이터를 잘 받았는지 확인하는 절차가 있는 반면

UDP는 데이터 보내기만 하면 끝이다.

 

그럼 방화벽을 여는 법을 알아보자

<리눅스>

### 인바운드 오픈
# 192.168.123.60 서버가 5432 포트로 들어오도록 허용
iptables -I INPUT 1 -s 192.168.123.60 -p tcp --dport 5432 -j ACCEPT
# 192.168.123.60 서버에 대한 인바운드 모든 포트를 허용
iptables -I INPUT 1 -s 192.168.123.60 -p all -j ACCEPT

### 아웃바운드 오픈
# 192.168.123.60 서버가 5432 포트로 나가도록 허용
iptables -I OUTPUT 1 -s 192.168.123.60 -p tcp --dport 5432 -j ACCEPT
# 192.168.123.60 서버에 대한 아웃바운드 모든 포트를 허용
iptables -I OUTPUT 1 -s 192.168.123.60 -p all -j ACCEPT

# 주의! 테스트 안함 ㅋ 참고용

 

<윈도우>

제어판 > Windows Defender 방화벽 > 고급 설정

> 인바운드/아웃바운드 규칙 > 새규칙 > 

포트 선택 + 다음 > TCP(기본) + 모든/특정 로컬 포트(특정 port 입력) + 다음

> 연결 허용 + 다음 > 다음 > 이름 및 설명 입력 마침

 

[참고자료]
https://prinha.tistory.com/entry/%EB%B0%A9%ED%99%94%EB%B2%BD
https://mangkyu.tistory.com/15
https://yunyoung1819.tistory.com/20

 

 

To be continued.........

 

 

Made by 꿩

'IT > 보안' 카테고리의 다른 글

[Spring] Google reCAPTCHA v3  (6) 2019.07.07
OAuth  (0) 2019.06.17
SSL인증서  (0) 2019.03.21
CSRF  (0) 2018.12.25
XSS 공격과 방어  (2) 2018.10.25

# 나의 신(神)

 

지난 2년은 나에게 사건사고가 많은 해였다.

2020년과 2021년...

경자년과 기축년...

안그래도 가뜩이나 차가운 사주에

경자와 기축이란 세운은 내 사주를 더욱 차갑게 만든다

다시는 겪고 싶지 않은 무섭고 힘든 나날이었다.

 

삶이 힘들다보면 결국 운명학에서 답을 찾곤 한다

내 사주가 극단적으로 차가워서

내 차트의 토성과 화성이 주요 지표성을 건드려서

등등

어떤 일이 안풀릴때 사주나 차트를 펴보면

항상 답이 나온다

하지만 바꿀 수 없는 답이다.

나무위키 - 음양오행설

불교에 귀의하고자 하는 친구는 나에게 말한다

전생의 업보로 받게 된 팔자라고...

그래, 내가 전생에 많은 죄를 지었나보다.

 

그 친구는 업보를 해소하기 위한 방법을 알려준다.

하루에 두시간씩 기도하고 주말에는 4시간...

너의 신한테 도움을 요청하라고

니가 지금 하고 있는 하루 20분 정도의 기도는

20분 정도의 값어치밖에 없는 기도라고..

매일 100일 동안 간절히 몇시간씩 기도하면

너의 업보가 많이 해소되고 너가 원하는게 이뤄질거라고..

 

정말 그럴까?

논리적이고 설득력있는 얘기였다

현생의 운명은 내 전생의 업보로 인해 만들어지고

현생의 운명을 조금이라도 변화시키고 싶으면

너보다 더 영력이 쎈 신에게 간절히 기도해서

업보로 인해 막혀있는 너의 소망을 이뤄지게 만들라는 것이었다.

 

기도하기 싫다고?

그럼 넌 간절히 원하지 않는거야

너의 간절함은 그정도가 끝이라는 거야

화생방 들어가봣지?

벽을 부수고 나오고 싶을 정도의 간절함이 넌 없는거야

그만큼 니가 간절히 원한다면

넌 100일 2시간 기도를 할거야.

 

이성적으로 논리적으로 맞는 말이다

하지만 가슴에는 와닿지가 않았다

그럼 내가 그만큼 간절히 원하지 않는다는 것인가?

라고 스스로에게 되물으면

그렇지 않다..

아니 나는 내 삶을 운명을 바꾸고 싶다

그걸 위해 내년에는 개명을 할 것이다

근데 그건 쉬운 길이잖아

정말로 업보를 해소하고 싶으면

그만큼 정성을 들여야

신도 너의 정성을 보고 그만큼 너의 업보를 해소해주겠지.

 

근데 난 직장인이야.

일하고 와서 자기전에 2시간이나 기도하라고?

주말에는 4시간?

일하고 나면 몸에 힘이 없어

퇴근하고 하는건 손가락만 움직여도 되는 게임이야

"그럼 넌 간절함이 없는거야."

 

그럼 다른 방법을 알려주지

일하면서 속으로 계속 기도해

일하면서 딴 생각할 수 있잖아

만약 중간에 끊기면 다시 해야해

아니, 못해...

일하면서 약먹는 것도 까먹는데

일에 집중해야하는데

어떻게 딴생각을 할 수 있어?

 

그래 알았어,

그럼 딱 두달만 하루 한시간씩 기도해봐

그렇게 해도 안되면

내가 주술해줄께

...

이미 내 마음은 갈갈이 찢어졌다

내가 그렇게까지 하면서 살아야해?

만약 그렇게 해서 소망이 이뤄지지 않는다면?

"그럼 넌 신에게 믿음이 없는거지"

 

내가 핑계를 너무 많이 대는걸까

자유의지로 운명을 바꾸는게 쉽진 않다고 들었다

나는 운명을 바꿀 수 있는 사람은 아닌가보다

나는 간절함이 없나보다.

 

나는 간절하다고 생각했는데

그만큼 노오력을 안하니 간절함이 없는거다

난 신을 믿지만

너의 믿음은 그정도뿐이다.

 

결론은

삶을 바꾸려면 결국 노력을 해야하고

노력을 하지 않는다면

전생의 업보로 이루어진 팔자대로

살아가는 수밖에 없다는 것이다.

 

그래서

너는 그것을 믿니?

아니 안믿어

믿고 싶지도 않아.

 

그건 너의 논리고 너의 세계고 너의 신이야

나의 논리, 나의 세계, 나의 신은

그렇게 빡세게 하지 않아도

문을 두드리기만 해도 열어줄거야

이름만 부르기만 해도 나를 위해 와줄거야.

 

그게 바로 내가 믿는 나의 주님이야

To be continued.........

 

 

Made by 꿩

'일상' 카테고리의 다른 글

[일상] 헬스장 창문 너머  (1) 2024.03.17
[일상] 청룡의 해가 들어오고 있어요!  (0) 2024.02.01
[일상] 솔라리턴  (0) 2018.12.19
[일상] 명동성당 아침  (2) 2018.10.30
[일상] 북한산 3인방  (1) 2018.10.27

MySQL -> MariaDB로 마이그레이션 하는 중

계정정보를 따로 추출하는 걸 발견해서

따로 기록해둔다.

나중에 유용할듯?!

mysql -u유저 -p`비밀번호` -e"select concat('show grants for ','\'',user,'\'@\'',host,'\'') from mysql.user" > user_list_with_header.txt
sed '1d' user_list_with_header.txt > ./user.txt
while read user; do
    mysql -u유저 -p`비밀번호` -e"$user" > user_grant.txt
    sed '1d' user_grant.txt >> user_privileges.txt
    echo "flush privileges" >> user_privileges.txt
done <user.txt
awk '{print $0";"}' user_privileges.txt >user_privileges_final.sql
rm user.txt user_list_with_header.txt user_grant.txt user_privileges.txt

발견지: https://stackoverflow.com/questions/23519797/how-to-export-import-existing-user-with-its-privileges?noredirect=1&lq=1 

To be continued.........

 

 

Made by 꿩

'Database > RDBMS' 카테고리의 다른 글

[MySQL/MariaDB] my.cnf 메모리 설정  (0) 2022.06.11
[PostgreSQL] Architecture  (0) 2022.03.01
[MariaDB] mariabackup 백업 & 복구  (0) 2022.02.15
Transaction과 Isolation Level  (0) 2021.04.07
MVCC 동시성 제어  (0) 2021.02.06

# [Kafka Connect/Debezium] SMT 란?

 

SMT는 Single Message Transformation의 약자이다.

 

Kafka Connect에 대해서 복기해보자.

여러 데이터베이스로부터 데이터를 추출하여 Kafka topic에 넣고

Kafka topic에 있는 데이터를 다른 데이터 소스에 전달하기 위해 만들어졌다.

https://debezium.io/documentation/reference/1.7/architecture.html

 

즉, 다양한 Database로부터 메세지를 생산하여

메세지들이 Kafka topic에 저장하고

다양한 데이터 소스들에게 메시지를 소비하는 것이다.

 

근데 debezium으로 메세지를 만들어 본 사람은 알겠지만

row 한 줄 당 메세지 한 개이다.

그리고 그 메세지는 매우 많은 정보가 들어가 있으며 그만큼 크기가 크다.

예시로 PostgreSQL Debezium에서 생성된 기본 메세지 형식을 보자.

{
  "schema": {
    ...
  },
  "payload": {
    "before": null,
    "after": {
      "id": 2,
      "product": "candle",
      "price": 13000,
      "ins_timestamp": 1635084000213
    },
    "source": {
      "version": "1.3.1.Final",
      "connector": "postgresql",
      "name": "pg_test",
      "ts_ms": 1635052376362,
      "snapshot": "last",
      "db": "test",
      "schema": "public",
      "table": "t_market",
      "txId": 113669095,
      "lsn": 905751868160,
      "xmin": null
    },
    "op": "r",
    "ts_ms": 1635052376362,
    "transaction": null
  }
}

schema 부분은 너무 내용이 많아 생략했고

payload 부분을 보면 before과 after로 나뉘어져 있는 것을 볼 수 있다.

그리고 해당 소스에 대한 정보가 들어가 있다. 

row 한 줄마다 데이터의 before 정보와 소스 정보가 모두 들어간다고 보면 된다.

그리고 해당 정보에 대한 스키마도 모두 포함된다.

참고로 해당 메세지는 insert 동작으로 before는 null임을 알 수 있다.

 

그렇다면 SMT를 적용한 메세지 형식을 알아보자.

우선, SMT를 적용할 경우 다음 transform을 추가해주면 된다.
(참고로 mongodb는 다른 transform type을 사용해야 한다.)

        "transforms": "unwrap",
        "transforms.unwrap.type":"io.debezium.transforms.ExtractNewRecordState",
        "transforms.unwrap.drop.tombstones":false,
        "transforms.unwrap.delete.handling.mode":"rewrite",
        "transforms.unwrap.add.fields":"op,schema"

 

위의 설정들은

debezium 공식문서(https://debezium.io/documentation/reference/transformations/event-flattening.html)

에서 확인하면 되고...

이렇게 SMT로 변환하도록 추가한 뒤, 메세지 형식은 다음과 같이 변경된다.

# insert
{
  "schema": {
     ...
  },
  "payload": {
    "id": 3,
    "product": "mask",
    "price": 1500,
    "ins_timestamp": 1635086072124,
    "__op": "c",
    "__schema": "public",
    "__deleted": "false"
  }
}

# update
{
  "schema": {
    ...
  },
  "payload": {
    "id": 3,
    "product": "mask",
    "price": 1490,
    "ins_timestamp": 1635086072124,
    "__op": "u",
    "__schema": "public",
    "__deleted": "false"
  }
}

# delete
{
  "schema": {
    ...
  },
  "payload": {
    "id": 3,
    "product": null,
    "price": null,
    "ins_timestamp": null,
    "__op": "d",
    "__schema": "public",
    "__deleted": "true"
  }
}
null

메세지가 훨씬 간결해지고

before 값이 없어지고 after 값만 나오는 것을 확인할 수 있다.

그리고 소스 정보도 위의 설정에서 명시한 내용만 나오도록 변형했다.

https://www.confluent.io/blog/kafka-connect-single-message-transformation-tutorial-with-examples/

이처럼 kafka topic에 메세지를 넣기 전

transformation을 이용하여 메세지를 변형하여

필요한 정보만 kafka topic에 넣도록 하여

메세지 크기를 줄일 수 있다.

 

transform은 SMT 말고도 더 다른 기능들도 있다.

저장되고자 하는 kafka topic을 임의로 설정한다든지

특정 데이터를 필터링 한다든지

Debezium이 릴리즈 되면서

점점 다양한 기능들이 추가되고 있는것 같다.

그런 기능들을 조사 및 연구해서 사용하면

좀 더 편리하게 원하는 대로 데이터 파이프라인을 구축할 수 있을 것이다.

To be continued.........

 

 

Made by 꿩

 

'CDC > Kafka Connect' 카테고리의 다른 글

Kafka Connect 설정  (0) 2021.01.09
Kafka Connect란?  (0) 2021.01.09

# [Bash] 스크립트 #! 의미

 

#!는 스크립트 제일 앞에서

어떤 명령어 해석기를 이용하여 파일을 실행할 것인지를 명시하는 것이다.

 

리눅스에서는 기본적으로 파일을 실행할때 bash 쉘로 설정되어 있어서

따로 명시를 하지 않아도

#!/bin/bash
#!/bin/sh

위의 bash 쉘로 자동 실행되게 한다.

 

다음의 예시를 통해 눈으로 확인해보자.

[root@chuchu test]# cat test1.sh 
#!/bin/bash

echo "Hello World!"
[root@chuchu test]# cat test2.sh 
#!/bin/cat

echo "Hello World!"
[root@chuchu test]# 
[root@chuchu test]# ./test1.sh 
Hello World!
[root@chuchu test]# ./test2.sh 
#!/bin/cat

echo "Hello World!"

 

참고: https://hahoital.tistory.com/145

To be continued.........

 

 

Made by 꿩

'IT > Bash' 카테고리의 다른 글

[Linux] SSH 공개키 설정  (0) 2022.03.28
[Bash] 터미널 jar 파일 생성  (0) 2021.10.05
[centos] java openjdk 설치 및 삭제  (0) 2021.10.05
Redis 메모리 & 시간 측정 스크립트  (0) 2021.05.14

# [Bash] 터미널 jar 파일 생성

 

1. java 파일 생성

# cat Hello.java 
public class Hello {
  public static void main(String args[]){
    System.out.println("hello world");
  }
}

 

2. 컴파일

# javac Hello.java

 

3. manifest.txt 파일 생성

# cat manifest.txt 
Main-class: Hello

※ manifest.txt 파일이란? jar로 패키지된 파일 구성요소의 메타 정보를 가지고 있는 파일이다.

 

4. jar 파일 생성

# jar -cvmf manifest.txt hello.jar Hello.class 
Manifest를 추가함
추가하는 중: Hello.class(입력 = 415) (출력 = 286)(31%를 감소함)

 

5. jar 파일 실행

# java -jar hello.jar 
hello world

To be continued.........

 

 

Made by 꿩

 

'IT > Bash' 카테고리의 다른 글

[Linux] SSH 공개키 설정  (0) 2022.03.28
[Bash] 스크립트 #! 의미  (0) 2021.10.19
[centos] java openjdk 설치 및 삭제  (0) 2021.10.05
Redis 메모리 & 시간 측정 스크립트  (0) 2021.05.14

# [centos] java openjdk 설치 및 삭제

 

1. java 설치현황 파악

# rpm -qa | grep jdk
java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64
java-1.8.0-openjdk-headless-1.8.0.302.b08-0.el7_9.x86_64
copy-jdk-configs-3.3-10.el7_5.noarch
java-11-openjdk-devel-11.0.12.0.7-0.el7_9.x86_64
java-11-openjdk-headless-11.0.12.0.7-0.el7_9.x86_64
java-1.7.0-openjdk-headless-1.7.0.261-2.6.22.2.el7_8.x86_64

 

2. java 삭제

yum remove java-11-openjdk-devel.x86_64 -y

 

3. java 설치

yum install java-11-openjdk-devel.x86_64 -y

echo 'export JAVA_HOME=/usr/lib/jvm/jre-openjdk' > /etc/profile.d/java.sh
echo 'setenv JAVA_HOME "/usr/lib/jvm/jre-openjdk"' > /etc/profile.d/java.csh

 

4. java 설치 확인

# java -version
openjdk version "11.0.12" 2021-07-20 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.12+7-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.12+7-LTS, mixed mode, sharing)

# javac -version
javac 11.0.12

To be continued.........

 

 

Made by 꿩

'IT > Bash' 카테고리의 다른 글

[Linux] SSH 공개키 설정  (0) 2022.03.28
[Bash] 스크립트 #! 의미  (0) 2021.10.19
[Bash] 터미널 jar 파일 생성  (0) 2021.10.05
Redis 메모리 & 시간 측정 스크립트  (0) 2021.05.14

# Redis 메모리 & 시간 측정 스크립트

 

Python으로 redis 테스트 시 메모리와 시간 측정을 위한 스크립트

#!/bin/sh
 
### help message
function help() {
/bin/cat << EOF
Usage :
    redis_test.sh [-n/--filename] filename [-f/--flushall] [-h/--help]
EOF
}
    
### flag
INPUT_FILE=False
  
### check parameter
while (("$#")); do
    case "$1" in
        -n|--filename)
            if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
                INPUT_FILE=$2
                shift 2
            else
                echo "[Error] Argument for $1 is missing" >&2
                exit 1
            fi
            ;;
        -f|--flushall)
            FLUSHALL=True
            shift
            ;;
        -h|--help)
            help
            exit 1
            ;;
        -*|--*) # unsupported flags
            echo "[Error] Unsupported flag: $1" >&2
            echo "$0 -h for help message" >&2
            exit 1
            ;;
        *)
            echo "[Error]: Arguments with not proper flag: $1" >&2
            echo "$0 -h for help message" >&2
            exit 1
            ;;
    esac
done
   
  
### check if input filename
if [ $# -eq 0 ] && [ "$INPUT_FILE" == "False" ]
  then
    echo "[Error] Please give me test file"
    help;
    exit 1;
fi
   
 
### flushall execution
if [[ "$FLUSHALL" == True ]]
then
    ok=`redis-cli FLUSHALL`
    echo "[Info] redis memory flush all : ${ok}"
fi
 
  
### check memory and time before test
before=`redis-cli INFO memory | grep 'used_memory:' | awk -F: '{print $2}'`
b=`echo "${before//[$'\t\r\n ']}"`
StartTime=$(date +%s)
  
### test execution
echo "[Info] test start"
################################################ 테스트 실행 파일
python3 $INPUT_FILE
echo "[Info] test end"
  
### check memory and time after test
after=`redis-cli INFO memory | grep 'used_memory:' | awk -F: '{print $2}'`
a=`echo "${after//[$'\t\r\n ']}"`
EndTime=$(date +%s)
  
used=$(expr $a - $b)
  
echo ""
echo ""
echo "####################################[result]################################################"
echo "[result] redis used memory ${used}"
echo "[result] It takes $(($EndTime - $StartTime)) seconds to complete this task."

 

 

[참고문서]
https://tyanjournal.com/tips/bash-command-line-option-parsing%ED%95%98%EA%B8%B0-%EC%98%B5%EC%85%98-%EB%B0%9B%EA%B8%B0/
https://knight76.tistory.com/entry/Redis-%EB%A0%88%EB%94%94%EC%8A%A4-%ED%85%8C%EC%8A%A4%ED%8A%B8%ED%9B%84-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%B8%A1%EC%A0%95%ED%95%98%EA%B8%B0-redis-used-memory

 

To be continued.........

 

 

Made by 꿩

'IT > Bash' 카테고리의 다른 글

[Linux] SSH 공개키 설정  (0) 2022.03.28
[Bash] 스크립트 #! 의미  (0) 2021.10.19
[Bash] 터미널 jar 파일 생성  (0) 2021.10.05
[centos] java openjdk 설치 및 삭제  (0) 2021.10.05

+ Recent posts