본문 바로가기

멀티 스레드 병렬 프로그래밍을 하기 전 반드시 읽어야할 것들 - Java 객체 편(객체 동기화, 클래스의 쓰레드 안정성) JAVA 멀티 스레드 환경에서 "객체"를 다루기 전 알아야 할 것들 제목은 거창하지만 내용이 빈약할 수 있음을 미리 알립니다...java.util.concurrent 패키지 내용을 정리하려고 하다가 기본 지식이 부족하다 생각하여 JAVA 병렬 프로그래밍이라는 책을 읽고 멀티 스레드 프로그래밍 환경에서 "Thread-safe"하게 만드는 기본 지식을 정리한 것입니다.+ 스레드에 대한 어느정도 지식, 경험이 있는 분들이 보기 좋습니다. (초급 개발자 정도? 중급이상은 볼 필요가 없을 겁니다...)스레드 안정성(Thread-safe) : 여러 스레드가 어떤 변수나 함수 또는 클래스 객체에 접근할 때 계속해서 개발자가 의도한대로 정확하게 동작하하다는 것로 정의한다. 호출하는(사용하는) 쪽에서 특별한 동기화 코드..
패킷 분석 툴, 와이어샤크(WireShark) 사용법 (필터링, 검증, 처음 사용해보는 사람을 위한 안내) 와이어샤크(Wireshark) 와이퍼샤크는 오픈 소스 패킷 분석 프로그램으로 "pcap"을 이용하여 패킷을 잡아내는 것이 주요 기능이다.윈도우뿐만 아니라 리눅스같은 유닉스 계열의 운영체제에서도 사용된다.무차별 모드(promiscuous mode)를 지원해서 나한테 들어오고 나가는 패킷만 얻을 수 있는 것이 아니라 브로드캐스트나 멀티캐스트 트래픽도 얻을 수 있다. (100% 모든 것을 확인할 수 있는 것은 아님.)* 여기서 사용 목적이 좀 나뉠 수 있다.패킷을 분석하는 툴이기 때문에 해당 패킷을 보고 싶은 사람이 사용할 수도 있고, pcap 라이브러리를 이용해서 패킷 분석 프로그램을 개발할 수도 있다.또한 패킷 복호화를 통해 해킹(?)을 해볼 수 있고, 보안을 배울 수도 있다.하지만, 나 같은 일반적인 개..
강력한 자바 오픈소스 로깅 프레임워크, logback 사용법 with example(스프링 부트에서 logback 가이드, logback-spring.xml 설정하기) Logback 소개Logback은 "자바 오픈소스 로깅 프레임워크"로 SLF4J의 구현체이자 스프링 부트의 기본 로그 객체다.log4j, log4j2, JUL(java.util.logging)과 성능을 비교했을 때 logback은 훌륭한 성능을 보여준다.그리고 결정적으로 자바 프로그램에서 로그를 사용할 때 가장 많이 사용되고 있기 때문에 알아두어야 한다.Logback을 사용하기 위해서 아래의 모듈을 가져와야 한다. (maven 사용)12345678 ch.qos.logback logback-classic 1.2.3 test Colored by Color Scripter * 스프링부트에서는 기본 로그이기 때문에 굳이 위의 dependency를 추가하지 않아도 사용가능하다.spring-boot-starter-..
웹애플리케이션 서비스가 아닌 웹서비스(WebService), WSDL을 아시나요? (WSDL 문법, 구조, 구문 분석) 웹서비스(WebService)는 무엇인가? * 꽤나 오래된 기술이라서 쉽게 변화하기 힘들거나 변화에 보수적이고 오래전 부터 해왔던 업계에 적용되어 사용되고 있다. (일반적인 소프트웨어 회사에 가는 사람들은 굳이 볼 필요가 없다.)위키백과에 의하면 '네트워크 상에서 서로 다른 종류의 컴퓨터들 간에 상호작용을 하기 위한 소프트웨어 시스템' 이라고 한다. (상호작용을 위해서는 프로토콜이 필요하다는 것은 예상가능하다.)웹서비스는 웹 애플리케이션 서비스와 다르다.웹서비스는 쉽게 설명하기 위해 비약을 하면 API 서버와 유사하다.어떠한 애플리케이션이든 API서버는 "지정된 올바른 요청"을 하면 그에 해당하는 "답변"을 준다.마찬가지로 웹서비스는 애플리케이션들이 플랫폼과 프로그래밍 언어와는 독립된 방식으로 통신할 수..
Apache POI를 이용해서 자바에서 엑셀(xls, xlsx)파일 입출력 하는 방법(엑셀 자료 정리를 matlab 대신 자바로 해버렸습니다.) Apache POI를 이용한 엑셀 파일 입출력 보통 자바에서 .log(txt), .csv, .properties, .ini 같은 파일을 자주 사용하지 엑셀파일은 잘 다루지 않는다.하지만 대량의 자료를 정리할 필요가 있어서 한 번 사용해보았다.- Apache POI 라이브러리 적용하기 메이븐을 이용해서 라이브러리를 불러왔다. pom.xml에 추가한다. (현재 3.17버전까지 나왔다.)12345 org.apache.poi poi 3.13 - 코드 보기 전 상황 요약 : 이 안에 아래의 엑셀파일 리스트들이 쭉 있음 : 년도도 파일마다 다름 : 어떤 날은 측정을 하고 어떤 날은 측정을 안한 상황 이 상황에서 원하는 결과값은?해당 디렉토리별로 엑셀 시트를 만들어서 왼쪽에 날짜와 측정값을 세로로 정렬해보자!(여기서..
스프링부트 애노테이션 정리, annotation 간단 요약 (자세한 내용은 검색해서 확인하고 용도 파악하기) 스프링/스프링부트 애노테이션(Annotation) 정리 스프링 부트와 스프링에서 사용하는 애노테이션에 대한 내용을 간략하게 정리하고 자세하게 알아볼 때는 키워드를 가지고 공부할 수 있도록 유도하는 포스트.해당 애노테이션을 사용할 때 필요한 라이브러리나 설정 방법은 따로 기술하지 않고 애노테이션 정보만 빠르게 볼 수 있도록 정리하였다.@ComponentScan- @Component와 @Service, @Repository, @Controller, @Configuration이 붙은 클래스 Bean들을 찾아서 Context에 bean등록을 해주는 AnnotationApplicationContext.xml에 이런식으로 xml에 bean을 직접등록하는 방법도 있고 위와 같이 애노테이션을 붙여서 하는 방법도 있음b..
자바 쓰레드를 거의 정확한 주기로 실행하는 방법!(로직 수행 시간에 관계없이 정확한 주기 만들기,Timer, ScheduledExecutorService) 자바 쓰레드를 거의 정확한 주기로 실행하는 방법 (사족) "정확한 주기"로 실행하는 방법을 쓰게된 이유는 거의 비슷할 것이다.어떤 애플리케이션을 개발할 때 백그라운드에서 일정 주기마다 어떤 값을 검사하거나 보내는 등의 특정 로직을 수행하는 기능(쓰레드)이 필요하기 때문이다.나 역시도 데이터를 짧은 주기마다 보내야하는 로직이 필요했다.그래서 쓰레드의 주기하면 단순하게 떠오르는 것이 Thread.sleep() 메소드였다. - sleep()으로 될까?단순하게 쓰레드의 run() 메소드에 sleep(1000);을 적어서 1초쉬고 해당로직을 수행하게 했다.시간(주기)이 애플리케이션에서 치명적이지 않다면 간단하면서 쉬운 방법이다.하지만 시간이 정확해야하는 애플리케이션에서는 로직 수행시간이 추가되면서 지속적인 오차 ..
D3.js 사용법을 알기 위한 튜토리얼 예제 분석(D3공식홈페이지 example과 실시간 Line 그래프 예제 분석) D3.js 기본 문법 정리 D3.js는 Data-Driven Documents의 약어로 데이터를 렌더링할 수 있는(그릴 수 있는, 다룰수 있는) 웹 기반 문서 라이브러리다.좀 더 간단 명료하게 설명하면 데이터 시각화 라이브러리다. (실시간 데이터 차트 및 다양한 그래프)D3 공식홈페이지에 가보면 엄청나게 다양한 그래프들이 있고 거기서 원하는 것을 골라서 소스를 얻어갈 수 있다.라이센스도 BSD로 영리든 비영리든 마음대로 사용, 수정해도 된다.D3.js의 기본 문법(사용법)을 숙지하고 예제코드를 분석할 것이다.- D3 작업 순서 1. 데이터를 불러온다.2. 작업할 공간을 선택한다.3. 공간에 불러온 데이터를 연결(바인딩)한다.4. 각각 연결한 것을 원하는대로 그린다.1234567var dataset = [..