[Servlet&JSP] JSP 기본 태그[Servlet&JSP] JSP 기본 태그

Posted at 2020. 7. 27. 07:07 | Posted in JAVA/Servlet & JSP





■ JSP 기본 태그




HTML이나 자바스크립트에 의해 작성된 페이지들은 그 페이지를 사용하는 사용자와 상관없이 항상 동일한 내용만을 제공해주는 정적 페이지이다.


하지만 웹 프로그램들은 사용자에 따라 서로 다른 내용이 제공되어야 하는데 이러한 동적 페이지를 구현하기 위해서는 다음과 같이 JSP 태그를 사용해야 한다.



종류

형식

사용 용도

 스크립트릿( Scriptlet )

 <% %>

 · 자바 코드를 기술함

 선언( Declaration )

 <%! %>

 · 변수와 메소드를 선언함

 표현식( Expression )

 <%= %>

 · 계산식이나 함수 호출한 결과를 문자열 형태로 출력함

 주석( Comment )

 <%-- --%>

 · JSP 페이지에 설명을 넣음

 지시자( Directive )

 <%@ %>

 · JSP 페이지의 속성을 지정함





■ 지시자



JSP 지시자( Directive )는 태그 안에서 @로 시작하며 Page, Include, Taglib 3가지 종류가 있다.


지시자는 클라이언틔 요청에 의해 JSP 페이지가 실행되면서 지시자에 언급된 설정을 JSP 페이지 전체에서 사용가능하도록 한다.



종류

사용 용도

 Page

 · 해당 JSP 페이지 전반적으로 환경을 설정할 내용을 지정한다.

 Include

 · 현재 페이지에 다른 파일의 내용을 삽입할 경우 사용한다.

 Taglib

 · 태그 라이브러리에서 태그를 꺼내와 사용할 수 있는 기능을 제공한다.





Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[Servlet&JSP] Eclipse 설치 및 Tomcat 설정하기[Servlet&JSP] Eclipse 설치 및 Tomcat 설정하기

Posted at 2020. 7. 22. 15:20 | Posted in JAVA/Servlet & JSP






■ Eclipse 설치하기




먼저 https://www.eclipse.org/downloads/ 페이지에 접속하여 이클립스를 다운받는다.






기본적으로 접속한 사용자의 컴퓨터 사양에 맞는 eclipse-inst.exe 파일이 생성되기에

몇차례 다음 > 다음 버튼을 누르닌 식으로 버튼을 누르면 쉽게 다운받을 수 있다.




다운받은 eclipse-inst.exe 파일을 실행하면 어떤 개발 목적을 위한 Eclipse를 찾는지 묻는다.







우리는 JSP, Spring Framework 개발을 준비하기 위한 목적이기에

Eclipse IDE for Enterprise Java Developers를 선택한다.



그럼  Eclipse IDE for Enterprise Java Developers를 설치 하기에 앞서

설치 경로등 몇가지 사항을 지정할 수 있다.








기본적으로 JRE는 사용자 컴퓨터의 기본 세팅되어 있는 환경을 불러올 것이며

Eclipse의 설치경로는 기본 값 C:\User\사용자폴더\eclipse\이클립스버전 과 같이 자동 생성된다.

설치할 곳을 변경하려면 여기서 변경을 해주어야 한다.

설정 확인이 끝나면 INSTALL 버튼을 클릭하여 Eclipse를 이제 설치해 보도록 하자.



설치가 진행되는 와중에 Eclipse의 설정하는 부분에 관해 동의를 구하는 팝업창이 나타나는데.








Accept 버튼을  클릭하여 설정에 동의를 하고 설치를 계속 진행한다.







그렇게 설치가 완료되면 LAUNCH 버튼을 클릭해 주면 Eclipse가 실행되는데.







이때 Eclipse의 Workspace ( 작업경로 )를 물어온다.

C:\사용자폴더\eclipse-workspace로 기본값이 생성되는데

작업경로를 변경하고 싶다면 여기서 작업경로를 변경해 주면된다.


Launch 버튼을 클릭하면 이제 진짜 Eclipse가 실행된다.





■ Apache Tomcat 설치 및 설정




Eclipse의 준비가 끝났다면 이제 Apache Tomcat을 추가하여 서버를 작동시켜 보자.






Eclipse 상단 메뉴중 Window 에서 Preferences 를 선택한다.






환경설정 메뉴가 팝업되면여기서 좌측 카테고리의 Server > Runtime Environments 항목에 들어와서

Addition 버튼을 클릭하여 Tomcat 서버를 구성해 보자.



여기서 Eclipse는 Apache Tomcat v8.0을 사용하겠다.







위와같이 사용할 Apache Tomcat을 선택하고 Next 버튼을 클릭해 주면된다.



그럼 Tomcat Server를 세팅하는 데 앞서 먼저 Tomcat을 다운로드 받아야 하는데.

이클립스 내에서 이를 간단히 해결 할 수 있다.








Download an Install 버튼을 클릭하여 Apache Tomcat을 다운받는다.


다운을 받기위헤서는 아파치의 사용자 계약 조건에 먼정 동의를 해주어야 한다.







동의를 해부고 Finish 버튼을 클릭하면

아파치를 컴퓨터 어디에 설치할지를 지정할 폴더가 생기는데.












기본적으로 아파치 톰캣은 C:\Program File\Apache Software Foundation\사용톰캣버전

으로 지정되는데, 마찬가지로 변경을 원하는 유저는 여기서 변경을 하면 된다.

설치경로 지정까지 다 마무리가 되면 이클립스에서 바로 아파치 톰캣의 설치를 진행하는데





■ Eclipse를 통해 Tomcat에 Web Projcet 추가하기











화면 하단에 퍼센트 바를 통해 얼마나 설치가 진행중인지를 알 수 가있다.

100% 설치가 다 되야 Finish 버튼이 활성화 되는데,

설치가 완료되면 Finish 하여 서버 설치를 마무리 지자.







생성한 프로젝트의 WebContent 디렉토리에서 마우스 우클릭을 하여

메뉴 리스트가 보여지면 New > JSP File 버튼을 클릭하여 첫 *.jsp 파일을 만들어 낼것이다.







New JSP File 차잉 팝업되면

File name에 파일의 이름을 짓고 Finish 버튼까지 눌러주면 이제 JSP 파일의 생성도 마무리 되었다.

생성된 JSP 파일에 아래와 같이 Hello World라는 텍스트를 삽입하고출력해 보자.




 Hello_World.jsp

<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
        <h1>Hello World ~ !!</h1>
</body>
</html>




위 코드를 다 작성했다면 이제 작성한 *.jsp 파일과

그 *.jsp를 담고있는 해당 포로젝트를 아파치 톰캣 서버를 이용해 화면해 출력할 것이다.







다시 이클립스 상단의 Run 버튼을 클릭하고

해당 메뉴에서 Run As > Run on Server 를 통해 새로 생성한 신규 프로젝트를 서버에 등록하도록 한다.







Next 버튼을 클릭하여 서버 설정을 확인해 본다.







Configured 메뉴에 Web Project를 추가하고 Finish 버튼을 클릭해 준다.








그럼 위와같이 이클립스의 내장 브라우저를 통해 우리가 작성한 코드가 출력되는 것을 확인 할 수 있고

그 URI 값을 다른 파이어 폭스, 크롬등의 브라우저에 복사 붙여넣기 하면 실행되는것을 알 수 있다.










우리가 생성한  web-study-01  프로젝트 명에 Hello_World.jsp 파일을 실행한 것을 확인 할 수 있다.









Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[JSP & Servlet] Servlet과 JSP의 기초 개념[JSP & Servlet] Servlet과 JSP의 기초 개념

Posted at 2020. 7. 22. 01:25 | Posted in JAVA/Servlet & JSP
 





■ 서블릿과 JSP의 기초 개념





서블릿은 Server + Applet의 합성어로 서버에서 실행되는 Applet이란 의미로 자바를 이용하여 웹에서 실행되는 프로그램을 작성하는 기술을 말한다.




웹 애플리케이션을 제작하기 위해 제공되는 언어는 이미 언급한 PHP, ASP와 같이 많지만 요즘에 많은 기업에서는 JSP & Servlet을 사용하고 있다.


이는 다른 웹 기술에 비해 빠른 응답을 해 줄 수 있다는 장점이 있기 때문이다.


JSP & Servlet을 PHP 처럼 JSP라 하지 않고 JSP & Servlet이라고 한 이유는 독특한 탄생비화 때문이다.




서블릿은 자바 클래스 형태의 웹 어플리케이션을 말하는데, 브라우저를 통해 자바 클래스가 실행되도록 하기 위해서는


javax.servlet.http 패키지에서 제공하는 HttpServelt 클래스를 상속받아 구현해야 한다.

( HttpServlet 클래스를 상속 받아 만든 서브 클래스를 서블릿 클래스라고 한다. )




서블릿 또한 자바 프로그램의 다른 클래스들처럼 자바 가상머신인 JVM에서 동작하므로 클래스 파일이 생성되어야 하므로 클래스의 형태로 작성한다.


JDK에는 웹 애플리케이션을 제작할 수 있는 클래스가 제공되지 않고 톰캣을 설치하고 나면 웹 어플리케이션을 제작할 수 있는 클래스가 제공되지 않고


Tomcat을 설치하고 나면 웹 어플리케이션을 제작할 수 있는 클래스가 제공되는데, 그 클래스가 HttpServlet이다.


HttpServlet은 웹 서비스가 가능한 웹 어플리케이션을 제작할 수 있도록 자바를 확장해 놓은 클래스로 톰캣을 설치하면 제공된다.

( HttpServlet을 상속받은 클래스를 서블릿이라고 한다. )


이미 여러 기능들이 미리 만들어져 있기 때문에 개발자는 편리하게 HttpServlet을 활용하여 새로운 기능의 웹 프로그램을 만들 수 있는 것이다

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[JAVA] Windows 10 컴퓨터, JAVA 8 버전 설치하기[JAVA] Windows 10 컴퓨터, JAVA 8 버전 설치하기

Posted at 2020. 7. 18. 11:39 | Posted in JAVA






■ JDK 8 버전 다운받기





https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html 경로에 접속하여 JDK를 다운받아야 한다.


Java SE 8 ( 8u202 and earlier ) 버전을 선택해 준다.








  ※ JAVA SE 8 ( 8u202 and earlier ) 버전을 받는 이유?


   Oracle이 2018년 7월부터 JAVA를 유료( Paid ) 구독형 라이센스로 개편하면서


   JAVA SE 8 ( 8u211 and later ) 버전부터는 6개월 이후부터는 보안 업데이트가 이루어지지 않는 형태로 변경되었다.


   그렇기 때문에 JDK 8 버전 이상을 무료( Free )로 이용하기 위해서는


   Oracle이 아닌 Open JDK ( https://openjdk.java.net/ )를 통해 이용하면 된다.






윈도우에서 JDK를 설치하기 위해서는


Windows 10 기준으로 jdk-8u202-windows-x64.exe 버전을 다운받아 설치를 진행하면 된다.


( 요즘은 거의 없을거라 생각하지만 컴퓨터 윈도우10 32bit 라면 jdk-8u202-windows-i586.exe 다운받으면 된다. )







jdk-8u202-windows-x64.exe 를 선택하면 위와 같은 팝업창이 나타난다.


I reviewed and accept hte Oracle Binary Code License Agreement for the Java SE Platform Products

( Java SE 플랫폼 제품에 대한 Oralce 이진 코드 라이센스 계약을 검토하고 동의 합니다. )


항목을 체크해 주고 다운로드를 진행한다.





다운로드를 진행하는 과정에 있어


오라클 계정에 로그인 되어 있지 않다면 로그인 페이지로 이동을 하게된다.





계정이 존재한다면 로그인을 하면 JDK의 다운이 자동적으로 이루어지고


계정이 존재하지 않는다면 우선 회원가입 후 로그인하여 다시 다운받도록 하자.











■ JDK 8 버전 설치하기





이제 다운받은 jdk-8u202-windows-x64.exe 를 실행해보자.






Next 버튼을 클릭하여 설치를 계속 진행해준다.





설치 진행과정중 JDK의 설치경로를 물어본다.






기본 설치경로 그대로 사용한다면 Next 버튼을 클릭해 주면 되지만.


여기서는 우선 Change 버튼을클릭하여 설치경로를 확인 해 주자.







기본적으로 윈도우 환경에서 JDKC:\Program\ 경로JAVA 디렉토리를 새로 만들고 그 안에 JDK의 설치가 진행된다.


설치경로를 확인하고 OK 버튼을 클릭한다.




설치 경로의 확인이 끝났으면 Next 버튼을 클릭하여 설치를 계속 진행한다.






그럼 이제 JDK의 설치가 진행된다.








이렇게 JDK의 설치가 진행되는중 자동적으로 JRE의 설치 또한 진행을 하게된다.


JRE의 경로 또한 변경을 원한다면 변경 버튼을 클릭하여 경로를 맞춰주면 된다.








다음 버튼을 클릭하여 JRE의 설치도 함께 진행을 해주자.







그럼 JDKJRE의 설치가 완료되었다.



위 설치 과정중 설정한 C:\Program Files\Java ( 기본 설치 경로 )로 이동해보면








jdk1.8.0_202, jre1.8.0_202 폴더가 구성된 것을 확인할 수 있다.













■ Windows 10 컴퓨터에 JDK 설정하기






JDK를 설정하려면 시스템 속성에서 환경변수를 변경해 주어야 하기에


윈도우 시스템  창을 실행해야 하는데 시스템 창을 실행하는 방법에는 몇가지 있다.





제어판을 열고 시스템 항목을 선택한다.


② 바탕화면 내 컴퓨터를 마우스로 우클릭하면 나오는 메뉴에서 속성을 선택한다.




그럼 시스템 창 화면 좌측 메뉴에 고급 시스템 설정이 존재한다.


해당 메뉴를 실행해준다.





시스템 속성 창이 나타나면 상단 카테고리중 고급 항목에 들어가 보면


환경 변수 설정 버튼이 존재한다.





위 버튼을 클릭하고 설치한 JDK를 윈도우 환경변수에 적용하는 작업을 이제 진행하면 된다.








#01. JAVA_HOME, CLASSPATH 환경변수 등록





  ※ JAVA_HOME, CLASSPATH 환경변수를 등록하는 이유


   JAVA_HONE, CLASSPAHT는 자바에서 사용하는 환경변수로서 JDK의 위치를 지정하고,


   클래스를 모아 놓은 경로를 설정해주는 역할을 수행한다.

 




환경 변수 창에서 새로 만들기 버튼을 클릭해준다.






그럼 시스템 변수 편집 창이 나타나는데.


여기서 우리가 설치한 JDK의 경로를 지정해 주면된다.



 변수 이름 : JAVA_HOME

 변수 값 : C:\Program Files\Java\jdk1.8.0_202\ ( JDK 기본 설치 경로 )




JAVA_HOME환경 변수 추가가 완료되었다면.


CLASSPATH 환경 변수를 또 새로 만들어 주어야 한다.






다시 새로 만들기 버튼을 클릭해 주고


시스템 변수 편집창에서 CLASSPATH의 경로를 추가해 준다.




 변수 이름 : CLASSPATH

 변수 값 : .;%JAVA_HOME%\lib\tools.jar







#02. Path 환경변수 등록






  ※ Path 환경변수의 역할


   어떤 실행 파일을 실행하는데 있어 해당 위치에 파일이 없으면


   컴퓨터는 2차적으로 Path 경로에서 실행 파일을 찾아 실행한다.

 



이번에는 환경 변수 창에서 Path를 찾고 편집 버튼을 클릭한다.







그럼 환경 변수 편집 창이 나타나는데 아래와 같이 작업을 진행하면 된다.






먼저 새로 만들기 버튼을 클릭하고 환경변수 창에 새롭게 입력할 수 있는 영역이 추가되면


%JAVA_HOME%\bin\ 값을 입력해주고 확인 버튼을 클릭하면 모든 설정이 완료된다.













■ JAVA 설정 확인하기





JDK환경 변수 설정까지 완료가 다 되었다면 이제 JAVA 설정이 마무리 되었는 확인해 보자.







윈도우 시작 버튼을 클릭하고 검색창에서 Windows PowerShell을 검색하여 실행하면


파워쉘 커맨드 창이 나타난다.



 C:\> java -version



C:\> java -version 을 입력하면 우리가 설치한


JAVA SE 1.1.8.0_202 가 버전이 나타나는 것을 확인 할 수 있다.





다음으로 javac 명령어를 입력해 보자.


 C:\> javac




C:\> javac를 입력하면 자바 컴파일러 사용방법에 대한 설명 리스트가 출력된다.





  ※ javac란?


   자바 컴파일러( JAVA Compiler )를 이야기하며, 자바코드를 작성한 소스파일( .java )을 자바 가상 머신( JVM )이 인식할 수 있는


   바이트 코드( .class ) 타입으로 변환시켜주는 역할을 한다.


















Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[JAVA] JVM 프로그램의 메모리 영역[JAVA] JVM 프로그램의 메모리 영역

Posted at 2020. 4. 27. 20:19 | Posted in JAVA




출처 : Do it! 코틀린 프로그래밍




프로그램이 사용하는 메모리 영역에는 여러가지가 있다.


명령어가 들어가는 코드 영역과,


프로그램이 컴파일되면 문자열이나 정적 변수나 문자열 등이 들어가는 정적 메모리 영역인 데이터( Data ) 영역이 존재한다.


JVM에서는 이 영역을 메서드 정적 영역( Method Static Area )으로도 부룬다.


또 실행중 생성되는 객체는 동적 메모리 영역인 힙( Heap ) 이라고 불리는 곳에서 만들어 진다.




추가적으로 코드 블록인 중괄호( { } ) 안에 사용한 변수나 함수 호출 블록은 임시로 쓰이는 메모리 영역인 스택( Stack )에 들어가며,


중괄호 블록이 끝나면 임시로 사용한 변수는 스택에 제거된다.



 

데이터 영역은 정해져 있어서 실행중에 오류가 날 가능성은 적다.


힙과 스택은 프로그램이 동작하는 도중에 위 그림의 화살표 방향으로 채워지기 때문에 너무 많은 메모리를 할당하는 객체가 있다면


Out of Memory 오류가 날 수 있고, 함수 호출이 재귀적으로 너무 많이 일어나면


Stack Overflow 오류가 발생할 수 있다.










JVM을 사용하는 프로그램에는 동적 메모리 영역의 객체가 사용된 뒤 아무 참조가 없으면 자동으로 삭제하는


GC( Garbase Collector )가 존재한다.


GC란 일종의 쓰레기 청소부 역할을 해서, 우리도 모르게 쓸모없는 객체를 치워 주는 일을 한다고 생각하면 된다.







Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[JAVA] 자바 개발자로서 알아야 하는 것들[JAVA] 자바 개발자로서 알아야 하는 것들

Posted at 2020. 2. 18. 16:06 | Posted in JAVA




발췌 : 자바의 神 Vol.2 주요 API 응용편






Group01. 자바 언어로 개발하기 위해서 알아야 하는 것들





#01. 알고리즘



동일한 기능을 수행하는데, 어떤 프로그램은 1분이 걸리고, 어뜬 프로그램은 1초가 걸린다면 어떤 프로그램을 선택할 것인가?


당연히 후자를 선택할 것이다.


개발자로 먹고 살 계획이라면, 보다 효율적인 프로그램을 작성할 수 있는 알고리즘에 대한 공부를 반드시 해야 한다.





#02. 멀티쓰레드 관련 패턴들



서버가 최고의 성능을 발휘하도록 하기 위해서는 멀티쓰레드를 처리하는 각종 패턴들에 대한 공부를 하는것이 좋다.


요즘은 PC나 노트북도 멀티코어 기반으로 되어 있다.


그리고, 웹 기반으로 개발하게 될 경우에 멀티 쓰레드 상황에서 어떻게 처리해야 할지에 대한 개념을 잡고 있으면 도움이 된다.


게다가 정해진 시간에 보다 빠르고 많은 처리를 해야 한다면 하나의 쓰레드로 처리하는것보다


멀티 쓰레드로 처리하는 것이 훨씬 효율적이다.





#03. NIO 및 네트워킹에 대한 보다 자세한 내용



대부분 웹 기반 개발자들은 NIO나 네트워킹에 대해서 잘 알 필요가 없다.


왜냐하면 WAS가 다 알아서 대부분을 처리해 주기 때문이다.


하지만, 언제까지 웹 기반 프로그램을 작성한다는 보장이 없다.


어느 날 갑자기 서버간 통신을 하는 프로그램도 작성을 해야 할 수도 있고,


NIO 기반의 프로그램이나 네트워킹 프로그램을 분석해야 할 필요가 생길 수도 있다.


이때 이와 관련된 기반 지식을 갖고 있으면 많은 도움이 된다.





#04. 자바 메모리 관리와 가비지 컬렉터 ( Garbage Collector )



C 기반으로 개발하는 개발자와 JAVA 기반으로 개발하는 개발자의 가장 큰 차이가


메모리가 어떻게 할당되고 해제되는지를 아는지의 여부다.


자바 개발자는 메모리를 건드릴 필요가 없다.


하지만, 메모리가 어떻게 할당되고, 해제되는지, 어디에 생성되는지에 대해서는 알아 두면 아주 많은 도움이 된다.


게다가, 내가 만든 프로그램에서 메모리를 얼마나 임시로 생성했던가 해제하는지에 대한 것을 알고


개발하는 것과 모르고 개발하는 것은 차이가 있다.


따라서, 자바의 메모리 영역에는 어떤 것들이 있는지,


GC 방식에는 어떤 것들이 있는지를 알아두면 큰 도움이 된다.





#05. 리팩토링



메소드 하나의 최대 크기는 65Kbytes다.


C나 Cbobl 기반으로 개발을 많이 하신분들, 혹은 개발을 많이 안 해본 분들은 하나의 메소드가 최대 크기를 넘어가는 경우가 있다.


이렇게까지 심각한 메소드는 아니더라도, 코드를 작성하다 보면,


중복되는 부분이 반드시 발생하고, 나중에 유지보수성과 코드이 가독성을 위해서 메소드 및 클래스를 정제할 필요가 있다.


이러한 작업을 리팩토링이라고 한다.





#06. Eclipse나 IntelliJ와 같은 IDE 사용법



이클립스나 인텔리제이 같은 개발 툴( IDE )을 잘 다루는 것은 OS를 잘 다루는 것만큼 중요하다.


아무리 1억원 짜리 툴을 구매해서 사용한다고 하더라도, 제대로 사용하지 않으면 몇백 만원 짜리 툴을 사용하는 것보다 못하다.


이클립스는 무료로 제공되는 툴이며, 몇년 사이에 자바 개발자들에게 없으면 안 되는 툴로 자리매김 해왔다.


인텔리제의 경우 무료 버전이 커뮤니티 에디션과 유료버전인 얼티밋 에디션으로 나뉜다.

( 커뮤니티 에디션은 아파치 라이선스 2.0을 따른느 오픈소스로 배포되며 웹 개발을 비롯한 여러 기능들이 제한된다. )


얼티밋 기준 무료는 아니지만, 2017년 기준으로 46%로 가장 많이 사랑받는 개발툴이다.



개발툴의 기본적인 기능과 추가적인 플러그인을 통해서 개발하는 방법을 익히는 것은 매우 중요하며,


단축키를 외어 두는 것도 많은 도움이 된다.





#07. 적어도 한 가지 이상의 방법론



이 세상에는 방법론이 엄처나게 많다.


개발자 중에서는 방법으론을 싫어하는 분들도 있지만, 적어도 한 가지 이상의 방법론은 몸에 익혀두는 것이 좋다.


이렇게 익힌 방법론은 반드시 IT개발이 아닌 다른 분야에서도 활용할 수 있기 때문이다.



방법론은 개발할 때 개발자를 괴롭히고, 힘들게 하고, 문서( 산출물 )를 만들기 위한 것은 아니다.


프로그램이 제대로 작성될 수 있도록 하기위한 하나의 도구이다.





#08. JAVA 기반의 UI 기술



자바 기반의 UI 기술도 종류가 매우 많다. 웹 페이지도 어떻게 보면 UI 기반이다.


지금은 많이 사용하지는 않지만, Swing 기반의 UI를 배워 보는 것도 나쁘진 않다.

( IntelliJ IDEA는 자바와 스윙을 이용해서 제작되었다. )


하지만, UI가 너무 우울하다.


그래서, 이클립스 UI 기반이 되는 SWT라는 것이 있다.


 SWT는 Standard Widget Toolkit의 약자이며, 화면은 해당 OS의 기본 UI를 따른다.


관심이 있는 분들은 한번 사용해 보기 바란다.


자바 기반으로 환경을 만드는 기술은 한가지 정도 알아두는 것이 좋다.





#09. UML과 같은 모델링 언어



방법론과 일맥상통하는 말이지만, UML과 같은 모델링 언어를 알아두는 것도 기본이다.


UML은 Unified Modeling Language의 약자로 방법론이 아닌 모델링 언어다.


시대가 바뀌면서 UML이 많이 바뀌긴 했지만, UML의 뿌리는 바뀌지 않았다.


적어도 UML에서 이야기하는 


클래스( Class ) 다이어그램, 시퀀스( Sequence ) 다이어그램, 유즈 케이스( Use Case ) 다이어그램, 스테이트( State ) 다이어그램은


그릴 줄도 알고, 읽을 줄도 알아야만 한다. 그렇지 않으면, 개발을 못할 수도 있다.


왜냐하면, 선배들이 그려준 다이어그램을 보고 프로그램을 작성해야 하는데, 다이어그램을 읽지도 못하면 프로그램 개발도 못하기 때문이다.


그렇지만 각 다이어 그램을 읽는 방법은 사실 10분에서 한시간 정도면 금방 배울 수 있다.














Group02. 웹 개발자라면 알아야 하는 것들




#01. XML



대부분의 WAS나 프레임웍에서 사용하는 설정은 XML 파일이나 키 ~ 값 쌍으로 이루어진 properties 파일로 이루어진다.


간혹 어노테이션을 사용하는 경우도 있지만, 대부분 XML이나 properties 파일이 일반적이다.


개발을 하다보면 XML을 읽고, 활용하고, 심지어는 XML의 표준을 정의해야 하는 경우가 발생할 수 있다

( 분명히 이 경우 중 하나는 발생한다. )


게다가 안드로이드는 UI 레이아웃까지 XML로 선언하도록 되어 있다.


XML에 대해서 알지 못하면 개발을 모른다고 해도 과언이 아니다.


XML을 알게 되면 HTML도 같이 공부하면 좋다.





#02. JSP, Servlet에 대한 보다 자세한 내용



이제는 JSP와 Servlet으로 생짜배기 개발하는 서비스는 거의 없다.


이것 저것 덕지덕지 붙어 있는 생전 들어 보지도 못한 프레임웍 기반으로 개발하는 경우도 있고,


"스프링"이라는 프레임웍 기반에서 개발하는 경우도 많다.


그리고, 벤더에서 서버 및 툴을 팔기 위해서 광고하는 SOA 기반으로 개발하는 분들도 있을 것이다.


그런데, 이러한 대부분의 프레임웍에 대해서 이야기를 하려면 자바 기반의 웹 페에지를 구성하기 위한 기초인


JSP와 Servlet에 대해서 알아야만 한다.


JSP와 Servlet의 원리를 모르고 프레임웍에서 제공하는 기능을 사용하여 찍어내듯이 웹 페이지를 개발하면 안된다.





#03. 디자인 패턴



어떤 언어를 개발하더라도 디자인 패턴은 알아야 한다.


예를 들어 어떤 클래스는 해당 JVM에서 하나의 객체만 존재해야 한다면 생성자를 아무나 막 호출하게 해서는 안된다.


이러한 상황에서 사용하는 디자인 패턴은 싱글톤( singleton ) 이라고 한다.


그래서, 선배 개발자들에게 "싱글톤으로 개발했습니다." 라고 이야기만 하면 되는 것을


매우 복잡하게 설명하는 경우가 발생할 수가 있다.


이와 같이 디자인 패턴이라는 것은 하나의 클래스, 혹은 여러 클래스가 어떤 기능을 수행할 때


공통적인 특징을 가지게 되고, 유일한 이름을 갖도록 정의해 놓은 것이다.


디자인 패턴을 알아야 선배 개발자와 커뮤니케이션 하기에도 좋으니 꼭 공부해 두어야 한다.





#04. JDBC에 대한 보다 자세한 내용



아직까지는 데이터를 저장할 때에는 대부분 DB를 사용한다.


자바에서 DB에 데이터를 저장하기 위해서는 JDBC를 사용한다.


요즈음 iBais, MyBatis, Hibernate 등의 데이터 저장을 위한 프레임웍을 많이 사용하지만,


이러한 프레임으웍의 기반은 바로 JDBC이다.


데이터를 어떻게 다루는지 제대로 알기 위해서는 JDBC에 대해서 알고 있어야만 한다.





#05. Spring 프레임웍을 비롯한 각종 프레임웍



자바가 다른 언어와 크게 다른 점은 프레임웍이 지속적으로 발전하고 있다는 점이다.


다른 언어오 프레임웍이 있긴 하지만, 그 양이 자바에 비하면 그리 많지 않다.


특히 자바 기반의 오픈 소스는 프레임웍을 만들고, 공유하고, 피드백을 받아 보완되는 구조로 계속 발전하고 있다.


그 중에서 2010년대 초반에 Spring 프레임웍이 아주 강세다.



그 위에도 수많은 프레임웍이 존재하는데, 사용하던 것만 반복적으로 사용하려고 하지 말고


새로운 것이 나오면 사용해보고, 기존 것과 비교해서 어떤 장단점이 있는지를 파악하는 것은 매우 중요하다.





#06. JUnit 테스트 스크립트 작성 방법과 사용법



Junit이라는 테스트 프레임웍이 있다.


간단하게 말하면, 작성한 메소드를 수행하여 예외나 에러가 발생하는지를 확인하고 원하는 값이 리턴되는지를 확인하는 것을 쉽게 도와 주는 것이다.


예로 main( ) 메소드로 메소드가 제대로 수행되는지를 확인하는 것은 그리 좋은 방법이 아니다.


하지만, 자바라는 언어를 모르는 분들에게 JUnit 테스트 코드를 작성하여 메소드 수행 결과를 확인하라고 가리키는 것은


매우 어렵기 때문에 일반적으로 사용하는 main( ) 메소드를 사용하는 방법을 채택했다.



메소드 하나를 테스트할 때에는 JUnit으로 하나 main( ) 메소드를 사용하여 동일하게 1초가 소요될 수 있지만,


main( ) 메소드로 테스트를 수행하면서 나온 출력 결과를 일일이 눈으로 확인하는 것에는 한계가 있다.


그리고, 테스를 수행해야 하는 메소드가 많으면 많을 수록 JUnit로 테스트 하는것이 빛을 발한다.


따라서, 자바 개발자라면 JUnit을 꼭 배우고 알아두는 것이 좋다.





#07. GIT, Subversion, CVS 등 형상관리 툴 사용법



처음에 프로그램을 작성할 때에는 본인 PC에서만 작업하면 된다.


하지만, 보통 개발을 할 때에는 혼자 개발하지 않는다.


따라서, 각종 형상관리 툴을 사용하여 여러 사람과 협업하여 개발하는 방법을 알아야만 한다.


요즘 많이 사용하는 형상관리 툴은 GIT, Subversion, CVS등의 무료 툴을 많이 사용한다.





#08. Ant, Maven과 같은 빌드 툴 사용법



Ant는 XML기반으로 여러 작업을 선언하고, 실행할 수 있는 빌드 툴이다.


아주 간단한 예로, 이클립스를 사용하지 않을 때에는 javac로 컴파일하고 java로 실행하는


두 번의 단계를 거쳐야 하니만, Ant의 경우 한번의 명령 실행으로 이 두가지 작업을 실행 할 수 있다.


만일 해야한는 작업이 10개라도 Ant를 사용하면 한번의 명령으로 실행할 수 있다.



Maven은 Ant의 대안으로 만들어 졌고, 2010년대 이후 Ant보다는 Maven을 통합 빌드 툴로 더 많이 사용한다.


메이븐은 내가 사용할 라이브러리뿐만 아니라 해당 라이브러리가 작동하는데


필요한 다른 라이브러리까지 관리하여 네트워크를 통해 자동으로 다운받아주며,


필요한 라이브러리를 특정 문서( pom.xml )에 정의해 놓으면 네트워크를 통해서 라이브러리들을 자동으로 다운받아 준다.





#09. Hudson( Jenkins )과 같은 통합 빌드 툴 사용법



방금 살펴본 빌드 툴을 보다 쉽게 사용하는 방법이 Hudson과 같은 통합 빌드 툴이다.


영어로는 보통 CI( Continuous Integration )라고도 부른다.


이러한 통합 빌드 툴은 빌드만 자동으로 하는 것이 아니라.


각종 프레임웍과 연계하여 테스트, 커버리지 분석, 부하 측정 등 대부분의 작업을 자동으로 할 수 있다.


참고로 Hudson의 미래는 어떻게 될지 모르며, 이 툴을 만든 개발자가 나와서 만든 Jenkins라는 툴을 사용할 것을 권장한다.





#10. Apache와 같은 오픈 소스 프로젝트에 대한 지속적인 관심



www.apache.org라는 사이트를 접속해 보면 수 많은 오픈 소스 프로젝트들이 있는 것을 확인할 수 있다.


보통 개발자들은 이 오픈 소스의 사용법을 익히는 데에서 끝난다.


하지만, 한걸음 나아가서 오픈 소스의 코드들을 보라,


세계에서 내로라하는 똑똑한 개발자들이 만든 코드를 보면 분명 여러분들의 개발 능력이 향상도리 것이다.



참고로 앞서 설명한 Spring 프레임웍도 오픈 소스로 되어 있으며,


이 프레임웍의 메인 개발자는 스프링 컨퍼런스에서 최고 인기를 누린다고 한다.


여하튼 이러한 사람들이 만들어 놓은 코드들을 보면 많은 감탄을 할 것이다.



그리고 다른 사람이 작성한 코드를 보는 것만으로 만족하지 못하는 사람들은 직접


소스 커미터( Committer )가 되어 보기 바란다.

( 물론 영어는 기본이다. )



추가로, 예전에 어떤 식스템을 담당한다는 사람이 "오픈 소스를 사용하는 사람이 개발자라고 할 수 있습니까?"라고 해서


모 사이트에서 논란이 되었던 적이 있다. 


그 사람은 아마도 인터넷에 떠 도는 코드 템플릿과 오픈 소스를 구분하지 못하는 사람으로 보인다.


만약 여러분들이 이미 여러 분야에서 사용되고 있는 오픈 소르를 사용한다고 뭐라고 하는 사람이 있다면 그냥 쓱 한번 웃어주고 넘어가기 바란다.


우리나라 금융 및 공공기관에서 Apache의 자카르타 프로젝트에서 만들어진 Tomcat이라는 WAS를 사용하는 것을 그리 많이 보지 못했을 것이다.


하지만, 우리나라를 비롯한 전 세계의 유명 사이트들 중 자바를 사용하는 사이트는 대부분 Tomcat을 사용한다.


Tomcat 때문에, Tomcat에 문제가 있어 잘못된 사이트는 한 번도 보질 못했다.





#11. DB ( Data Base )



JDBC에 대해서 기술한 것처럼 아직까지는 DB가 대세다.


특히 금융권이나 공공기관에서 개발을 한다면 필수로 알아야만 한다.


SQL, Index 정도는 알아야만 한다.





#12. NoSQL DB



2010년대 초반에는 TV 광고에까지 클라우드라는 단어가 매우 많이 등장했다.


단순히 사용자 PC를 활용한 클라우드 서비스를 이야기하는것이 아니라,


자체 보유한 서버를 활용하는 클라우드를 이야기 하는 것이다.


수많은 사용자의 요청과 데이터를 처리하기 위해서는 클라우드 기반의 서비스가 필요한 것은 맞다.


하지만, 우리나라 만을 대상으로 한 서비스를 할 경우에는 거창하게 클라우드를 내세워서 할 만한 것은 그리 많지 않다.


이러한 클라우드 서비스의 밑 바탕에는 수많은 데이터를 저장할 수 있는 NoSQL DB와 매우 많은기술들이 필요하다.



NoSQL DB라는 것은 데이털르 저장할 수 있는 한계를 벗어나고, 수 많은 사용자의 데이터를 저장하는 저장소를 말한다.


NoSQL은 Not Only SQL이라는 말이며, SQL을 사용하지 않는다는 말은 아니다.


NoSQL에 대표적인 주자로는 Mongo DB, Redis, HBase, Memcached, CouchBase 등이 있다.















Group03. 그 외에 알아두면 좋은것들





#01. 파이썬( Python )과 같은 스크립트 언어



세상에는 만많은 스크립트 언어들이 존재한다.


그 중에서 많이 사용하는 것은 Python, Perl 등이 있다.


그리고, 이 중에서도 파이썬( Python )이 쉽고, 크게 떠오르고 있다.


간단하게 데이터를 처리할 일이 있을 경우 굳이 이클립스, 인텔리제이를 띄워서 자바 애플리케이션을 만드는 것보다는


편하기 때문에 알아두면 도움이 많이된다.





#02. JVM( Java Virtual Machine ) 위에서 사용할 수 있는 언어



JVM을 띄워서 사용하는 언어들이 매우 많다.


Python을 JVM 위에서 수행하는 Jython같은 것과,


안드로이드 개발에 있어 JAVA를 대체하고 있는 Kotlin과 같은 것들이 존재한다.


이러한 언어의 특징은 해당 언어가 JVM 위에서 돌아간다는 점이다.


이러한 언어가 탄생한 이유는 메모리 관리는 잘 만들어진 JVM에 맡기고,


주요 기능들을 편리하게 개발할 수 있도록 하기 위함이다.


이렇게 되면 자바보다 간단하고, 간편한 언어를 사용할 수 있다는 장점이 생긴다.


특히나 안드로이드 진영에서 Kotlin을 메인으로 JAVA의 완전한 대체가 이루어지고 있다.




#03. 모바일 앱 개발



2010년 초중반 서점에는 iOS와 Android와 관련 서적만 팔렸다고 해도 관언이 아니다.


지금은 당시만큼의 폭발적인 인기는 아니지만,


웹과 앱의 경계가 명확해 지면서 웹과 앱을 둘다 개발 할 수 있는 것은


분명한 개인의 경쟁력 강화에 도움이 된다.





#04. 성능



성능 테스트를 지접 돌려서 본인이 만든 애플리케이션의 성능까지 측정하는 개발자라면 매우 훌륭한 수준이다.


하지만, 그만큼 도달하기에는 힘든 경지이기도 하다.



성능 분야에 대해서 공부를 하려면, 알아야 하는 것이 매우 많다.


성능 분석 분야는 IT 업계의 종합 예술이라고 생가한다.


왜냐하면, 성능 분야는 측정만 해서 결과를 도출하는 것으로 끝나는 것이 아니기 떄문이다.


그런 일만 하면 그냥 틀을 사용하는 오퍼레이터만 될 뿐이다.


병목이 발생하면 그 원인을 찾아 주고, 해결 방안까지 제시해 주어야만 진정한 성능 업무를 한다고 할 수 있다.





#05. 테스트



테스트도 성능과 같이 쉬운 분야는 아니다.


하지만, 개발자라면 테스트를 할 줄 알아야 하고, 본인이 만든 코드에 대한 테스틀 하는 코드를 직접 작성도 해야만 한다.


위에도 그 내용이 있지만, 자바 개발자에거 JUnit은 친구가 되어야만 한다.


절대로 귀찮게 하는 적이 아닌다.


그리고, 공부할 기회가 된다면 TOD에 대해서 공부해 두면 많은 도움이 될 것이다.





#06. OS( 리눅스, 유닉스 )



게임과 같이 몇몇 특종 업종을 제외한 대부분의 기업에서는 유닉스 계열 및 리눅스 계열 서버로 운영을 한다.


따라서, 직접 만든 프로그램이 돌아가는 OS에 대한 지식을 갖는 것은 매우 중요하다.


왜냐하면, 서버의 커널에서 어떻게 프로그램이 수행되는 지에 대한 것을 알고 있는 것과 모르는 것은 천지 차이이기 떄문이다.


큰 관심을 없다고 할지라도 유닉스나 리눅스에서 사용하는 각종 명령어는 알아두는 것이 큰 도움이 된다.



추가로, vi, vim은 꼭 알아두는 것이다 좋다.


그렇지 않으면 서버에 터미널로 접속해서 바보된다.





#07. TCP / IP에 대한 개념과 네트워크



방금 OS에 대해서 이야기 했지만,


OS중에서 무엇보다 네트워크에 대한 지식을 갖추는 것은 큰 도움이 된다.


요즘은 대부분의 서비스와 프로그램이 네트워크를 통해서 데이터를 주고 받는다.


게다가 프로그램이 네트워크 때문에 문제가 발생하는 경우도 적지 않다.


때문에, 적어도 브라우저에서 요청을 하면 서버에 어떻게 연결이 되고, 데이터를 받고, 그 연결이 끊어지는지에 대한 지식은 갖고 있는 것이 좋다.


그냥 "서버 담당자가 보겠지", "네트워크 담당자가 알아서 하겠지" 라고 간과하는 것은 좋지않다.





#08. 시스템 구성 방법



어떤 서비스를 하기 위한 시스템을 구성할 때 시스템 구성도를 만들고,


실제 설정까지 하기는 번거롭고 귀찮은 작업일 수 있다.


하지만, 어떤 시스템이든지 시스템 구성도는 그려져 있다.



만약 운영하거나 개발하고 있는 시스템의 시스템 구성도가 없다면 그 시스템은 제대로 돌아갈 확률이 매우 적다.


여하튼, 시스템 구성도를 보고 서버가 어떻게 구성되었는지를 이해할 수 있는 수준은 되어야 한다.


더 나아가서 시트메 구성도에 있는 각 네트워크 장비들의 역할이 뭔지 알 수 있으면 더더욱 좋다.


아마도 그 정도 수준이 되면 해당 서비스가 처리할 수 있는 최대 네트워크 사용량도 알 수 있을 것이다.



시스템 구성도를 읽는 것을 배우는 것은 쉽다. 그리는 것은 매우 어렵다.


따라서, 전에 사용했던 시스템 구성도를 복사해서 대충 구성하거나,


서버 벤더에서 그려주는 그대로를 따르지 않는것이 좋다.








  1. 비밀댓글입니다

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[JAVA] 객체지향 개발과 관련 용어[JAVA] 객체지향 개발과 관련 용어

Posted at 2019. 12. 27. 17:19 | Posted in JAVA




■ 객체지향 개발과 관련 용어





#01. 클래스( Class )


"상태"와 "행위"를 갖는 자바의 기본 단위를 의미한다.




#02. 상태( State )와 행위( Behavior )


어떤 사물을 나타낼 때에는 상태와 행위로 구분하여 표시하는 것이 가능하다.


자바에서 "상태"는 클래스나 인스턴스 변수로, "행위"는 메소드로 표현할 수 있다.




#03 캡슐화( Encapsulation )


연관된 "상태"와 "행위"를 결정하는 기능을 묶어 주는 것을의미한다.


이렇게 묶어주면 기능을 클래스 밖에서 접근 가능한 대상을 제한하는 정보 은닉(Information Hiding)이 가능하다.


그리고, 하나의 객체를 위한 코드가, 다른 객체를 위한 코드와 무관하게 수행할 수 있는 모듈화 modularity가 가능해진다.


이처럼 묶여 있는 가장 작은 단위를 클래스라고 보면 된다.




#04. 매개변수( Parameter )와 전달인자( Argument )


함수에서 다른 함수를 호출할 때 전달하는 값을 매개변수 or 전달인자라고 한다.


자바에서는 함수를 호출할 때 넘겨주는 매개변수 or 전달인자가 여기에 속한다.


// 아래 코드에서 newState가 메시지를 의미하는 매개 변수이다.




#05. 객체(Object)


클래스는 사물의 단위를 의미하지만, 객체는 각 사물을 의미한다.


예를 들면 "블로그"는 클래스, "현대마법의 IT공방"은 블로그 중의 하나를 의미하는 객체라고 볼 수 있다.



※ 클래스 main( ) 메소드에서 가장 첫 줄에 생성한 거들이 바로 객체이다.




#06. 상속( Inheritance )


부모에 선언된 변수와 메소드에 대한 사용권을 갖는 것을 말한다.


즉, 클래스 선언시 extends를 사용하여 확장하거나, implements를 사용하여 구현한 경우가 여기에 속한다.




#07. 다형성( Polymorphism )


이 세상에 부모와 자식이 똑같을 수가 없고, 자식들도 같을 수가 없다.


마찬가지로 자바에서는 부모 클래스에서 파생된 자식 클래스들의 기능이 각기 다를 수 있다는 것을 의미한다.



#08. 오버라이딩( Overriding )


부모 클래스에 선언되어 있는 메소드와 동일한 선언을 갖지만 구현이 다른 것을 의미한다.


자바에서 다형성을 제공하는 하나의 방법이 바로 Overriding이다.



이러한 부모 클래스가 있을 경우.



method( ) 부모 클래스의 method( )를 덮어 쓴 Overriding 처리다 된것이다.


즉 method( )를 실행하면 Parent(부모) 클래스의 method( )가 아닌 Child(자식) 클래스의 method( )가 실행된다.




#09. 오버로딩( Overloading )


메소드의 이름은 동일해도, 매개 변수들을 다르게 하는 것을 의미한다.


그래서, 동일 한 기능은 하지만,


메소드에 넘겨줄 수 있는 매개 변수의 타입을 다양하게 함으로써


메소드를 사용하는 다른 개발자가 쉽게 구현할 수 있게 해준다.



getData( ) 메소드의 매개 변수에 따라서 셋 중에 호출되는 메소드가 달라진다.


이렇게 구현한 것이 바로 오버로딩 이다.



Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[JAVA] Java의 역사와 JVM, 알아두어야 하는 상식[JAVA] Java의 역사와 JVM, 알아두어야 하는 상식

Posted at 2019. 11. 6. 19:04 | Posted in JAVA







■ 자바의 역사




자바의 역사는 1991년으로 거슬러 올라간다. 1991년에 "Green"이라는 프로젝트가 생기면서 자바의 모태가 탄생하기 시작했다.


제임스 고스링(James Gosling), 마이크 쉐리든(Mike Sheridan), 패트릭 노튼(Patrick Naughton) 이렇게 3명의 젊은이가


TV와 시청자가 서로 상호 작용을 하는(interactive 한) 것을 만들기 위해서 시작되었다.


지금은 IPTV와 같은 것이 대중화 되어 있지만, 그때만 해도 너무 앞서가는 것이었다.


1992년 고슬링의 사무실 앞에 있는 참나무를 보고 이름을 지은 "Oak"라는 언어다.



그 이후에 1995년 "Oak"라는 언어의 이름이 커피의 한 종류를 뜻하는 "자바 커피"의 이름을 본따 "Java"라고 바뀌면서 자바 기술이 시작하게 되었다.


1995년에 자바 언어를 만들면서 "Write Once, Run Anywhere(WORA)"라는 모토가 만들어졌으며,


여러 플랫폼에서 수행할 수 있는 개발 언어를 목표로 개발되었다.


1996년에 드디어 JDK 1.0이 출시되었으며, 그 이듬해 1997년에 출시한 JDK 1.1DMS 3주만에 22만 다운로드를 기록하면서 폭발적인 성장을 예견하게 되었다.


여기서 JDK라는 단어는 Java Development Kit의 약자다.



1998년 12월 J2SE라는 이름으로 자바의 기본 버전 명칭이 바뀌면서 J2SE 1.2가 출시되었다.


참고로 J2SE는 Java 2 Standard Edition의 약자이며 기존의 JDK를 의미하는 것이다.


왜 이렇게 이름이 바뀌었냐면, 기업 등에서 만드는 시스템을 개발하기 위한 J2EE라는 Enterprise Edition과


블랙베리와 같은 전화기에서 아직도 사용하고 있는 J2ME라는 Micro Edition과 혼동을 막기 위함이었다.



그 이후에 2000년 J2SE 1.3이, 우리나라에서 월드컵이 열린 2002년 J2SE 1.4가 출시되었다. 그리고 2004년 J2SE 5가 출시되었다.


J2SE 1.4 버전까지만 해도 버전 이름이 1.1 ~ 1.4까지 증가하였지만, J2SE 1.5 버전부터는 앞의 1.을 뺀 J2SE 5라고 불리게 되었다.


그 다음에 약간의 개선이 이루어진 Java SE 6가 2006년 출시되었다.


그리고, 2011년 오랜 기간동안의 업그레이드 준비를 마친 Java SE 7이 탄생되었다.



Java SE 6까지는 이제는 역사속으로 사라진 Sun Microsystems라는 회사에서


자바에 대한 주요 스팩을 만들고 Java를 만들어 왔지만, Java SE 7 부터는 Oracle이라는 회사가


Sun Microsystems를 인수하여 지금에 이르고 있다.




※ 자바의 표준 버전의 이름이 JDK, J2SE, Java SE로 변경되어 왔지만 일반적으로 JDK라고 통일하여 불리고 있다.









■ JDK, J2SE, Java SE 외에 자바에서 사용되는 다른 용어




앞서 설명한 각각의 용어는 다음의 약자다.



   ● JDK : Java Development Kit


   ● J2SE : Java 2 Standard Edition


   ● Java SE : Java Standard Edition



여기서 Java 2에서 빠진 것은 Java SE 6가 출시되면서 부터이며,


이렇게 빠진 이유는 마케팅을 위해서라기 보다 쉽게 자바를 부를 수 있도록 Java로 통칭했다고 한다.



그리고, 자바를 개발하기 위해서 설치를 하다 보면, JDK와 JRE로 분리되어 있는 것을 알고 있을 것이다.


여기서 각각의 용어는 다음을 의미한다.



   ● JDK : Java Development Kit


   ● JRE : Java Runtime Environment



각각의 이름에서 알 수 있듯이 JRE는 실행만을 위한 환경이다.


따라서, 이 JRE만 설치하면, 자바를 컴파일하는 등의 각종 프로그램이 제외된 상태로 설치된다.







가장 좌측을 보면 JDK와 JRE로 나뉘어져 있는 것을 볼 수 있다.


즉, JRE는 자바를 실행할 수 있는 환경의 집합이라고 보면 된다.


그리고, JRE에 있는 여러 가지 레고 블록처럼 칸칸이 쌓여 있는 것들은 자바에서 제공하는 라이브러리들이라고 보면 된다.











■ 자바 언어의 다섯가지 특징




#01. 자바는 "단순하고, 객체지향이며, 친숙"해야 한다.



지금 자바를 배우는 사람들은 자바가 단순하지 않은 언어라는 것을 알고 있다.


왜냐하면 수 많은 프레임웍들이 있고, 여러 관련된 사항들을 알아야 프로그램을 작성할 수 있기 때문이다.


(여기서 이야기 하는 단순한 이란 자바에 대한 기본 컨셉을 배우는 것이 어렵지 않다는 것을 의미한다.)




자바는 처음 만들 때부터 객체지향으로 디자인되어 있다.


그리고, 다형성, 캡슐화등 객체지향 언어의 특징들을 지원할 수 있는 구조로 되어 있다.


그리고 다형성, 캡슐화 등 객체지향 언어의 특징을 지원할 수 있는 구조로 되어 있다.


물론 개발하는 사람이 객체지향 프로그램을 작성하지 않으면 이러한 이점은 모두 사라진다.


다시 말해서, 자바를 쓴다고 해서 무조건 객체지향적으로 개발된다는 것은 아니다.




그리고, 자바로 개발할 때에는 처음부터 모든 것을 만들 필요가 없다.


개발하면서 필요한 여러 기능들은 이미 API를 통해제 제공하고 있다.


파일을 읽고 쓰거나 네트워크로 데이터를 주고 받는 I/O, 그래픽, UI등을 개발하기 위한 여러 라이브러리를 통해서


보다 쉽게 개발할 수 있는 환경을 제공한다.




#02. 자바는 "견고하며, 보안상 안전"하다.



자바는 컴파일 할 때와 실행할 때 문법적 오류에 대한 체크를 한다.


메모리 관리 모델이 매우 단순하고, C를 배우고 사용하는 개발자들의 머리를 아프게 하는 포인터의 개념이 없다.


이러한 특징들은 자바를 매우 믿을 수 있고, 견고한 소프트웨어가 될 수 있도록 도와준다.



자바는 기본적으로 분산 환경에서 사용하기 위해서 디자인 되었다.


분산 환경에서 보안은 매우 주용한 부분 중 하나다.


자바 기술은 외부에서 침입이 불가능한 애플리케이션을 만들 수 있도록 해준다.


네트워크 환경에서 클라이언트로 다운로드한 승인받지 않은 프로그램은 실행할 수 없도록 되어 있다.


따라서 바이러스를 생성하거나 파일 시스템을 공격할 수가 없다.




#03. 자바는 "아키텍처에 중립적이어야 하며 포터블"해야 한다.



자바로 작성한 프로그램은 매우 다양한 하드웨어 아키텍처에서 수행 할 수 있도록 되어 있다.


따라서 자바는 아키텍처에 중립적인 바이코드를 생성한다.


따러서, 자바의 버전만 동일하다면, 동일한 프로그램은 어떤 플랫폼에서도 실행 할 수 있다.



아키텍처 중립적이라는 말은 포터블한 시스템의 일부분일 뿐이다.


그래서, 기본 데이터 타입의 크기를 지정해 놓고, 숫자 연산자에 대한 행위들을 정의해 두었다.


따라서, 여러분들이 만드는 프로그램은 어떤 플랫폼에서도 동일한 결과가 나오며,


하드웨어와 소프트웨어 아키텍처에 따른 데이터 타입의 호환성에 문제가 발생하지 않는다.


이러한 호환성과 포터블한 환경을 제공하는 것은 JVM 덕분이다.




#04. 자바는 "높은 성능"을 제공해야 한다.



성능은 항상 고려를 하는 부분이다.


자바는 실행환경에서 최대한의 성능을 낼 수 있도록 되어 있다.


게다가 자동화된 가비지 컬렉터는 낮은 우선순위의 쓰레드로 동작하기 때문에 보다 높은 성능을 낼 수 있다.


그리고, 보다 빠른 성능을 위해서 네이티브한 언어로 작성한 부분을 자바에서 사용할 수도 있도록 되어 있다.

(자바가 이 세상에서 제일 빠른 언어라는 말은 아니다.)




#05. 자바는 "인터프리트 언어이며, 쓰레드를 제공하고, 동적인 언어"이다.



자바 인터프리터는 자바 바이트코드를 어떤 장비에서도 수행할 수 있도록 해준다.


따라서, 기존에 사용하던 무거운 컴파일과 링크와 테스트 사이클을 거쳐야 하는 개발환경보다 빠른 환경을 구축할 수 있다.



자바는 멀티 쓰레드 환경을 제공하기 때문에, 동시에 여러 작업을 수행할 수 있다.


따라서, 사용자에게 매우 빠른 사용 환경을 제공한다.



자바 컴파일러는 컴파일시 매우 엄격한 정적인 점검을 수행한다.


그리고, 실행시에 동적으로 필요한 프로그램을 링크시킨다.


게다가 새로운 코드는 다양한 소스에서 요청에 의해서 연결될 수 있다.



지금까지 간단하게 자바 언어의 특징에 대해서 살표보았다.


이러한 특징들은 자바 개발 초기에 정해진 것으로, 약간은 지금의 상황과 다른 부분이 있다.


하지만, 이 내용간의 근간은 달라지지 않고 계속 유지되고 있으므로, 기억해 두면 좋을 것이다.









■ JIT(Just-In-Time) 컴파일러란?




JIT라는 것은, Just-In-Time의 약자다.


JIT를 사용하는 언어에는 Java와, .NET 등이 있다. 즉, 자바에서만 사용하는 개념이 아니다.


JIT를 좀더 쉬운 말로 하면 "동적 변환(Dynamic Translation)"이라고 보면 된다.


이러한 JIT라는 것을 만든 이유는 프로그램 실행을 보다 빠르게 하기 위해서이다.


명칭이 컴파일러이지만, 실행시에는 적용되는 기술이다.



역사적으로 보면, 컴퓨터 프로그램을 실행하는 방식은 두가지로 나눌 수 있다.


하나는 인터프리터(Interpret) 방식이며, 다른 하나는 정적(Static) 컴파일 방식이다.



인터프리터 방식은 프로그램을 실행할 때마다 컴퓨터가 알아 들을 수 있는 언어로 변환하는 작업을 수행한다.


따라서, 간편하기는 하지만 성능이 매우 느릴 수 밖에 없다.



정적 컴파일 방식은 실행하기 전에 컴퓨터가 알아 들을 수 있는 언어로 변환화는 작업을 미리 실행한다.


따라서, 변환 작업은 딱 한 번만 수행한다.



JIT는 이 두 가지 방식을 혼합한 것이라고 보면 된다.


변환 작업은 인터프리터에 의해서 지속적으로 수행되지만,


필요한 코드의 정보는 캐시에 담아두었다가(메모리에 올려두었다가) 재사용 하게 된다.



여기서 헷갈릴 수 있는 부분은 javac 명령어를 사용하여 컴파일을 하기때문에


그럼 자바는 정적 컴파일 방식 아닌가? 라고 생각 할 수 있는데


자바 프로그래밍 과정에서는 javac라는 명령어를 사용하여 컴파일을 하는 단계에서 만들어진


class라는 파일은 바이트코드(ByteCode)일 뿐이다.



자바의 모토 중에 하나가 "Compile once, Run anywhere"다.


한번 컴파일한 코드로  Linux, Mac OS X, Window 등에서 모두 사용할 수 있다.


다시 말해서, javac라는 명령어를 수행한다는 것은 텍스트로 만드 java파일을 어떤 OS에서도 수행될 수 있도록


바이트코드라는 파일로 만든 것뿐이다.


컴퓨터가 알아먹을 수 있도록 하려면 다시 변환 작업이 필요한데,


이 작업을 JIT 컴파일러에서 한다고 보면 된다.






위 그림에서 "JVM → 기계코드"로 변환되는 부분은 JIT에서 수행하는 것이다.


JIT를 사용하면 반복적으로 수행되는 코드는 매우 빠른 성능을 보인다는 장점이 있지만,


반대로 처음에 시작할 때에는 변환 단계를 거쳐야 하므로 성능이 느리다는 단점이 있다.


하지만, 최근들어 CPU 성능이 많이 좋아졌고, JDK의 성능 개선도 많이 이루어졌기 때문에 방금 이야기한 단점도 많이 개선되었다.









■ 자바를 배우면 꼭 알아야 하는 용어(JVM, GC)




일반적으로 자바를 설명할 때 많이 사용되는 용어들은 다음과 같은 것들이 있다.



   ● JVM : Java Virtual Machine (자바 가상 머신)


   ● GC : Garbage Collector (가비지 컬렉터)



JVM은 작성한 자바 프로그램이 수행되는 프로세스를 의미한다.


다시 말해서, java라는 명령어를 통해서 애플리케이션이 수행되면, 이 JVM 위에서 애플리케이션이 동작한다.


이 JVM에서 여러분들이 작성한 프로그램을 찾고 실행하는 일련의 작업이 진행된다.



자바의 기본 메모리 관리는 개발자가 하지 않아도 된다.


메모리 관리를 JVM이 알아서 하기 때문이다. 이때 JVM 내에서 메모리 관리를 해주는 것을 바로 "가비지 컬렉터"라고 부른다.


Garbage는 우리나라말로 "쓰레기"라는 의미이며, 사용하고 남아 있는 전혀 필요없는 객체들이 여기에 속한다.


아무리 가비지 컬렉터가 쓰레기를 알아서 청소한다고 하더라도, 메모리를 효율적으로 사용하도록 개발하는 것은 중요하다.



일반적으로 사용되는 GC라는 말의 의미는 Garbage Collection(가비지 컬렉션)을 의미한다.


예를 들어, 쓰레기를 청소하는 작업이 수행되면 "가비지 컬렉션이 수행되었다"라고 표현한다.


아니면 짧게 "GC가 발생했다"고 이야기한다.









■ Garbage Collector의 진행방식




자바 프로그래밍 과정에 있어 어떤 객체를 생성하더라도 그 객체는 언젠가는 쓰레기가 되어 메모리에서 지워져야만 한다.


예를 들어 "abc"라는 문자열이 있는데, 더 이상 사용할 일이 없다면 메모리에서 삭제되어야 한다.


만약 지워지지 않으면, 더 이상 상요할 일이 없다면 메모리에서 삭제되어야 한다.


허나 계속 지워지지 않고 있다면, 자바 프로그램은 엄청난 메모리가 필요할 것이다.


그래서, C를 사용하여 개발 할 때에는 메모리를 해제하는 작업을 꼭 해줘야만 한다.


하지만, 자바는 그런 작업을 해줄 필요가 없다.


가비지 컬렉터라는 것이 알아서 쓰레기들을 치워주기 때문이다.


JDK 7부터 공식적으로 사용할 수 있는 G1(Garbage First)라는 가비지 컬렉터를 제외한 나머지 JVM은


다음과 같이 영역을 나누어 힙(Heap)이라는 공간에 객체들을 관리한다.

(여기에서 사용되는 영역에 대한 요어들은 JDK의 벤더에 따라서 조금씩 다르다.)



가장 왼쪽에 있는 Young 영역에는 말 그대로 젊은 객체들이 존재하며, Old 역역에는 늙은 객체들이 자리잡게 된다.


그리고 Perm 이라는 영역에는 클래스나 메소드에 대한 정보가 쌓인다.

(Perm에 저장되는 데이터는 더 많지만, 이정도만 알고 있어도 된다.)



Young 영역은 Eden과 두개의 Survivor 영역으로 나뉘는데, 이 중에서 객체를 생성하자마자 저장되는 장소는 Eden이다. 


일반적으로 자바에서 메모리가 살아가는 과정은 다음과 같다.



 ① Eden 영역에서 객체서 생성된다.


 ② Eden 영역이 꽉 차면 살아있는 Survivor 영역으로 복사되고, 다시 Eden 영역을 채우게 된다.


 ③ Survivor 영역이 꽉 차게 되면 다른 Survivor 영역으로 객체가 복사된다.

    이때, Eden 영역에 있는 객체들 중 살아있는 객체들도 다른 Survivor 영역으로 간다.

    즉, Survivor 영역의 둘 중 하나는 반드시 비어 있어야만 한다.



지금까지 서술한 것을 마이너(Minor) GC 혹은 Young GC라고 부른다.


여기서 GC는 가비지 컬렉터가 아니라 가비지 컬렉션을 의미한다.



그러다가, 오래 살아있는 객체들은 Old 영역으로 이동한다.


지속적으로 이동하다가 Old 영역이 꽉 차면 GC가 발생하는데 이것을 메이저(Major) GC 혹은 FUll GC라고 부른다.



일반적으로 Young GC와 Full GC의 속도를 비교하면 Young GC의 속도가 빠르다.


Young GC는 더 작은 공간이 할당되고, 객체들을 처리하는 방식도 다르기 때문이다.


그렇다고, 전체의 힙 영역을 영 영역으로 만들면 장애로 이어질 확률이 매우 높아진다.



오라클 JDK에서 제공하는 GC의 방식은 크게 4가지 버전이 있으며,


JDK 7.0부터 추가된 G1(Garbage First)를 포함하여 총 5가지의 가비지 컬렉터가 존재한다.


정리하면 다음과 같다.



   ● Serial GC


   ● Parallel Young Generation Collector


   ● Parallel Old Generation Collector


   ● CMS : Concurrent Mark & Sweep Collector


   ● G1 : Garbage First



이중에서 WAS로 사용하는 JVM에서 사용하면 안되는 것은 Serial GC이다.


이 GC 방식은 -client 옵션을 지정했을 때 사용된다.


즉 클라이언트용 장비에 최적화된 GC이기 때문에 WAS에서 이 방식을 사용하면 GC의 속도가 매우 느려져


웹 애플리케이션이 엄청 느려진다.



그 외에 다른 GC 방식들은 서로 장단점이 존재하기 때문에 어떤 GC방식이 가장 적합하다고 이야기하기는 매우 어렵다.






Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[JAVA] JAVA에서 Map 이란?[JAVA] JAVA에서 Map 이란?

Posted at 2018. 7. 17. 02:55 | Posted in JAVA




■ 자바에서 맵(Map) 이란?




 -. 자바에서의 Map은 키(Key)와 값(Value)으로 이루어져 있다.

 -. 자바의 Map은 키와 값이 1 : 1로 저장된다.

 -. 키(Key)는 중복되지 않는다. 만약 키가 다르고, 값이 동일하다면 Map에서는 다른 것으로 간주한다.

  ① 모든 데이터는 키와 값이 존재한다.

  ② 키가 없이 값만 저장될 수는 없다.

  ③ 값이 없이 키만 저장할 수도 없다.

  ④ 키는 해당 Map에서 고유해야만 한다.

  ⑤ 값은 Map에서 중복되어도 전혀 상관 없다.



  -. Map은 java.util 패키지의 Map이란 이름의 인터페이스로 선언되어 있고, 구현해 놓은 클래스들도 많이 있다.


메소드 이름 및 매개 변수

리턴 타입

설 명

 put(K key, V value)

V

 첫번째 매개 변수인 키를 갖고 두번째 매개변수인 값을 갖는 데이터를 저장한다.

 putAll(Map<? extends K, ? extends V> m)

void

 매개 변수로 넘어온 Map의 모든 데이터를 저장한다.

 get(Oubject key)

V

 매개 변수로 넘어온 키에 해당하는 값을 넘겨준다.

 remove(Object key)

V

 매개 변수로 넘어온 키에 해당한느 값을 넘겨주며, 해당 키와 같은 Map에서 삭제한다.

 keySet()

Set<K>

 키의 목록을 Set 타입으로 리턴한다.

 values()

Collection<V>

 값의 목록을 Collection 타입으로 리턴한다.

 entrySet()

Set<Map.Entry<K, V>>

 Map 안에 Entry라는 타입의 Set을 리턴한다.

 size()

size()

 Map의 크기를 리턴한다.

 clear()

clear()

 Map의 내용을 지운다.


 -. Map을 사용할 때 꼭 기억해야 하는 것은 맵에 데이터를 넣는 put(), 데이터를 확인하는 get(), 데이터를 삭제하는 remove()메소드 이다.





Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[JAVA] JAVA의 접근 제어자[JAVA] JAVA의 접근 제어자

Posted at 2018. 7. 17. 01:55 | Posted in JAVA




■ 자바의 접근 제어자




 -. 자바를 배우면 꼭 외우고, 이애하고 있어야 하는 것 중에 접근 제어자(Access modifer)라는 것이 있다.

 -. 자바의 접근 제어자에는 4개가 있다.

 -. 접근 제어자는 클래스, 메소드, 인스턴스 클래스 변수를 선언할 때 사용된다.


    package c.javapackage.sub;


    public class Sub {


        // 중간 생략

        public void publicMethod() {


        }


        protected void protectedMethod() {


        }


        /* package-private */

        void packagePrivateMethod() {


        }


        private void privateMethod() {


        }

    } 


 자바에는 이와 같이 public, protected, package-private(접근 제어자 없음), private 로 총 4가지로 접근 제어자가 있다.


 ① public : 누구나 접근 할 수 있도록 할 때 사용한다.

 ② protected : 같은 패키지 내에 있거나 상속받은 경우에만 접근할 수 있다.

 ③ package-private : 아무런 접근 제어자를 적어주지 않을 때이며, package-private라고 불린다. 같은 패키지 내에 있을 때만 접근할 수 있다.

 ④ private : 해당 클래스 내에서만 접근 가능하다.


 

해당 클래스 안에서

같은 패키지에서

상속 받은 클래스에서

import한 클래스에서

 public



 protected


×

 (package private)

×

×

 private

×

×

×








Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기