반응형

Back 40

@Async 비동기 호출

실행중인 프로세스 이외의 비동기 작업이 필요한 대상이 있다면 해당 메서드에 @Async어노테이션을 추가하면 된다. @Async public void runAsync() { // Run run do run run Aikatsu } 해당 방식은 전통적인 방식으로 동작되는 코드 이다. 매우 간단하다. 하지만 다른 스레드로 실행 시키려고자 한다면 @EnableAsync 설정을 따로 해야한다. @Configuration @EnableAsync public class AsyncConfiguration { private final int ASYNC_THREAD_POOL_SIZE = 5; @Bean(name = "threadPoolTaskExecutor") public Executor threadPoolTaskExec..

Back/Spring Java 2020.04.27

for문(Loop) 성능 개선 - 2

JDK5.0이전에는 대부분 아래와 같이 for문을 작성 했을 것이다. for (int loop = 0; loop < list.size(); loop++) 위의 코드의 문제점은 loop를 돌면서 매번 list.size()메서드를 호출 하기 때문에 적절하지 못하다. 아래와 같이 개선한다면, int listSize = list.size(); for (int loop = 0; loop < listSize; loop++) list.size()메서드를 반복 호출할 필요가 없어지므로 조금 더 향상된 성능을 보여준다. 또, JDK5.0부터는 향상된for문, for-each를 사용 할 수 있다. ArrayList list = new ArrayList(); for (String str : list) *성능테스트 int c..

Back/Spring Java 2020.04.16

Mybatis 대용량 insert, update (ExecutorType.BATCH)

대용량 데이터 insert, update 진행 시 ExecutorType.BATCH옵션을 사용하면 업로드 시간을 좀 더 단축 시킬 수 있다. // DI SqlSessionFactory 주입 @Autowired private SqlSessionFactory sqlSessionFactory; ---생략--- public boolean dataUpload(VoTestInfo voTestInfo){ boolean result = true; try { SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); try { sqlSession.insert("xmlNamespace.queryId", voTestInfo); } catch(IOEx..

Back/Mybatis 2020.03.17

Node.js(Socket.io) + Vue.js 채팅 예제

우선 Socket.io는 JavaScript를 이용하여 브라우저 종류에 상관없이 실시간 웹을 구현할 수 있도 록 한 기술이다. 또, Socket.io는 WebSocket, FlashSocket, AJAX Long Polling, AJAX Multi part Streaming, IFrame, JSONP Polling을 하나의 API로 추상화한 것이다. (즉 브라우저와 웹 서버의 종류와 버전을 파악하여 가장 적합한 기술을 선택하여 사용하는 방식) 다시 말해 socket.io를 통해 개발을 하면 websocket이 지원이 되지 않는 브라우저에서도 메시지 를 양방향으로 주고 받을 수 있다. 구조는 node.js 기반의 frontend(Vue.js) - client, backend - server 로 나눠서 간다..

Back/Node 2020.03.06

No 'Access-Control-Allow-Origin' header is present on the requested resource. (CORS policy)

frontend(Vue.js), backend(Spring boot-Java)로 나눠진 환경에서 frontend쪽에서는 backend환경 에 rest api 형태로 값을 주고 받는 환경에서 아래와 같은 에러가 발생. 현재 다른 도메인의 서버에 url요청을 할 경우 XMLHttpRequest는 보안상의 이유로 자신과 동일한 도메인으로만 HTTP요청을 보내도록 제한하고 있어 에러가 발생한다. 결론은 XMLHttpRequest가 cross-domain을 요청할 수 있도록하는 방법인 CORS를 활용한다. CORS(Cross-origin resource sharing)이란, - 웹 페이지의 제한된 자원을 외부 도메인에서 접근을 허용해주는 메커니즘이다. Spring에서 설정 스프링 RESTful Service에서 ..

Back/Spring Java 2020.03.02

대용량 데이터 조회 시 ResultHandler(RowHandler)

Mybatis를 사용하여 대용량데이터를 select해서 List 형태로 호출 하게 되면 몇십만건 혹은 몇백만건 row data를 한번에 호출 하게 되면 OOM(Out of Memory)에러가 발생될 가능성이 매 우 높다. 보통, 엑셀 업로드, 다운로드 혹은 데이터 2차 가공 작업이 필요할때 위의 작업이 필요 한 경우가 발생 되는데, OOM오류를 회피하는 방법으로 Mybatis의 ResultHandler를 통해 데이터 Row별로 반복 작업이 가능하다. 아래의 소스를 통해 설명하자면, // DI SqlSessionFactory 주입 @Autowired private SqlSessionFactory sqlSessionFactory; ---생략--- // 대용량 다운로드 시 ResultHandler를 사용한 O..

Back/Mybatis 2020.02.19
반응형