- μ£Όμ ν¬μλ₯Ό λμμ£Όλ Quant κΈ°λ° μ’ λͺ© μΆμ² λͺ¨λ°μΌ μ±μ λλ€.
- 7κ° μ€μ ν¬μμ§νλ₯Ό ν λλ‘ μ¬μ©μκ° λΉμ€μΉλ₯Ό μ§μ μ λ ₯νλ©΄ μ΄ λΉμ€μΉλ€μ κΈ°μ€μΌλ‘ κ³μ°νμ¬ 1 ~ 10μ κΉμ§μ μ’ λͺ©μ μ μν΄μ£Όλ μ±μ λλ€.
- μ΄λ₯Ό ν΅ν΄ μ£Όκ΄μ μΈ νλ¨μ μν ν¬μκ° μλ κΈ°κ³μ μΌλ‘ ν¬μν μ μκ² λμμ£Όλ μλΉμ€λ₯Ό μ 곡ν©λλ€.
- μ 립μ μ£Όμ ν¬μ, λ€μν ν¬μ ν¬νΈν΄λ¦¬μ€ κ΅¬μ± λ± μ¬λ¬ λΆλ¬Έμ νμ©ν μ μμ κ²μΌλ‘ κΈ°λν©λλ€.
- Front(Mobile): React-Native, Android
- Back: Spring Boot
2.2.6
(Java 8) - Test: JUnit4
- Build: Gradle
5.6.4
- DB: MariaDB(AWS RDS)
- Cloud: AWS EC2
- Crawling: python
-
company_data (λΆκΈ°λ§λ€ μλ update)
per
pbr
roa
roe
debt_ratio
(λΆμ±λΉμ¨)operating_profit_ratio
(μμ μ΄μ΅λ₯ )reserve_ratio
(μ 보μ¨)
-
company_detail (λΆκΈ°λ§λ€ μλ update)
code
(μ’ λͺ©μ½λ)cmp_name
(μ’ λͺ©λͺ /κΈ°μ μ΄λ¦)total_asset
(μ΄μμ°)total_equity
(μ΄μλ³Έ)total_debt
(μ΄λΆμ±)sales
(맀μΆμ‘)operating_profit
(μμ μ΄μ΅)net_income
(λΉκΈ°μμ΄μ΅)retained_earnings
(μ΄μ΅ μμ¬κΈ)description
(κΈ°μ μμΈμ€λͺ )market
(μ μ’ )
-
daily_price (λ§€μΌ μ₯λ§κ° κΈ°μ€μΌλ‘ μλ update)
code
(μ’ λͺ©μ½λ)end_price
(μ’ κ°)
daily_price
: λ§€μΌ 16:00μ DB μ λ°μ΄νΈquant_data
,company_detail
: λΆκΈ°λ§λ€ DB μ λ°μ΄νΈ(2, 5, 8, 11μ κΈ°μ€ 15μΌλ‘ μ€μ )
$crontab -e
0 0 15 2,5,8,11 * python3 /home/ec2-user/app/diq/web_crawling_general.py
0 16 * * 1-5 python3 /home/ec2-user/app/diq/web_crawling_Jongga.py
daily_price
: λ§€μΌ 16μ 0λΆμ λͺ λ Ή μλ μ€ν,
dailyUpdateData.json
νμΌ λ°ν
quant_data
,company_detail
: 2, 5, 8, 11μ 15μΌ 0μ 0λΆμ λͺ λ Ή μλ μ€ν
QuantDataTable.json
,CompanyDetailTable.json
νμΌ λ°ν
@SpringBootApplication
@EnableScheduling
public class QuantApplication {
public static void main(String[] args) {
SpringApplication.run(QuantApplication.class, args);
}
}
@EnableScheduling
μ€μ μ ν΅ν΄ Spring Bootμ Scheduler λ±λ‘
// QuantDataController.java, CompanyDetailController.java
@Scheduled(cron = "0 30 0 * 2,5,7,11 *", zone = "Asia/Seoul")
public ResponseEntity<String> bulkUpdate()
throws JsonParseException, JsonMappingException, IOException {
//ν΄λΉ Logic...
}
// DailyPriceController.java
@Scheduled(cron = "0 30 16 * * 1-5", zone = "Asia/Seoul")
public ResponseEntity<String> bulkUpdate()
throws JsonParseException, JsonMappingException, IOException {
//ν΄λΉ Logic...
}
- python μ½λ μ€νμ΄ μλ£λλλ° 20 ~ 30λΆμ λ μμλλ―λ‘ Spring Bootμμλ Linuxμλ² μ€μ λ³΄λ€ 30λΆ λ¦κ² Scheduling μ€μ
- python μ½λλ‘ crawlingλ λ°μ΄ν°λ€μ λ΄μ json νμΌμ WASμμ λ°μμ μ²λ¦¬νλ€.
dailyUpdateData.json
>DailyPriceController.java
QuantDataTable.json
>QuantDataController.java
CompanyDetailTable.json
>CompanyDetailController.java
μ¬μ©μκ° Modify νμ΄μ§λ₯Ό ν΅ν΄ 7κ° μ§νμ λν λΉμ€μΉλ₯Ό μμ ν λλ§λ€ ν΄λΌμ°λ μλ² DBμ μμ²νλ€λ©΄ λΉν¨μ¨μ μ΄λΌκ³ μκ°νμ΅λλ€.
μ΄μ μ±μ μ²μ μμνμ λ React-Nativeμμ μ§μνλ Async Storageμ μλ² DB λ°μ΄ν°λ€μ ν λ² λκΈ°ννλ€λ©΄ μλ²μ λΆλ΄μ μ€μΌ μ μμ κ²μ΄λΌ νλ¨νκ³ κ°λ°μ μ§ννμ΅λλ€.