본문 바로가기

자바

(12)
ThreadLocal ThreadLocal 클래스는 thread-local 변수를 제공thread-local 변수 - 스레드 내부에서 사용하는 지역 변수(각 스레드에서 별도의 변수처럼 사용할 수 있음) - get, set 메소드를 통해 값을 가져오고 세팅함 - 스레드가 종료되기 전까지 변수를 사용할 수 있음 - 스레드 풀을 통해 스레드를 재사용 하는 경우 이전에 사용했던 값을 공유할 수 있음 ThreadLocal 사용 시 주의점 - ThreadLocal 변수 선언시 static으로 선언 해야 함 [참조]https://velog.io/@skygl/ThreadLocalhttps://devonce.tistory.com/25
Spring Bean Scope Bean Scope1. singleton - spring container 가 생성 될 때 한번 생성 됨, container가 소멸 될 때 bean도 소멸 됨 - 생성 된 하나의 인스턴스는 single bean cache에 저장 되고, 해당 bean의 참조가 있으면 cache에서 객체를 반환 함 - default 값2. prototype - 모든 요청에서 새로운 인스턴스를 생성해서 반환 - 사용이 끝나면 정상적인 방식으로 Garbage Collector에 의해 제거 됨3. request - 하나의 HTTP request에 하나의 bean이 생성 됨 - web-aware spring application context 안에서 유효함4. session - 하나의 HTTP session에 하나의 bean이 생..
Spring AOP AOP (Aspect Oriented Programming) - 비즈니스 로직과 공통 로직을 분리 하여 비즈니스 로직에 영향을 미치지 않고 공통 로직을 앞 뒤로 끼워넣는(?) 방법 - ex) logging, transaction 처리, 사용자 인증 등 AOP 구성요소1. Target : Aspect 부여 대상2. JoinPoint : Aspect가 적용 될 시점(위치) - Before, After, AfterReturning, AfterThrowing, Around3. Advice : 각 JoinPoint에 삽입되어 동작할 모듈4. PointCut : Advice를 적용할 JoinPoint를 선별하는 기능을 정의하는 모듈5. Introduction : Target Class에 코드 변경 없이 메소드나 필..
Spring Transaction Isolation1. READ_UNCOMMITED - 트랜잭션 처리 중인(커밋 되지 않은) 데이터를 다른 트랜잭션에서 읽을 수 있음 - dirty read 발생2. READ_COMMITED - 트랜잭션이 종료(커밋)된 데이터만 읽을 수 있음 - unrepeatable read 발생3. REPEATABLE_READ - 트랜잭션이 완료될 때 까지 읽는(select) 데이터에 shared lock 이 걸림 - phantom read 발생4. SERIALIZABLE - MVCC를 사용하지 않고 완벽한 읽기 일관성 제공 Propagation1. REQUIRED - 부모 트랜잭션이 존재하면 그 안에서 실행, 없으면 새로운 트랜잭션을 만들어서 수행2. REQUIRES_NEW - 부모 트랜잭션이 존재하던 아니던 무조건..
IoC(Inversion of Controll) - 제어의 역전 IoC(Inversion of Controll) - 제어의 역전 - 인스턴스의 생성부터 소멸까지의 생명주기를 스프링 IoC 컨테이너에서 해줌 - 스프링 IoC 컨테이너는 객체의 생성을 책임지고 의존성을 관리함 IoC 구현 방법1. DL(Dependency Lookup) - 의존성 검색 - 빈에 접근 하기 위해 개발자가 사용 시점에 검색 해서 가져옴2. DI(Dependency Injection) - 의존성 주입 - 객체 생성 시점에 필요한 빈을 컨테이너에서 주입해 주는 것 (setter injection, constructor injection, method injection) 클래스 호출 방식 일반적인 클래스 호출클래스 내에 선언과 구현이 같이 있어서 다양한 형태로 변화가 불가능 인터페이스를 이용한 클..
DispatcherServlet 1. Http(s)로 들어 오는 모든 request를 받음 2. HandlerMapping애 어떤 Controller(Handler)를 사용할건지 알아냄3. HandlerAdapter를 통해 Controller에 전달4. Controller에서 돌려준 view name으로 ViewResolver에서 View를 알아냄5. View에 요청해 처리된 결과를 화면으로 표현함6. 웹 브라우저에 최종 결과를 출력 DispatcherServlet이 가지는 기능(전략 인터페이스)HandlerMappingRequest와 Controller 객체를 mapping을 정의하는 인터페이스일반적으로 사용하는 @RequestMapping을 이용한 handler mapping 전략 BeanNameUrlHandlerMapping, D..
Garbage Collection 메모리를 명시적으로 해제하지 않아도 메모리 할당 받은 객체를 참조하는 부분이 없는 경우 Garbage Collector를 통해 자동으로 관리 해줌 - 사용한 객체를 null로 지정하지 않아도 됨 - System.gc() 를 호출하면 문제가 커짐 (필요 없는 상황에서 Full GC가 수행 됨...)Stop-the-world : GC를 수행하기 위해 JVM이 Application을 멈추는 것 (GC를 수행하는 Thread 제외하고 모든 Thread의 작업을 멈춤) - GC 튜닝이라는 것은 결국 Stop-the-world 시간을 줄이는 것인데, 이건 Major GC(Full GC)와 관련이 있음 Heap Memory에는 Young 영역과 Old 영역이 존재함 1. Young 영역 - 새로 생긴 객체가 위치함 ..
JVM 메모리 구조 JVM (Java Virture Machine - 자바 가상 머신) - Java와 OS 사이의 중개자 역할 - Java가 OS 종류에 영향 받지 않고 동작하게 해줌 - 자동 메모리 관리 (GC) Java Source : 사용자가 작성한 자바 파일Java Compiler : Java Sourece 파일을 JVM이 해석할 수 있는 Byte Code 로 변경해 줌Java Byte Code : Java Compiler 에 의해 변경 된 결과 물Class Loader : Class 파일을 JVM으로 로드 하고 Link를 통해 적절히 배치. Runtime 시 동적으로 로드Execution Engine : Class Loader를 통해 로드 된 Byte Code를 명령어 단위로 수행Garbage Collector :..