암호화 항목중 일부분인 단방향 SHA256 해시 암호화 함수 생성하기를 설명한다.

1. 메모장을 열어 아래 내용을 붙여넣고 파일명을 SHA256Encryptor.java 로 합니다.


---------------------------------- 단방향(SHA256) -----------------------------------

CREATE OR REPLACE and RESOLVE JAVA SOURCE NAMED "SHA256Encryptor.SHA256" AS /*파일명*/
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
  
public class SHA256Encryptor {
    public static String SHA256(String str){
        String SHA = "";
        try{
            MessageDigest sh = MessageDigest.getInstance("SHA-256");
            sh.update(str.getBytes());
            byte byteData[] = sh.digest();
  
            StringBuffer sb = new StringBuffer();
            for(int i = 0 ; i < byteData.length ; i++){
                sb.append(Integer.toString((byteData[i]&0xff) + 0x100, 16).substring(1));
            }
            SHA = sb.toString();
        }catch(NoSuchAlgorithmException e){
            e.printStackTrace();
            SHA = null;
        }
        return SHA;
    }
     
    public static void main(String[] args) {
        String in_str = args[0];
        String out_str = SHA256(in_str);
         
        System.out.println(">>in["+in_str+ "],out[" + out_str + "]" + out_str.length() );
    }
}
 

2. 콘솔을 열어 아래와 같이 실행하여 JAVA 파일을 오라클에 적재한다.

생성 : C:\>loadjava -u 아이디/암호@계정 -v -resolve C:\SHA256Encryptor.java
원격지에서 실행가능하며 DBA 권한이 필요합니다.
 

3. 오라클접속하여 아래와 같은 함수를 만들고 실행하여 함수를 생성한다.

CREATE OR REPLACE FUNCTION SHA265(NAME VARCHAR2) RETURN VARCHAR2
AS LANGUAGE JAVA
NAME 'SHA256Encryptor.SHA256(java.lang.String) return java.lang.String';

 

4. 테스트를 수행한다.

 SELECT SHA256('1234') FROM DUAL

반응형
블로그 이미지

조이풀 라이프

Lift is short, enjoy the life

,

오라클에서 사용할 수 있는 Simple Name 마스킹 함수


create or replace FUNCTION M2U_MASKING_NAME(in_date IN varchar2)
    return varchar2
IS
    RS VARCHAR2(50) :=null;
BEGIN
    IF LENGTH(in_data) > 2 THEN
        RS := SUBSTR(in_data, 1, 1) || LPAD('*', 1, '*') || SUBSTR(in_data, 3, LENGTH(in_data)-2);
    ELSEIF LENGTH(in_data) = 2 THEN
        RS := SUBSTR(in_data, 1, 1) || LPAD('*', 1, '*');
    ENDIF

    return (RS);
END;

반응형
블로그 이미지

조이풀 라이프

Lift is short, enjoy the life

,

MySQL 의 default character set 은 MySQL 의 설정 파일에 설정할 수 있다.


배포판
위치
RHEL/CentOS
 /etc/my.cnf
Ubuntu 
/etc/mysql/mysql.conf.d/mysqld.cnf


명시적으로 설정하지 않으면 기본 캐릭터 셋은 latin1 이 된다. 현재 characterset 확인은 다음과 같이 mysql 클라이언트로 연결한 후에 status 명령어로 알수 있다.


또는 다음과 같이 mysql 콘솔에서 show variable 을 사용해도 된다.


mysql> show variables like 'char%';



redmine, gitlab 등 거의 모든 app 들은 charset 으로 UTF-8 을 권장하고 있고 실제로도 UTF-8 을 사용하는게 정신건강에 좋다.
MySQL 5.1 과 5.5 이상은 my.cnf 에 캐릭터 셋 설정하는 방식이 약간 다르다.

설정

MySQL 5.5 이상

MySQL 5.5 부터는 default-character-set 옵션이 제거되었고 character-set-server 만 설정해 주면 된다.
skip-character-set-client-handshake 가 빠지면 client 의 시스템 encoding 을 사용하는데 윈도의 경우 euckr 로 설정 될수 있으므로 필요하다.
MySQL 5.5

[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8
skip-character-set-client-handshake


이제 service mysqld restart 로 재구동후에 mysql client 에서 status 명령어로 보면 charset 이 utf-8 로 변경되었을 것이다.



MySQL 5.1

5.1 은 다음과 같이 설정해야 한다.
MySQL 5.1

[mysqld]
character-set-server = utf8
  
[client]
default-character-set=utf8
 
[mysql]
default-character-set=utf8

UTF8-MB 

Emoji 는 기존 utf-8 로는 표현을 못하므로 MySQL에서 이모지를 저장하려면 4바이트의 가변 길이를 갖는 utf8mb4 캐릭터 셋을 사용해야 한다. (MySQL 5.5.3 이상 필요)

[mysqld]
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
skip-character-set-client-handshake


이미 기존에 만들어진 database 라면 alter database 명령어로 캐릭터 셋과 collate 를 변경할 수 있다.
character set 변경

ALTER DATABASE homestead CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;


캐릭터 셋 변경 후에는 MySQL 서비스를 재시작해야 한다. 아래의 MySQL 재시작 명령어를 참조하여 수행한다.

MySQL 서비스 재시작 

작업
우분투 명령어
CentOS6 명령어
CentOS7 명령어
시작
정지
재시작
상태확인
→ service mysql 대신 /etc/init.d/mysql,
→ service mysqld 대신 /etc/init.d/mysqld를 써도 됨

반응형
블로그 이미지

조이풀 라이프

Lift is short, enjoy the life

,

특정 대상 제외하고 조회

  • 조회
    • ls -p | grep -v '.tx' | grep -v '.rx'

반응형
블로그 이미지

조이풀 라이프

Lift is short, enjoy the life

,

멀티코더 CPU의 처리 성능 향상을 위해 아래와 같이 OS 부팅 파라메터인 NUMA 파라메터를 비활성할 수 있다.

NUMA 설정 변경 후 OS를 리부팅 해야 한다.


자세한 NUMA 파라메터 설명은 레드햇 사이트를 참조하기 바란다.


AUTOMATIC NUMA BALANCING

Automatic NUMA balancing improves the performance of applications running on NUMA hardware systems. It is enabled by default on Red Hat Enterprise Linux 7 systems.
An application will generally perform best when the threads of its processes are accessing memory on the same NUMA node as the threads are scheduled. Automatic NUMA balancing moves tasks (which can be threads or processes) closer to the memory they are accessing. It also moves application data to memory closer to the tasks that reference it. This is all done automatically by the kernel when automatic NUMA balancing is active.
Automatic NUMA balancing uses a number of algorithms and data structures, which are only active and allocated if automatic NUMA balancing is active on the system:
  • Periodic NUMA unmapping of process memory
  • NUMA hinting fault
  • Migrate-on-Fault (MoF) - moves memory to where the program using it runs
  • task_numa_placement - moves running programs closer to their memory

9.2.1. Configuring Automatic NUMA Balancing

Automatic NUMA balancing is enabled by default in Red Hat Enterprise Linux 7, and will automatically activate when booted on hardware with NUMA properties.
Automatic NUMA balancing is enabled when both of the following conditions are met:
  • # numactl --hardware shows multiple nodes, and
  • # cat /sys/kernel/debug/sched_features shows NUMA in the flags.
Manual NUMA tuning of applications will override automatic NUMA balancing, disabling periodic unmapping of memory, NUMA faults, migration, and automatic NUMA placement of those applications.
In some cases, system-wide manual NUMA tuning is preferred.
To disable automatic NUMA balancing, use the following command:
# echo 0 > /proc/sys/kernel/numa_balancing
To enable automatic NUMA balancing, use the following command:
# echo 1 > /proc/sys/kernel/numa_balancing


반응형
블로그 이미지

조이풀 라이프

Lift is short, enjoy the life

,

1. FIN Time Wait 세션 확인

프로그램이 수행될 때 netstat -nt | grep TIME_WAIT | wc -l 명령어를 통해 세션상태를 확인하여 TIME_WAIT 상태의 세션의 개수를 확인할 수 있다.

TIME_WAIT 상태 해제되지 않은 대량의 연결 시도가 로컬 포트에 할당되고 해제되지 않아 유효한 범위의 포트 번호를 잠식하여 발생한다.
할당된 포트가 해제될 때 까지 새로운 연결을 설정할 수 없게 하는 상황이 발생된다.추측하여 이런 저런 검색을 통해

2. FIN Time Wait 시간 조절

 sysctl.conf 에 아래 파라미터들을 추가하여 TIME_WAIT 을 발생시키던 세션수가 감소하는 것을 확인할 수 있다.
추가한 파라미터 및 역할을 아래와 같다. 
 . ip_local_port_range :: 로컬 포트로 사용할 수 있는 주소의 범위 
 . tcp_tw_recycle : TIME_WAIT 상태에 있는 연결을 빠르게 재활용 할 수 있도록 하기 위한 값,  기본적으로 비활성화 되어 있으므로 값을 추가하여 넣어줘야 함 
 . tcp_fin_timeout FIN_WAIT2 상태에 있는 보유 시간 설정 (기본 60초 -> 10초)
# vi /etc/sysctl.conf
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 10

3. 시스템에 적용하기

내용 추가 후 sysctl -p 명령어를 통해 바로 적용할 수 있다. 

※유의사항

net. ipv4 .tcp_tw_recycle을 사용하면 조건에 따라 TCP 세션 이 부풀어 없게되는 문제가 발생할 수도있다고 하니 관리하는 시스템 성격에 따라 유의하여 적용해야 할 것 같다. 


반응형
블로그 이미지

조이풀 라이프

Lift is short, enjoy the life

,

1. 개요

last 명령어로 최근 접속 기록 및 최근 재부팅 기록을 볼 수 있다.

/var/log/wtmp의 내용을 보여주는 것이다.

[root@zetawiki ~]# last

root pts/1 :0.0 Sun Feb 12 05:55 still logged in root pts/0 :0.0 Sun Feb 12 03:50 still logged in root pts/0 :0.0 Mon Feb 6 04:49 - 05:28 (00:38) root :0 Mon Feb 6 04:49 still logged in root :0 Mon Feb 6 04:49 - 04:49 (00:00) reboot system boot 2.6.18-274.el5 Mon Feb 6 13:32 (5+16:52)


wtmp begins Mon Feb 6 13:32:07 2012


2. 특정 계정 접속 확인


last 명령어 뒤에 계정명을 붙이면 그 계정의 접속 기록만 볼 수 있다.

[root@zetawiki ~]# last root

root pts/1 :0.0 Sun Feb 12 05:55 still logged in root pts/0 :0.0 Sun Feb 12 03:50 still logged in root pts/0 :0.0 Mon Feb 6 04:49 - 05:28 (00:38) root :0 Mon Feb 6 04:49 still logged in root :0 Mon Feb 6 04:49 - 04:49 (00:00)


wtmp begins Mon Feb 6 13:32:07 2012


3. 특정 시각 이전 접속 확인

-t 옵션으로 일시를 붙이면 그 이전의 접속기록만 표시된다. 

인수는 YYYMMDDHHMMSS(연월일시분초) 형식으로 적어야 한다.

[root@zetawiki ~]# last -t 20120212040000root pts/0 :0.0 Sun Feb 12 03:50 still logged in root pts/0 :0.0 Mon Feb 6 04:49 - 05:28 (00:38) root :0 Mon Feb 6 04:49 still logged in root :0 Mon Feb 6 04:49 - 04:49 (00:00) reboot system boot 2.6.18-274.el5 Mon Feb 6 13:32 (5+17:05)


wtmp begins Mon Feb 6 13:32:07 2012


4. 연도 보기

[root@zetawiki ~]# last

root pts/1 135.79.24.68 Thu Apr 7 10:28 still logged in root pts/1 135.79.24.68 Thu Apr 7 10:17 - 10:22 (00:05) root pts/0 135.79.24.68 Wed Aug 27 18:46 - 18:51 (00:05) ... (생략)

[root@zetawiki ~]# last -F

root pts/1 135.79.24.68 Thu Apr 7 10:28:58 2016 still logged in root pts/1 135.79.24.68 Thu Apr 7 10:17:39 2016 - Thu Apr 7 10:22:53 2016 (00:05) root pts/0 135.79.24.68 Wed Aug 27 18:46:54 2014 - Wed Aug 27 18:51:54 2014 (00:05)... (생략)


5. 지난달 기록 보기


이번달 기록만 나오는 경우가 있는데, /var/log/wtmp가 logrotate에 의해 순환된 경우에 그렇다.

흔히, 매달 1일에 특정 개수가 넘으면 순환되도록 설정되어 있다. 

→ /etc/logrotate.conf 참조


과거 기록을 보려면 확장자가 .1.2과 같이 보존된 파일을 열어봐야 한다.

last -f /var/log/wtmp.1


반응형
블로그 이미지

조이풀 라이프

Lift is short, enjoy the life

,

0. 환경

OS: RHEL 7.0 이상


1. 방화벽 오픈

sudo firewall-cmd --permanent --zone=public --add-port=20/tcp

sudo firewall-cmd --permanent --zone=public --add-port=21/tcp


2. 방화벽 설정 로딩 적용

sudo firewall-cmd --reload



3. 방화벽 상태 조회

sudo firewall-cmd --state


4. 방화벽 활성화 및 시작

sudo systemctl enable firewalld

sudo systemctl start firewalld


5. 방화벽 중지 및 비활성화

sudo systemctl stop firewalld

sudo systemctl disable firewalld



반응형
블로그 이미지

조이풀 라이프

Lift is short, enjoy the life

,

1. 환경

    • OS: RHEL 7.0 이상

2. SELINUX ftp 데몬 외부 접근 권한 설정

    • setsebool -P ftpd_full_access on


3. SELINUX ftp 상태 조회


    • getsebool -a | grep ftp


4. SELINUX 상태 조회


    • sestatus


반응형
블로그 이미지

조이풀 라이프

Lift is short, enjoy the life

,

대용량 메시지 처리 큐 시스템인 아파치 카프카를 설치해 보고, 간단하게 메시지 전달과 수신에 대해서 테스트를 진행해 본다.


1. 아파치 카프카는 무엇인가?

대용량, 대규모 메시지 데이터를 빠르게 처리할 수 있도록 개발된 메시지 큐잉 플랫폼이라고 간단하게 정의할 수 있다.

대용량 처리를 위해 ZooKeeper 기반 분산 서버 운영 환경을 지원한다.

처음 링크드인에서 내부 서비스를 위해 개발하여 사용하다가 2011년 초에 아파치 공식 오픈 소스로 세상에 공개되었다.


아파치 카프카는 기업에서 필요한 모든 데이터 시스템 및 서비스의 중앙 플랫폼 역할로 서비스 기반 아키텍처(SOA, Service Oriented Architecture)를 위한 핵심 구성 요소인 엔터프라이즈 서비스 버스(ESB, Enterprise Service Bus)를 쉽게 구현할 수 있도록 한다.



2. 카프카 동작 방식은?

카프카는 기본적으로 메시징 서버로 동작하며, 메시지 보내느 메커니즘 중에 PUB/SUB 모델을 기반으로 하하고 있다.

보내는 측인 Producer, 받는 측인 Consumer로 구성하여 메시지를 전달하고 받는 구조를 제공한다. 

동작 방식에 대한 도식화된 그림은 아래와 같다.




3.설치 환경

- OS: Mac OS High Sierra 10.13.4

- PC: MacBook Pro (Retina, 13-inch, Mid 2014)


4. 카프카 다운로드


아래의 사이트에서 다운로드 할 수 있다.

https://kafka.apache.org/downloads



카프카 설치를 위해 카프카 1.1.0 버전의 패키지 중에 Scala 2.12 기반 버전을 다운 받았다.


다운로드 후에 압축을 풀면 kafka_2.12-1.1.0 디렉토리를 확인할 수 있다.


5. JDK 설치

카프카는  Scala 언어로 개발되어 카프카 실행을 위해서는 JVM이 설치되어야 한다.

JDK 8 버전을 설치하자.


아래 다운로드 페이지에서 다운로드하여 설치하도록 한다.


http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html


※ 혹시 JDK 8 이상 버전을 사용하시면 JDK 8을 설치하여 사용하는게 정신 건강에 이롭다.


상위버전을 사용하면 ZooKeeper 실행 시 아래와 같은 오류 메시지를 확인할 수 있다.

 


bin/zookeeper-server-start.sh config/zookeeper.properties
Unrecognized VM option 'PrintGCDateStamps'


6. ZooKeeper 설정 및 실행

카프카 다운받고 압축해제 한 후 카프카 디렉토리로 이동하면 아래와 같은 폴더로 되어 있다.


~/kafka_2.12-1.1.0 » ls                                                                                      

LICENSE             bin                  

NOTICE              config               libs                logs                site-docs        

~/kafka_2.12-1.1.0


카프카 설치 디렉토리에서 아래와 같이 입력하면 ZooKeeper가 실행된다.


bin/zookeeper-server-start.sh config/zookeeper.properties


정상적으로 실행되면 아래와 같은 메시지가 출력된다.

[2018-05-16 11:48:48,523] INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCnxnFactory)


※ 여러 대의 서버로 ZooKeeper를 구성하고자 한다면 아래의 링크를 참조하여 구성하면 된다.


http://programist.tistory.com/entry/Apache-Kafka-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81-%EA%B5%AC%EC%B6%95-%EB%B0%8F-%ED%85%8C%EC%8A%A4%ED%8A%B8


7. 카프카 실행 

카프카 설치 디렉토리에서 아래와 같이 입력하면 아파치 카프카가 실행된다.


bin/kafka-server-start.sh config/server.properties


정상적으로 실행되면 아래와 같은 메시지가 출력된다.

[2018-05-16 11:59:58,654] INFO Kafka version : 1.1.0 (org.apache.kafka.common.utils.AppInfoParser)

[2018-05-16 11:59:58,654] INFO Kafka commitId : fdcf75ea326b8e07 (org.apache.kafka.common.utils.AppInfoParser)

[2018-05-16 11:59:58,658] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)

[2018-05-16 11:59:58,706] INFO [ReplicaAlterLogDirsManager on broker 0] Added fetcher for partitions List() (kafka.server.ReplicaAlterLogDirsManager)


※ 여러 대의 서버로 카프카를 구성하고자 한다면 아래의 링크를 참조하여 구성하면 된다.


http://programist.tistory.com/entry/Apache-Kafka-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81-%EA%B5%AC%EC%B6%95-%EB%B0%8F-%ED%85%8C%EC%8A%A4%ED%8A%B8


8. 토픽 관리

토픽 생성

아래의 명령어를 입력하여 토픽을 생성할 수 있다.

~/kafka_2.12-1.1.0 » bin/kafka-topics.sh -create -zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test


Created topic "test".


토픽 확인

아래의 명령어를 입력하면 생성된 토픽 리스트를 확인 할 수 있다.

~/kafka_2.12-1.1.0 » bin/kafka-topics.sh --list --zookeeper localhost:2181                                                                         

test

토픽 삭제

아래의 명령어를 입력하면 원하는 토픽을 삭제할 수 있다.

~/kafka_2.12-1.1.0 » bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test


9. 메시지 송신 및 수신

Producer 실행

Producer는 아래와 같이 실행할수 있다.

test라는 토픽을 구독하는 Consumer에게 보내겠다고 브로커에게 메시지를 보내는 것이다.


bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test


Consumer 실행

Consumer는 아래와 같이 실행할 수 있다.

test라는 토픽에 메시지가  들어오면 받겠다는 것이다.


bin/kafka-console-consumer.sh -zookeeper localhost:2181 --topic test --from-beginning


메시지 전송

Producer 콘솔창에 보내고자 하는 메시지를 입력하면 아래와 같이 Consumer 콘솔창에 메시지가 수신되어 나타난다.


> msg 1



Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].

 msg 1



반응형
블로그 이미지

조이풀 라이프

Lift is short, enjoy the life

,