본문 바로가기

프로그래밍/JAVA

(13)
디자인 패턴 몇가지 정리 디자인 패턴을 쓰는 이유? 여러 프로그래머들의 경험과 지혜가 모여 문제를 해결하는 데 도움이 되도록 발전된 디자인이기 때문. 그리고 어떤 문제에 대해 해결책을 논할 때 디자인 패턴이 간결한 용어모음을 제공한다는 점 때문. 하지만 디자인 패턴을 잘못 쓰면 애플리케이션이 쓸 데 없이 복잡해질 수 있고, 비효율적으로 구현되버려 버그가 생기거나 성능이 나빠질 수도 있다. ———————— 싱글톤 인스턴스가 최대 한개를 넘지 않도록 한다 한번만 생성되었으므로 메모리 방지를 막을 수 있고, 다른 객체들이 자원 공유를 하기 좋다. 캐시, DBCP, 로그 객체 등에서 싱글톤 패턴을 사용한다. 다른 인스턴스들간에 결합도가 높아져 수정이 어렵고 테스트하기 어려워진다. 동기화 주의해야 한다. # 1. public class ..
자바 Thread 순서 보장하기 자바 Thread 순서 보장하기 -> Thread.join() https://defacto-standard.tistory.com/1191 public void main(String[] args) { Thread t1 = new Thread(new CThread(1)); Thread t2 = new Thread(new CThread(2)); Thread t3 = new Thread(new CThread(3)); Thread t4 = new Thread(new CThread(4)); Thread t5 = new Thread(new CThread(5)); t1.start(); t2.start(); t3.start(); t1.join(); t2.join(); t3.join(); t4.start(); t5.sta..
Java trouble shooting scouter를 활용한 시스템 장애 진단 및 해결 노하우 자바 트러블 슈팅 책을 보고 대충 작성함. 장애 case 시스템이 느림 전체 특정 화면 특정 시간대 전체 특정 시간대 특정 화면 특정 화면, 점점 느려짐 특정 사용자 응답 없음 전체 특정 예외 발생 모든 사용자, 특정 기능 특정 사용자, 특정 기능 특정 시간대, 전체 특정 시간대, 특정 기능 시스템 뻗음 병목 지점들 웹 서버 WAS 각종 API 서버들 DB Daemon Legacy system Etc Thread 진단 Thread에서 발생하는 대표적인 문제점은? Dead Lock 데이터를 안전하게 처리하기 위한 Lock 서로 풀리기만을 기다리는 상황 … Lock 경합을 피하자 코드가 아닌 데이터를 보호할 것(synchronized) Atomic 작..
Thread Dump & Heap Dump 참고: https://brunch.co.kr/@springboot/126https://brunch.co.kr/@springboot/98https://imasoftwareengineer.tistory.com/4 jstack을 사용해서 Thread Dump를 뜰 수 있다. $ ps -ef | grep java$ jstack pid > output.txt Thread의 Life cycle은 아래와 같다. NEW: Thread가 막 생성됨. start는 아직 안됨.RUNNABLE: start된 상태. run호출하면 RUNNING 된다.WAITING: 다른 Thread의 통지를 기다는 일시정지 상태.TIMED_WAITING: 주어진 시간동안 기다리는 상태.BLOCKED: 사용하려는 자원에 대해 락이 풀리길 기다림..
자바8 Optional 출처: http://www.daleseo.com/java8-optional-before/http://www.daleseo.com/java8-optional-after/http://www.daleseo.com/java8-optional-effective/ Java8이 나오기 이 전에는 얼마나 힘들게 null 처리를 했었나.. 아래 클래스를 살펴보자.Order 클래스는 Member 타입의 필드를 가지고,Member 클래스는 Address 타입의 필드를 가진다.class Order { private Long id; private Date date; private Member member; } class Member { private Long id; private String name; private Addre..
WebFlux & Non-blocking 출처:https://tech.peoplefund.co.kr/2017/08/02/non-blocking-asynchronous-concurrency.html // 개념정리https://tv.kakao.com/channel/3150758/cliplink/391418995 // 토비 강연 영상https://ztkmkoo.github.io/2017/12/13/spring-webflux/ // 공식사이트 번역해줌 토비 강연을 보는데 WebFlux 및 Non-blocking 등이 나온다.Non-blocking이 왜 나오는지 자세히 봐야할 것 같아 정리한다. 출처의 내용이 더욱 상세함. Spring boot 2.0 및 Spring 5가 릴리즈 되었는데 그 특징은 아래의 그림을 참고 하자. 두가지다. Spring We..
Collection remove에 대해 Collection의 element를 remove 할 때, 1. Arrays.asList() 아래와 같이 Arrays.asList() 를 통해 생성한 리스트의 0번째 인덱스를 삭제해보자.List aaList = Arrays.asList("a", "1", "c", "d", "e"); aaList.remove(1); 두둥.... 지원하지 않는 연산이란다. Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.remove(AbstractList.java:161) at JavaExamples01.marathon(JavaExamples01.java:22) at ModernJava.main(ModernJ..
String, StringBuffer, StringBuilder 1.String은 Immutable이다.vsStringBuffer/StringBuilder는 mutable이다. 2.String으로 +연산, concat을 이용하면 새로운 String 객체가 만들어지는 것이다.(JDK 1.5부터 +연산이 내부적으로 StringBuilder에 의해 이뤄지긴 함.)참조되지 않는 String은 GC 대상이 된다.문자열 연산이 많은 경우 오버헤드가 발생할 수 있다. vsStringBuffer와 StringBuilder는 문자열 연산이 자주 있을 때 사용한다. 3.StringBuffer는 멀티 스레드 환경에서 syncronized 키워드가 가능해 동기화가 된다. 즉, thread-safe하다vsStringBuilder는 동기화를 지원하지 않지만 연산이 빠르다. vsString은 ..