본문 바로가기

Java

(51)
자바 쓰레드를 거의 정확한 주기로 실행하는 방법!(로직 수행 시간에 관계없이 정확한 주기 만들기,Timer, ScheduledExecutorService) 자바 쓰레드를 거의 정확한 주기로 실행하는 방법 (사족) "정확한 주기"로 실행하는 방법을 쓰게된 이유는 거의 비슷할 것이다.어떤 애플리케이션을 개발할 때 백그라운드에서 일정 주기마다 어떤 값을 검사하거나 보내는 등의 특정 로직을 수행하는 기능(쓰레드)이 필요하기 때문이다.나 역시도 데이터를 짧은 주기마다 보내야하는 로직이 필요했다.그래서 쓰레드의 주기하면 단순하게 떠오르는 것이 Thread.sleep() 메소드였다. - sleep()으로 될까?단순하게 쓰레드의 run() 메소드에 sleep(1000);을 적어서 1초쉬고 해당로직을 수행하게 했다.시간(주기)이 애플리케이션에서 치명적이지 않다면 간단하면서 쉬운 방법이다.하지만 시간이 정확해야하는 애플리케이션에서는 로직 수행시간이 추가되면서 지속적인 오차 ..
자바 압축 라이브러리 비교 및 사용법을 담은 예제 (내장패키지 java.util.zip , zip4j, apache commons-compress, google snappy-java) 자바에서 압축이 필요할 때? 자바에서 압축이 필요한 경우는 언제일까?- 사용자가 요청한 데이터를 압축해서 (다운로드 가능하게) 파일로 보내줘야할 때- 로그를 파일에 쌓고 파일을 압축하거나 로그 파일의 내용(문자열)을 압축해서 DB에 저장할 때- 압축파일 내부에 .exe파일이 있는지 검사할 때 (조금 다른 예시)기타 여러 경우가 많이 있으나 생략한다.사실 리눅스에서는 crontab 과 DBMS에서 제공하는 명령어로 압축하고 저장할 수 있기도 하다. (꼭 자바(프로그래밍 단)에서 할 필요는 없다.)어떤 경우든 결국은 압축이 필요하고 압축이 필요할 때 적절히 프로그래밍할 줄 알아야 한다.압축의 용도와 성능 압축률이 엄청나게 좋아서 1/10로 크기를 줄인게 무조건 성능이 좋다고 말할 수 있을까?물론 여전히 압축..
자바 NIO 정리 #1 개요 ("JAVA는 느리다"라는 말이 생긴 이유와 개선책, 성능이 좋아지는 입출력 포인트 2가지) "자바는 느리다" - 어디가 느릴까? 진짜 느릴까? "자바는 느리다." 라는 말은 어느 정도 프로그래밍을 해온 개발자들이라면 들어봤을 법한 말이다.그런데 자바가 어디가 느리고 왜 느린지, 그리고 얼마나 느린지에 대한 답을 하는 개발자는 많지 않다.이번 포스트부터 4개 정도의 포스트로 연재할 내용은 자바는 어떠한 이유로 느리고 그것을 개선한 방법은 무엇인지에 대한 것이다.- 자바는 어디가, 왜 느릴까?일단 자바는 C/C++과 달리 포인터로 1. 직접 메모리를 관리하고 운영체제 수준의 2. 시스템 콜을 직접 사용할 수 없다. JVM이라는 프로세스 위에서 동작하는 추상화된 비교적 고수준의 언어이기 때문에 자바는 느리다.기타 GC(Garbage Collection)의 메모리 점유 문제등 느린 이유는 더 많이 있..
자바 XML 파싱 라이브러리, XPath를 사용한 예제와 정확하게 element를 선택하는 방법을 알아보자 Java XML parse Library (=XPath) XPath : 자바에서 내장 패키지(javax.xml.xpath)로 제공하는 라이브러리로 XML형식의 웹문서, 파일, 문자열을 파싱하는데 사용한다.요즘 누가 XML쓰나? JSON이랑 비교했을 때 태그같은 군더더기도 많고 파싱 속도, 전송 속도도 딸리는데? (* JSON이 무조건 좋은 것은 아님.)하면서 별로 선호하지 않는 것은 사실이다.하지만 의외로 아직까지 현업에서 사용되는 곳이 많이 있고 XML만의 장점도 있다.따라서 데이터를 XML로 만드는 것과 XML을 파싱해서 데이터를 이용하는 것 둘다 할 줄 알아야하기 때문에 가장 먼저 XML 파싱 라이브러리인 XPath에 대해 알아보았다.OpenAPI로 받은 XML 데이터 파싱하기 OpenAPI로부터 ..
Jedis 튜토리얼! 자바에서 Redis 사용하는 방법 (jedis 라이브러리를 이용한 예제, sample) Jedis - Redis 자바 라이브러리 Jedis는 Redis를 자바에서 쉽게 사용할 수 있게 도와주는 라이브러리다.jedis말고도 Redis 자바 라이브러리가 다양하게 존재하지만 Jedis가 사용이 가장 간단하다고 한다. 따라서 가벼운 마음으로 실습해본다.Maven repository 가보니까 2.9.0 버전(최신버전)의 라이브러리가 제일 많이 사용되고 있기 때문에 이번 실습환경도 똑같이 jedis 2.9.0 버전을 쓴다.Redis가 뭔지 모르면 지난 포스트 http://jeong-pro.tistory.com/139 를 참고하면 좋을 것 같다.[maven dependency]123456 redis.clients jedis 2.9.0Colored by Color Scripter 메이븐을 빌드툴로 사용하..
자바 애플리케이션에서 FTP 파일 전송하는 방법 upload sample (Apache commons-net 라이브러리) 자바로 FTP 통신하기 (파일 업로드) 파일질라, 알FTP(?) 같은 훌륭한 FTP프로그램들이 이미 있지만 자바로 간단하게 파일을 전송하는 프로그램을 찾아보았다.(사실 텔넷으로 명령어 쓸 일이 있어서 telnet 라이브러리를 찾다가 ftp도 흥미가 생겨 한번 사용해보는 것...)* 참고로 apache에서 commons-net 이라고 라이브러리를 제공하는데 여기에 telnet도 있고 NTP, FTP등 다양한 일반적인 프로토콜이 있어서 일반적인 프로토콜 통신 기능을 쉽게 사용할 수 있다.ftp로 통신을 하려면 먼저 ftp서버가 돌고 있어야 파일 전송을 받아준다.virtual machine 을 사용해서 리눅스(우분투)를 설치한 후에 ftp서버를 사용할 수 있게 바꿔줘야 한다. (마지막에 설명함)12345678..
.ini 파일 입출력, ini파일 구조와 ini4j 라이브러리를 이용하는 방법 (feat. java.util.Properties 사용하기) .ini 파일 입출력하기 애플리케이션을 실행시키기 전에 필요한 설정들을 따로 파일(.ini 파일 또는 .conf, .properties파일 등)에서 가져와 실행하는 방법을 많이 쓴다.초기 설정 파일의 포맷은 다양한데 그 중 .ini파일에 대해 알아보고 입출력 해보겠다..ini파일은 일반적인 .properties파일과는 다르다..properties 파일같은 경우에는 보통 단순하게 "key = value" 식으로 작성해서 입출력하는 방식이다.1234ip = 192.168.0.11port = 5000rootpath = C:\Users\jeongproid = jeongpro 구성도 간단하고 입출력하는 방법도 간단하다.반면에 .ini파일은 조금 더 추가되어 Section, Key, Value로 구성되어 있다.12..
Java TCP 소켓 프로그래밍 예제 - 채팅프로그램 만들기 (멀티 쓰레드) TCP 소켓 프로그래밍 튜토리얼, 채팅 프로그램 TCP/IP를 이용한 소켓 프로그래밍으로 채팅 예제를 만들며 이해해본다.코드를 살펴보며 정리한다.* 채팅 서버 코드123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108package nio; import java.io.BufferedReader;import java.io.InputStreamReader;import java.io...