스프링부트 사용 시 AOP 사용방법에 대하여 자세히 적힌 글이 있어 남긴다.


https://backtony.github.io/spring/2021-12-29-spring-aop-2/#%ED%94%84%EB%A1%9D%EC%8B%9C-%EB%82%B4%EB%B6%80-%ED%98%B8%EC%B6%9C

'Develop > Spring' 카테고리의 다른 글

[Mybatis] insert 하고 seq key 값 가져오기  (0) 2015.12.17
STS 설치 및 Spring Project 만들기  (0) 2015.11.24
Spring File Download  (0) 2015.11.23


스프링부트 배치에서 Cursor 사용 시 간단하게 read 구현하여 사용 가능하다.

커서로 read 구현하여 사용 시 속도는 mybatis paging 처리보다 read 속도가 빠르게 나왔다.

두 방식에서 장단점이 있어 비즈니스 로직에 따라 필요한 방식으로 구현하면 될 것으로 보인다.

페이징 처리 시 대용량 데이터를 JVM에 올리기때문에 메모리 부담이 있어 GC, OOM 발생 가능성이 있으나 병렬 처리 시 구현방법에 대한 편의성이 있고

커서 방식으로 처리 시 GC, OOM 이 발생한 가능성은 적으나 병렬 처리 시 partition 이나 flow 로 별도 프로세스로 동작하도록 구현해야한다.


550만 건 chunk 10만 건씩 처리 시 read 속도 측정 시

1. MyBatisCursorItemReader : 1분 19초 소요

2. MyBatisPagingItemReader :2분 22초 소요



@bean
public MyBatisCursorItemReader<Map<String, Object>> cursorReader(){

   Map<String, Object> paramMap = new HashMap<String, Object>

   reurn new MyBatisCursorItemReaderBuilder<Map<String, Object>>()
                      .sqlSessionFactory(sqlSessionFactory)
                      .queryId("sample.selectTable")
                      .parameterValues(paramMap)
                      .build();
}


@Bean
public MyBatisPagingItemReader<Map<String, Object>> pagingReader(){

    Map<String, Object> paramMap = new HashMap<String, Object>

   return new MyBatisPagingItemReaderBuilder<Map<String, Object>>(){
                         .sqlSessionFactory(sqlSessionFactory)
                         .queryId("sample.selectTable")
                         .parameterValues(paramMap)
                         .pageSize(100_000)
                         .build();
   }
}

'Develop > Spring Boot Batch' 카테고리의 다른 글

SqlSession Cursor 사용방법  (0) 2023.02.07


프로젝트를 하면서 Spring Boot Batch 에서 커서를 적용한 케이스와 사용한 방법에 대하여 작성합니다.

 

- 커서를 적용한 케이스

   1) 약 1억 건의 데이터를 DB to DB 로 적재 시 GC가 발생하는 케이스가 있어 heap 메모리를 8GB로 변경하여도 동일한 증상이 지속되어 커서방식으로 변경함.

 

 

1. openSession() 으로 커서 세션 생성

 

try ( SqlSession sqlSession = sqlSessionFactory.openSession();

         Cursor<Map<String, Object>> cursor = sqlSession.selectCursor("sample.selectTable", param)) {

 

   for(Map<String, Object> data :cursor) {

      // 1 row 씩 데이터가 넘어온다.

   }

}

 

 

2. Mybatis 옵션 추가

fetchSize 는 Integer Minimum 값을 주게되면 1개의 row 씩 읽어 JVM에 데이터를 많이 올리지 않아 OOM이나 GC가 발생하지 않는다.

 

<select id="selectTable" parameterType="map" resultType="map" fetchSize="-2147483648" resultSetType="FORWARD_ONLY">

 

   select

      aaa, bbb, ccc

   from sampleTable

</select>

 

 

위와 같은 코드로 커서를 위한 session 생성 후 selectCursor() 를 통해 mybatis 쿼리 데이터를 계속해서 가저오게된다.

 

chunk 단위로 가저와서 processor, writer 로 처리하는 방법도 있지만 데이터 전체를 메모리로 가저와서 처리하지 않아 GC가 발생하지 않고 속도도 안정적이였다.

'Develop > Spring Boot Batch' 카테고리의 다른 글

MybatisCursorItemReader  (0) 2023.02.07


Java 8 버전에서 추가된 LocalDateTime 입니다.

 

간단한 날짜 포맷팅 사용할 경우 사용합니다.

 

 

결과 : 2022-01-19 04:38:06

'Develop > Java' 카테고리의 다른 글

Java Http Request  (0) 2015.11.23
Java AES 128 암복호화  (0) 2015.11.23


웹페이지를 통째로 저장하는 프로그램입니다.

간단히 설명을 하자면 HTML, CSS, JS, Image 파일 등을 자동으로 받아주는 프로그램입니다.

https://www.httrack.com/

해당 URL에서 프리웨어로 다운로드 받아 설치합니다.


1. 프로그램 실행 시 화면입니다. 다음을 눌러줍니다.




2. 저장할 프로젝트(폴더명) 을 입력해줍니다. 폴더 위치는 기본 설치시 C:\My Web Sites 입니다.



3. 다운로드 할 웹사이트 URL을 입력합니다. 1개 이상도 가능합니다.



4. 몇가지 추가 옵션이 있으며 특별하게 옵션을 줄 것이 아니면 마침을 눌러줍니다.



5. 자동으로 스캔하여 해당 URL에서 이동할 수 있는 부분을 자동으로 인식하여 파일을 받습니다.



6. 모두 받으면 마침을 누릅니다.




7. 다운로드 받은 폴더에 가면 URL의 모든 이미지와 아이콘 등 파일을 받은 것을 확인 할 수 있습니다.





MySQL은 설치하여 사용하는 방법을 설명하겠습니다.


MySQL의 경우 PHP와 함께 많이 사용하는 DB 이지만 오라클, MS-SQL 과 다르게 프리웨어 DB로 개인 프로젝트 또는 간단한 상업용으로도 많이 사용하는 것 같습니다.


개인적으로 MySQL의 경우 개인 프로젝트용으로 사용하기 아주 좋은 DB 인 것 같습니다.


설치 시에 특별하게 옵션을 바꾸는 부분은 없지만 어떻게 설치를 하고 어떠한 옵션들이 있는지 간략하게 설명을 하려고 합니다.



1. MySQL 홈페이지에 들어가면 Downloads 항목에서 Community 세부항목으로 들어갑니다.

  Enterprise 버전은 유로 버전입니다.



2. MySQL Community Server을 선택합니다. GPL 이라고 표시되어있으며 General Public License 로 오픈 소프트웨어입니다.



3. 아래쪽으로 내려가면 Installer 버전이 있습니다. zip 파일로 받아서 풀어서 사용해도 되지만 설치파일을 받아서 설치하는 것이 깔끔합니다.

   64bit, 32bit 모두 구분 없이 파일을 받으시면 됩니다. 설치시에 구분하여 설치가 가능합니다.



4. 영어로 잘 설명되어있는 부분을 캡처했습니다. 

   외부에서 온라인으로 구동 시에는 web 버전으로 받으시면 되고 오프라인으로 사용 시에는 web이 아닌 버전으로 받으시면 됩니다.

   용량이 많이 부족하신 것이 아니라면 web 버전으로 받아서 설치하시면 됩니다.



5. 오라클에 인수 된 이후에 다운로드를 받으려면 오라클에 로그인을 해야합니다. 오라클 아이디가 있을 경우 로그인 하시면 되고 없으시면 가입하시면됩니다.



6. 로그인이 정상적으로 되었을 경우 Downlaod Now 버튼 을 눌러 설치 파일을 받으시면 됩니다.



7. 파일을 받으신 뒤에 실행을 하면 MySQL Installer 가 실행이 됩니다. 라이센스 승인을 체크하시고 다음으로 이동합니다.



8. 설치 유형을 선택하는 부분입니다. 이부분을 잘 모르신다면 Developer Default 를 선택하여 기존적인 항목들을 설치하시면 됩니다.

   저의 경우 Java 개발자이고 필요한 항목들만 설치할 에정이기때문에 Custom 으로 설치합니다.



9. 설치 항목을 선택하는 부분입니다. 선택한 항목은 아래와 같습니다.

   - MySQL Server 57.11 - X64 : 64비트 MySQL 서버입니다. 기본적인 서버입니다.

   - MySQL Workbench 6.3.6 - X64 : 64비트 DB 연결 클라이언트입니다. MySQL 에 연결하여 DB 제어, 쿼리 등 모든 작업을 하게됩니다.

   - Conntector/J 5.1.38 - X86 : Java 에서 MySQL 연결하기위한 JDBC 입니다. 



10. 선택한 항목을 확인 후 설치합니다.




11. 서버에 대하여 설정을 시작합니다. 다음으로 넘어갑니다.



12. 서버에 대하여 기본 네트워크를 설정합니다. MySQL 의 기본 포트는 3306이며 특별한 경우가 없으면 기본 포트를 사용합니다.



13. MySQL에 사용할 admin 비밀번호를 설정합니다. 필요시 추가적으로 사용자 계정을 하나 추가하여 admin 권한을 줍니다.



14. 윈도우즈에 서비스로 올라갈 이름과 함께 시작시 자동시작할지 여부 설정이며 특별한 경우가 없으면 기본 옵션으로 사용합니다.



15. 확인 후 실행합니다. 그리고 Finish를 눌러 설치를 종료합니다.





16. 설치 종료 후 Workbench 를 실행할지 옵션이 있으며 그냥 두고 Finish 합니다. DB가 정상적으로 작동하는지 확인해야겠지요.



17. Workbench가 실행이 되면서 설치된 DB가 보입니다. 더블클릭하여 들어갑니다.



18. 최초 생성했던 root 계정의 비밀번호를 입력합니다.



19. 정상적으로 MySQL에 접근이 되면 정상적으로 설치가 된 것입니다.




이클립스에 SVN을 연동해서 사용하는 것처럼 깃을 연결해서 사용 할 수 있습니다.

https://github.com/jwgye/project.git 

이러한 주소와 같이 개인 깃허브 주소가 있으면 가능합니다.

깃허브 주소가 없을 경우 이전에 작성한 포스트에서 만드시면 됩니다.


2016/01/01 - [Develop/Tool] - [Github 연동] Github(깃허브) 가입하기


STS 의 경우 Git 이 설치되어있기 때문에 별도로 설치할 필요는 없으며 없을 경우 Egit을 마켓에서 설치하시기 바랍니다.

Perspective 에서 Git 을 선택합니다.



Git 에 들어가시면 3개의 항목이 있습니다. 이중에 Clone a Git repository 를 선택합니다.


2개의 메뉴 중 Clone URI 를 선택합니다.




개인의 깃허브 URI 와 아이디 패스워드를 입력해줍니다. port는 입력하지 않아도 됩니다.



기본 Branch인 master를 선택합니다. 



깃이 연동될 디렉토리를 선택해줍니다.

보통 SVN과는 다르게 Local의 파일에 commit을 한 뒤에 git 에 push하여 다시 한번 update를 하게됩니다.

local 의 저장소 지정하신다고 보시면 될 것같습니다.



깃이 정상적으로 연결이 되면 아래처럼 세팅이 됩니다.



깃세팅이 끝났으니 이제 개발된 소스 또는 개발 시작하려는 소스를 업로드하면됩니다.

업로드 하려는 프로젝트에 오른쪽 클릭을 하여 Team -> Share Project 를 선택합니다.



Local 저장소를 선택하시고 단순히 Finish를 누르면 Local의 저장소와 함께 동기화가 됩니다.

실제로 깃에 올라간 것은 아니며 깃에 올리기 전 Local 의 저장소에 Commit을 한 뒤에 Update가 가능합니다.





프로젝트에 Add to Index 를 선택하면 프로젝트 파일에 있던 물음표가 사라지는 것을 확인 할 수 있을 것이다.




그런 후 Commit 을 해준다.



Commit 을 실행하면 commit 할 대상과 함께 메세지를 남길 수 있다. 

Commit 을 누르면 Local 저장소와 싱크만 맞추며 Commit and Push를 선택하면 Github에 소스가 업로드가 된다.



github에 push 할 때 정보를 확인 한 후 OK 버튼을 누르면 실제 github에 올라가게된다.



깃허브 사이트에서 올라간 소스를 확인 할 수 있다.





프로젝트를 진행하면서 계속해서 SVN만 사용을 해왔었습니다.

이번에 공부를 위하여 개인 프로젝트를 진행하면서 새로운 소스 공유 방법을 찾다가 유명한 Github (깃허브) 를 사용해 보기로 했습니다.


우선 이클립스에서 연동하기 전에 Github에 가입을 먼저 해보겠습니다.

가입은 일반 사이트에서 회원가입하는 것과 비슷합니다.


https://github.com/


해당 URL에 들어가면 바로 가입이 가능합니다.

사용자 이름과 이메일 그리고 비밀번호를 입력하면 가입이 가능합니다.




입력 한 뒤에 Sign up 버튼을 누르시면 아래와 같은 화면이 나옵니다.

저희는 개인이 사용할 것이므로 기본 선택이 되어있는 Free로 가입을 합니다.

Finish 버튼을 눌러주면 가입할 때 입력했었던 이메일로 가입 확인 이메일이 오게됩니다.

그 메일 안에 있는 버튼을 클릭하여 승인만 해주면 최종 가입이 끝납니다.


이메일 승인까지 마친 뒤에 이제 새로운 repository 를 등록해야 합니다.

오른쪽 아래의 New repository 를 클릭합니다.



SVN 과 같이 새로운 저장소 경로를 지정합니다..

원하시는 Respository 이름을 입력하시고 Public 으로 선택하여 [Create repository] 버튼을 클릭하여 최종 등록해주면됩니다.

Private 로 하면 좋지만 유료이기때문에 기본 오픈으로 만드시면됩니다.

라이센스 부분은 MIT 나 Apache 등 오픈 소스에 대한 라이센스 도 선택가능합니다.


아래와 같이 완성된 repository 입니다.

https 경로로 된 URL 주소로 이클립스와 연동하여 사용할 수 있습니다.


Github 가입하여 생성하였으며 다음 포스팅에 이클립스 연동을 하겠습니다.




MyBatis 에서 insert 하고 seq key 값을 가져오는 방법입니다.



useGeneratedKeys 옵션으로 쿼리가 실행되고 난 뒤 seq key 값을 가져오게됩니다.


'Develop > Spring' 카테고리의 다른 글

aop 사용 방법  (0) 2023.02.22
STS 설치 및 Spring Project 만들기  (0) 2015.11.24
Spring File Download  (0) 2015.11.23


Tree 구조 데이터에서 Node ID 이하의 자식 Node 전부를 가져오는 쿼리입니다.

우선 MySQL 에 프로시저를 하나 생성합니다.



해당 프로시저를 만든 뒤 아래와같이 쿼리를 실행하면 ID 값 포함한 하위의 ID 전부를 가져옵니다.


'Develop > DB' 카테고리의 다른 글

[MySQL] 설치하는 방법  (0) 2016.02.29
[MySQL] SELECT 한 데이터를 UPDATE 하기  (0) 2015.12.03
[MySQL] UPDATE 시 에러코드 1175 처리  (0) 2015.12.03
[MySQL] 테이블 복사하기  (0) 2015.12.02

+ Recent posts