분류 전체보기 (80)
동기(Synchronous)/비동기(Asynchronous) 처리

다음과 같이 여러개의 작업을 동시에 처리할때 작업1,2가 메인작업과 별개의 작업일때

비동기(@Async)로 던져놓고 메인 작업만 완료 후 응답을 주기도 합니다.

(응답시간 0.5초, 작업1,2의 결과 받을 수 없음)

 

메인작업 : 0.5초

작업1 : 1초

작업2 : 2초

 

하지만 3가지 작업의 결과가 모두 필요할 경우 동기 처리를 하면 3.5초가 걸리지만

작업1, 2를 비동기로 처리하면 일찍 처리가 끝난 작업은 모든 작업이 완료될때까지 대기 후 응답을 줍니다.

(응답시간 2초, 3개의 작업 결과 확인 가능)

 

Kotlin

@RestController
@EnableAsync
class ThreadTest(
        val taskService: TaskService,
        val mainService: MainService
) {
    @GetMapping("task")
    fun testMapping(): String {
        val start = System.currentTimeMillis()

        val task1 = taskService.task1()
        val task2 = taskService.task2()
        val main = mainService.task()

        return "main[$main], task1[${task1.get()}], task2[${task2.get()}], total[${System.currentTimeMillis()-start}]"
    }
}

@Service
class MainService {
    fun task(): Long {
        val start = System.currentTimeMillis()
        Thread.sleep(500)
        return (System.currentTimeMillis()-start)
    }
}

@Service
class TaskService {
    @Async
    fun task1(): CompletableFuture<Long> {
        val start = System.currentTimeMillis()
        Thread.sleep(1000)
        return CompletableFuture.completedFuture(System.currentTimeMillis()-start)
    }

    @Async
    fun task2(): CompletableFuture<Long> {
        val start = System.currentTimeMillis()
        Thread.sleep(2000)
        return CompletableFuture.completedFuture(System.currentTimeMillis()-start)
    }
}

 

테스트1

http://localhost:8080/task

main[502], task1[1001], task2[2001], total[2007]


메인 작업은 처리 완료 후 비동기 작업들이 완료될때까지 대기 후 응답을 주고 있습니다.

 

테스트2

반대로 동기로 처리하는 메인작업이 오래걸릴 경우도 테스트 해보겠습니다.

(MainService의 작업시간을 3초로 늘려주세요)

 

메인작업 : 3초

작업1 : 1초

작업2 : 2초

 

http://localhost:8080/task

main[3001], task1[1001], task2[2001], total[3004]


당연히 메인작업이 처리되는동안 1,2번 작업은 비동기로 작업을 완료하고 응답을 같이 주고 있습니다.

 

 

* 동시에 여러 곳을 연동해서 결과를 취합한다거나

  자원이 남아 별도의 스레드에서 처리하고자 할 때 사용하시면 됩니다.

 

 

 

 

 

 

  Comments,   0  Trackbacks
댓글 쓰기
RestTemplate 한글 깨짐

FCM 연동 중 한글 깨짐 현상 발생 시 다음과 같이 메세지 컨버터의 인코딩을 변경한다.

 

Kotlin

        val restTemplate = RestTemplate().apply {
            messageConverters.forEach {
                if(it is StringHttpMessageConverter) {
                    it.defaultCharset = Charset.forName("UTF-8")
                }
            }
        }

 

  Comments,   0  Trackbacks
댓글 쓰기
윈도우10에서 도커 용량 줄이기

윈도우에서 도커를 사용하다보면 사용하지 않는 이미지가 쌓여서 용량이 무한증식하는 사태가 벌어집니다
범인 : "C:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx"

 

미사용 이미지 삭제

> docker images 
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE 
ddanzit-api_api                   latest              1287e2e8862d        13 days ago         971MB 
                                          310c3191c7df        4 weeks ago         971MB 
                                          19dc6cd2a496        7 weeks ago         971MB 
shippang-api_shippang_server      latest              662739236085        3 months ago        1.53GB 
nginx_nginx                       latest              0a566ca88abf        3 months ago        23.9MB 

> docker rmi 310c3191c7df 19dc6cd2a496 
Deleted: sha256:310c3191c7df7d7928a40b92e2a98f962df9809d3c39b906e65e437cbad0e81a 
Deleted: sha256:128cb726ac87d5009933122f5ecd0e511c1e5b934b702b42680099ad93913872 
Deleted: sha256:9e053b0161e7c8e11742ed4056ea86ca67e407e54eea99f2385bffe0947232ac 
Deleted: sha256:93ec1b72be89394325b7b3103bc83f518d7224aaa4ad5386502b80986c80de9d 
Deleted: sha256:1e376dd0c9aeac1dc477ff8d3008fc494aaf1b6adc9d93cdbb7009c1ae3b88b0 
Deleted: sha256:3989b9e1791054bc63736b9d9bfc28d6d2332cdb5ace3106922151d8339b8310 
Deleted: sha256:d5d74293cd7816f8cfd3afa4c6be31d499669a85e283b00a0dcb59b3c2c411a5 
Deleted: sha256:ef3846b3cf8da1b7cd385745dcd8645681edf220168d95c98845f8fe79a59361 
Deleted: sha256:dd79b4f4ebb863b50f3204bf55ee9f069ab8eb3641651a5b7e3a72f604baeda8 
Deleted: sha256:19dc6cd2a49616860806ea9e6326ef3e45a238d30180a6658cf2653e12de8763 
Deleted: sha256:f73ba70111aa682b27a3e0771ce78f7766cf39aa8bdb8f4ea37d4b7e38fd34b3 
Deleted: sha256:30381e8fdc78ef0353abb0b24a6b6e7e176ef6606912106ed34434a5c59585e1 
Deleted: sha256:7cfcd9ebff4f7b772a2a0e013850e2aa595e16eb14a151d74cb3887c436ce2a4 
Deleted: sha256:c552b92c65d7ad06b29b4bfc0e6ef2ac3574a94deaeaf00b586000a93e789dab 
Deleted: sha256:676761e5886e28e0be002ece7e7c656c12fec7b4d7b5c9d3d8c843b1fe5d6313 
Deleted: sha256:b92fb12e0167105e63962f35d21dde069b7096f98e4c4d80cd51f1e135f8d9cf 
Deleted: sha256:e86492207dcca0add1fa1821d907cbd126354ce727b7f9c54590cba67ba38233 
Deleted: sha256:70e5ae3507821588585f063f1b96bcce9c1ebe69d53d4777a7180faaf771032f 

> docker images 
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE 
ddanzit-api_api                   latest              1287e2e8862d        13 days ago         971MB 
shippang-api_shippang_server      latest              662739236085        3 months ago        1.53GB 
nginx_nginx                       latest              0a566ca88abf        3 months ago        23.9MB

도커 중지

는 윈도우에서 잠시 도커를 꺼주세요

 

파일 최적화(cmd/powershell 관리자 권한)

>Optimize-VHD -Path  "C:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx"  -Mode Quick

 가상 디스크 압축
    72%
    [oooooooooooooooooooooooooooooooooooooooooooooooooooo           ]

도커 시작

 

 

'개발 > Linux/Server' 카테고리의 다른 글

윈도우10에서 도커 용량 줄이기  (0) 2019.10.15
nginx 로그 로테이트  (0) 2019.01.11
대용량 더미파일 생성 방법  (0) 2018.12.27
쉘 이용해서 자동 로그인하기  (0) 2014.09.17
vmstat 파일에 쓰기  (0) 2014.08.25
shell 색상 입히기  (0) 2013.11.28
  Comments,   0  Trackbacks
댓글 쓰기
Kotlin toIntOrNull

코틀린에서 숫자 변환시에 자주 쓰이는 함수입니다.

다른 용도로 숫자인지 아닌지를 판단할때도 자주 쓰는데 주의할 점이 있습니다

fun main(args:Array<String>)
{
    "1234".run {
        println(this.toIntOrNull() ?: "$this is not number")
   }
    "349505749735".run {
        println(this.toIntOrNull() ?: "$this is not number")
        println(this.toBigIntegerOrNull() ?: "$this is not number")
    }
}

//1234
//349505749735 is not number
//349505749735

위 예제를 보시면 문자열이 숫자인지 아닌지 판단하기 위해 toIntOrNull을 사용하였지만

중간에 숫자가 아니라고 나오는 경우가 발생합니다.

 

이미 눈치채셨겠지만 숫자가 너무 커서 toInt를 하지 못한 경우입니다.

toBigIntegerOrNull로 대체해서 해결되었지만 무심코 쓰다가 실수할 수 있는 부분이니 신경 써주면 좋습니다

  Comments,   0  Trackbacks
댓글 쓰기
mysql 사용자 추가 및 권한

제목 그대로 mysql 8 버전 기준 사용자 / db / 권한 추가



create user testuser identified by 'mypassword';


create database testdb;


grant all privileges on testdb.* to 'testuser' with grant option;


'개발 > DB' 카테고리의 다른 글

mysql 사용자 추가 및 권한  (0) 2019.02.07
Mybatis #과 $의 차이  (1) 2014.11.10
몽고DB 설치  (0) 2014.01.22
테이블 정보(컬럼 정보, 코멘트 등등)  (0) 2013.11.11
테이블 사이즈 구하기(컬럼 길이, 컬럼 길이 평균)  (0) 2013.03.12
[ORACLE] 달력  (0) 2012.09.14
  Comments,   0  Trackbacks
댓글 쓰기
http 응답에서 특정 헤더가 읽어지지 않을때

axios를 이용해서 통신하는 도중 헤더를 읽지 못하는 현상 발생


서버에서 201 created 응답 헤더에 생성된 자원의 Location을 보냈으나 받지 못함

(크롬의 network 탭에서는 보이나 response.headers.location이 undefined로 찍힘)


CORS 이슈로 다음의 헤더만 사용가능

Cache-Control

Content-Language

Content-Type

Expires

Last-Modified

Pragma


추가적인 헤더 사용하기 위해서는 다음과 같이 CORS설정 시 명시해줘야함


@CrossOrigin(origins = ["http://localhost:3000"], exposedHeaders = ["Location"])


  Comments,   0  Trackbacks
댓글 쓰기
nginx 로그 로테이트

nginx 로그를 로테이트 하고 싶을때 os의 log rotate 모듈을 많이 사용하지만

시간별로 남기는 기능을 지원하지 않는다.


nginx 설정만으로 하려면 다음과 같이 설정한다.


nginx.conf

if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})") {

set $year $1;

set $month $2;

set $day $3;

set $hour $4;

set $minutes $5;

set $seconds $6;

}


access_log  logs/access_${year}-${month}-${day}_${hour}.log  main;


'개발 > Linux/Server' 카테고리의 다른 글

윈도우10에서 도커 용량 줄이기  (0) 2019.10.15
nginx 로그 로테이트  (0) 2019.01.11
대용량 더미파일 생성 방법  (0) 2018.12.27
쉘 이용해서 자동 로그인하기  (0) 2014.09.17
vmstat 파일에 쓰기  (0) 2014.08.25
shell 색상 입히기  (0) 2013.11.28
  Comments,   0  Trackbacks
댓글 쓰기
대용량 더미파일 생성 방법

압축 테스트 등을 위해 대용량 더미파일을 생성해야 하는 경우가 종종 생깁니다

간단하게 용량을 지정해서 더미파일을 생성하는 방법입니다


$ head -c 1M /dev/urandom > 1m.txt

$ head -c 1G /dev/urandom | gzip -9 > 1g.txt



'개발 > Linux/Server' 카테고리의 다른 글

윈도우10에서 도커 용량 줄이기  (0) 2019.10.15
nginx 로그 로테이트  (0) 2019.01.11
대용량 더미파일 생성 방법  (0) 2018.12.27
쉘 이용해서 자동 로그인하기  (0) 2014.09.17
vmstat 파일에 쓰기  (0) 2014.08.25
shell 색상 입히기  (0) 2013.11.28
  Comments,   0  Trackbacks
댓글 쓰기
도커에서 시간 설정하기

도커 사용시 기본적으로 시간설정이 되어있지 않기 때문에 9시간 전으로 표시가 된다

Dockerfile에 다음과 같이 설정하면 시간이 정상적으로 나오게 된다



Dockerfile

FROM mysql
ENV TZ=Asia/Seoul
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone


  Comments,   0  Trackbacks
댓글 쓰기
java.lang.string cannot be cast to com.facebook.react.uimanager.accessibility DelegateUtil$accessibilityRole

리액트 네이티브 버그, 강제로 버전을 낮춰서 해결


node_modules 삭제 후 진행




$ rm -rf node_modules

$ npm i -S react-native@0.57.1

$ npm add @babel/runtime

$ npm i -D schedule@0.4.0

$ npm i


  Comments,   0  Trackbacks
댓글 쓰기