본문 바로가기

분류 전체보기

(41)
final, 접근제어자 레거시 코드를 리팩토링을 할 때, final 키워드가 없고 접근제어자가 public 인 메소드를 마주하면, 아래 의문을 계속 확인하면서 작업해야 한다. 이 메소드는 왜 public 이지? 외부에서 사용하는 곳이 있나? 이 메소드를 어디선가 override 해서 사용하고 있나? API 를 만들 때, 이 클래스를 사용할 개발자에게 어디까지 노출할 것인지를 계속 확인해야 한다. public interface A { void a1(); } public class AImpl implements A { @Override public void a1() { a2(); a3(); } public void a2() { .. } private void a3() { .. } } AImpl 의 a1() 메소드는 같은 클래스의 ..
http.formLogin() http.formLogin() .loginPage("/login.html") .defaultSuccessUrl("/home") .failureUrl("/login.html?error=true") .usernameParameter("username") .passwordParameter("password") .loginProcessingUrl("/login") .successHandler(loginSuccessHandler()) .failureHandler(loginFailureHandler()) ; loginPage 사용자 정의 로그인 페이지 사용자가 Login 페이지를 구성한 후, 경로를 입력하면, LoginPage 호출시 해당 경로에 작성한 커스텀 페이지가 열린다. defaultSuccessUrl 로그..
Spring Security 기본 User/Password 설정 Spring Security 의존성을 추가하면 기본적으로 로그인 가능한 id/pasword를 제공한다. 기본 아이디는 user 이고, password 는 스프링 부트를 실행할 때마다 랜덤한 UUID 값으로 제공한다. Using generated security password: 392c7d84-9210-4a3b-9d81-b516abcb4b47 2021-12-19 18:16:10.594 INFO 62476 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@6..
JPA 기본키 할당 전략 들어가며 스프링 부트를 활용한 마이크로 서비스 개발 로 스터디를 진행하며, WAS가 여러개인 경우, JPA는 어떻게 ID를 할당해 동시성 문제를 해결하는지에 대한 질문이 나왔다. 그래서 자바 ORM 표준 JPA 프로그래밍 책과 인프런 강의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 다시 보며 정리한 내용이다. 예제 코드 @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID") private String id; } 기본키 할당 전략 직접 할당 기본키를 애프리케이션에서 직접 할당한다. 자동 할당 대리키 사용 방식 IDENTITY : 기본 키 생성을 데이터베이스에 위임한..
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..