[ java.대용량조회.oboe.js, ResultHandler ]

 

1. WAS단에서 대용량(약 10만)을 조회 시 WAS Memory Over Flow가 발생할 수 있다.

    그래서 oboe.js 나 ResultHandler를 이용해서 이 문제를 해결 할 수 있다.

 

2. 개발방법

    . 열공 ~~

 

3. 참고 소스

   . url : http://mycup.tistory.com/170

            http://blog.daum.net/mskweon82/23

            https://blog.naver.com/chm8410/220236592186

 

Posted by 농부지기
,

[ C#-기술집 URL ]


    - MSDN

    - Visual C#개발자 센터

    - MSDN Magazine

'자바(java) > 기본문법' 카테고리의 다른 글

Java. Annotation  (0) 2017.03.12
Servlet - Session관리  (0) 2017.02.02
Posted by 농부지기
,

[ Java. Annotation ]

 

 

 


어노테이션

설명

@SuppressWarnings

컴파일러가 일반적으로 경고하는 내용   내용은 제외시킬  사용

@Entity

퍼시스턴스화  클래스를 선언

@Table

DB 있는 테이블과 맵핑 시킨다.

@Data

 필드의 setter, getter 자동 생성

@EqualsAndHashCode

Equals  hashCode 함수를 만들어 

@JsonIgnoreProperties

클래스 내에 없는 필드가 json 존재할  에러 방지 설정 

@GeneratedValue

primary 컬럼에 고유값을 자동으로 생성 부여

@Id

 클래스의 어느 속성이 유일한 식별자 인지를 가리킴

@Enumerated

Java Enum class를 표현

@Column

컬럼 길이 제약과 같은 세부사항을 지정할  있게 

@Repository

해당 클래스에서 발생하는 DB 관련 예외를 spring DAOException으로 전환

@Service

비즈니스 로직이 들어가는 Service 등록이 

@Autowired

Spring 의존관계(DI) 자동으로 설정타입(by type)으로 연결

@Qualifier

동일한 타입의  객체들 중에서 특정 빈을 사용하도록 설정

@PostConstruct

의존하는 객체를 설정한 이후에 초기화 작업을 수행할 메서드에 수행

@PreDestory

컨테이너에서 객체를 제거하기 전에 호출  메서드에 적용

@Target

어디에 어노테이션을 넣을  있는지를 서술

@Retention

지속성을 설정어떻게 저장할 것인지

@Documented

어노테이션이 기본으로 javadoc  유사한 툴에 의해 문서화 되는 것을 나타냄

@AllArgsConstructor

모든 인자의 생성자를 자동으로 생성

@NoArgsConstructor

인자 없는 생성자를 생성

@MappedSuperclass

해당 어노테이션이 정의된 class 상속받은 entity에는 해당 컬럼이 자동으로 생성/매핑

@JsonSerialize

Annotation use for configuring serialization aspects, by attaching to "getter" methods or fields, or to value classes

@Value

프로퍼티값을 파라미터에 적용

@Configuration

스프링 IoC 컨테이너가 해당 클래스를  정의의 소스로 사용

@EnableAsync

스프링 XML 설정의 <task:annotation-driven> 대신해서 자바에 설정

@EnableScheduling

스프링 스케줄 task 실행을   있게 

@EnableTransactionManagement

스프링 XML 설정의 <tx:annotation-driven/> 대신해서 자바에 설정

@PropertySource

Property 파일을 Environment로 로딩

@EnableJpaRepositories

JPA repositories   있게 

@EnableAspectJAutoProxy

스프링 XML 설정의 <aop:aspectj-autoproxy/> 대신해서 자바에 설정

@ComponentScan

스프링 XML 설정의 <context:component-scan> 대신해서 자바에 설정

@Resource

어플리케이션에서 필요로 하는 자원을 자동 연결할  사용이름(by name)으로 연결

@Bean

스프링 XML 설정의 <bean /> 동일한 기능을 제공

@EnableTransactionManagement

스프링의 annotaion-driven 트랜잭션 관리기능을   있게 

@MapperScan

Mybatis mapper 등록을 자바에 설정

@ControllerAdvice

예외 발생시 작업을 처리할  있게 스프링 프레임워크 3.2에서 추가

@Controller

Spring MVC Controller 클래스 선언을 단순화 시켜줌

@RequestMapping

Url class 또는 method 맵핑 시켜주는 역할

@ResponseBody

HTTP body 부분만 전달 XML, JSON으로 출력   사용

@Api

Api 어떤 역할을 하는  표시

@ApiOperation

Api 기능을 표시

@ApiParam

Api에서 사용할 파라미터를 표시

@Aspect Spring은 자동적으로 @Aspect 어노테이션을 포함한 클래스를 검색하여 Spring AOP 설정에 반영
@Pointcut pointcut은 결합점(Join points)을 지정하여 충고(Advice)가 언제 실행될지를 지정하는데 사용 @Pointcut 어노테이션을 사용
@Before 메소드가 수행 전에 수행 된다.Before advice는 @Before 어노테이션을 사용
@After 메소드 수행 후 무조건 수행된다. After (finally) advice는 @After 어노테이션을 사용
@AfterThrowing 메소드가 수행 중 예외사항을 반환하고 종료하는 경우 수행된다. After throwing advice는 @AfterThrowing 어노테이션을 사용
@RestController @Controller + @ResponseBody *http://spring.io/guides/gs/rest-service/
@JsonInclude @JsonInclude(JsonInclude.Include.NON_EMPTY) 필드가 empty이거나 null 일 때 json으로 변환되지 않도록 함 *http://fasterxml.github.io/jackson-annotations/javadoc/2.0.5/com/fasterxml/jackson/annotation/JsonInclude.Include.html
@Transactional DB 트랜잭션관리를 위해 사용

 

@Transactional 을 붙였는 데 사용하지 못하는 경우,

1. innoDB 가 아닌 경우,

2. interface 가 없는 경우,

3. method 에 사용하였는 데, 해당 method를 같은 class 내부에서 호출하는 경우,

2, 3번 -> @Transactional을 사용하면 해당 class를 spring에서 다시 proxy 형태로 실행/관리 하기 때문.

 



출처: http://toma0912.tistory.com/9 [토마's 개발노트]

'자바(java) > 기본문법' 카테고리의 다른 글

C#-기술집 URL  (0) 2018.02.02
Servlet - Session관리  (0) 2017.02.02
Posted by 농부지기
,
[ Java.reflection-기초 소스 ]

 

-  화면단에서 받은 beanName, parameter값을 문자형으로 받아서 처리 하는 reflection

- java단에서 여러게의 controller, service단을 만들지 않고, 하나로 처리 하기 위해서 임




'자바(java) > Reflection (리플렉션)' 카테고리의 다른 글

Java-Reflection 예제1  (0) 2021.08.10
Posted by 농부지기
,

[ Java.Thread-1. Thread Method 목록 ]


1. 정의

   - 쓰레드 관련 Class와 Method목록을 기술하고

     이 목록을 기준으로 각각 설명 및 예제를 작성해서 게시한다.


2. Extends, Implements Class

   - Extends : Thread

   - Implements : Runnable


3. 기능 Class

   - ExecutorService : Thread Pool 기능을 사용


4. Class별 메소드

   1. Thread

 

getName()

 thread name 얻기

 

 Thread.currentThread().getName() 

 thread name 얻기

 

 setName()

 thread name 정의 (setting) 

 

 Thread.sleep() 

 thread를 일정시간 pause 시킴

 

 

 


   2. Runnable

 

 

 

 

 

 

 

 

 


   3. ExecutorService

 

 newFixedThreadPool()

 Thread Pool 개수 지정

 

 newCachedThreadPool()

 쓰레드 수의 제한을 두지 않은 방식의 쓰레드풀 방식으로, 새로운 쓰레드 시작 요청이 들어올때마다 하나씩 쓰레드를 생성

 

 newSingleThreadExecutor()

 단하나의 쓰레드를 생성

 

 newScheduledThreadPool()

 일정시간마다 주기적으로 반복해야 하는 스타일의 동시작업을 위한 쓰레드풀. Timer 클래스를 대체할수 있는 쓰레드 풀방식이다.

 

 ForkJoinPool()

 큰 업무에 대해 분할정복과 CPU최대이용방식을 적용한 독특한 쓰레드 풀이다.


Posted by 농부지기
,

[ Java.Thread-4. Thread Pool-2 (예제) ]


1. JDK안의 쓰레드 풀들

   - JDK 1.5버전 이전까지는 유저들이 직접 쓰레드 풀을 만들어 사용했다. 유저가 직접만드는 방식은 귀찮기도 했고, 쓰레드간의 Context Switching시에 성능문제도 발생했다.  JDK1.5에서는 java.util.concurrent패키지가 포함되었는데 여기에는 다양한 방식의 쓰레드 풀이 기본으로 포함되게 되었다.


2. Executors.newFixedThreadPool(10)

   - 정의 : 최대 쓰레드를 10개까지 만드는 풀.  

             동시에 일어나는 업무의 량이 비교적 일정할때 사용한다.

   - 소스 : newFixedThreadPool(2) 를 이용해서 2개의 Pool을 생성한 후 execute()를 사용해 

            연속적으로 5개의 ThreadTask Instance생성을 시도 한다. 

            각 ThreadTask는 1초씩(Thread.sleep(1000)) 수행시간이 걸린다.

            Pool이 2개 이므로 5개를 요청했지만 instance는 2개씩만 생성 된 후 instance가 종료되면

            다음 instance가 생성 된다.


   - NewFixedThreadPoolMain.java

      

   - ThreadTask.java
      

   - 수행결과
      




Posted by 농부지기
,

[ Java.Thread-3. Thread Pool-3 (기본개념) ]


1. 정의

   - 자바의 쓰레드는 CPU를 최대한 사용해서 많은 업무를 동시에 처리할수 있도록 도와준다. 그런데 이 쓰레드의 생성에는 약간의 시간과 메모리가 필요하다. JVM은 쓰레드의 생성 개수를 제약하지 않기 때문에 계속적으로 쓰레드를 생성하게 된다면 결과적으로 성능저하와 메모리 고갈의 문제가 생길수 있다. 

 

   - 이렇게 무제한 적인 쓰레드의 생성을 막기 위해서,  쓰레드풀(Thread Pool)이라는 쓰레드 관리 방식이  사용되고 있다. 쓰레드 풀이란 쓰레드를, 허용된 갯수 안에서만 사용할수 있도록 스스로 제약하는 방식이다.  이것은 JVM의 옵션등으로 제어할 수는 없고, 어플리케이션이 선택적으로 사용하는 방법이다.


   - 쓰레드풀 방식을 사용하는 대표적인 소프트웨어는 Tomcat같은 웹서버들이다. 웹서버들은 동시에 많기는 수천~수만의 요청이 들어올수 있는데, 이때마다 쓰레드를 생성하는 것은 JVM의 메모리를 급속하게 소비시키며 성능에도 저하가 발생하게 된다. 이럴때 최대 쓰레드 갯수를 지정해 놓으면 쓰레드 갯수 이상의 HTTP 요청에 대해서는 처리하지 않고  기다렸다가 놀고 있는 쓰레드가 생기면 그때 HTTP 요청을 쓰레드를 통해 처리한다. 



2. 쓰레드 풀의 구조

   쓰레드 풀은 크게 3가지 부분으로 나눈다. 


   1) Task의 요청을 받는 Queue부분

   2) 실제 쓰레드를 생성하고 관리하는 하는 manager 부분

   3) Queue 안에서 Task를 꺼내와서 실제 쓰레드 위에서 동작시켜 결과를 얻는 부분


   [ 풀 구조 - 이미지]



Posted by 농부지기
,

[ Java.Thread-3. Thread예제-3 (쓰레드 이름) ]



1. 소스 목록 : ThreadMain.java


2. ThreadMain.java

   - 쓰레드 이름을 얻고

     쓰레드 이름을 설정하고

     쓰레드 이름을 출력한다.


4. 수행결과

   - 매번 수행 시 결과는 계속 달라진다.


5. ThreadMain .java


6. 수행결과 (매번 수행시 결과 순서는 다르다.)
 



Posted by 농부지기
,

[ Java.Thread-3. Thread예제-2 ]


1. 소스 목록 : ThreadMain.java

                DigetThread.java

                AlphaThread.java


2. ThreadMain.java

   - 쓰레드를 상속받지 않았지만 메인 쓰레드가 된다.

   - DigetThread, AlphaThread의 instance를 생성 후 start()하게 되면   run()메소드가 수행된다.

     Thread를 상속받은 instance diget, alpha는 메인쓰레드와 관계 없이 각 각 별도로 수행된다.


   - 쓰레드 instance를 수행(start, run) 후 diget.sleep(1000);를 하게 되면 

     소스상으로 보면 diget이 1초 멈춤효과를 내야하지만  diget이 계속 수행되는걸 알 수 있다.

     >> 그 이유는 sleep()이 항상 현재 실행중인 쓰레드에 대해 작독하기 때문에 diget.sleep(1000)과 같이 호출하였어도 실제 영향을 받는 것은 main메서드를 실행하는 메인쓰레드가 된다.

         그래서 sleep()은 static으로 선언되어 있으며 참조변수를 이용해서 호출하기 보다는 Thread.sleep(1000);을 해야 한다.


4. 수행결과

   - main()에 의해서 메인쓰레드가 수행

   - DigetThread, AlphaThread생성 후 start()에 의해서 run()메소드 수행

     이때 DigetThread, AlphaThread의 실행순서, for문  실행순서는 매번 달라진다.

     이 부분은 JVM에 따라 언제든 달라진다.

     이때문에 반드시 Thread 프로그램들은 서로 관여하지 않는 프로그램을 작성해야 된다.

   - diget.sleep(1000); 에 의해서 메인쓰레드는 1초간 정지 (Thread.sleep(1000); 과 동일함)

   - alpha.sleep(1000); 에 의해서 메인쓰레드는 1초간 정지 (Thread.sleep(1000); 과 동일함)

 

5. ThreadMain.java


6. DigetThread.java

7. AlphaThread.java


8. 수행결과


Posted by 농부지기
,

[ Java.Thread-3. Thread예제-1 ]


1. 소스 목록 : ThreadMain.java

                ThreadExe1.java

                ThreadExe2.java


2. ThreadMain.java

   - 쓰레드를 상속받지 않았지만 메인 쓰레드가 된다.

   - ThreadExe1, ThreadExe2의 instance를 생성 후 start()하게 되면   run()메소드가 수행된다.

     Thread를 상속받은 instance th1, th2는 메인레드와 관계 없이 각 각 별도로 수행된다.


   - 레드 instance를 수행(start, run) 후 th1.sleep(3000);를 하게 되면 

     소스상으로 보면 th1이 3초 멈춤효과를 내야하지만  th1이 계속 수행되는걸 알 수 있다.

     >> 그 이유는 sleep()이 항상 현재 실행중인 레드에 대해 작독하기 때문에 th1.sleep(3000)과 같이 호출하였어도 실제 영향을 받는 것은 main메서드를 실행하는 메인레드가 된다.

         그래서 sleep()은 static으로 선언되어 있으며 참조변수를 이용해서 호출하기 보다는 Thread.sleep(3000);을 해야 한다.


4. 수행결과

   - main()에 의해서 메인레드가 수행

   - ThreadExe1, ThreadExe2 instance생성 후 start()에 의해서 run()메소드 수행

     이때 ThreadExe1, ThreadExe2의 실행순서, for문  실행순서는 매번 달라진다.

     이 부분은 JVM에 따라 언제든 달라진다.

     이때문에 반드시 Thread 프로그램들은 서로 관여하지 않는 프로그램을 작성해야 된다.

   - th1.sleep(3000); 에 의해서 메인쓰레드는 3초간 정지 (Thread.sleep(3000); 과 동일함)

   - th1.sleep(3000);가 있기 때문에 쓰레드 instance2개가 먼저 종료되고, 메인쓰레드가 종료 된다.

   - 만약,  th1.sleep(3000); 가 없다면 메인쓰레드가 먼저 종료 된다.


5. ThreadMain.java


6. ThreadExe1.java

7. ThreadExe1.java

8. 수행결과


Posted by 농부지기
,