본문 바로가기

분류 전체보기48

Spring singleton vs Java static 큰 차이점은 Scope와 Thread Safe 여부이다. Java의 static은 ClassLoader 기준이고, Spring singleton은 ApllicationContext 기준이다. Tomcat을 was로 사용한다고 했을때, WebApplication별로 별도 클래스로더를 사용하여 동일 WebApplication끼리 공유할 수 있게 한다. 스프링 싱글톤은 DispatcherServlet 위에 등록된 ApllicationContext별로 공유하며 Spring IoC컨테이너에서 공유가 가능하다. 스프링 싱글톤은 IoC Container에 의해 Thread Safe를 자동으로 보장하게 되어 있다. 2022. 4. 17.
Java 프로그램 실행 과정 (JVM 동작 원리) JVM의 역할 Application ClassLoader를 통해 읽어 들여 Java API와 함께 실행. Java와 OS 사이에서 중개자 역할을 수행한다. Java Byte Code (.class file)를 OS에 맞게 해석하여 JVM 위에서 OS와 상관없이 실행된다. JVM은 스택기반의 가상 머신이며, 메모리 관리와 Garbage Collection을 수행한다. Java 프로그램 실행과정 프로그램이 실행되면 OS가 JVM에게 필요한 메모리를 할당한다. Java 컴파일러(javac)가 자바 소스 코드(. java)를 읽어 자바 바이트코드(.class)로 변환한다. Class Loader를 통해 class 파일들을 JVM으로 로딩한다. 로딩된 class파일들은 Execution Engine을 통해 해석된.. 2022. 4. 17.
GC 동작 원리 GC (Garbage Collector)란 C/C++ 언어와 달리 자바는 개발자가 명시적으로 객체를 해제할 필요가 없습니다. 자바 언어의 큰 장점이기도 합니다. 사용하지 않는 객체는 메모리에서 삭제하는 작업을 GC라고 부르며 JVM에서 GC를 수행합니다. 기본적으로 JVM의 메모리는 총 5가지 영역(class, stack, heap, native method, PC)으로 나뉘는데, GC는 힙 메모리만 다룹니다. 일반적으로 다음과 같은 경우에 GC의 대상이 됩니다. 객체가 NULL인 경우 (ex. String str = null) 블럭 실행 종료 후, 블럭 안에서 생성된 객체 부모 객체가 NULL인 경우, 포함하는 자식 객체 GC 동작원리 JVM에서 GC의 스케줄링을 담당하여 Java 개발자에게 메모리 관.. 2022. 4. 17.
.DS_Store 파일 삭제 방법 .DS_Store 파일이란? DS_STORE 파일이란 Desktop Services Store의 약자로, 애플에서 정의한 파일 포맷이다. 애플의 맥 OS X 시스템이 finder로 폴더에 접근할 때 자동으로 생기는 파일로써, 해당 폴더에 대한 메타데이터를 저장하는 파일이다. 윈도우의 thumb.db 파일과 비슷하다. 분석해보면 해당 디렉토리 크기, 아이콘의 위치, 폴더의 배경에 대한 정보들을 얻을 수 있다. 맥 OS 환경에서만 생성 및 사용되지만, 파일을 공유하는 과정에서 이 파일도 같이 공유되는 경우가 있다. DS_store 파일은 프로젝트와 관련없는 파일이며, git status를 사용했을 때 발견되는 파일이니, github로 넘기지말고 삭제해도 된다. .DS_Store 삭제 방법 저장소 상위 디렉토.. 2022. 1. 5.
객체 지향 설계 5가지 원칙 (SOLID) SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 SRP : 단일 책임 원칙 (single responsibility principle) OCP : 개방-폐쇠 원칙 (open/ closed principle) LSP : 리스코프 치환 원칙 (Liskov substitution principle) ISP : 인터페이스 분리 원칙 (interface segregation principle) DIP : 의존관계 역전 원칙 (dependency inversion principle) SRP(단일 책임 원칙) 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것음 모호하다. - 클 수 있고, 작을 수 있다. - 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이.. 2021. 12. 26.
JVM 메모리 구조 메소드 영역 JVM 이 읽어들인 각각의 클래스와 인터페이스에 대한 런타임 정보, static 변수, 메소드 바이트코드 저장. JVM당 1개의 영역이 있으며 이는 공유된다. 힙영역 인스턴스 또는 객체를 저장. GC 대상으로 JVM 성능에 대한 이슈가 가장 많이 언급. JVM 당 하나의 영역만 존재하며 공유한다. 스택영역 모든 스레드에 대해 JVM은 여기에 저장된 하나의 런타임 스택을 만들게 된다. 이 스택을 활성화 레코드 / 스택프레임이라고 한다. 해당 메소드의 모든 로컬 변수는 프레임에 저장된다. 스레드가 종료된 후에는 런타임 스택이 JVM 에 의해 삭제된다. 공유되지 않는다. PC 레지스터 각 스레드 마다 존재하며, 스레드 시작시에 생성. JVM 이 수행할 명령어의 주소를 저장. 스레드의 현재 실행 명.. 2021. 12. 11.