실행 환경: JAVA7, OS(WIndow) 군대에서 프로젝트 개발 중 동시성을 만드는 작업 중에서 하나의 스레드가 실행하는 Process Thread 는 어떤 방식으로 해야 성능을 챙길 수 있을까 고민하며 이때 저는 성능을 최대한 절약하기 위해서 스레드를 정지하면서 핸들링하는 것이 좋다는 생각에 기반하여, 동시성 로직을 개발하였습니다. (그게 독인줄도 모르고..) 간단히 동시성 로직을 설명 하겠습니다. 1. 스레드가 한 작업을 완수하면 대기 상태로 변경해라 2. 여러 스레드가 모두 대기 상태라면 모두 실행 상태로 변경해라 개발을하면서 PING 에서 받는 값이 딜레이가 생겨 이때는 어떻게 해결을 못 하고 어떻게든 최소 0.001초 꾸역꾸역 정지하면서 만들고 실제 훈련 때 3박 4일 운영을 했습니다. 훈련..
(서사) https://oineh.tistory.com/19 딜레이가 발생한 프로세스 스레드의 원인에 대해서 자바 스레드의 정지를 기준으로 두 가지 가설을 세웠습니다. 저는 두 번째 가설이 맞지 않은 상황을 찾지 못했습니다. 그래서, 이 가설이 맞다는 가정하에 해결 방법을 고민하였습니다. 이에, 스레드 상태 로직에 문제가 있다는 것을 알고, 이를 해결하기 위해 기존에 잘못된 스레드 상태 제어 로직을 제거하였습니다. 그 후에도 같은 상황이 나온다 하더라도 해결할 수 있게 문제의 근본인 Process.exec을 제거하고 어떤 IP와 연결 타입이라도 확인 가능한 코드를 구현하여 lib로 만들어 배포하였습니다. https://github.com/oiNeh/tcp GitHub - oiNeh/tcp Contribu..
군대에서는 전산병으로 평상시와 같이 부대 전산 업무를 하고 있었다 그러던 어느 날 게시판을 지우는 임무를 맡았다. 쉬워 보이지만 전혀 쉽지 않다 가장 처음에는 [게시물 최대 50 조회] [삭제] 이런 단계로 지울 수 있다. 하지만 삭제를 하면 아까 지웠던 페이지 가 그대로 나온다. 삭제 상관없이 게시물을 조회한 만큼 나온다. 나 - 아무래도 db에서 데이터를 삭제하면 안 되니까 이런 것 같은데 방문자 - (아 그냥 다음 페이지로 넘어가면 되는 거 아닌가?) 나 - 맞다 다음 페이지로 넘어가서 지우면 된다. [다음 페이지][삭제] 자 다음 페이지도 지웠다. 그러면 현재 페이지는 어디일까? 방문자 - ( 방금 지웠던 페이지겠지) 떙 "틀렸다" 가장 처음 지웠던 첫 번째 페이지이다. 물론 다 초기화돼서 [게시..
군대에서 이제 곧 시작하는 훈련을 앞두고 (제작 기간 총 10일, 남은 기한 3일) 컴파일 시 인코딩이 깨지는 문제가 발생했다.!!! 일단 나의 개발 환경은 Os: windows7 IDE: 메모장! Jdk: 6 Dev: tomcat, cmd 개발 환경이 UTF-8에서만 이루어지는데 한글이 깨지는 이유를 도통 몰라. 해 매이던 중 이건 javac 가 문제일까? 메모장이 문제일까? javac은 집에서는 잘만 했던 인코딩들( iso-8859-1, EUC-KR, UTF-8, ANSI) 여기서 똑같은 인코딩으로 하는데 안 될 이유가 없다고 생각해서 javac에서 문제가 날 가능성은 없다고 생각했다. 그럼 메모장이 문제 인대 메모장에서 UTF-8, UTF-8(BOM) 환경에서 인코딩을 하면 한글이 안될 이유가 없는..
자바를 예시로 들면 자바는 8 , 11 , 16 ,17 버전마다 환경 변수 설정이 다른데 클릭 한 번으로 편하게 바꾸고 싶다 이럴떄 일단 각 버전의 경로를 확인하자 C:\Program Files\Java\jdk1.8.0_321 C:\Program Files\Java\jdk-11.0.15 C:\Program Files\Java\jdk-16.0.2 C:\Program Files\Java\jdk-17.0.2 여기서 메모장을 열어 아래 보이는 틀을 입력하자 여기에 "경로 삽입"에 원하는 경로를 넣어주면 setx java_home c:/ -m (환경변수) (변수명) (경로) (설정) @echo on setx JAVA_HOME "C:\Program Files\Java\jdk1.8.0_321" -m 이런 식으로 바꿔..
2차원 배열을 아래와 같이 출력해야 할 때 어떤 코드가 좋을까 for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j] + " "); } System.out.println(""); } 각 값을마다 띄어쓰기 붙이고 1줄 끝날때마다 개행 추가도 해주는 코드이다 자 우선 for문 한문장 없애기 위해 Arrays.toString()을 사용해봤다 for (int i = 0; i < arr.length; i++) { System.out.println(Arrays.toString(arr[i])); } 문제없이 잘 나가지만 [] 괄호도 같이 출력이 되어 다른 방법을 모색을 해서 좀더 ..