IoC (Inversion of Control) 와 DI(Dependency Injection)

- "제어의 역전" 즉 인스턴스 생성부터 소멸까지의 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해준다 라는 뜻이다.

- 컨테이너 역할을 해주는 프레임워크에게 제어하는 권한을 넘겨서 개발자의 코드가 신경 써야 할것을 줄이는 전략이다.

- IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다.

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

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



DL (Dependency Lookup) : 의존성 검색

 - 저장소에저장되어 있는 Bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 Lookup하는 것


DI (Dependency Injection) : 의존성 주입

 - 각 클래스간의 의존관계를 빈 설정정보르 바탕으로 컨테이너가 자동으로 연결 해주는 것]


DL사용시 컨테이너에 종속성이 증가하여 주로 DI를 사용한다.


DI의 유형 

1) Setter Injection : Setter 메서드를 이용한 의존성 삽입

 - 의존성을 입력 받는 setter 메서드를 마들고 이를 통해 의존성을 주입한다.

2) Constructor Injection

 - 필요한 의존성을 포함하는 클래스의 생성자를 만들고 이를 통해 의존성을 주입한다.

3) Method Injection

 - 의존성을 입력 받는 일반 메서드를 만들고 이를 통해 의존성을 주입한다.








다형성 Polymorphism = Poly(다양한) + Morphism(변형, 변신)




객체를생성할때 다형성에 의거해서 아래와 같이 생성을 하면



Printer p1 = new StringPrinter();

Printer p2 = new ConsolePrinter();

부모클래스타입  변수 = new 자식 클래스의타입();



위와 같은 형식으로 으로 코드를 작성하면 아래와 같은 뜻을 내포한다.

-> StringPrinter 클래스는 Printer 타입이다.

-> ConsolePrinter 클래스는 Printer 타입이다. 


- 이게 바로 java에서 말하는 다형성이다.

- 타입은 Printer 타입이지만 다양한 StringPrinter, ConsolePrinter 변형이 가능하다.

- 구현체는 언제든지 바뀔수 있기 때문에 인터페이스만 바라보게끔 하는 방식 








Setter Injection의 <property> tag

- Setter method를 통해 의존관계가 있는 Bean을 주입하려면 <property> tag의 ref 속성을 사용 할 수있다.

- Setter method를 통해 Bean의 레퍼런스가 아니라 단순 값을 주입하려고 할 때는 <property>tag의 value 속성을 사용한다.

ref -> Bean id를 이용하여 주입할 Bean을 찾는다.

value -> 단순 값 또는 Bean이 아닌 객체를 주입할 때 사용한다.

public class Hello {
	String name; 
	Printer printer;

	public Hello() {};

	public void setName(String name) {
		this.name = name;
	}

	public void setPrinter(Printer printer) {
		this.printer = printer;
	}
}


위의 소스를 xml로 빈설정을 해주면 아래와 같다.


<bean id="Hello" class="source.Hello">

<property name="name" values="Spring" />    // setName Method

<property name="printer" ref="printer" />       // setPrinter Method 

</bean>

<bean id="printer" class="source.StringPrinter" />


보기 쉽게 각각의 키워드가 의미하는 바를 소스와 xml에서 찾을 수 있도록 하이라이팅해봤다.








Constructor Injection의 <constructor-arg> tag

- Constructor를 통해 의존관계가 있는 Bean을 주입하려면 <constructor-arg> tag를 사용할 수 있다.

- Constructor 주입방식은 생성장의 파라미터를 이요하기 때문에 한번에 여러개의 객체를 주입할 수 있다.


public class Hello {
	String name;
	Printer printer;

	public Hello() {};

	public Hello(String name, Printer printer) {
		this.name = name;
		this.printer = printer;
	}
}

1) Constructor-arg index지정하여 파라메터를 넘겨주는 경우

<bean id="hello" class="source.Hello">

<constructor-arg index="0" value="Spring"/>

<constructor-arg index="1" ref="printer" />

</bean>


2) Constructor-arg Paramater name 지정하여 넘겨주는 경우

<bean id="hello" class="source.Hello">

<constructor-arg name="name" value="Spring"/>

<constructor-arg name="printer" ref="printer" />

</bean>








Collection Type의 값 Injection

- Spring은 List, Set, Map, Properties와 같은 Collection Framework 타입을 XML로 작성해서 프로퍼티에 주입하는 방법을 제공한다.


1) 프로퍼티가 Set과 List일 경우

<bean id="hello" class="source.Hello">

<property name="names">

<list>

<values>Spring</values>

<values>IoC</values>

<values>DI</values>

</list>

</property>

</bean>

- Set으로 설정할경우 list를 set으로 설정하면 된다.


2) Map 타입 : <map>과 <entry> tag를 사용

<bean id="hello" class="source.Hello">

<property name="names">

<list>

<entry key="Kim" values="30"/>

<entry key="Lee" values="35"/>

<entry key="Ahn" values="40"/>

</list>

</property>

</bean>








Spring DI Container의 개념

- Spring DI Container가 관리한는 객체를 빈(Bean)이라고 하고, 이 빈(Bean)들을 관리한다는 의미로 컨테이너를 빈 팩토리라고 부른다.

- 객체를 생성과 객체 사이의 런타임(run-time) 관계를 DI 관점에서 볼 때는 컨테이너를 BeanFactory라고 한다.

- Bean Factory에서 여러 가지 컨테이너 기능을 추가하여 애플리케이션 컨텍스트라고 부른다.








* POJO(Plain Old Java Object)

-> JVM으로만 동작하는 객체를 POJO라한다. 일반 Java Class 객체를 뜻한다.


* Bean 

-> 스프링이 IoC방식으로 관리ㄷ는 객체라는 뜻, 스프링이 직접생성과 제어를 담당하는 객체를 Bean이라고 부른다.


* Bean Factory 

-> 스프링의 IoC를 담당하는 핵심 컨테이너를 가리킨다.

-> Bean을 등록 생성 조회 반환하는 기능을 담당함

-> 보통 BeanFacotry를 바로 사용하지 않고 ApplicationContext를 주로 이용한다.


* ApplicationContext

-> BeanFactory를 확장한 IoC 컨테이너이다.

-> Bean을 등록, 생성, 조회, 반환 관리하는 기능은 BeanFactory와 같다.

-> Spring에서는 ApplicationContext를 BeanFactory보다 더 많이 사용된다.

-> Spring의 각종 부가 서비스를 추가로 제공한다.

-> Spring이 제공하는 ApplicationContext 구현 클래스가 여러가지 종류가 제공된다. 


* Configuration Metadata

-> ApplicationContext 또는 BeanFactory가 IoC를 적용하기위해 사용하는 메타정보를 말한다.

-> 설정 메타정보는 IoC컨테이너에 의해 관리되는 Bean 객체를 생성하고 구성할 때 상용된다.

-> xml로 작성한 bean정보가 metadata에 해당된다.








증상 : ORA-12638 Credential retrieval failed (신용검색에 실패했습니다) 경고창 출력

원인 : Oracle 설치시 Admin 권한으로 설치하지 않아 발생하는 문제


해결 방법

1. Oracle 설치 경로 찾기

- Oracle Home으로 지정한 경로를 찾아 network\admin 폴더로 이동한다. 

(디폴트로 설치 했을 경우 : C:\app\사용자명\product\11.2.0\client_1\network\admin)




2. sqlnet.ora 파일 수정

- sqlnet.ora 파일을 메모장으로 열어서


SQLNET.AUTHENTICATION_SERVICES= (NTS) <- 이부분을 주석처리한다.



# SQLNET.AUTHENTICATION_SERVICES= (NTS)





이러면 끝!

저장시에 권한문제가 생기면 바탕화면에 임시로 저장 후 해당 파일을 덮어씌우기해서 바꿔치기하면 된다.

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

[Oracle DB] 오라클 auto_increment (시퀀스)  (0) 2018.10.05





















젠킨스란?

- 젠킨스는 Java로제작된 오픈소스 CI(지속적 통합)도구 이다. Jenkins에는 Tomcat 서버가 내장되어 Servlet Container위에 돌아가는 웹서버 이다. 

- SVN, GIT, CVS ... 등과 같은 많은 SCM을 지원한다.

- 쉽게 빌드 결과물을 만들고 테스트하며 배포할수 있는 아주 유용한 도구이다.







젠킨스 다운로드 받기


https://jenkins.io/download/



- 위의 url에 들어가면 다양한 os에서의 젠킨스 설치파일을 제공해준다. 본 게시물에서는 windows os에서의 설치를 다룰 예정이니 windows 설치파일을 다운받는다.




젠킨스 설치하기

- 다운로드 받은 파일을 압출풀고 인스톨러를 실행한다.

- 설치과정은 매우 쉽다. 그냥 NEXT만 눌러주면된다~




- 끝 -



정상 설치가 되었으면 Jenkins 웹서버가 자동으로 구동된다.


http://localhost:8080/


위의 주소로 접속하면 젠킨스의 초기 셋팅을 해줘야한다.









젠킨스는 초기 셋업시 패스워드가 필요하다.

설치된 폴더 C:\Program Files (x86)\Jenkins\secrets 에서


initialAdminPassword파일을 오픈하면 비밀번호가 나오는데 그걸 복사해서 진행해준다.







Jenkins에서 필요한 플러그인을 설치할수 있다.


왼쪽은 추천되는 플러그인 

오른쪽은 사용자가 직접 셀렉할수있는 플러그인 페이지이다.

나는 귀찮으니 왼쪽~




이제 기본적인 셋팅은 끝났다.


http://localhost:8080/


로컬 주소로 재접속을 해보면 



젠킨스가 셋업된 화면을 볼 수있다.





포트번호를 바꿔주고 싶다면?

C:\Program Files (x86)\Jenkins 폴더의 jenkins.xml을 수정해준다.



밑줄친 포트번호를 수정후 저장한뒤 젠키스를 재시작하면 끝~















1



리눅스 os에 익숙하지 않아서 블로그에 정리할겸 올려봅니다.

리눅스에서는 압축파일의 확장자로 tar나 tar.gz파일을 볼 수 있는데요





1. tar 압축

> tar -cvf [파일명.tar]





2. tar 압축 풀기

> tar -xvf [파일명.tar]





3. tar.gz 압축

> gar -zcvf [파일명.tar.gz]





4. tar.gz 압출 풀기

> tar zxvf [파일명.tar.gz]


'Linux OS' 카테고리의 다른 글

[CentOS7] PostgreSQL 설치하기  (0) 2019.06.06
[Linux] CentOS7에서 LXD 설치하기  (0) 2019.05.29

+ Recent posts