하면 된다!!!

Jenkins 포스트 쉘 스크립트 권한 관련 문제

프로그래밍/Java

리눅스 장비에 jenkins 를 설치하고나서 배포를 하다가 포스트 쉘 스크립트를 넣었다가 권한 문제로 에러를 여러차례 겪었는데...


jenkins는 jenkins 유저를 사용하고 있기 때문에 사용하려는 쉘에 접근하기 위해서는 권한이 필요했다.


이를 해결하기 위해서 jenkins 유저에 sudo 권한을 주고 포스트 쉘 쪽에는 sudo /path/to/abcd.sh 이렇게 처리를 해보는 것으로...


우선 sudoers에 유저와 권한을 넣어줘야 한다.


$ vi /etc/sudoers

# User_Alias ADMINS = jsmith, mikem << 요런 라인이 있는데 이 라인 아래에다가...


jenkins ALL=(ALL) NOPASSWD: ALL


이렇게 추가해준다.

NOPASSWD 라고 해주면 sudo 명령을 내리더라도 비번을 별도로 묻지 않게 됩니다.


물론 이렇게 셋팅을 하게 되면 sudo 커맨드를 이용해서 루트 권한으로 모든 커맨드를 실행할 수 있으니 문제가 있을 수 있다.

권한을 축소하려면 특정 경로나 파일을 지정해서 열어주는 것도 방법이다.


맨 뒤에 있는 ALL 을 대신해서 경로나 파일을 지정해주면 된다.


jenkins ALL=(ALL) NOPASSWD: /root/deployshell/


이런 식으로 해두게 되면 /root/deployshell/ 디렉토리 하단에 대한 권한을 지정해줄 수도 있다.


나이먹고 이런 삽질은 참 쉽지 않다. ㅠㅠ 어릴때 공부해뒀어야 하는데... 하는 생각뿐이다.


Jenkins 설치 및 설정

프로그래밍/Java

Jenkins 설치 및 설정 정보들을 모아 놓자.


애플자라님의 블로그를 참조해서 진행했다.


maven-tomcat 플러그인은 사용하지 않았습니다. war 파일을 만든 후에 톰캣 webapps 하단에 카피해 놓도록 설정하고, 톰캣에서 war 파일 자동으로 로딩 되도록 해두었습니다.


설치 환경 : Windows10 + JDK1.8 + Apache-tomcat-8.5 + Apache-maven-3.5.3 + Jenkins-2.121.1


- Apache Maven download : https://maven.apache.org/download.cgi
- Jenkins download : https://jenkins.io/download/

젠킨스 설정은 애플자라님의 블로그를 참고해서 설치하면 끝이고...

특별한 부분은
Post Step에다가 아래의 내용을 각 시스템에 맞춰서 넣는다.
Copy 결과물.war 톰캣webapps

Path 지정할때 중간에 스페이스가 있는 경우에는 " "로 패쓰 전체를 넣어줘야 에러가 나지 않는다.

project 의 pom.xml 파일 설정중... 

1. 한글 깨짐 관련, 플러그인 지정

<properties>

<java-version>1.8</java-version>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

</properties>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.7.0</version>

<configuration>

<source>1.8</source>

<target>1.8</target>

<encoding>UTF-8</encoding>

<compilerArgument>-Xlint:all</compilerArgument>

<showWarnings>true</showWarnings>

<showDeprecation>true</showDeprecation>

</configuration>

</plugin>

<plugin>

<groupId>org.codehaus.mojo</groupId>

<artifactId>exec-maven-plugin</artifactId>

<version>1.2.1</version>

<configuration>

<mainClass>org.test.int1.Main</mainClass>

</configuration>

</plugin>


<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-war-plugin</artifactId>

<version>3.2.2</version>

<configuration>

<warSourceDirectory>src/main/webapp</warSourceDirectory>

<webXml>src/main/webapp/WEB-INF/web.xml</webXml>

</configuration>

</plugin>

</plugins>


참고로 Maven 플러그인을 알아 볼 수 있는 페이지 링크 하나

https://maven.apache.org/plugins/index.html




Eclipse 대소문자 변환키

프로그래밍/Java

아 맨날 까먹어~~~


이클립스에서 대소문자를 변경할때 다음과 같이 사용하시면 됩니다.

블럭을 설정하시고 아래의 키를 누르시면 됩니다.


Lower case: CTRL+SHIFT+Y (CMD+SHIFT+Y on Mac OS X)
Upper case: CTRL+SHIFT+X (CMD+SHIFT+X on Mac OS X)


어때유~ 간단하쥬~

이클립스 블럭 모드

프로그래밍/Java

오랜만에 코딩하려니 예전에 울트라 에디트(UltraEdit) 시절에 많이 사용하던 블록 모드 (Block Selection Mode)가 필요하더군요.

이클립스 (Eclipse) 를 주로 쓰게 되어서... 모드가 있나 찾아보니 있있군요.


Shift + Alt + A


http://java.dzone.com/articles/eclipses-awesome-block


그냥 메모 삼아 남겨둡니다.

URL 짧게 만들어주는 자바프로그램 만들기~

프로그래밍/Java

URL 짧게 만들어주는 자바프로그램 만들기~


URL Shortener

원본 소스 보기 : http://java.dzone.com/articles/url-shortener-service-42-lines


More


참고하세요~


JSTL 정리 잘 해둔 블로그

프로그래밍/Java

JSTL 관련 정리가 일목요연하게 잘 되어있네요.


http://tazz009.tistory.com/484


설정

web.xml

 

<taglib>
    <taglib-uri>jstl-c</taglib-uri>
    <taglib-location>/WEB-INF/tlds/jstl/c.tld</taglib-location>
</taglib>
<taglib>
    <taglib-uri>jstl-fmt</taglib-uri>
    <taglib-location>/WEB-INF/tlds/jstl/fmt.tld</taglib-location>
</taglib>
<taglib>
    <taglib-uri>jstl-fn</taglib-uri>
    <taglib-location>/WEB-INF/tlds/jstl/fn.tld</taglib-location>
</taglib>


 

jsp 에서

 

<%@ taglib uri="jstl-c" prefix="c" %>

<%@ taglib uri="jstl-fmt" prefix="fmt" %>

<%@ taglib uri="jstl-fn" prefix="fn" %>


EL#

  1. 생존범위 속성 맵

    1. pageScope
    2. requestScope
    3. sessionScope
    4. applicationScope
  2. 요청 파라미터 맵

    1. param
    2. paramValues
  3. 요청 헤더 맵

    1. header
    2. headerValues
  4. 쿠키 맵

    1. cookie
  5. 컨텍스트 초기화 파라미터 맵(서블릿 초기화 파라미터 아님)

    1. initParam
  6. 실제 pageContext 객체에 대한 참조. 이것은 빈임

    1. pageContext

      1. pageContext 접근자

        1. getErrorData()
        2. getPage()
        3. getRequest()
        4. getResponse()
        5. getServletConfig)()
        6. getServletContext()
        7. getSession()
      2. JspContext로 부터 상속받은 접근자

        1. getAttribute()
        2. getAttributeNamesInScope()
        3. getAttributesScope()
        4. getExpression!Eval!uator()
        5. getOut()
        6. getVariableResolver()



스크립팅

  1. <$= request.getHeader("host") %>

EL 내장 객체

  1. ${header["host"]}
  2. ${header.host}
  3. ${headerValues.host[]}


스크립팅

  1. <%= request.getMethod() %>

EL 내장 객체

  1.  ${pageContext.request.method}

 

core

 

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

  • 일반적인 것

    • <c:out>
    • <c:set>
    • <c:remove>
    • <c:catch>
  • 조건

    • <c:if>
    • <c:choose>
    • <c:when>
    • <c:otherwise>
  • URL 관련

    • <c:import!>
    • <c:url>
    • <c:redirect>
    • <c:param>
  • 반복

    • <c:forEach>
    • <c:forEachToken>


① set


     - JSP의 setAttribute()와 같은 역활
     - 기본형
       <c:set   var="변수명"
                    value="변수명에 할당된 값"
                    target="자바빈 객체명이나 Map 객체명"
                    property="자바빈 객체나 Map 객체의 값을 설정할 프로퍼티 명"
                    scope="변수의 공유 범위(유효기간)으로 page|request|session|application" />
     - 예제
          <c:set var="country" value="${'Korea'}" />
          <c:set var="intArray" value="<%=new int[] {1,2,3,4,5}%>" />
          <c:set var="sum" value="${sum+i}" />
 
② out


     - JSP의 표현식을 대체하는 것으로 많이 사용됨
     - 기본형
          <c:out var="변수명"
                    default="기본값"
                    escapeXML="true|false" />
 
     * escapeXML
     > 생략시 기본값은 true
     > true일 경우 값 중에 포함된 <>&'" 문자들을 각각 <, >, &, ', "로 출력

     - 예제
          <c:out value="${sum}" />
          <c:out value="${val}" />
 
③ remove


     - JSP의 removeAttribute()와 같은 역활
     - 기본형
          <c:remove var="변수명"
                              scope="변수의 공유 범위로 page(생략 시 기본)|request|session|application" />
     - 예제
          <c:remove var="browser" />
 
④ catch


     - body 위치에서 실행되는 코드의 예외를 잡아내는 역할
     - 기본형
          <c:catch var="에러가 발생할 때 에러 메세지가 포함될 변수명" />
     - 예제
          <c:catch var="errmsg">
               line 1~
               <%=1/0%>
               line 2~
          </c:catch>
          <c:out value="${errmsg}" />
 
⑤ if


     - 조건문에 사용
     - 기본형
          <c:if   test="조건 판별식"
                    var="변수명"
                    scope="변수의 공유범위 page|request|session|application"
     - 예제
          <c:if test="${country != null}">
               국가명 : <c:out value="${country}" />
          </c:if>
 
⑥ choose


     - 자바의 switch문과 동일
     - 조건에서 문자열 비교가 가능
     - 하나 이상의 <when>과 하나의 <otherwise> 서브 태그를 가짐
 
⑦ when


     - choose 태그의 서브태그
     - choose 태그내에서 여러번 사용될 수 있다.
     - 기본형
          <c:when test="조건 판별식" />
 
⑧ otherwise


     - choose 태그의 서브태그
     - choose 태그내에서 한번만 사용될 수 있다.
     - 예제 :
          <c:choose>
               <c:when test="${country == 'Korea'}">
               나라 : <c:out value="${country}" />
          </c:when>
 
          <c:when test="${country == 'Canada'}">
               나라 : <c:out value="${country}" />
          </c:when>
   
          <c:otherwise>
               선택된 나라가 없습니다.
          </c:otherwise>
     </c:choose>
 
⑨ forEach


     - 객체 전체에 걸쳐 반복 실행할 때 사용
     - 기본형
          <c:forEach   items="반복할 객체명"
                              begin="시작값"
                              end="종료값"
                              step="증가값"
                              var="변수명"
                              varStatus="별도의 변수" />

⑩ forTokens


     - 문자열을 주어진 구분자(delimiter)로 분할
     - 기본형
          <c:forTokens items="반복할 객체명"
                              delims="구분자"
                              begin="반복할 시작값"
                              end="반목 마지막값"
                              step="증가값"
                              var="변수명"
                              varStatus="별도의 변수"
     - 예제
          <c:forTokens var="color" items="빨강색,주황색.노란색.초록색,파랑색,남색.보라색" delims=",.">
               color : <c:out value="${color}" /><br>
          </c:forTokens>
 
⑪ import!


 - 웹 어플리케이션 내부의 자원 및 http, ftp와 같은 외부에 있는 자원에 대해 접근
 - 기본형
  <c:import! url="읽어올 URL"
     var="읽어올 데이터를 저장할 변수명"
     scope="변수의 공유 범위"
     varReader="리소스의 내용을 Reader 객체로 읽어올 때 사용"
     charEncoding="읽어온 데이터의 캐릭터셋 지정" />
 
⑫ redirect


     - response.sendRedirect()를 대체하는 태그로 지정한 다른 페이지로 이동
     - 기본형
          <c:redirect url="이동할 URL" />
 
⑬ url


     - 쿼리 파라미터로 부터 URL 생성
     - 기본형
          <c:url var="생성한 URL이 저장될 변수명"
                    value="생성할 URL"
                    scope="변수의 공유 범위" />
 
⑭ param


     - 기본형
          <c:param name="파라미터 명"
                         value="파라미터 값" />
               <c:url var="registrationURL" value="/customers/register">
               <c:param name="name" value="${param.name}" />
               <c:param name="country" value="${param.country}" />
          </c:url>


<c:set var="temp" value="Hello! World" />
<c:out value="${ temp }" default="value is null"/><br>
<c:out value="${ temp }" default="value is null" escapeXml="false" /><br>
<c:out value="${ temp2 }" default="value is null" /><br>

<c:remove var="timezone" scope="session"/>
<c:set var="timezone" scope="session">CST</c:set>

<c:out value="${cookie['tzPref'].value}" default=="CST"/>

 

function
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

${fn:substring(name, 1, 10)}


fn:contains(string, substring)  
string이 substring을 포함하면 true 리턴. 

fn:containsIgnoreCase(string,substring)
대소문자에 관계없이, string이 substring을 포함하면 true 리턴. 

fn:endsWith(string, suffix)   
string이 suffix로 끝나면 true 리턴. 

fn:escapeXml(string)    
string에 XML과 HTML에서 특별한 의미를 가진 문자들이 있으면, XML 엔티티 코드로 바꿔준 뒤 문자열 리턴. 

fn:indexOf(string,substring)  
string에서 substring이 처음으로 나타나는 인덱스 리턴. 

fn:join(array, separator)
  
array(배열) 요소들을 separator를 구분자로 하여 연결해서 리턴 

fn:length(item)
      
item 이 배열이나 컬렉션이면 요소의 갯수를, 문자열이면 문자의 갯수를 리턴. 

fn:replace(string, before, after)
 
string 내에 있는 before 문자열을 after 문자열로 모두 바꿔서 리턴. 

fn:split(string, separator)
   
string 내의 문자열을 separator에 따라 나누어서 배열로 구성해 리턴. 

fn:startsWith(string, prefix)
  
string이 prefix로 시작하면 true 리턴. 

fn:substring(string, begin, end)
 
tring에서 begin 인덱스에서 시작해서 end 인덱스에 끝나는 부분
(end 인덱스에 있는문자 포함)의 문자열을 리턴.

fn:substringAfter(string, substring)

string에서 substring이 나타나는 이후의 부분에 있는 문자열을 리턴. 

fn:substringBefore(string, substring)

string에서 substring이 나타나기 이전의 부분에 있는 문자열을 리턴. 

fn:toLowerCase(string)
    
string을 모두 소문자로 바꿔 리턴. 

fn:toUpperCase(string)
    
string을 모두 대문자로 바꿔 리턴. 

fn:trim(string)
      
string 앞뒤의 공백(whitespace)을 모두 제거하여 리턴.


fmt

 

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

  • 국제화

    • <fmt:message>
    • <fmt:setLocale>
    • <fmt:setTimeZone>
    • <fmt:bundle>
    • <fmt:setBundle>
    • <fmt:param>
    • <fmt:requestEncoding>
  • 포맷팅

    • <fmt:timeZone>
    • <fmt:setTimeZone>
    • <fmt:formatNumber>
    • <fmt:formatDate>
    • <fmt:parseNumber>
    • <fmt:parseData>
    • <fmt:parseNumber>



jstl fmt로 날짜보여줄때, pattern attribute에 의한 날짜 표현 방식들

pattern="yyyy-MM-dd aa h:mm:ss"    
2007-12-13 오전 9:36:48

pattern="yyyy-MM-dd aa hh:mm:ss"  
2007-12-13 오전 09:36:48

pattern="yyyy-MM-dd H:mm:ss"      
2007-12-13 9:36:48

pattern="yyyy-MM-dd HH:mm:ss"    
2007-12-13 09:36:48


<fmt:setLocale value="fr_CA" scope="session"/>
<fmt:setTimeZone value="Australia/Brisbane" scope="session"/>

<fmt:formatDate value="${blogEntry.created}" dateStyle="full"/>
<c:out value="${blogEntry.title}" escapeXml="false"/>
<fmt:formatDate value="${blogEntry.created}" pattern="h:mm a zz"/>
<fmt:formatNumber value="0.02" type="currency" currencySymbol="원"/>

<fmt:formatNumber value="9876543.61" type="number"/>

[type="{number|currency|percent}"]


<fmt:parseDate value="${usDateString}" parseLocale="en_US" type="both" dateStyle="short" timeStyle="short" var="usDate"/>

 

sql
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
  • 데이터베이스 접근

    • <sql:query>
    • <sql:update>
    • <sql:setDataSource>
    • <sql:param>
    • <sql:dataParam>



xml

<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>

  • 코어 xml 액션

    • <x:parse>
    • <x:out>
    • <x:set>
  • xml 흐름 제어

    • <x:if>
    • <x:choose>
    • <x:when>
    • <x:otherwise>
    • <x:forEach>
  • 변환 액션

    • <x:transform>
    • <x:param>


Nexus 4에서 안드로이드 개발자 옵션 켜기

프로그래밍/Java

넥서스 4를 사용해서 안드로이드 개발을 해보신 분들은 첨에 개발자 옵션이 없어서 당황하게 됩니다. 저만 그런가요 ㅠㅠ

어쨋든 그런 상태에서 검색을 해보니...


http://dottech.org/87439/how-to-unlock-usb-debugging-mode-on-android-4-2-jelly-bean-and-higher-guide/


환경설정 >> 휴대전화 정보 메뉴에 들어갑니다.

맨 아래에 빌드번호를 7번 탭을 하면 개발자 옵션이 켜지게 됩니다. (깜찍하죠 ㅠㅠ)


이 상태가 되면 설정 메뉴에 개발자 옵션이라는 메뉴가 떡하니 나타나 있답니다.


참... 귀엽네요 ㅠㅠ


※ 추가 정보

이클립스에서 디바이스로 어플 바로 실행하기

http://sodamix.tistory.com/13

Spring Framework 관련 강좌 또는 정보 사이트

프로그래밍/Java

Spring Framework 관련 강좌 또는 정보 사이트


1. http://e-university.wisdomjobs.com/java-spring/chapter-287/java-spring-tutorial.html


2. http://www.mkyong.com/tutorials/spring-tutorials/


3. http://toby.epril.com/?cat=35



좋은 사이트 찾는데로 업데이트 하겠습니다.

안드로이드 개발 강좌 - Tipssoft

프로그래밍/Java

Tipssoft.com 의 안드로이드 강좌입니다. 알차게 정리되어있네요.


이클립스를 사용하지 않는다는 전제하에 이루어진 강좌들입니다^^
툴에서 제공했기때문에 간과하는 부분들이 있을 수도 있으니 꼼꼼히 살펴보세요~
 
0. 안드로이드 앱 개발 지원툴 사용하기
 
    이 지원툴은 JDK 나 SDK 를 설치하지 않고, 안드로이드용 앱을 개발할 수 있도록 제공하기때문에
    이 지원툴을 사용하시면 아래의 1, 2, 2-1 을 보지 않으셔도 됩니다.
    공부를 목적으로 하거나 단순한 개발 및 테스트를 하실 목적이라면 이 툴을 사용하시기 바랍니다.
 
 
1. 이클립스 없이 안드로이드 개발환경 구축하기1 ( JDK 설치, 안드로이드 SDK 설치, 에뮬레이터 실행 )
 
 
2. 이클립스 없이 안드로이드 개발환경 구축하기2 ( 프로젝트 생성, 컴파일, 실행 )
 
 
2-1 프로젝트 환경 파일 재구성하기 - Update Project
 
 
3. 안드로이드 프로그래밍 시작하기
 
 
4. 버튼 사용하기
 
 
5. 에디트텍스트(EditText) 사용하기
 
 
6. 리스트뷰 사용하기 - 기초편
 
 
7. 리스트뷰 사용하기 - 활용편
 
 
8. 쓰레드(Thread) 의 이해 - 기초편
 
 
9. 스트림(Stream)의 이해 - 바이트 스트림
 
 
10. 소켓(Socket) 통신의 이해 - 클라이언트
 
 
11. 소켓(Socket) 통신의 활용 - MFC 서버와 통신하기
 
 
12. TimerTask 클래스를 사용한 스톱워치
 
 
13. 서버 화면을 캡쳐하여 클라이언트에 전송하기
 
 
14. 액티비티(Activity)의 이해
 
 
15. 액티비티 전환하기 - 명시적 전환
 
 
16. 컨텍스트(Context)
 
 
17. 사진 촬영 후 이미지뷰에 출력하기
 
 
18. TTS ( TextToSpeech )
 
 
19. 사진 촬영 후 서버로 전송하기
 
 
20. 음성 인식(Voice Recognition) 
    http://www.tipssoft.com/bulletin/tb.php/FAQ/961
 
 
21. 음성인식을 이용한 발음 테스트 예제
 
 
22. 그림그리기의 기초와 구조
 
 
23. 사용자정의 뷰 생성 및 배치1
 
 
24. 사용자조작 처리하기 ( TouchEvent Handler )
    http://www.tipssoft.com/bulletin/tb.php/FAQ/973
 
 
25. 뷰의 터치위치 좌표로 출력하는 예제
 
 
26. 터치를 이용한 간단한 게임
 
 
27. 메뉴( Menu ) - 기초
    http://www.tipssoft.com/bulletin/tb.php/FAQ/980
 
 
28. 메뉴( Menu ) - Context Menu
 
 
29. 메뉴( Menu ) - Options Menu
 
 
30. 메뉴( Menu ) - Sub Menu
 
 
31. 탭 레이아웃(Tab Layout) 사용하기 - Intent 방식1
    http://www.tipssoft.com/bulletin/tb.php/FAQ/987
 
 
32. 탭 레이아웃(Tab Layout) 사용하기 - Intent 방식2
 
 
33. 어플리케이션에서 한글 사용하기
 
 
34. 간단한 대화상자( 다이얼로그 ) 사용하기
 
 
35. 대화상자의 이해 1
 
 
36. 대화상자의 이해 2
 
 
37. 대화상자에 리스트, 체크, 라디오 버튼 사용하기
 
 
38. 원형 프로그래스 대화상자
 
 
39. 바(Bar)형 프로그래스 대화상자
    http://www.tipssoft.com/bulletin/tb.php/FAQ/1007
 
 
40. "Back" 키 두번 터치하여 종료하기 
 
 
41. 꺼지지 않는 화면 설정하기
 
 
42. 토스트( Toast ) 사용하기 - 기본
 
 
43. 진동 울리기 ( 지정시간 진동과 패턴 진동)
 
 
44. 회전 방향별로 다른 레이아웃 적용하기
    http://www.tipssoft.com/bulletin/tb.php/FAQ/1031
 
 
45. 어플리케이션 회전 방지하기 (화면 방향 고정하기)
    http://www.tipssoft.com/bulletin/tb.php/FAQ/1032
 
 
46. 센서를 사용하기 위한 공통 루틴
    http://www.tipssoft.com/bulletin/tb.php/FAQ/1033
 
 
47. 센서 - 조도 측정하기
 
 
48. 센서 - 근접센서를 이용하여 거리 측정하기
 
 
49. 센서 - 방향센서 사용하기
 
 
*. 나침반 예제
 
 
50. 센서 - 가속도 센서 사용하기
 
 
51. 정렬에 필요한 Comparator 인터페이스 사용하기
 
 
52. 간단한 녹음 / 재생 기능 사용하기
 
 
*. 사진에서 색상정보 추출하기
 
 
53. 각종 그라데이션 그리기
 
 
*. Color Picker 만들기
 
 
 
 
54. 애니메이션 ( Animation ) - 개요
 
 
55. 애니메이션 - Tween Animation
 
 
56. SQLite 사용하기
 
 
57. TTS 음성 출력의 종료 시점 알기
     
 
58. 리스트뷰 사용하기 - 동적 항목 추가1
 
 
59. 리스트뷰 사용하기 - 동적 항목 추가2
 
 
60. 사용자 정의(Custom) 리스트뷰 사용하기
 
 
*. 리스트뷰에서 여러개의 레이아웃 사용하기 ( 여러개의 XML 리소스를 Inflate 하는 방법 )
    http://www.tipssoft.com/bulletin/tb.php/update/1470
  
 
*. 시간 알리미
 
 
강좌를 진행하는 운영진이 즐거운 마음으로 강좌를 더 많이 만들수 있도록
안드로이드 공부하시는 분들에게 저희 강좌를 소개해주세요~!

Java 관련 좋은 정보들...

프로그래밍/Java

IBM 웹 사이트에 보니... 재밌는 시리즈물이 있네요.


5 things you didn't know about ... 시리즈

아래 URL의 뒷편의 숫자를 바꿔서 넣어보시면 됩니다. (검색하셔도 되구요 ^^)

http://www.ibm.com/developerworks/kr/library/j-5things7.html