Java
-
자바 빌드 툴Java/Basics 2019. 5. 21. 09:48
■컴파일이란? - 하나의 소스파일(사람이 다루기 편한 파일)을 바이트 코드 파일(컴퓨터가 다룰 수 있는 파일)로 번역하는 작업 ■빌드란? - 전처리, 전체 소스 컴파일, 링크, 각종 파일 패키징, 테스트, api문서 생성, 배포 등을수행하여 프로젝트가 서비스 가능한 하나의 산출물로 종합하는 작업. ■빌드 자동화 - ant, maven, gradle 등의 빌드 툴이 복잡한 빌드 과정을 도와준다. ■apache ant(Another Neat Tool) - 자바로 구현되어 자바 프로젝트 빌드에 최적화되어 있다. - build.xml라는 빌드 스크립트를 작성하여 빌드를 자동화. - 유연한 스크립트 작성 방식이 때로 비효율적인 경우가 생겼고 라이브러리 의존성의 필요성이 대두되어 maven이라는 새로운 빌드 툴이 ..
-
Spring 어노테이션Java/Spring 2019. 5. 20. 10:00
■Annotation- 사전적 의미는 '주석'이다. - 일반 자바 어플리케이션에서는 프로그램 실행에 직접적인 영향이 없는 주석의 역할을 충실히 수행하지만 스프링에서는 단순 주석을 넘어 막강한 영향을 끼치는 코드 장치(?) 라고 볼 수 있다. ■bean이란?- 자주 사용될 클래스들은 아예 처음부터 하나만 미리 만들어 놓고 그 객체를 여러 클래스에서 참조해 사용하면 훨씬 경제적이고 효율적이기 때문에 등장하게 된 개념!이런 클래스를 bean 클래스라고 부른다. - 클래스를 bean으로 등록시키는 어노테이션과 그렇지 않은 어노테이션으로 구분해서 아래에 정리해 봤다. ■bean으로 등록되는 Annotation- @Component- 클래스들이 스프링의 component-scan기능에 의해 스캔되어 bean으로 등..
-
자바 메모리 구조(Runtime Data Area)Java/Basics 2019. 5. 16. 10:59
■Runtime Data Area Runtime Data Area는 JVM이 프로그램을 수행하기 위해 OS로부터 할당받는 메모리 영역이다. WAS의 성능에 문제가 발생했을 때, 대부분 이 영역들이 원인이 된다. (Memory Leak 혹은 GC) Runtime Data Area는 5가지로 구분된다. PC Register JVM stack Native Method stack Heap Method Area 위 그림에서 볼 수 있다시피, 좌측 3개의 영역은 Thread별로 생성되고 우측 2개의 영역은 모든 Thread가 공유한다.●PC Register (Thread별로 1개씩 존재) Java의 PC Register는 CPU 내의 기억장치인 레지스터와는 다르게 작동한다. (Register-Base가 아닌 Sta..
-
xssJava/Spring 2019. 5. 7. 15:42
■xss(Cross-site Scripting)란??- 특정 웹 페이지의 허점을 찾아 자바스크립트를 사용하여 타인의 정보를 빼가는 공격! ■xss 공격의 예- 태그 등을 form 입력 페이지 등을 통해 서버 DB에 저장시킨다. - 공격 코드는 js로 구성되기도 하고, xss체크에 걸리지 않기 위해 아스키코드로 변환한 js 코드로 구성되기도 한다. - 그리고 피해자가 특정 페이지에 접속하면 공격자가 저장한 악성 데이터가 로드되고 실행된다. 피해자의 브라우저는 공격자의 스크립트에 의해 세션을 탈취당하여 개인 정보를 털리기도 하고, 순식간에 악성 사이트로 이동되기도 한다. - 더 많은 예 : https://handongchoi.com/2017/11/18/xss-script/ ■xss를 방어하기 어려운 이유??..
-
String compareJava/Basics 2019. 4. 9. 09:11
■String- String은 기본형 타입(int,double 등)이 아니라 참조형 타입(class)- String str = new String("Limky");- JVM heap 영역에 할당 - 그러나 특이하게 기본형 타입처럼 값을 직접 할당 해서도 사용 가능- String str = "Limky";- JVM class 영역의 상수풀에 할당 ■String의 내용비교 vs 주소비교- String str01 = "Limky"; String str02 = "Limky";두 변수 모두 '하나'의 String 클래스를 '가리키고' 있다. 내용도 같고 주소도 같다. - String str01 = new String("Limky"); String str02 = "Limky"; 두 변수는 각각 heap과 class..
-
Object classJava/Basics 2019. 4. 6. 20:40
■Object class의 정체- '기본적인' class이다. - 뭔 말이냐면, 모든 클래스가 상속하고있는 기본 Default 클래스이다.클래스들의 단군 할아버지인 것이다. - 모든 클래스는 기본적인 Object 클래스를 암시적으로 상속받고 있다. ■그런데 모든 클래스가 Object를 상속받는 것을 왜 알아야 함?- 추측컨대, 자바의 아부지인 제임스 고슬링은 "모든 클래스가 기본적으로 몇 가지 '특징'들을 가지고 있었으면 좋겠다" 라고 생각했던 것 같다. - 왜냐면 모든 클래스가 필요로 하는 기능이 있었을텐데 이를 모든 클래스가 공통적으로 가지고 있도록 미리 약속할 수 있다면 귀찮게 매번 그 기능을 구현하거나 명세할 필요가 없을 테니 말이다. ■스타크래프트 유닛 예를 통해 필요성 더 알아보기- 예를 들면..
-
jar,war,earJava/Basics 2019. 4. 6. 15:32
■단위- class < jar < war < ear ■jar(java archive,자바 보관 압축 파일!)- 자바로 작성된 일반적인 응응 프로그램 또는 라이브러리- application 기능이 가능하도록 java파일 등을 압축하고 지원- 어플리케이션 레벨에서 사용(business layer) ■war(web archive)- 웹 어플리케이션을 지원하기 위한 압축방식- servlet context 접근을 위해 관련된 모든 파일들을 패키지화- JAR의 웹 응용 특화 버전이라고 생각하면 될듯!- 자바이외에 다른 언어 들도 포함될 수 있음- was가 압축해제하여 배포- 웹어플리케이션 레벨에서 사용(web layer) ■ear(enterprise archive)- 하나의 웹어플리케이션 단위를 넘어 실제 서버에서..
-
IOC (DI)Java/Spring 2019. 4. 6. 15:17
■IoC/DI의 실생활 비유- 전자제품을 살 때, 우리는 플러그에 대해서 신경쓰지 않고 구매한다.(IOC)- 왜냐하면 우리나라에서는 220v 형태의 플러그로 만들도록 암묵적인(?) 규칙이 정해져 있기 때문이다.(인터페이스)- 그래서 전자제품 회사들도 제품을 만들 때, 220v 형태로 만드는 규칙(인터페이스)만 잘 따르면제품을 어떻게 만들든 사람들이 사용하도록 만들 수 있다!(DI) ■스프링에서 IOC/DI를 사용하게 된 이유- ejb 때문에 희미해져버린 객체지향을 다시 살려보자! 하면서IOC/DI같은 객체지향 기법을 도입함~(+IOC/DI가 스프링 고유의 기법은 아니라는걸 알수있다 ㅎㅎ)- 사실 스프링은 IOC, DI, AOP 같은 기존의 객체지향 기법들을 더욱 잘 쓰게 해주는 중재자(?)라고 할 수 있..