ReflectionMain.java


/**
 * 런타임 중 자바 콤포넌트(클래스) 속성 확인
 */
public class ReflectionMain {

    public static void main(String[] args) throws ClassNotFoundException {
        // Class.class 클래스에 대한 정의 정보를 가지고 있음.
        // ? (wildcard) - type을 지정

        /**
         *  1. 클래스 가져오기
         *  : 클래스를 못찾을 경우 ClassNotFoundException 발생
         */

        //자바기본형에 대한 클래스 정보를 얻는 방법. 3가지
        //방법 1 : 
        //Class c = Class.forName("java.lang.String");

        //방법 2 : 
        //Class integerClass1 = int.class;

        //방법 3 : 기본형의 경우 (Integer 와 같은) Wrapper 에 기정의된 TYPE을 사용한다. 
        //Class integerClass2 = Integer.TYPE;

        Class anyClass = Class.forName("com.cafe24.service.UserService");

        System.out.println("Class Name: " + anyClass.getName());

        /**
         *  2. 필드 정보
         *  : private 일 경우 출력 되지 않는다.
         */
        Field[] fields = anyClass.getFields();

        System.out.println("Existed fields:");
        for(Field f : fields) {
            System.out.println("\t" +f.getName());
        }


        /**
         *  3. 메소드 정보
         *  : private 이여도 출력 된다.
         */
        Method[] declaredMethods = anyClass.getDeclaredMethods();

        System.out.println("Existed Methods:");
        for(Method m : declaredMethods) {
            System.out.println("\t" +m.getName());
        }

        /**
         * 4. 구조체 정보
         */
        Constructor[] constructors = anyClass.getConstructors();

        System.out.println("Existed Constructor:");
        for(Constructor c : constructors) {
            System.out.println("\t" +c.getName() + ", Param Count: " + c.getParameterCount());
        }

        /**
         * 5. 같은 클래스인지 확인
         */
        boolean result = anyClass.isInstance(new UserService());
        System.out.println("IsSameClass? " + result);
    }
}

UserService.java


public class UserService {
    public String id;
    public String name;
    private String password;

    public UserService() {}

    public UserService(String id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "UserService [id=" + id + ", name=" + name + ", password=" + password + "]";
    }
}

실행결과


Class Name: com.cafe24.service.UserService
Existed fields:
    id
    name
Existed Methods:
    toString
    getName
    getId
    setName
    setId
    setPassword
    getPassword
Existed Constructor:
    com.cafe24.service.UserService, Param Count: 0
    com.cafe24.service.UserService, Param Count: 3
IsSameClass? true

* 파티션을 나눌때 사용

fdisk -l

 

* 파티션한 하드디스크를 포맷할 때 사용

mkfs -t ext4 /dev/sdb1

 

* 현재 마운트 상태 확인

mount

 

* block id 의 약자로 현재 하드디스크의 파티션 정보를 확인

blkid

 

* 부팅될때 자동으로 마운트 되도록 하기 위해 blkid에서 uuid를 가져와 이곳에 설정

cat /etc/fstab

 

참고 정리

- /tmp 파일은 1기가 정도 잡아줘야 한다.

- 리눅스 덤프란? 에러 났을때 core파일을 남기는 것

- 프로세스의 트리 구조 확인? pstree 명령어

1. 설치

yum -y install net-tools  
yum -y install bind-utils  
yum -y install ntsysv  
yum -y install wget  
yum -y install unzip  
yum -y install make cmake   
yum -y install gcc g++ cpp gcc-c++   
yum -y install perl   
yum -y install ncurses-devel   
yum -y install bison   
yum -y install zlib curl   
yum -y install openssl openssl-devel   
yum -y install bzip2-devel   
yum -y install libtermcap-devel libc-client-devel  
yum -y install httpd-devel

2. SELINUX 설정 disabled로 변경

vi /etc/selinux/config
SELINUX=disabled 
재부팅

3. Apache 컴파일 설치

CFLAGS=" -DHARD_SERVER_LIMIT=1024 -DDEFAULT_SERVER_LIMIT=1024 -DHARD_SERVER_LIMIT=1024 -DDEFAULT_SERVER_LIMIT=1024"; export CFLAGS 
./configure --prefix=/usr/local/cafe24/apache --with-mpm=worker --enable-so --disable-access --enable-access=shared --disable-auth --enable-auth=shared --disable-include --enable-include=shared --disable-log-config --enable-log-config=shared --disable-env --enable-env=shared --disable-setenvif --enable-setenvif=shared --disable-mime --enable-mime=shared --disable-status --enable-status=shared --disable-autoindex --enable-autoindex=shared -disable-asis --enable-asis=shared --disable-cgi --disable-cgid --enable-cgid=shared --disable-negotiation --enable-negotiation=shared --disable-dir --enable-dir=shared --disable-imap --enable-imap=shared --disable-actions --enable-actions=shared --disable-userdir --enable-userdir=shared --disable-alias --enable-alias=shared --enable-mods-shared=all 
make
make install
* shlibtool 없다는 에러가 발생할 경우
ln -s /usr/lib64/apr-1/build/libtool shlibtool

4. mod-jk 빌드

  • 4-1. 다운로드
  • 4-2. 컴파일
    [root@localhost native]# ./configure --with-apxs=/usr/local/cafe24/apache/bin/apxs
    make
    make install
    

5. httpd.conf 설정

  • 5.1 내용 추가
    LoadModule jk_module modules/mod_jk.so
    
  • 5.2 맨 밑 내용 추가

     # mod_jk
    
     <IfModule mod_jk.c >
     JkWorkersFile conf/workers_jk.properties
     JkShmFile run/mod_jk.shm
     JkLogFile logs/mod_jk.log
    
     JkLogLevel info
     JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
    
     JkMountFile conf/uriworkermap.properties
     </IfModule>
     

6. workers_jk.properties

– apache/conf 폴더에 프로퍼티 추가

  • 6.1 workers_jk.properties

     worker.list=worker1, worker2
    
     # server1
     worker.worker1.port=8009
     worker.worker1.host=localhost
     worker.worker1.type=ajp13
     worker.worker1.lbfactor=1
    
     # server 2
     worker.worker2.port=8009
     worker.worker2.host=localhost
     worker.worker2.type=ajp13
     worker.worker2.lbfactor=1
    
  • 6.2 uriworkermap.properties

     ## Mapping the URI /service1 under worker1
     /hellospring*=worker1
     #/mysite3*=worker1
    
     # /service2 요청으로 들어온 것은 worker2 로 mount
     # /service2*=worker2
    
     # png와 jpg 는 apache 가 처리
     # !/service2*.png=worker2
     # !/service2*.jpg=worker2
    

7. tomcat의 server.xml

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>

어플리케이션 캐시를 이용(memcache, redis.. etc)

웹 캐시 서버를 여러개를 운영

-> 해시를 통한 관리

  - 웹 캐시 서버를 해시를 통해 관리한다.(해시 키를 관리하는 전용 서버를 이용)

  - 배포가 되기 때문에 소스상으로 구현해서는 안된다.

 

DNS 캐시

dns 검색하는 시간도 고려해야 할 사항이다.

 

리버스 프록시 - HTTP 요청 캐시

ex. Varnish - http 헤더를 통한 브라우저 캐싱

 

was 와 db 사이에 캐시 서버를 둘 수 있다.(was가 아닌 큐.. 등 여러 다른 서버가 될 수 있음.)

 

RESTfull API 캐시

간단하게 경로를 가지고 캐시를 할 수 있다.

 

Application level에서 캐시를 잘 이용할 수 있는 방법은

소스 모듈화를 잘 하는 것이다.

캐시에 관하여 어떻게 관리할지 설계를 잘 해야한다.

 

*스토리지

Replica 수 와 shard 수 를 어떻게 하여 구성할지 중요하다.

 

1. 파일 스토리지

동시 읽기, 쓰기가 가능하다

주로 어플리케이션 단에서 사용한다.

기존 파일 시스템임

직접 접근 X

ex. /Home/A/B...

성능이 낮음..

SSD

이미지에 관한 트래픽이 비쌈

 

2. 블록 스토리지

디스크를 블록 단위로 나뉘는데 이 블록 단위로 I/O 를 할 수 있도록 한다.

개발은 똫같이 하지만 파일 스토리지와의 차이는 동시 읽기, 쓰기가 불가능 한다.

성능 Good!! ( 대용량 빠른 서비스에 좋음. DB )

SSD

이미지 트래픽에 대해 중간

 

3. 오브젝트 스토리지

데이터 경로에 직접 접근 한다.

모든 요청이 HTTP로 들어가야 하기 때문에 느리다...

SATA(HDD)

이미지 트래픽에 대해 제일 저렴

 

 

'규린이 IT 개발' 카테고리의 다른 글

[java] Reflection 예제 소스  (1) 2019.06.05
[리눅스] 디스크 마운트  (0) 2019.06.04
[mariadb] 참고 명령어  (0) 2019.05.02
centos6 특정 포트 방화벽 여는 방법  (0) 2019.05.01
리눅스 crontab  (0) 2019.04.30

로그인
mysql -u -D -p
mysql -p

데이터베이스 확인
show databases;

DB 접속
use mysql;

테이블 리스트 보기
show tables;

나가기
quit;

톱켓 데몬스크립트 파일명
cp /usr/local/cafe24/mariadb/support-files/mysql.server

데몬 설정 리스트 확인(/etc/init.d)
chkconfig

데몬 설정 추가 예시
chkconfig mariadb on

데몬 설정 켜기/끄기
/etc/init.d/mariadb stop
/etc/init.d/mariadb stop

방화벽 등록:

vi /etc/sysconfig/iptables

 

방화벽 껏다 킨다:

/etc/sysconfig/iptables stop

/etc/sysconfig/iptables start

'규린이 IT 개발' 카테고리의 다른 글

[인프라] 캐시를 이용한 대규모 서비스 처리 방법  (0) 2019.05.13
[mariadb] 참고 명령어  (0) 2019.05.02
리눅스 crontab  (0) 2019.04.30
Balanced Tree  (0) 2019.04.29
http, https 의 차이  (0) 2019.03.19

crontab을 사용하여 특정 시간에 특정 잡을 실행 할 수 있도록 만들어 준다.

작성

crontab -e

내용 확인

crontab -l

삭제

crontab -r

작성 방법

* * * * * [ 내용 ]

한줄에 하나의 명령어만 작성해야 한다.

* * * * * 으로 작업이 수행될 시간을 설정할 수 있다.

crontab에서 작성한 내용은 /var/spool/cron 폴더에 등록한 사용자의 이름으로 저장 되어 있다.

'규린이 IT 개발' 카테고리의 다른 글

[mariadb] 참고 명령어  (0) 2019.05.02
centos6 특정 포트 방화벽 여는 방법  (0) 2019.05.01
Balanced Tree  (0) 2019.04.29
http, https 의 차이  (0) 2019.03.19
JVM, JRE, JDK 차이 간단 요약  (0) 2019.03.19

이진트리검색의 문제점은 좌우 균형이 맞지 않으면 탐색에 있어 비효율적이다.

이러한 문제점을 해결하기 위해 Balanced Tree가 만들어졌다. Balanced Tree는 삽입, 제거 등이 발생했을 때 좌우 균형을 맞춰주는 것이 특징이다.

대표적인 예로 Red-Black Tree, B-Tree 자료구조가 있다.

 

한 노드에 들어갈 수 있는 최대 자료의 수에 따라 M차 B-Tree라고 부른다.

M 차수가 짝수냐 홀수냐에 따라 알고리즘이 다르다는 것이 특징이다.

 

또한, 이러한 자료구조 형을 유지하기 위한 까다로운 규칙들이 존재한다.

규칙에 대해 몇 가지를 살펴보면

1) 노드의 자료수가 N이라면, 자식의 수는 N+1이어야 한다.

2) 각 노드의 자료는 정렬된 상태여야 한다.

3) 루트 노드는 적어도 2개 이상의 자식을 가져야 한다

등등..

 

이미지 출처: 위키 백과, B 트리 

 

이정도만 알아두고 B-Tree 에 대해 자세히 공부해야 할 필요가 있을 경우 더 자세히 알아보려 한다.

 

출처 및 참고

- 위키 백과, B 트리

https://www.cs.usfca.edu/~galles/visualization/BTree.html

+ Recent posts