[Info]Tags categorized posts and contents patterns..

[AJAX] Ajax Code E xamples.. [Book] About the book.. [CSS] CSS Code E xamples.. [DB] Sql Code E xamples.. [DEV] All development stor...

레이블이 Sun Microsystems인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Sun Microsystems인 게시물을 표시합니다. 모든 게시물 표시

2016년 3월 17일 목요일

[Tool]Eclipse Helios와 JDK 6u21를 사용할 때 OutOfMemory 오류가 발생하는 문제..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

지난 6월 23일에 발표된 Eclipse 3.6 Helios를 슬슬 사용해 보려고 새로운 마음으로 JDK도 JDK 6 Update 21을 다운받아서 설치하고 기존에 사용하던 프로젝트를 저장소에서 Checkout받자 프로젝트를 생성하던 도중 이클립스가 죽어버리는 현상이 발생했습니다. (Subclipse, m2eclipse 사용중)

기존에도 종종 이클립스는 메모리오류가 발생하였기 때문에 아무생각없이 eclipse.ini파일을 수정하여 주었지만 좀처럼 해결되지 않고 계속 프로젝트를 받아오다가 번번히 죽어버렸습니다. 로그파일을 확인하니(.log파일은 workplace안에 .metadata폴더 안에 있습니다.) 아래와 같은 오류가 발생하였습니다.

java.lang.OutOfMemoryError: PermGen space
[해당 오류는 나도 많이 보던 것들인데 난 지금 환경으로 따지면, 보통 서버 로그에서 많이 봤다.. 이클립스는 단순히 소스 관리와 개발을 조금 편하게 하기 위한 툴 정도로만 사용하기 때문에 서버 연동하고는 거리가 멀다..]

기존의 eclipse.ini파일의 수정으로는 도저히 해결이 되지 않아서 Helios가 안정적이지 않은 것으로 막연히 생각하고 있었는데 트위터를 통해서 해당 문제에 대한 해결책을 얻을 수 있었습니다.

이 문제는 JDK 6u21에서 발생하는 문제인데 6u21에서 vendor명이 기존의 Sun에서 Oracle로 변경이 되었습니다. Eclipse 런처가 JVM의 벤더를 읽어서 Sun JVM일 경우에는 추가적으로 이클립스의 동작을 위해 필요한 XX:MaxPermSize 설정을 추가하는데 6u21에서는 Sun이 아닌 Oracle로 변경이 되어 이 설정이 먹히지 않는 것입니다. 이 내용은 이클립스의 버그로 등록은 되었지만 9월에 예정된 Helios SR1에서 수정될 예정은 없어보인다고 합니다.

이클립스의 폴더안에 있는 eclipse.ini파일을 열어서 아래의 부분을 삭제합니다.

--launcher.XXMaxPermSize
256m

그 다음에 -Xmx설정뒤에 -XX:MaxPermSize=512m 를 추가하면 위의 OutOfMemoryError를 피할 수 있습니다.

아래 내용은 참고용으로 올리는 저의 eclipse.ini파일입니다.

C-like


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
-startup
plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.0.v20100503
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
128M
-showsplash
org.eclipse.platform
-vm
C:\Program Files\Java\jdk1.6.0_21\bin\
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m
-XX:MaxPermSize=256m

이 문제는 Windows플랫폼에서만 발생한다고 합니다.

추가로 봄싹의 김성호님이 공유해 주신 이클립스 위키에 위 문제의 해결법에 대해서 잘 나와있습니다.

  1. 6u20으로 다운그래이드
  2. eclipse.ini에  -XX:MaxPermSize=256m 추가
  3. 수정된된 이클립스용 dll을 다운받아 사용
이렇게 3가지 방법숭 하나를 사용하라고 권하고 있습니다.

2016년 2월 22일 월요일

[EP]SUN Tech Days 2008 Seoul 2일차 후기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

썬테크데이 2008 2일차이다. 이렇게 세미나때문에 회사출근을 안한 적은 처음이라 왠지 어색했다. 서류 결재 다 받고 온 것이기는 한데 왠지 연락올 것 같은 불안감. ㅋ 썬테크데이는 회사에서 공식적인 휴가라고 이벤트 1등은 말이 크게 공감이 갔다. 쉬니까(?) 좀 편하긴 하네....  썬의 큰 행사답게 사람들은 엄청 많았다. 큰 행사치고는 제법 깔끔하게 진행하기는 했지만 특정 트랙으로 사람들이 몰려서 어떤 트랙쪽은 자리가 텅텅비고 어떤 트랙은 너무 사람많아서 들어가기도 힘들정도이고 외부에서도 볼수 있게 TV랑 스피커를 배치한 건 좋았지만 동시통역기는 전파가 약해서 제대로 들리지 못했던 점은 아쉽다. 특히 점심때 잘 줄서서 먹었는데 너무 많다보니 줄이 미친듯이 길게 서고 관리안되서 이리보냈다 저리보냈다 하고 정상적으로 먹고 왔더니만 이미 세션은 시작되어 있고 그런건 많이 아쉬웠다.

사용자 삽입 이미지


REST를 통한 네트워킹 - Michael Li


OpenAPI 때문에 관심은 많지만 아직 경험해보지는 못했던 REST... REST는 유니크한 URI를 이용하고 CRUD기능을 모두 제공하고 있는제 제한적으로 보이기는 하지만 실제로 생각해 보면 이 이상의 기능을 그리 필요하지 않다.

REST의 5가지 조건
  1. 모든 것은 ID를 가지고 있다.
    아이디는 POJO를 사용하고 @Path어노테이션을 준다.(리소스에 아이디를 줄 수 있다.)
  2. 모든 것은 Link 되어 있다.
    메서드의 이름은 중요하지 않고 어노테이션이 중요하다.
  3. 표준적인 방법으로 접근한다.( Get(Select), Put(Update), Post(Insert), Delete)
    @produceMine을 이용하고 XML, JSON을 만든다.
    @consumeMine은 Put, Post를 받기 위해 사용한다.
  4. Multiple Representation
  5. Stateless Communication : state는 클라이언트에 따르기 때문에 서버는 Request만 받고 state가 없다.

서버측 장점
기존 웹인프라와 잘 맞는다. (CS간의 커플링이 줄어든다. 세션이 서버에 없어서 서버부담이 적다.)
서버세션이라는 것 자체가 없어서 failover가 쉽다.(별다른 셋팅없이 다른 서버로 넘기면 된다.)

클라이언트측 장점
캐쉬나 북마킹이 가능하다.
테스트가 쉽다.
모든 언어가 가능하다.
Data-Format이 다양하다.

REST는 아키텍쳐 스타일이다.


Simplicifying Persistence using JAP - Sridhar Reddy

원래는 AMD의 세션이었는데 세션이 취소되고 퍼시스턴트자바에 대한 세션으로 대체되었다.

EJB 에서는(난 아직 EJB 못해봤지만.. ㅠ..ㅠ) 엔티티빈을 만들때의 여러가지 이슈들이 있었다. 아무리 적게 만들어도 최소한 3개는 만들어야 하고 복잡하고 무겁다. 때문에 어떻게 EJB를 간소화 가능한가를 고민하게 되었고 EJB 3.0에서 간소화 하였다. 그리고 이 세션에서도 어노테이션에 대해서 언급을 했다. (어노테이션에 대해서 좀 공부를 해야겠구만...)


Comet 및 Ajax를 이용한 웹애플리케이션개발 - Michael Li

2일간의 컨퍼런스중에 나한테는 가장 쇼킹했던 세션.... Comet이 먼지도 몰랐지만 웹애플리케이션 개발이라길래 들어갔는데 이거 장난아니다. 웹이라는 거의 방식상 절대 불가능하다고 생각되는 것이 이 기술로 가능하다.

Comet은 기술이름인데 Ajax Push라고도 하고 Reverse Ajax라고도 한다. 개인적으로는 Comet이라는 이름이 잘 맘에 안 와닿아서 Ajax Push라는 이름이 더 맘에 든다. Comet이 뭐의 약자인가 했는데 어디서 유래됐는지는 모르겠지만 달리 유래가 나온 정보는 찾아볼 수가 없었다.

이 Comet이라는 기술은 마치 소켓통신같은걸 가능하게 한다. 일반적인 Ajax로는 서버로부터 무언가를 받으려면 반드시 요청을 날려주어야 한다. 그래서 수시로 업데이트가 되어야 하는 사이트(채팅등등)은 셋타임아웃으로 일정 기간 간격으로 요청을 계속 날려주는 것이 보통이다. 싸이월드 같은거 봐라 로긴하고 계속 보고 있으면 몇분마다 한번씩 요청해서 페이지가 갱신이 된다. 이게 당연한거고 이렇게 밖에 할 수 없었다. 하지만 Comet은 다르다. Comet 은 서버가 클라이언트에게 이벤트가 발생할 때마다 데이터를 보내고 클라이언트는 데이터가 돌아오면 처리하면 된다. 클라이언트가 데이터가 바뀌었는지 일일이 요청할 필요가 없어서 서버의 부하가 줄어들고 Latency나 트래픽도 줄어든다.

Ajax Push는 2가지가 있는데 Long Poll과 Streaming이다. Long Poll은 클라이언트가 Request를 보내면 서버가 응답해야 할 내용이 없으면 Request를 가지고 있다가 이벤트가 발생하면  Response를 보내고 클라이언트는 Response를 받고 다시 Request를 보낸다. Streaming방식은 Request를 서버가 받으면 그 Request를 이용해서 Event가 발생할 때마다 계속 Response를 보낸다.

이런 Ajax Push방식과 비교해서 기존의 Ajax방식은 Ajax Poll이라고 표현했다. Ajax Poll은 특성상 데이터가 없는 것과 서버와의 통신이 느린 것을 구별해 낼수가 없는데 Ajax Push는 이런 점을 해결 할 수가 있다.

물론 Ajax에도 문제가 있는데 특성상 Connection이 항상 열려 있는데 이런 쓰레드가 대기상태로 Block 되면 메모리를 잡아먹기 때문에 전통적인 서버기술로는 Commet을 효율적으로 쓰기가 쉽지 않다. JVM의 쓰레드 갯수를 늘려야 하기 때문에 서버 확장성에 문제가 있다. 이를 해결하는 방법이 JAVA NIO를 사용하여서 블럭킹이 되지 않게 하고 한 쓰레드가 여러 커넥션을 공유할 수 있도록 하며 여러 커넥션을 열어놓고도 블럭킹이 일어나지 않도록 해야 한다. 이렇게 하면 오직 오픈된 소켓수에만 제약을 받고 메모리 이슈가 없기 때문에 확장성을 가질 수 있다.

이에 필요한 기술로는 비동기 IO(비동기 Read/Write)와 서스펜스가 가능한 리퀘스트/레스폰스, 그리고 유요한 데이터 딜리버리를 보장하는 기술이다.

서버쪽 기술이 필요하긴 하지만 이거 완젼 흥미로와.. 이런게 되다니.. ㅠ..ㅠ


OpenSSO 및 OpenID를 비롯한 웹보안 강화방안 - Sang Shin

오픈아이디에 관심도 많고 아이덴티티 2.0에서 관심이 집중되고 있는 기술인데 크게 얻을만한 건 많이 없었다.

SSO의 이슈는 조직내에서의 SSO와 조직외에서의 SSO라고 할 수 있는데 OpenSSO가 이에 대한 대안이 될수 있다. 코딩이 필요없고 Aject가 인터셉트를 하고 SAML을 이용해서 권한을 교환한다.

자세한 기술얘기는 많이 논하지 않아서 이렇다하게 정의하기가 쉽지 않네.. ㅎ

[EP]SUN Tech Days 2008 Seoul 1일차 후기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

SUN Tech Days 2008 Seoul 로고
썬마이크로시스템즈에서 지난 10월 15~16일에 Sun Tech Days 2008 컨퍼런스를 서울에서 개최해서 갔다왔다. 이런 유료교육은 회사에서 결재처리하기가 겁나 복잡해서 갈까말까를 엄청 고민했는데 무료쿠폰이 썬에서 날라와서 냉큼 신청하고 무료로 갔다가 왔다. 발표자료 및 세미나 동영상은 썬테크데이 사이트에서 받을수 있다.

SUN Tech Days 2008 Seoul 1일차

위의 Agenda처럼 트랙별로 계속 진행이 되고 원하는 트랙쪽으로 왔다갔다 하면서 들을수 있다. 내가 관심있는 세션들은 대부분 "자바와 클라우드 컴퓨팅"에 집중되어 있었다.

사용자 삽입 이미지

화려한 모래쇼(?)를 시작으로 기조연설이 시작되었다. 기조연설을 한 소프트웨어부문 수석 부사장 Rich Green은 썬의 정책변화에 대해서 얘기했다. 과거의 썬은 너무 느렸던 것을 인정하고 과거와는 다른 빠른 혁신을 추구하기 시작되었고 시장에서 할 수 있냐보다는 해야되는 것이 요구 되었다. 그래서 오픈소스를 적극적으로 지원하고 RIA기술인 JavaFX를 선보였다. JavaFX는 현재 프리뷰상태이고 12월에 풀버전이 공개되고 이때 J2SE6 Update 10도 같이 공개될 예정이다.

리눅스의 미래 : 오픈솔라리스 - Jim Hughes

이번 컨퍼런스에서 한 트랙을 담당한 것처럼 썬은 오픈솔라리스를 적극적으로 들고 나왔다. 썬의 Unix였던 솔라리스를 아무나 사용할 수 있도록 오픈소스화 해서 오픈솔라리스라는 이름으로 공개했다. 썬측의 말로는 솔라리스와 기능적차이는 거의 없다고 한다. 시연으로 볼 때는 우분투정도의 편의성까지 느껴질 정도로 괜찮아보였다. 몇몇특징을 나열하자면

  • ZFS 파일시스템을 사용함으로써 파일복구가 가능하며 OS롤백 또한 지원한다.
  • 오픈소스로 버츄얼박스도 있다.(이녀석은 원래 있었던 듯...)
  • 6개월마다 공식적인 Update를 할 것이며 지속적인 지원

썬측에서 많은 어플들을 제공하고 있기는 하지만 리눅스가 아닌 유닉스이기 때문에 데스크탑용도로 쓸때는 호환어플에 대해서 고민을 좀 해봐야 할듯 싶다. ㅎ


Zembly와 SocialSite를 이용한 클라우드 컴퓨팅 - Sang Shin

상신님은 영어지만 강좌가 좋다고 해서 몇번 가봤던 Javapassion을 운영하시는 분인데 이번에 썬에서 오픈한 Zembly라는 사이트에 대한 트랙이었다. 이 Zembly라는 사이트의 방식이 상당히 흥미로운 방식인데 Wikipedia가 집단지성을 이용한 백과사전이라면 Zembly는 쉽게말하면 집단지성을 이용한 웹어플리케이션을 만드는 것이다.

가장 로우레벨이라고 할 수 있는 서비스를 만들고 그걸 사용해서 위젯을 만들고 위젯을 모아서 애플리케이션을 만들 수 있는데 이 모든것이 직접 만들수도 있고 다른 사람이 만든걸 불러올 수도 있다. 다른사람이 만든걸 불러오면 코드가 들어오고 그 코드에 더 살을 붙히고 하는 방식이다. 매쉬업과는 또 약간 접근방향이 다르다고 할 수 있는데 발상자체까 꽤나 재미있다. 모든 개발은 Zembly상에서 즉 웹브라우저 위에서 바로 개발을 하고 개발은 자바스크립트로 한다.


Ajax와 프레임워크 - Michael Li

사람들이 너무 많아서 점심먹는데 오래걸려서 약간 늦게 들어갔는데 앞에선 무슨 얘기를 했는지 몰라도 이 세션에서는 주로 jQuery에 대해서 설명을 했다. jQuery가 얼마나 편한지 어떻게 사용하는지 어떤걸 제공하는지 등등...  그리고 jMaki에 대한 약간의 소개... 개인적으로는 자바스크립트 프레임워크를 잘 모르던 사람들을 타게팅인듯 싶다. 개인적으로 많으 프레임워크를 비교해주고 방향이나 머 그런거를 얘기해 주기를 바랬었는데... ㅎ 주로 사용법에 대해서 얘기했는데 차후에는 jQuery도 써보고 싶지만 지금은 prototype.js를 사용하고 있고 메서드 사용법이야 그렇게 서서 듣는다고 감을 잡을 것도 아니기 때문에 크게 흥미있게 보지는 않았다.


자바 플랫폼의 신기능 : 강진영

자바가 가는 방향에 대해서 알려고 들었는데 내 자바수준은 솔직히 Java2에 거의 머물러 있는 상태이고 5와 6에 대한 특별한 기능을 사용하고 있는 수준이 아니었기 때문에 내가 이해하기에는 좀 어려웠다. 솔직히 난 이게 Java6 Update10을 얘기하는 건지 Java 1.7을 얘기하는 건지도 잘 모르겠다.(어쨌든 JSR 308에 대해서 얘기하는 건 확실한것 같다.) 그냥 내가 들은 수준 정도로만 정리한다.

어쨌든 Annotation에 대해서 상당히 강조했다. 1.5에서 처음 등장한 Annotation은 Class등등에만 제한되어 있었기 때문에 좀더 다양하게 적용할 수 있도록 타입, 제너릭에서 사용할 수 있도록 하고 타입오류도 미리 체크할 수 있단다. 기존의 Jar Hell이라고도 부르면 JSR 277에서 Jar의 문제점을 해결하기 위해 자바모듈시스템인 Jam이라는 파일을 Java SE 7에서 새로 도입하고 multi-catch를 지원하며 AWT의 성능을 향상시켜 투명 및 둥근모서리도 지원하도록 한다.

File System API를 강화하여 실제 파일시스템은 아닌 java.io.File의 문제점을 해결하여 더 쉽게 사용할 수 있도록 하고 멀티코어를 지원하여 병렬처리가 가능하게 한다. 그리고 FolkJoin Framework와 divide-and-conquer 얘기가 있었는데 잘 모르겠다. ㅡ..ㅡ


자바 성능 향상 - 전은수

자바 성능향상을 위해서 자바 컴파일러의 Client VM, Server VM모드에 대해서 설명하고 GC의 minor GC, Full GC등에 동작방식과 Jconsole등을 이용해서 다양하게 GC가 돌아가는 방식에 대한 데모와 조심해야 할 점을 얘기했는데 50분이란 짧은 시간때문인지 내가 핵심을 캐취 못한건지는 몰라도 저번에 들은 자바튜닝 세미나보다는 좀 못한 느낌이었다.

(J)Ruby on Rails - Sang Shin

개인적인 루비온레일즈의 관심으로 들어갔는데 시작할 때 말씀하시긴 했지만 세션의 타켓팅이 루비온레일즈를 아예 모르는 사람들을 타겟으로 했기 때문에 아주 기초적인 얘기만 했기 때문에 책으로 예제정도만 만져본 정도로도 큰 흥미를 느낄 수 없을 정도였다. 요즘은 책만 사놓고 루비온레일즈를 만져보지 못하고 있기 때문에 이렇게 한번 정리해서 듣는것도 나쁘진 않았다. 안타깝게도 jRuby에 대한 언급은 전혀 없었다. ㅠ..ㅠ