Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- pinpoint 2.5.3
- 개발 어렵당.ㅠ
- 7879
- reids
- save/update
- 애자일 싫타
- 월급루팡 일지
- Ingress Controller Fake
- fake jwt
- Armeria
- OIDC
- LPOS
- UnsupportedOperationException
- 노드간 통신
- R2DBC Paging
- nGinder
- jar 배포
- ㅉ때
- 논블록킹 성능
- Loki 로그
- hbase 저장공간 설정
- 핀포인트
- 플루터
- intellij
- jsonMarshaller
- formik
- 티스토리챌린지
- 오블완
- pinpoint
- RedirectService
Archives
- Today
- Total
대머리개발자
코루틴 조으다! 본문
728x90
절차지향적으로 진행하면 여러모로 편하다!!! 두말하면 잔소리다.
동시에 복잡하게.. 진행 되면 돌머리인 내가 팔로우 하기가 너무 힘들다 ㅠ
그리고 기본적으로 절차적으로 해결해도 크게 무리 없다. (성능적인 리스크는 있겠지만)
물리적인 파일을 등록하면서 관련 메타 정보를 등록하고
해당 파일을 pdf로 변경하는 로직이 있다고 하자.
100메가 정도의 파워포인트 파일을 pdf로 변경한다면 꽤나 무거운 작업이 될 것이다.
(파일을 업로드는 하는 시간 + PDF 변환 시간)
사용자에게도 바로 pdf를 리턴해 주지 않아도 되는 그림이기 때문에 PDF 변경 작업은 천천히 백그라운에서 작업을 하면 된다.
따라서 사용자에겐 파일 업로드만 하고 정상적인 리턴 값을 주면 된다.
각각 병렬로 진행하면 되는 부분이다.
요롤때 간단하게 아래처럼 간단하게 이용하면 된다.
GlobalScope.launc() {}
메인을 실행하면 바로 리턴 되고 끝나기 때문에
pdf 변환은 지대로 되는지 확인하기 위해 Thread.sleep(6000)을 추가한다. pdf 변환 작업이 delay(5000)이기 때문에.ㅎ
fun main() {
println( test())
Thread.sleep(6000)
}
@OptIn(DelicateCoroutinesApi::class)
fun test() = runBlocking{
GlobalScope.launch(Dispatchers.IO) { callPdfChangeAPI() }
return@runBlocking saveBasicData()
}
fun saveBasicData(): String {
return "saveBasicData" ///.....1
}
suspend fun callPdfChangeAPI(): String {
delay(5000)
println("change....")
return "Good job" ///......2
}
SMS나.. 색인은 메인 프로세스와 별개로 진행하면 되는 부분이다!! 야호!
suspend fun asyncProcess(menu:Map<*, *>, boardDto: BoardDto) {
try{
if(menu.containsKey("alarm") && menu["alarm"] == boardDto.userId ){
// sms
HttpRequest(RequestContext.getThreadLocal().token!!)
.sendMessage(menu["title"].toString(), menu["content"].toString())
}
if(menu.containsKey("solr")){
// 검색 호출
SolrUtil(boardDto).addAndCommit()
}
}catch (_:Exception){
//. 예외와 상관없이 메인 쓰레드는 진행해야함.
}
}
728x90
'개발이야기 > 코틀린' 카테고리의 다른 글
[코틀린]null 처리 재미지다! (0) | 2024.04.02 |
---|---|
멤버 변수 바인딩에 대한 고민 (2) | 2024.03.29 |
아르메리아를 쓰자. (1) | 2024.03.15 |
ModelMapper - LocalDateTime처리 (1) | 2024.01.29 |
아르메리아(Armeria) - ExceptionHandler (1) | 2024.01.03 |