본문 바로가기

전체 글

Key 이벤트 순서 및 처리 그리드 내부에서 숫자 혹은 특수문자를 입력이 되지 않는 문제가 발생하였다. Key와 관련한 이벤트를 찾아보니 KeyDown 이벤트, KeyPress 이벤트, KeyUp 이벤트가 있었다. Key 이벤트가 발생되는 순서는 KeyDown -> KeyPress -> KeyUp 이벤트 순으로 발생된다. KeyDown 이벤트는 보통 Enter Key 처리 혹은 방향키 조작을 처리하기 위해 구현하였다. KeyPress 이벤트는 각각의 숫자 혹은 문자 키를 따로 처리하기 위해 구현하였다. KeyDown -> KeyPress -> KeyUp 이벤트 순서로 처리 되기 때문에 만약 KeyDown에서만 로직을 처리해야하는 경우라면 e.Handle = true를 추가하면 KeyPress 이벤트가 발생하지 않는다. 더보기
비동기 프로그래밍(Task)에 알아보자 간혹 프로그램을 개발하다보면 비동기방식으로 API를 호출해야하는 경우가 존재합니다. ex) API 호출 시간이 오래걸릴 경우, 동시에 여러 개의 API를 호출해야하는 경우 이때, Task 객체를 사용하여 비동기방식으로 API를 호출하는데 .NET FrameWork 4.5 이상에서는 async와 await 키워드를 지원하기때문에 비동기 프로그래밍을 할 수 있습니다. 하지만 .NET FrameWork 4.0의 경우 async와 await 키워드를 지원하지 않기 때문에 Nuget 패키지에서 Mircrosoft.bcl.Build.Symbols(MIT 라이센스) 패키지를 다운받아 비동기방식으로 API를 호출하면 됩니다. for문을 통해 여러 API 호출을 병행할 때 함수의 매개변수로 전달될 값이 배열의 값을 전달.. 더보기
UAC(사용자 계정 컨트롤)로 인하여 Drag & Drop 기능 작동 안할 시 프르그램을 관리자 권한으로 실행해야하는 경우가 존재합니다. ex)시스템 드라이버 혹은 C 드라이브의 특정 폴더 내 파일을 읽고 쓸 경우 이 때 관리자 권한으로 권한 상승을 하기 위한 방안은 2가지입니다. 1. 프로세스 객체를 통해 관리자 권한으로 권한 상승 2. 프로젝트 내 매니페스트 파일을 통해 관리자 권한으로만 프로그램을 실행할 수 있도록 권한 상승 두번째 방안의 경우 주의해야할 점이 있는데요. 특정 프로그램에서 관리자 권한의 프로그램을 실행할 경우 특정 프로그램 또한 관리자 권한을 가지고 있어야 하는 단점이 존재합니다. 이슈사항 - 가상프린터드라이버에서 특정 관리자 권한의 프로그램 실행 불가능 관리자 권한으로 권한이 상승된 프로그램의 경우 윈도우 탐색기에서 프로그램 내로 Drag&Drop 기능이 보.. 더보기
Comparable를 구현한 방식과 comparing을 구현한 방식간 성능차이 자바에서 객체를 정렬시키기 위해서는 Comparable or Comaparator 인터페이스를 사용합니다. 정렬을 해야하는 객체의 경우 해당 클래스에 Comparable을 구현하여 compareTo 메소드를 정의하면 되는데요. 이펙티브 자바에서는 compareTo 메소드의 정의규칙을 다음과 같이 설명합니다. Comparable을 구현한 클래스는 모든 x, y에 대해 x.compareTo(y) == y.compareTo(x)여야 한다. Comparable을 구현한 클래스는 추이성을 보장해야한다. (x.compareTo(y) > 0 && y.compareTo(z) > 0 이면 x.compareTo(z) > 0이다.) Comparable을 구현한 크래스는 모든 z에 대해 x.compareTo(y) == 0이면.. 더보기
Rest API 호출 시 HTTP 405 Code 해결방안 최근 JavaFX로 모니터링 프로그램을 개발하고 있습니다. 모니터링에 필요한 데이터(CPU 사용량, 메모리, 디스크 사용량, 에러감지 등)을 서버로부터 받아와야했는데요. 서버와의 통신부터 405 Code가 발생해 통신이 불가능했습니다ㅠㅠ MDN에서 찾아보니 405 Code가 발생하는 경우는 'Method Not Allowd'라고 개발된 API의 HTTP 메소드와 요청하는 메소드가 달라 발생하는 오류였습니다. 개발된 API의 HTTP 메소드는 GET인데 요청하는 측에서 POST 메소드로 요청하고 있는거죠. Get Method public static JSONObject getRequest(String endpoint, JSONObject request) { try { HttpURLConnection con.. 더보기
SELECT 문으로 데이터 랜덤으로 가져올 경우에 대한 성능 테스트 SELECT문으로 데이터를 가져올 때 랜덤으로 순서가 바뀌어야하는 요구사항이 존재하였습니다. 해당 기능을 구현하기 위해서 2가지 방안을 생각했었습니다. 1. DBMS에서 ORDER BY RANDOM()를 통해 랜덤하게 가져오도록 개발 2. SELECT 문으로 데이터를 가져온 후 웹 애플리케이션단에서 랜덤하게 순서변경 로직 개발 1번째 방안으로 개발을 진행한 후 성능테스트 이후 성능저하가 심할경우 2번째 방안으로 개발하도록 계획을 수립하였습니다. 쿼리문 select receiver_key, user_id, amount, is_received from tb_receiver where token = #{value} select receiver_key, user_id, amount, is_received fro.. 더보기
Mybatis에서 대량의 데이터를 넣을 때 bulk insert를 사용하자 개발을 하다보면 API 호출 시 1000건이상의 데이터를 삽입해야하는 상황이 있습니다. 1000건의 데이터를 insert하는데 걸리는 시간은 약 5초였으며 시간을 줄일 수 있는 방안을 생각해봤는데요. mybatis에서 대량의 데이터를 한번에 삽입할 수 있도록 insert foreach문(DBMS마다 지원하는 쿼리가 다름)을 지원하는 것을 알게 되었습니다. 수정 전 SQL insert into tb_receiver(receiver_key, token, user_id, amount, is_received, receiver_date) values(#{receiver_key}, #{token}, #{user_id}, #{amount}, #{is_received}, #{receiver_date}) 수정 후 SQL.. 더보기
멀티 스레드 환경에서 동일 데이터에 대해서 업데이트 시 고려해야 할 사항 어느 회사의 과제 코드리뷰 중 면접관으로부터 상황이 부여되어 해결책을 제시하라는 질문을 받았습니다. 문제사항 1. 두명의 사용자가 A라는 API를 동시에 호출할 경우가 발생할 수 있다. 2. A라는 API의 로직 중 데이터를 가져오는 SELECT 문까지 동시에 접근하였다. 3. 우연한 일치로 API 내에서 수정되어야 하는 데이터가 동일하다. 이럴경우 어떻게 해결하겠는가? 너무 많이 당황하고 해결책을 생각하지 못했다. 어떻게 이 문제를 해결해야 할지 생각해봤는데 간단히 해결할 수 있었다. 해결 1. SQL 변경 2. 정해진 횟수만큼 시도하여 모두 실패할 경우 예외발생 현재의 SQL문은 업데이트문으로써 업데이트문에 대한 조건만이 존재 업데이트문에 대한 조건을 상세히 하여 업데이트 셀렉트 구문으로 변경 수정된.. 더보기