1.Ioc

 1) IoC의 개념

   IoC(제어권의 역전)이란, 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는것을 의미한다.

제어권을 프레임워크의 컨테이너가 가지고 있다.

  - IoC가 아닌경우 : 개발자가 new 통해 객체를 생성 관리한다.

  - IoC인 경우 : 프레임워크의 컨테이너가 객체를 생성하여 개발자의 코드에 주입을 시켜준다.

 

 2) IoC컨테이너

  객체의 대한 생성 및 생성 주기를 관리한다.

  - 객체의 생성을 책임지고, 의존관계를 관리해 준다.

  - POJO의 생성, 초기화, 소멸에 대한 권한을 가진다.

  - 개발자가 직접 POJO를 생성할수 있지만 컨테이너에게 맡긴다.

 

  3) IoC의 분류

   - DL(의존성 검색) : 특정 컨테이너에 종속된 API 사용(EJB, Spring), 저장소에 저장되어있는 Bean에 접근하기 위해 컨테이터가 제공하는  API를 이용하여 Bean을 Lookup 하는것

   - DI(의존성 주입) : 주로 사용(Spring, PicoContainer), 각 클래스간의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것

  - DL 사용시 컨테이너 종속성이 증가하여, 주로 DI를 사용

 

2. DI

 1) DI 개념

  각 클래스간의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것을 말함

  - 빈 설정파일에서 의존관계가 필요하다는 정보를 추가(xml or annotation)

  - 실제 실행시에 컨테이너가 설정 정보를 읽어서 의존관계를 생성

  - 컨테이너가 흐름의 주체가 되어 애플리케이션 코드에 의존관계를 주입해 주는것

  - 장점 : 코드가 단순해지면 컨포넌트 간의 결합도가 제거

 

  2) DI의 유형

  - Setter Injection : setter 메서드를 만들고 이를 통해 의존성 주입

  - Constructor Injection : 클래스의 생성자를 만들고 이를 통해 의존성 주입

  - Method Injection : 일반 메서드를 만들고 이를 통해 의존성을 주입

 

3. Spring DI

  1) Spring DI 컨테이너의 개념

    Spring DI 컨테이너가 관리하는 객체를 빈(bean)이라고 하고, 이 빈(bean)을 관리한다는 의미로 컨테이너를 빈 팩토리(BeanFactory)라고 부름

  - Bean Factory에 여러 가지 컨테이너 기능을 추가하여 애플리케이션 컨텍스(ApplicationContext)라고 부름

 

  2) BeanFactory와 ApplicationContext

  - BeanFactory : Beand을 등록, 생성, 조회 반환 관리, 이를 확장한 ApplicationContext를 사용

  - ApplicationContext : BeanFactory기능에 추가적으로 Spring의 각종 부가서비스를 추가로 제공

 

 

이전 회사에서 원인은 모르겠으나 불특정하게 톰켓이 죽어서 서비스가 안되는 문제가 발생하였다.

나중에 서버 설정이 잘못되어서 생기는 문제로 확인되기는 했지만....

그 당시에는 임시 조치로 스크립트를 만들어서 crontab에 등록, 스케줄로 체크 후 재시작하는 방법을 사용하였다.

혹시나 나중에 사용할수도 있을까 싶어 적어놓는다.

 

#!/bin/sh

export JAVA_HOME=/usr/local/java;

if [ -z "`ps -eaf | grep java|grep tomcat`" ]; then
 	/usr/local/tomcat/bin/startup.sh
	END_TIME=`date +%m/%d' '%H:%M:%S`
	echo "["$END_TIME"] tomcat restart.."
fi

 

그때는 짜느라 오래 걸린것 같은데 생각보다 넘 간단하네..ㅜㅜ

 - 웹뷰 앱에서 FCM 토큰값을 서버로 전달 방법

앱내 웹뷰에서 서버로 FCM 토큰값을 전달하기 위해 웹뷰내 자바 스크립트를 호출하여 FCM 토큰값을 전달한다. 

 

callJavaScriptcallJavaScriptFunc 호출

- javascript 함수 정보 및 모바일 정보, FCM 토큰 정보 전달

//로그인 페이지일 경우 javascript 호출 처리
if (url.indexOf(LOGIN_URL) > -1 || url.indexOf(MAIN_URL) > -1) { // 로그인 url이 틀어오면 setAppInfo javascript를 호출함. (푸시키값 포함됨)
    val appDeviceId = AndroidUtil.getDeviceId(this@MainActivity)
    val appPushKey = Preference.getPushToken(this@MainActivity)
    val appOs = "android"
    val appVersion = AndroidUtil.getVersion(this@MainActivity)
    val appModel = Build.MODEL
    callJavaScriptFunc("setAppInfo", appDeviceId, appPushKey, appOs, appVersion, appModel) //javascript 함수호출(setAppInfo)
}

- loadUrl으로 javascript 호출 정보 생성하여 전달

protected fun callJavaScriptFunc(func: String?, vararg params: String?) {
    if (mWebView != null && func != null && "" != func) {
        var paramsStr = ""
        if (params != null && !"".equals(params)) {
            val count = params.size
            for (i in 0 until count) {
                if (i > 0) {
                    paramsStr += ','
                }
                paramsStr += "'" + StringUtil.defaultStr(params[i]) + "'"
            }
        }
        Timber.d("callJavaScriptFunc = javascript:$func($paramsStr)")
        loadUrl("javascript:$func($paramsStr)")
    }
}

'잡동사니' 카테고리의 다른 글

스냅샷(snapshot)의 의미  (0) 2021.02.26
[네트워크] 공인IP와 사설IP 설명  (0) 2021.02.25

스냅샵이란?

한마디로 그 시점의 상태를 별도로 저장한다는 의미이다.

문제가 발생할거를 대비하여 미리 그 시점의 상태나 데이터를 이미지나 파일로 저장하고 복원할때 사용한다.

 

최근에는 랜섬웨어 등의 침입 방지를 대비하여 개인 및 기업에서 crontab등을 통해 주기적으로 백업  정책으로 많이 사용한다. 아래는 virtualBox에서 스냅샷을 사용한 예시 화면이다

 

 

'잡동사니' 카테고리의 다른 글

Android 앱 내에서 javascript 함수 호출  (0) 2021.02.26
[네트워크] 공인IP와 사설IP 설명  (0) 2021.02.25

회사에서 서버 구축을 하면서 네트워크 관련 얘기를 할때 서버의 공인IP는 뭐고 사설IP는 어떤거라고 얘기는 하는데 들을때마다 혼란이 있어 별도로 정리한다.  

 

- 공인 IP란

일빈적인 인터넷 서비스업체(ISP - SK브로드밴드, 핼로TV등)에 비용을 지불하고 부여받은 IP를 말한다.

가정용IP와 기업용IP로 나누며 일반적으로 가정용은 동적(유동)IP를 기업용은 별도로 고정IP를 부여 받는다. 

 

- 사설 IP란

일반적으로 집에서 혹은 회사에서 공유기를 통해서 부여받는 IP(공인기관에서 허가받지 않은 IP)이며 이것을 DHCP(Dynamic Host Configuration Protocol) 사용해서 받게 되면 동적IP인것이고 수동으로 입력하면 고정 IP인것이다.

보통 사설IP대역은 아래와 같이 설정 가능하다.

10.0.0.0 ~ 10.255.255.255

172.16.0.0 ~ 172.31.255.255

192.168.0.0 ~ 192.168.255.255   <-- 가장 많이 사용 

 

추가적으로,

  • 동적 IP : DHCP(Dynamic Host Configuration Protocol)를 사용하여 사용자가 PC를 껐다 켜거나 인터넷 설정이 변경될 경우 새로운 IP를 부여받는것을 말한다.
  • 고정 IP : 인터넷 설정과 상관없이 개별적으로 세팅을 통해 설정된 IP로 변경없이 고정해서 사용한다.

 

참조 URL의 이미지 사용

참조 URL : m.blog.naver.com/xcripts/70121283191

 

'잡동사니' 카테고리의 다른 글

Android 앱 내에서 javascript 함수 호출  (0) 2021.02.26
스냅샷(snapshot)의 의미  (0) 2021.02.26

1. STS

Spring 개발업체인 SpringSource가 직접 만들어 제공하는 이클립스의 확장판으로 최신 이클립스를 기반으로 주요한 Spring지원 플러그인과 관련된 도구를 모아서 Spring 개발에 최적화 되도록 만들어진 IDE이다.

 

2. Maven

http://maven.apache.org 라이브러리 관리 + 빌드 툴

 - 편리한 Dependent Library관리 - Dependecy Management

 - 여러 프로젝트에서 프로젝트 정보나 Jar파일들을 공유하기 쉬움

 - 모든 프로젝트의 빌드 프로세스를 일관되게 가져갈수 있음.

 - Maven이전의 Libary관리 방법 : 라이브러리 사이트 접속 -> 라이브러리 다운로드 -> 압축해제 -> 프로젝트에 라이브러리 복사 -> 클랙스 패스에 추가

 - pom.xml : Maven 프로젝트를 생성하면 pom.xml이 파일이 생성되며 Project Object Model 정보를 담고 있다.

 

3. Spring Project 생성 및 Spring Module설치

 - Java Project -> Convert to Maven Projet -> Add Spring Project Nature

 - pom.xml 파일에 dependency 추가 : htttps://mvnrepository.com에서 spring contet module 검색

VirtualBox에서 설정에서 가상 disk를 신규로 추가한다.

 

추가된 디스크 정보를 확인한다

[root@localhost /]# ls -al /dev/sd*
brw-rw---- 1 root disk 8,  0  2월 24 11:31 /dev/sda
brw-rw---- 1 root disk 8,  1  2월 24 11:31 /dev/sda1
brw-rw---- 1 root disk 8,  2  2월 24 11:31 /dev/sda2
brw-rw---- 1 root disk 8, 16  2월 24 11:51 /dev/sdb

 

lsblk 명령어로 상세 정보를 알수 있다. ( sdb가 새로 생성되었음)

[root@localhost /]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   32G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   31G  0 part 
  ├─centos-root 253:0    0   29G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    8G  0 disk 
sr0              11:0    1 1024M  0 rom 

신규 생성된 디스크를 포맷 해준다.(ext4로)

[root@localhost /]# mkfs.ext4 /dev/sdb
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 2097152 blocks
104857 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

- mount 로 필요한 곳에 연결해 준다.

mount [disk위치] [연결할 위치]

[root@localhost /]# mount /dev/sdb /home/apache_log/
[root@localhost /]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   32G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   31G  0 part 
  ├─centos-root 253:0    0   29G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    8G  0 disk /home/apache_log
sr0              11:0    1 1024M  0 rom  

마지막으로 lsblk 명령어로 mount 정상여부 확인 가능하다.

 

mount 해제할때 명령어

- umount [disk위치]

 

재부팅 후에도 자동으로 마운트 하기 위한 설정 필요하다. 안해주면 재부팅시에 마운트 해제됨.

/etc/fstab 파일 수정

# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=1eea9e49-7a1a-45c7-a5ca-5124423134fb /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb        /home/apache_log        ext4    defaults        0 0
~   

'서버 이야기 > centos' 카테고리의 다른 글

VirtualBox Gest 확장팩 오류 해결  (0) 2021.03.18

* Spring 강의를 듣고 내 편한대로 기억하기 위해 내용 정리한 것이다. 

 

1. Spring Framework란?

  Java  엔터프라이즈 개발을 편하게 해주는 오픈소스 경략급 애플리케이션 프레임워크이다.

 

 2. Spring 전략

  - Portable Service Abstraction(서비스 추상화)

트랜잭션 추상화,  OXM 추상화, 데이터 액세스의 Exception 변환기능 등 기술적인 복잡함은 추상화를 통해 Low Level 의 기술 구현 부분과 기술을 사용하는 인터페이스로 분리한다.

  - 객체지향과 DI(Dependency Injection)

Spring은 객체 지향에 충실한 설계가 가능하도록 단순한 객체 형태로 개발할 수 있고, DI는 유연하게 확장 가능한 객체를 만들어 두고 그 관계는 외부에서 다이내믹하게 설정해 준다.

  - AOP(Aspect Oriented Programming)

AOP는 애플리케이션 로직을 담당하는 코드에 남아있는 기술 관련 코드를 분리해서 별도의 모듈로 관리하게 해주는 가력한 기술로 주로 로그인등의 공통 코드를 분리하고 설정한다.

  - POJO(Plain Old Java Object)

POJO는 객체 지향 원리에 충실하면서, 특정 확경이나 규약에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 객체이다.

 

 3. 특징

  - 컨테이너 역할 : Spring 컨테이너는 Java 객체의 LifeCycle을 관리하며, Spring 컨테이터로 부터 필요한 객체를 가져와 사용할 수 있다.

  - DI(Dependency Injectino)지원 : Spring은 설정 파일이나 어노테이션을 통해서 객체 간의 의존관계를 설정하 수 있도록 하고 있다.  

  - AOP(Aspect Oriented Programming)지원 : Spring은 트랜잭션이나 로깅, 보안과 같이 공통적으로 필요로 하는 모듈들을 실제 핵심 모듈에서 분리해서 적용할 수 있다.

  - POJO(Plain Old Java Object)지원 : Spring 컨테이터에 저장되는 Java객체는 특정한 인터페이스를 구현하거나 , 특정 클래스를 상속받지 않아도 된다.    

 

 4. 구성하는 기능요소

  - Core 컨테이너 : Spring 기본기능을 제공하면서 이 모듈에 있는 BeanFactory는 Spring의 기본 컨테이너이면서 스프링 DI의 기반이다.

  - Spring AOP : Aspect지향 프로그래밍을 지원

  - Spring ORM : Mabatis, Hibernate, JPA등을 넘리 사용하는  ORM 프레임워크와의 연결 고리 제공

  - Spring DAO : JDBC에 대한 추상화 계층으로 JDBC 코딩이나 예외 처리하는 부분을 간편화 시켰으며, AOP모듈을 이용해 트랜잭션 관리 서비스도 제공

  - Spring Web

  - Spring Context : Context모듈은 BeanFactory의 개념을 확장한 것

  - Spring Web MVC : 사용자 인터페이스가 애플리케이션 로직과 분리되는 웹 애플리케이션을 만드는 경우에 일반적으로 사용되는 패러다임이다.

   

 

+ Recent posts