자바에서 사용하는 XML Parser 종류 패키지 특징 JAXP jaxax.xml.parsers SAX와 DOM에서 사용하는 SAXParserFactory와 DocumentBuilderFactory를 제공. 이 파서들은 XML-DEV그룹과 W3C에서 정의.. SAX org.xml.sax 순차적으로 처리하는 이벤트 기반의 모델. 메모리 부담이 DOM에 비해 적음. 하지만 수정, 삭제가 어려움. DOM org.w3c.dom 모든 DOM을 읽어서 Tree를 만든 후 처리. 메모리 부담이 크지만 추가, 수정, 삭제가 쉬움. XSLT javax.xml.transform 들어온 데이터를 원하는 형태의 화면으로 구성 (XML을 화면에서 보기 쉬운 데이터로 가공) XML Parser에서 문제가 되는 경우 대부분의 WA..
Connection Pool의 사용 보통 데이터베이스를 연결해 값을 받아올 때 가장 오래걸리는 부분은DriverManager.getConnection() 메소드로 Connection 객체를 얻는 부분이다. WAS와 DB는 통신을 해야하기 때문이다.특히 DB서버가 따로 분리되어 있을 때 소요되는 시간은 더욱 증가한다. 이러한 부분에서 DB서버와 연결하는 대기시간을 줄이고, 네트워크의 부담을줄이기 위해 Connection Pool을 사용해야한다. 요즘 프레임워크에는 보통 Connection Pool이 구비되어 있다. PreparedStatement의 사용 Statement는 PreparedStatement를 사용하는 것이 좋다.일반 Statement를 사용하면 쿼리문장분석, 컴파일, 실행의 단계를 매번 거치..
컨트롤러에서 연산을 한 다음 뷰에 넘겨줄 때 사용하는 방법 중 하나가문자열(View Name)을 리턴하는 방법이 있다. @RequestMapping("/controller/{id}")public String test(@PathVariable int id){return "redirect:/controller/"+id;} 이렇게 하면 스프링은 요청(request)이 올 때마다 문자열에 해당하는 뷰 객체를 새로 찾게된다.하지만 요청이 올 때마다 새로이 View 객체를 찾기보다는 한번 찾아본 View 객체를 캐싱해두면훨씬 빠르게 View 객체를 찾을 수 있다.ViewResolver 중 InternalResourceViewResolver 클래스엔 이런 캐싱기능이 내장되어 있다. @RequestMapping("/c..
보통 개발할 때 로그를 찍기위해 System.out.println() 메소드를 자주 사용한다.하지만 이 메소드는 커널 CPU를 많이 점유하기 때문에 성능이 매우 떨어진다. 파일이나 콘솔에 로그를 찍을 경우에는 완전히 출력되거나 저장될 때까지어플리케이션이 대기시간이 발생한다. 그리고 System 로그는 보통 개발 때에만 사용하기 때문에 운영중인 코드에System.out.println 메소드를 방치하면 요청이 발생할 때마다쓸데없는 리소스를 잡아먹게 된다. 운영중인 시스템엔 이 메소드를 모두 없애는게 성능향상에 아주 큰 도움이 된다.
IO에서 발생하는 시간은 CPU의 대기시간에 속하기 때문에 성능에 가장 큰 영향을 끼친다. IO를 효율적으로 사용하기 위해서는 1. 버퍼를 잘 사용하자BufferedReader 등 버퍼를 사용하는 클래스들도 있다.잘 보고 사용하자 2. 요청이 발생할 때마다 파일을 읽어선 안됀다.모든 요청이 올 때마다 파일을 읽도록 한다면 엄청난 IO가 발생할 것이고 이는 성능의 저하를 야기한다.또한 병목현상이 발생할 확률도 높다.보통 DB의 쿼리나 여러 설정들을 파일에 저장하고 사용하는 경우가 많은데이 경우 이 파일들을 미리 읽어놓고 사용하는 것이 좋으며, 수정될 때마다 어플리케이션을 재시작하는 것이 번거롭다면, 별도의 스레드를 생성하여 5~10분 주기로 수정여부를 확인해주는 것도 좋다. 예를 들어보자면 mybatis ..
static을 잘 사용하면 성능을 향상시킬 수 있지만, 잘못 사용하면 더 느려지거나, 오류가 생기고, 최악의 경우엔 JVM이 죽어버릴 수 있다. static은 여러 JVM에서는 다른 주소나 값을 참조하지만, 같은 JVM이나 WAS에서는 같은 주소를 참조하고, GC의 대상이 되질 않기 때문에 잘못 사용하면 성능을 하락시킬 수 있다. 특히 웹에서는 하나의 static 변수에 여러 스레드가 접근할 수 있으므로 주의해야한다. Static을 잘 사용하기 위해서는 1. 자주 사용하고 절대 변하지 않는 변수는 final static으로 선언한다. 특히 자주 사용하는 쿼리들이나 간단한 목록조회 쿼리도 final static으로 선언하면 GC대상에 포함되지 않기 때문에 성능에 좋다. 즉 템플릿 성격의 객체를 static..
Switch-Case 문 Switch-Case문은 작은 숫자부터 큰 숫자 순서대로 비교하는 것이 제일 빠르다. 조건문 조건문자체는 속도에 미치는 영향이 미미하다. 가독성에 더 신경쓰자. do-while문 public void test(List list){ int i=0; do{ if(list.get(i) == 10) break; }while(true); } 만약 list의 0번째가 10이라면 정상적인 동작을 하겠지만, 아닐 경우 무한루프를 돌며 CPU의 코어 한개를 잡아먹으므로 프로그램을 재시작해야할 수 있다. 조심하자 List를 대상으로 반복 for(int i=0; i
- Total
- Today
- Yesterday
- rambda
- json
- 퍼포먼스
- 자바 성능
- Docker
- 메모리
- RAMDA
- 컴퓨터 시간
- 클로저
- 날짜
- 자바
- javascript
- react
- gitlab
- Jackson
- Java8
- 프로세서
- Clojure
- 리액트
- Swift 2.0
- 알람
- Java
- Stream
- 람다
- 자료구조
- 코어
- opensource
- 시간
- 성능개선
- 성능
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |