elasticsearch를 클러스터링 구성(master, node1, node2)을 마친 후 master를 ./elasticsearch -d 로 실행하는데 다음과 같이 에러 발생하였다.

 

max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

 

찾아보니 실행하는 계정에 파일 등 제한이 걸려있어서 에러가 발생하거라고 제한 설정을 풀어야 한다고 한다.(limits.conf 수정)

[elasticsearch@localhost ~]$ cd /etc/security/
[elasticsearch@localhost security]$ sudo vim limits.conf

아래와 같이 추가

elasticsearch soft    nofile  65536
elasticsearch hard    nofile  65536
elasticsearch hard    nproc   65536
elasticsearch soft    nproc   65536
elasticsearch soft    memlock unlimited
elasticsearch hard    memlock unlimited

limits.conf 수정

설정 후에 꼭 서버 재부팅을 해야 적용된다.

설정 정상 여부 확인은 ulimit -Sa로 확인 가능하다.

 

  • 적용 전 화면

  • 적용하고 서버 재부팅 후 화면

1. Bean 등록 메타정보 구성 전략

  1) XML단독 사용

    - 모든 Bean을 명시적으로 XML에 등록하는 방법

    - 생성되는 모든 Bean을 XML에서 확인 가능하지만 갯수가 많아지면 관리 어려움

    - 설정 파일을 동시에 공유시 충돌 문제 발생

    - setter 메서드 또는 Constructor가 코드내에 반드시 존재

    - 운영 중에 사용하기에 용이함

   2) XML과 빈 스캐닝(Bean Scanning)의 혼용

    - Bean으로 사용될 클래스에 특별한 어노테이션(Annotation)을 부여해주면 이런 클래스를 자동으로 찾아서 Bean으로 등록

    - XML 문서 생성과 관리에 따른 수고를 덜어주어 개발 속도 향상 가능

    - Bean들 간의 의존관계가 어떻게 되는지 한 눈에 파악하기 힘들고 관리가 힘들수 있음

    - 개발환경에 적합한 방식

 

2. Bean 관련 Annotation

  1) Bean 등록 Annnotation

     - @Component : 컴포넌트를 나타내는 일반적이 스테레오 타입으로 <bean>의 태그와 동일 역할

     - @Repository : 퍼시스턴스(persistence) 레이어, 영속성을 가지는 속성(파일, 데이터베이스)을 가진 클래스

     - @Service : 서비스 레이어, 비지니스 로직을 가진 클래스

     - @Controller : 프리젠테이션 레이어, 웹 어플리케이션에서 웹 요청과 응답을 처리하는 클래스(보통 Restful API에서 첫 호출되는 URL 매핑클래스)

   2) Bean 의존 관계를 주입 Annnotation

     - @Autowired : 정밀한 의존관계 주입시 사용되며 프로퍼티, setter메서드, 생성자, 일반 메서드 사용 가능. 의존하는 객체를 주입할 때 주로 Type을 이용

     - @Resource : 자원을 자동 연결할 때 사용하며 프로퍼티, setter 메서드에 적용 가능. 의존하는 객체를 주입할 때 주로 Name을 이용

     - @Value : 단순한 값을 주입할 때 주로 사용. @Value("Spring")은 <property... value="Spring"/> 와 동일

     - @Qualifier : @Autowired 어노테이션과 같이 사용. 동일한 타입이 여러개가 존재할 때 특정 Bean을 찾기 위해 @Qualifier을 같이 사용

    3) Component Scan 태그

      - @Component를 통해 자동으로 Bean을 등록하고, @Autowired로 의존관계를 주입받는 어노테이션을 클래스에서 선언하여 사용했을 경우에는 해당 클래스가 위치한 특정 패키지를 Scan하기 위한 설정을 XML에 해주어야 함

      - <context:include-filter> : 자동 스캔 대상에 포함

      - <context:exclude-filter> : 자동 스캔 대상에서 제외

 

3. 프로퍼티(Property) 파일을 이용한 설정 방법

1. Setter Injection : <property>태그

  - Setter  메서드를 통해 의존관계가 있는 Bean을 주입려면 <property> 태그를 사용할 수 있다.

  - ref 속성은 사용하면 Bean 이름을 이용해 주입할 Bean을 찾는다.

  - value속성은 단순 값 또는 Bean이 아닌 객체를 주입할때 사용

 

2. Constructor Inection : <constructor-arg> 태그

  - Constructor를 통해 의존관계가 있는 Bean을 주입하려면 <constructor-arg>태그 사용

  - Constructor 주입방식은 생성자의 파라미터를 이용하기 때문에 한번에 여러 개의 객체를 주입 가능

  - 생성자 주입 위한 설정 :  index 지정, 파라미터 이름 지정

 

3. 단순 값(문자열이나 숫자)의 주입(Injection)

  - Setter 메서드를 통해 Bean의 레퍼런스가 아니라 단순 값을 주입하려고 할 때는 <property>태그의 value속성을 사용

 

4. 컬렉션(Collection)타입의 값 주입(Injection)

  - Spring은 List, Set, Map, Properties와 같은 컬렉션 타입을 XML로 작성해서 프로퍼티에 주입하는 방법 제공

  1) List와 Set 타입

     - <list>와 <value> 태그를 이용

     - 프로퍼티가 Set타입이면 <list>대신에 <set>을 사용

  2) Map타입

     - <map>과 <entry> 태그를 이용

 

5. 프로퍼티(property) 파일을 이용한 설정 방법

  - XML의 Bean 설정 메타정보는 애플리케이션 구조가 바뀌지 않으면 자주 변경 안됨

  - 일부 설정 정보(DB연결정보)는 애플리게이션이 동작하는 환경에 따라 자주 변경될수 있음(개발, 테스트, 스테이징, 운영 등)

  - 변경되는 이유와 시점이 다르다면 분리하는것이 객체지향 설계의 기본 원칙

  - 환경에 따라 자주 변경될 수 있는 내용은 properties 파일로 분리하는것이 좋음(key=vlaue)

    -> 프로퍼티 파일로 분리한 정보는 ${}(프로퍼티 치환자)을 이용하여 설정

    -> ${} 값을 치환해주는 기능은 <context:property-placeholder>태그에 의해 자동으로 등록되는 propertyPlaceHolderConfigureBean이 담당

스프링 프로젝트를 만들었으니 이제 필요한 모듈을 설치해 준다.

 

https://mvnrepository.com/

 

위에 사이트에 가서 "spring context module"로 검색

 

첫번째 spring Context로 클릭하여 들어가서

 

설치할 버젼을 선택

dependency를 복사하여 pom.xml에 넣어준다.

이런식으로 필요한 모듈을 계속 해서 생성해 준다.

처음에 스프링 프로젝트 생성시 

  1. JAVA PROJECT 생성
  2. 프로젝트에서 마우스 오른쪽 클릭하여 Convert to Maven Project
  3. 프로젝트에서 마우스 오른쪽 클릭하여 Add Spring Project Nature

순서로 진행하면 되는데....

 

2번까지 완료하고 3번으로 진행할려고 보니 있어야 할 Spring Tool 메뉴가 없었다.

 

그래서 찾아보니 STS4에서는 별도로 Eclipse Marketplace에서 설치해 주어야 하는것 같다.

Eclipse Marketplace에서 spring으로 검색 후 2번째 Spring Tools Add-On for Spring Tools4 설치

설치 완료 후 재시작을 진행하면 원하던 Spring 메뉴가 생성이 된다.

이제 Add Spring Project Nature메뉴를 선택하여 Spring  프로젝트로 변경완료한다.

프로젝트 뱃지 아이콘에 'S'라는  이미지 생성으로 확인 완료한다.

pom.xml에 spring-context dependency로 선언해주는 부분은 다음 과정에서...

 

이제 마지막으로  https://mvnrepository.com 에 접속하여 spring-context를 검색하여 pom.xml에 spring-context dependency를....

1. jUnit이란?

   - Java에서 독립된 단위테스트(Unit Test)을 지원해 주는 프레임워크, 즉 모든 함수와 메소드에 대한 테스트 케이스(Test case)을 작성하는 절차

 

2. jUnit 특징

  1. 단정(assert) 메서드로 테스트 케이스의 수형결과를 판별한다.
  2. 테스트를 지원하는 어노테이션을 제공한다.
  3. 각 @Test 메서드가 호출할때 마다 새로운 인스턴스를 생성하여 독립적인 테스트가 이루어진다.

3. jUnit에서 사용하는 어노테이션(Annotation)

  • @Test
    • @Test가 선언된 메소드는 테스트를 수행하는 메소드가 된다.
    • JUnit는 각각의 테스트가 서로 영향을 주지않고 독립적으로 실행됨을 원칙으로 한다.
  • @Ignore
    • 해당 메소드는 실행되지 않는다.
  • @Before
    • @Test 메소드가 실행되기 전에 반드시 실행되어진다. 즉 @Test 메소드에서 공통으로 사용하는 코드를 @Before 메소드에 선언하여 사용한다.
  • @After
    • @Test 메소드가 실행된 후 실행된다.
  • @BeforeClass
    • @Test 메소드보다 먼저 한번만 수행되어야 할 경우에 사용
  • @AfterClass
    • @Test 메소드 보다 나중에 한번만 수행되어야 할 경우에 사용

4. 테스트 결과를 확인(Assert메서드)

  • assertEquals(a,b) : 객체 A와 B가 일치함 확인
  • assertArrayEquals(a,b) : 배열 A와 B가 일치함을 확인
  • assertSame(a,b) :  객체 A와 B가 같은 객체임을 확인
  • assertTrue(a) : 조건 A가 참인지 확인
  • assertNotNull(a) : 객체 A가 null이 아님을 확인

5. Spring-Test에서 사용하는 어노테이션(Annotation)

  •    RunWith(SpringJUnit4ClassRunner.class)
    • @RunWith는 jUnit 프레임워크의 테스트 실행 방법을 확장할때 사용한다.
    • SpringJUnit4ClassRunner라는 클래스를 지정해주면 테스트를 진행하는중에 ApplicationContext를 만들고 관리하는 작업을 진행
    • 테스트 별로 객체를 생성하더라도 싱클톤(sington)의 ApplicationContext를 보장
  • ConetextConfiguration
    • 스피링 빈(Bean) 설정 파일의 위치를 지정할때 사용
    • ex) @ContextConfiguration(location="classpath:config/bean.xml"
  • Autowired
    • 스프링DI에서 사용하는 특별한 오노테이션
    • 선언한 변수에 자동으로 빈을 매핑
    • GenericXmlApplicationContext를 사용할 필요 없음

추가적으로 

  • SpringJUnit4ClassRunner.class or ContextConfiguration을 못찾는 경우
    • pom.xml에 관련 Spring-Test dependency를 등록 확인
    • 설정한 스프링 버젼과 동일 여부 확인
    • <scope>가 있을 경우 삭제 혹은 주석 처리

 

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의 각종 부가서비스를 추가로 제공

 

 

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 검색

+ Recent posts