본문 바로가기

Java

(13)
5. 애너테이션 적용 @Transactional 구현 - 목차 2021.12.02 - [Java/@Transaction 구현] - 1. 배경설명, 구현 동기 및 목표 2021.12.02 - [Java/@Transaction 구현] - 2. Aspect Oriented Programming 2021.12.02 - [Java/@Transaction 구현] - 3. Proxy 패턴 2021.12.02 - [Java/@Transaction 구현] - 4. JDK Dynamic Proxy 2021.12.02 - [Java/@Transaction 구현] - 5. 애너테이션 적용 (현재 글) 앞에서는 메서드의 이름으로 쓰기 트랜잭션 진입 여부를 결정했다. 메소드의 이름으로 부가기능 적용여부를 결정하면, 부가기능을 동적으로 적용할 수 없다..
4. JDK Dynamic Proxy @Transactional 구현 - 목차 2021.12.02 - [Java/@Transaction 구현] - 1. 배경설명, 구현 동기 및 목표 2021.12.02 - [Java/@Transaction 구현] - 2. Aspect Oriented Programming 2021.12.02 - [Java/@Transaction 구현] - 3. Proxy 패턴 2021.12.02 - [Java/@Transaction 구현] - 4. JDK Dynamic Proxy (현재 글) 2021.12.02 - [Java/@Transaction 구현] - 5. 애너테이션 적용 자바는 동적으로 프록시를 만들 수 있는 프록시 라이브러리인 JDK Dynamic Proxy 를 제공한다. JDK Dynamic Proxy 를 사용하..
3. Proxy 패턴 @Transactional 구현 - 목차 2021.12.02 - [Java/@Transaction 구현] - 1. 배경설명, 구현 동기 및 목표 2021.12.02 - [Java/@Transaction 구현] - 2. Aspect Oriented Programming 2021.12.02 - [Java/@Transaction 구현] - 3. Proxy 패턴 (현재 글) 2021.12.02 - [Java/@Transaction 구현] - 4. JDK Dynamic Proxy 2021.12.02 - [Java/@Transaction 구현] - 5. 애너테이션 적용 앞서 Cell을 핵심기능과 부가기능으로 나눠서 살펴봤다. 부가기능을 모듈화하고 핵심기능의 전, 후에 실행하거나, 부가기능 내에서 핵심기능을 수행할 ..
2. Aspect Oriented Programming @Transactional 구현 - 목차 2021.12.02 - [Java/@Transaction 구현] - 1. 배경설명, 구현 동기 및 목표 2021.12.02 - [Java/@Transaction 구현] - 2. Aspect Oriented Programming (현재 글) 2021.12.02 - [Java/@Transaction 구현] - 3. Proxy 패턴 2021.12.02 - [Java/@Transaction 구현] - 4. JDK Dynamic Proxy 2021.12.02 - [Java/@Transaction 구현] - 5. 애너테이션 적용 Cell 의 동작방식 우선 Cell 이 어떻게 동작하는지 알아본다. Node.java public class Node { private final ..
1. 배경설명, 구현 동기 및 목표 @Transactional 구현 - 목차 2021.12.02 - [Java/@Transaction 구현] - 1. 배경설명, 구현 동기 및 목표 (현재 글) 2021.12.02 - [Java/@Transaction 구현] - 2. Aspect Oriented Programming 2021.12.02 - [Java/@Transaction 구현] - 3. Proxy 패턴 2021.12.02 - [Java/@Transaction 구현] - 4. JDK Dynamic Proxy 2021.12.02 - [Java/@Transaction 구현] - 5. 애너테이션 적용 배경설명 Eclipse UI 에 등록된 값을 입력/수정할 때는 두가지 과정을 거친다. 첫 번째로 인가(Authorization)이고, 두 번째는 쓰..
ClassLoader 클래스 로더 실행 시, 필요한 클래스를 동적으로 메모리에 로드한다. 기존에 생성된 클래스 객체가 메모리에 존재하는지 확인한다. 메모리에 존재하면 객체의 참조를 반환하고, 없으면 클래스 패스에 지정된 경로를 따라서 클래스 파일을 찾는다. 로딩, 링크, 초기화 순으로 진행된다. 로딩 클래스 로더가 .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 "메소드" 영역에 저장 메소드 영역에 젖아하는 데이터 FQCN (Full Qualified Class Name) 클래스 | 인터페이스 | 이늄 메소드와 변수 로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하여 "힙" 영역에 저장 링크 Verify, Prepare, Resolve(optional) 세 단계로 나눠져 있다. 검증 (Ver..
Class 객체 Class 객체 이름이 Class 인 객체 public final class Class implements ... { ... } Class 객체는 모든 정보를 담고 있다. 클래스 당 1개만 존재한다. 클래스 파일이 클래스로더에 의해서 메모리에 올라갈때 자동으로 생성된다. getClass() 메서드로 자신이 속한 클래스의 Class 객체를 얻을 수 있다.
애너테이션 (Annotation) 애너테이션(Annotation) 애너테이션은 코드 메타 데이터이다. 메타데이터는 자신의 정보를 담고있는 데이터를 말한다. 패키지, 클래스, 메소드, 변수, 파라미터등에서 사용될 수 있으며, 자바 8부터는 코드의 거의 모든 부분에서 사용될 수 있다. 애너테이션이 적용된 코드는 직접적으로 애너테이션으로부터 영향을 받지 않는다. 단지 다른 프로그램(서브시스템)에 애터네이션에 대한 정보를 제공한다. 애너테이션 작성 방법 Transactional.class @Retention( RetentionPolicy.RUNTIME) @Inherited @Target(ElementType.METHOD) public @interface Transactional { String value(); } @Target : 애너테이션이 ..
OpenJDK 버전 변경하며 사용하는 방법 실습환경 - Macbook Air (2020, M1) - OpenJDK (1.8, 11) OpenJDK 설치 - OpenJDK 8 - OpenJDK 11 OpenJDK 버전 변경 위 내용을 ~/.bashrc 또는 ~/.zshrc 에 입력하고 저장한다. source 명령어를 이용해 .bashrc 또는 .zshrc 에 설정한 profile 정보를 현재 터미널에서 바로 사용할 수 있도록 한다. 다음과 같이 입력해 JDK의 버전을 변경할 수 있다. 명령어 분석 version=$1 jdk 명령어를 실행할 때, 입력한 첫 번째 argument를 version 변수에 저장한다. 앞서 jdk 버전을 11로 변경할 때, "jdk 11" 라고 작성했었다. version 변수에는 11 이 저장된다. export JAVA_H..
Lombok @Builder 로 Builder 패턴 적용하기 Builder Pattern UserEntity.java 에 다음과 같이 Builder 패턴을 적용할 수 있다. UserEntity.java 제약사항 Field Description id auto_increment name 필수값 - 빈 문자열을 입력할 수 없음. nickname Optional - 입력시 빈 문자열을 입력할 수 없음. createdAt Database에 입력한 시간 - 사용자가 설정할 필요 없음. Builder Pattern 위 코드는 제약사항을 만족하는 Builder 패턴을 작성한 것이다. Lombok @Builder 패턴 Lombok의 @Builder 애너테이션을 이용해서 Builder 패턴을 "쉽게" 적용할 수 있다. 1. @Builder 애너테이션을 입력한다. 그리고 실행하면 다..