일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 문서화
- springrestdocs
- 스타트업
- 프론트엔드
- 멀티모듈
- multimodule
- Kotlin
- batch framework
- submodule
- 서브모듈
- 백엔드
- 회고
- 스프링
- spring
- 성장
- batch
- react
- 스프링부트배치
- 스프링부트
- API
- springboot
- 스프링배치
- batchframework
- springbootbatch
- Today
- Total
목록SpringBoot (9)
노트북을 열고.
※ 모든 코드는 저의 Github 에서 확인하실 수 있습니다. 0. 코드로 말합니다. 개발업무에 있어 형상관리업무만큼은 지극히 최소한으로 유지하는 게 좋다고 생각합니다. 과거엔 코드를 유지보수할 때에 Doc주석을 추가하거나 별도에 수기문서로 기록하며 관리를 하였지만 지금은 GitHub와 같은 소스 관리 도구를 통해 그 역할을 대신할 수 있습니다. 우리가 작성한 코드를 가리켜 참고해야 할 기록이 우후죽순 늘어날수록 우리가 신경 써야 할 것들도 함께 늘어나게 됩니다. 서비스를 유지 보수하면서 이러한 관리 포인트를 최소화하기 위한 노력이 무엇이 있는지 생각해보았습니다. 1. 코드를 최대한 간결하고 우아하게 구현하는데 관심이 있어야 합니다. 2. 코드의 무결성을 검증하는것에도 중요하죠. 3. 이러한 과정을 거친..
1. Scope 그리고 스프링의 기본 Scope, Singleton 앞선 장에서 설명드리지 않았으나 무척이나 중요한 역할을 하던 컴포넌트가 있습니다. 바로 배치가 실행될 때 Spring Bean을 생성하는 시점을 명시하는 @JobScope와 @StepScope 입니다. @Bean @StepScope public ListItemReader unPaidMemberReader() { log.info("********** This is unPaidMemberReader"); List activeMembers = memberRepository.findByStatusEquals(MemberStatus.ACTIVE); log.info(" - activeMember SIZE : " + activeMembers.size..
1. 메타(Meta)테이블, 존재의 이유. 이전 장에서 우리는 배치를 실행시키기 위한 총 9개의 테이블을 생성하였습니다. 사실 아주 간편하게 코드로만 배치프로세서를 구현할 줄 알았지 Batch프로세스만을 위한 테이블을 무려 9개씩이나 만들어야 한다면, 마치 배보다 배꼽이 더 큰 것 마냥 느껴지기도 합니다. 이 9개의 테이블은 메타테이블이라고 불리웁니다. meta라는 어원('~에 관하여, About)에서 알 수 있 듯 이들은 우리가 구현한 BatchJob이 실행될 때마다 그 BatchJob에 관련한 모든 것를 꼼꼼하고 세세하게 기록됩니다. 정확히는, 우리가 구현한 'BatchJob을 실행시키기 위한 목적을 가진 테이블은 아닙니다'. 필요에 따라 이 테이블 없이도 스프링부트 배치프레임워크로 실행가능한 배치잡..
해당내용의 소스는 https://github.com/ahndy84/salt에서 확인하실 수 있습니다. 커뮤니티에 가입한 회원들중에 다음과 같은 배치처리 프로세스를 구현하고자 합니다. 1. 데이터베이스에서 이용이 활성화된 회원목록을 읽어온다. (ItemReader) 2. 읽어온 고객리스트들을 대상으로 다음의 비즈니스를 처리한다. (ItemProcessor) case. 결제할 금액 있음(=미납 고객) - (회원의 상태값이 활성화되어 있는 경우) 비활성화(INACTIVE) 상태 값으로 전환한다. 3. 처리된 고객들을 DB에 저장(update)한다 (ItemWriter) 진행하기에 앞서 사전에 준비해야 하는 몇가지입니다. 이전 장에서 실습해 본 SubModule 프로젝트를 기준으로 진행하겠습니다. 아래의 포스트..
대략 10만 명의 회원을 거느리는 웹서비스를 운영한다고 가정했을 때 우린 매일마다 회원들의 상태변화를 감지하고 운용할 수 있어야 합니다. 가령 오늘까지 우리 서비스에 접속하지 않은지 1년 이상이 지난 회원의 상태는 휴면으로 전환시키고 휴면으로 전환된 회원은 다시 로그인했을 때 본인인증절차를 거치도록 하는 것이 서비스 보안에 좋겠죠. 또는 후불로 청구되는 유료서비스를 이용하고 과금액을 미납한지 한 달째 되는 회원에 대해서도 매일마다 집계하여 그에 맞는 추심을 한다거나 채권관리대상으로 지정하여 우리서비스의 수익구조를 안정적으로 보호해야 하는 경우도 있습니다. 만약 이러한 일들을 사람의 손을 반복적으로 거쳐야 한다면 매우 고단한 일이 될 것입니다. 무엇보다 우린 그럴 인력을 고용할 돈이 없습니다. 스프링부트 ..
1. application.yml 생성하기 이쯤에서 궁금한 점이 생겨야 합니다. 각 모듈은 독립적인 서버의 역할을 합니다. 그렇다면 기본적으로 동일한 도메인을 갖는 각각의 모듈들은 어떻게든 구분되어 관리되어야 할 것입니다. 한 예로 포트구성을 들 수 있겠죠. 그러면 각 Module에 필요한 다양한 환경설정은 과연 어디서 어떻게 하는지 알아보겠습니다. module-web/src/main/resource 경로에서 application.yml이라는 파일을 생성하겠습니다. 그리고 다음과 같이 작성하겠습니다. server: port: 80 야믈 - YAML? YAML : Ain't Markup Language? 기존의 마크업(Mark-up)방식이 아닌 데이터 중심으로 서술하는 방식을 뜻합니다. 기존의 것보다 형식..
1. Sub Module 생성하기 다음과 같이 총 4개의 Sub Module을 생성하겠습니다. module-common : 공통모듈 module-web : 일반적인 서비스이용자를 위한 웹서비스 모듈 module-api : Web페이지 내부에서 직접 연결을 담당하는 서비스 또는 DB와 접점을 당하는 서비스로 구성된 모듈 module-batch : 일정한 스케쥴을 주기로 일괄처리 서비스를 담당하는 모둘 setting.gradle 파일에 다음과 같이 rootProject를 추가합니다. rootProject.name = 'modules' RootContext[Modules]에서 마우스 오른쪽버튼을 클릭 [New] - [Module] 을 선택합니다. New Module 생성창이 표시되면 Gradle을 선택, Ad..
제가 진행하는 프로젝트의 개발환경은 다음과 같습니다. (개발환경 구성에 대한 설명은 생략합니다.) OS : MacOS Language : Java 8 FrameWork : SpringBoot 2.5.3 IDE : IntelliJ IDEA Ultimate 2019. 1 JDK : Open JDK 11 Build tool : Gradle 4.0 1. 프로젝트를 생성해 보겠습니다. 상단 메뉴 [File] - [new] - [project]순으로 누르신 후 다음의 New Project창에서 왼쪽의 목록 중 Spring Initializr을 클릭합니다. Project SDK를 선택하고 Choose Initializr Service URL에서는 Default: https://start.spring.io 를 선택 후..