본문 바로가기

프로그래밍(TA, AA)/JVM 언어

(117)
[스프링] 스프링이란 무엇인가? 스프링은 기본적으로 IoC와 DI를 위한 컨테이너로서 동작하지만 그렇다고 "스프링은 단지 IoC/DI 프레임워크다"라고는 말할 수 없습니다. 스프링은 단순히 IoC/DI를 편하게 적용하도록 돕는 단계를 넘어서 엔터프라이즈 애플리케이션 개발의 전 영역에 걸쳐 다양한 종류의 기술에 관여합니다. 그렇다면 과연 스프링이란 무엇이고 어떻게 설명할 수 있을까요? 스프링 프레임워크가 만들어진 이유와 존재 목적, 추구하는 가치는 무엇일까요? 스프링의 사상과 가치, 그리고 적용된 원칙을 깊이 있게 생각하는 과정을 통하면 스프링이란 도대체 무엇이고 왜 존재하는지를 좀 더 체계적으로 이해할 수 있다면 앞으로 스프링을 더 쉽게 이해하는 데 도움이 될 것입니다. 1. 스프링의 정의스프링이란 이런 것이다라고 한마디로 정의하기는 ..
[자바] 자바 메모리 구조 자바 메모리 구조 메모리 구조를 정확히 이해하면, 같은 기능의 프로그램이더라도 메모리 관리에 따라 성능이 좌우돼며, 메모리 관리가 되지 않을 경우 속도저하 현상이나 튕김 현상이 일어날 수 있습니다. 또한 한정된 메모리를 효율적으로 사용하여 최고의 성능을 낼 수 있습니다. 다음은 자바 프로그램의 실행 구조입니다. 프로그램이 실행되기 위해서 windows나 linux같은 운영체제(OS)가 제어하고 있는 시스템의 리소스의 일부인 메모리(RAM:주기억장치)를 제어할 수 있어야 하는데, java 이전의 c같은 언어로 만들어진 프로그램은 이런 이유등으로 OS에 종속되어 실행됩니다. 반면, java 프로그램은 JVM(Java Virtual Machine) 이라는 프로그램만 있으면 실행이 가능하며, JVM이 OS에게서..
[JSP] 적절한 include 사용하기 일반적으로 JSP에서 소요되는 시간은 많지 않습니다. JSP가 가장 처음에 호출되는 경우에만 시간이 소요되고, 그 이후의 시간에는 컴파일된 서블릿 클래스가 수행되기 때문입니다. 그럼 JSP의 라이프 사이클을 간단하게 리뷰해 보면 다음과 같습니다. JSP의 라이프 사이클은 다음의 단계를 거칩니다. 여기서 해당 JSP 페이지가 이미 컴파일되어 있고, 클래스가 로드되어 있고, JSP 파일이 변경되지 않았다면, 가장 시간이 많이 소요되는 페이지 번역, JSP 페이지 컴파일, 클래스 로드, 인스턴스가 생성되는 과정을 생략되고 JSP URL이 호출되면 바로 인스턴스가 생성되어 바로 jspInit 메소드가 호출되는 방식으로 흐름이 이어집니다. 서버의 종류에 따라서 서버가 기동될 때 컴파일을 미리 수행하는 Pre-co..
[자바성능] 클래스 정보와 reflection Reflection 관련 클래스들 자바 API에는 reflection이라는 패키지가 있습니다. 이 패키지에 있는 클래스들을 써서 JVM에 로딩되어 있는 있는 클래스와 메소드 정보를 읽어 올 수 있습니다. 주요 클래스로 어떤 것들이 있으며, 각 클래스에서 제공되는 메소드들은 아래와 같습니다. Class 클래스 Class 클래스는 클래스에 대한 정보를 얻기에 좋은 클래스입니다. Class 클래스는 생성자가 따로 없습니다. ClassLoader 클래스의 defineClass() 메소드를 이용해서 클래스 객체를 만들 수도 있지만, 좋은 방법은 아닙니다. Object 클래스에 있는 getClass() 메소드를 이용하는 것이 일반적입니다. String getName(): 클래스의 이름을 리턴한다. Package g..
[자바성능] static의 올바른 사용 static에는 static 초기화 블럭이라는 것이 있습니다. static 초기화 블록은 위와 같이 클래스 어느 곳에나 지정할 수 있습니다. 이 static 블록은 클래스가 최초 로딩될 때 수행되므로 생성자 실행과 상관없이 수행됩니다. 위의 코드처럼 사용했을 때, staticVal의 값은 마지막에 지정한 값이 됩니다. static 블록은 순차적으로 읽혀집니다. package com.perf.statics; public class StaticBasicSample2 { static String staticVal; static { staticVal = "Static Value"; staticVal = StaticBasicSample.staticInt + ""; } public static void main(S..