신규 프로젝트에 들어가게 되었는데 API 통신 내부에서 병렬로 각각 처리를 해야 하는 임무를 받았습니다. 그래서 이번 기회에 열심히 Multi Thread에 대해 공부하게 되었고 나름 스스로 만족할 정도로 공부를 끝냈습니다. 아래 내용은 제가 공부한 Multi Thread에 대한 내용입니다. - Thread 실행 Class Thread를 실행할 Class로 ThreadPoolExecutor를 생성하여 Thread Pool을 관리하는 방식입니다. 중간에 Thread를 Sleep 시키는 이유는 ThreadPoolExecutor가 어떤 방식으로 돌아가는지 Console로 확인하고 싶어서 넣었습니다. ThreadPoolExecutor는 기본적으로 선언한 CorePoolSize 만큼 Thread를 실행하다가 Co..
어디 프로젝트에 들어가냐에 따라 다르겠지만 계정들을 딱 용도에 맞게 분리시켜 생성하여 각 종 Synonym 및 권한을 주는 형식의 프로젝트가 있기 마련입니다. 그러다보니 일반적인 Delete가 아니라 아예 Table을 리셋 시키려 Truncate하고 싶은데 다른 계정에서 실행해보면 권한이 충분하지 않다면서 실행이 되지 않습니다. 다른 계정의 Table을 Truncate하기 위해서는 두 가지 방식이 있습니다. 1. 권한 주기 1 GRANT DROP ANY TABLE TO A cs 이렇게 ANY 권한을 주게 되면 A 계정에서 어떤 Table이든 간에 Truncate 시키는 게 가능합니다. 다만 이렇게 무지막지한 권한을 줬다가는 모든 Table들을 Truncate할 수 있으므로 위험할 수 있습니다. 따라서 아..
Spring framework 기반으로 Mybatis 설정 완료 후 프로시져를 통해서 리스트 값을 받아올 때 종종 Cursor is closed라는 에러가 발생하는 것을 확인할 수 있습니다. exception으로 throw하기 때문에 난감한 상황이 됩니다. 그렇다고 DB툴을 켜서 프로시져를 실행해보면 정상적으로 응답이 나오는 것을 확인할 수 있습니다. Mybatis에서는 해당 상황이 발생할 때SqlException으로 던지기 때문인 듯 한데, 이를 해결해 주려면 Cursor를 프로시져 도입부에서 무조건 Select 해주면 됩니다. 다만, 값을 내려주면 안되는 상황이고 Select를 태울 필요가 없는데 처음부터 Select가 실행되면 문제가 되기도 하니 아래와 같이 해결하시면 됩니다. 1 2 3 4 5 6..
일반적으로 Spring은 Spring 영역을 벗어나면 Component scan 범위를 벗어나므로 의존 주입을 할 수 없습니다. 본 바탕이 Spring인데 외부 API에 DB를 이용해서 데이터를 적재해야 하는데 dao(data access object)를 Autowired 할 수 없으니 따로 Util을 생성하여 거기에 DB를 적재하고자 생각했습니다. 다만, 이렇게 적용해보니 문제가 Util로 가게 되면 생성되는 Method들이 모두 static으로 선언되어 생성되는데 static 영역에는 Autowired를 사용할 수 없었습니다. 그래도 꼼수로 static 필드에 넣을 수 있는 방법이 있지 않을까 싶어서 검색해보니 역시 위대한 구글신께서 방법을 알려주셨습니다. 방법은 아래와 같습니다. 1234567891..
- Total
- Today
- Yesterday