전체 글
규칙 73 - 스레드 그룹은 피하라.
스레드 그룹(thread group)은 원래 applet을 격리시켜 보안문제 해결할 목적으로 만들어졌으나 성공하지 못했다. 그러면 이런 스레드 그룹은 왜 남아있는가? 아예 쓸곳이 없는가? 그렇지는 않다. 스레드 기본연산을 여러 스레드에 동시에 적용할 수 있도록 하는 기능을 가지고 있다. 하지만 대부분이 deprecated 되었다. 결론을 이야기하자면 이미 다 페기가 되어버린 기능이다. 그렇기 때문에 신경쓸 것 없이 사용하지 말아야한다. 출처 : 조슈아 블로크, 『 Effective Java 2/E』, 이병준 옮김, 인사이트(2014.9.1)
규칙 72 - 스레드 스케줄러에 의존하지마라.
실행해야 할 스레드가 많을 경우 어떠한 스레드를 얼마나 오랫동안 실행할지 결정은 스레드 스케줄러가 진행한다. 운영체제마다 스레드 스케줄러는 다르기 때문에 아무리 운영체제에서 효율적으로 진행한다고 하더라고 이에 의존하여 프로그램을 제작해서는 안된다. 정확하고 좋은 스레드 프로그램은 의존하는것이 아니라 실행가능한 스레드의 개수가 프로세수 개수보다 넘지 않도록 제작하는 것이다. 그렇게되면 스레드 스케줄러가 순차적으로 스레드를 실행시켜줄뿐 정책에 신경쓰지않는다. 그렇다면 실행중인 스레드의 개수를 최대한 줄일 수 있는 방법은 무엇일까? 바로 사용하지 않는 스레드는 실행하지 않고 정지하거나 종료해야한다. 그래서 바로 직전에 공부했던 스레드 풀을 사용하여 적절하게 스레드를 관리하면 좋은 프로그램을 만들 수 있다. 그..
Tistory 외부 Editor API Tistory Editor 사용후기
티스토리를 사용하다보니 에디터가 너무 옛날이라 사용하기가 힘들었다. 그래서 찾아보던중 외부 API를 이용하여 개발한 프로그램이 있어서 사용해보았는데 너무 좋았다. 가장 좋았던 이유는 캡처프로그램을 통해 캡처 후 Ctrl + C와 Ctrl + v를 통해 등록이 가능하다. 이 부분이 너무 편하다. 그리고 드래그 앤 드롭으로 사진을 옮겨서 첨부할수 있어서 좋은 것 같다. 다운로드 주소 http://tistory-editor.tistory.com/ 지원 OS 윈도우, mac
규칙 71 - 초기화 지연은 신중하게 하라
Lazy initialization(초기화 지연)은 필드 초기화를 실제로 그 값이 쓰일 때까지 미루는 것이다. 대부분 초기화 지연의 이유는 초기화의 비용이 증가하고 사용빈도가 특별한 경우에 사용하는 필드에 대해서 그렇게 적용한다. 만약 그렇지 않은 경우에도 초기화 지연을 사용하면 어떨까?이럴 경우 클래스를 초기화하고 객체를 생성하는 비용은 줄이지만 필드 사용 비용은 증가시킨다. 그럼 동기화가 필요한 다중 스레드 환경에서는 초기화 지연은 어떻게 구현해야할까? 생각만 해도 어렵다. 몇가지 방법을 살펴보자.우선 초기화 지연을 사용하지 않고 진행하는 일반적인 초기화는 다음과 같다.1234567891011 public class TestClass { // 일반적인 초기화 기법 // 클래스가 처음 로드될 때 바로 ..
규칙 70 - 스레드 안전성에 대해문서로 남겨라.
클래스를 사용할 때 클래스의 객체와 정적 메서드가 병렬적으로 이용되었을 때, 어떠한 부작용이 있을 수 있는지 안전한지에 대한 정보가 없으면 추후에 큰 문제를 야기할 수있다. JavaDoc에서 synchronized 키워드를 통해 병렬설 지원 여부를 확인할 수있다고 알고 있으나 실상 그렇지 않다. 왜냐하면 Javadoc이 만드는 문서에는 Javadoc이 들어가지 않는다. 왜냐하면 synchronized 키워드는 메서드의 구현 상세에 해당하는 정보이며, 공개 API의 일부가 아니기 때문이다. 그렇기 때문에 synchronized 키워드를 통해 판단해서는 안되고 병렬적으로 사용해도 되는지의 여부는 문서에 남겨져 있어야 한다. 출처 : 조슈아 블로크, 『 Effective Java 2/E』, 이병준 옮김, 인사..
규칙 69 - wait나 notify 대신 병행성 유틸리티를 이용하라.
멀티 쓰레드 환경에서 wait와 notify를 사용할 경우에 주의가 필요하다. 하지만 그것을 효율적으로 사용하기에는 많은 어려움이 따른다. 그렇기 위해서 wait와 notify를 정확하게 사용하기 위해서는 high-level util(고수준 유틸리티)을 사용해야 한다.이런 고수준 유틸리티들은 Executor, Concurrent Colloection, Synchronizer를 통해 사용할 수 있다.그중 Conncurrent Collenction (병행 컬렉션)에 대해 알아보자. 대부분에 컬렉션 Map, List, Queue등은 병행 컬렉션을 제공한다. 병행성 컬렉션대표적으로 Map에서 제공하는 ConcurrentMap이다. 그중 putIfAbsent(key, value) 메서드가 대표적이다. 이 메서드는..
규칙 68 - 스레드보다는 실행자와 태스크를 이용하라.
여러 쓰레드를 실행해야할 때, 큐에 넣고 작업을 진행하거나 할 수 있으면 더욱 효율적으로 관리 할 수있다. 그래서 자바 1.5부터 자바 플랫폼에는 java.util.concurrent가 추가되었다. 이 패키지에는 Executor Framework가 들어 있는데 이는 인터페이스 기반 task 실행 프레임워크이다. 해당 Executor를 실행하기 위해서는 다음과 같이 입력하면 된다.1234567ExecutorService executor = Executors.newSingleThreadExecutor(); executor. @Override public void run() { System.out.println("test"); }});Colored by Color Scriptercs 그리고 만약 executo..
Mybatis에서 쿼리 작성 시 부등호 사용하면 발생하는 Error 수정
Mybatis에서 사용하는 쿼리중에 와 같은 부등호가 들어가게 되면 에러가 발생한다. [에러내용]"The content of elements must consist of well-formed character data or markup." 이를 해결하기 위해서는 부등호를 사용하는 쿼리는 을 감싸주어야 한다. 12345678910
Spring에서 node_modules 하위 폴더 까지 모두 보이지 않도록 filter 설정하기
npm을 사용하면 다운받은 모듈들이 저장되는 node_modules가 이클립스에 출력되어 에러를 출력할 때가 있다. 이 부분은 커밋을 하거나 할때도 자꾸 보여서 귀찮은데 이를 보이지 않도록 설정하는 방법을 알아보자. 우선 STS에서 해당 프로젝트의 우측클릭을 하여 propertes에 접속한다.그 후 Edit Filter 를 눌러서 규칙을 등록해야 한다. 규칙은 Filter Type은 Exclude all 을 선택하고, 모든 하위의 폴더들까지 적용되도록 설정하고Filter Details에 node_modules를 입력해준다. 이렇게 설정을 진행하고 나면 이클립스 프로젝트 트리에서 node_modules가 사라진것을 확인할 수 있다.
판교 치킨 회식 치킨마루 후기
회사에서 퇴근전에 운동하고 친구가 치킨을 먹자고 하여 판교에 새로 생긴 치킨집 치킨마루에 갔다. 가격도 저렴했다 싸게는 후라이드나 양념을 12000에서 13000원에 먹을 수 있다. 거기에 현미 튀김으로 변경하면 약간 매콤하게 먹을 수 있다. 양념과 치즈토핑으로 섞어서 먹을 수도있다. 치즈볼은 20개에 오천원정도 하는데 나름맛있다. 회식이나 동료들과 간단하게 판교에서 치맥먹기에 나쁘지 않은것같다.