Java

    [JPA] Spring Jpa Repository의 영속성 컨텍스트 동작방식

    개발을 하다보면 Root 도메인에 종속적인 Sub 도메인을 어떻게 처리할지 고민이 될 때가 있다. 예를 들면, 재생 목록의 음악들은 재생 목록이라는 Root 도메인에 종속적인 Sub 도메인 들이다. Delete And Insert 방식을 실행할 수도 있고, Update 방식을 사용할 수도 있다. 그러다보니 JPA를 사용했을때, 각 개발 방식이 어떻게 동작하는지 알고 싶어서 직접 엔티티를 생성하며 테스트 코드를 작성해 보았다. 코드는 모두 깃허브에 작성해두었다. private SimpleEntity create(String name) { SimpleEntity entity = SimpleEntity.builder() .name(name) .build(); return repository.save(entit..

    [JPA] Spring Data에서 save()와 saveAll()의 성능 차이

    https://www.baeldung.com/spring-data-save-saveall 해당 글은 위 링크를 번역한 글입니다. Overview Spring Data의 save와 saveAll의 성능 차이를 알아보자. Application Book.java @Entity public class Book { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String title; private String author; // constructors, standard getters and setters } BookRepository.java public interface BookRepository extends JpaR..

    [Gradle] Spring Boot 멀티 모듈 설정

    Gradle Groovy 언어를 기반으로한 빌드 도구 왜 maven이 아닌 gradle을 사용할까 cache를 적용하여 빌드 속도를 줄일 수 있다. 스크립트 언어로 변수 설정, 로직 구현 등 반복되는 코드 양을 줄일 수 있다. task 설정, 모듈별 의존성 설정 등 xml과 비교해 가독성이 높다. init.gradle 초기화 스크립트, build시에 가장 먼저 실행 사용자 정보 및 실행 환경 초기화에 사용 gradle.properties 환경에 따라 값이 달라지는 파라미터 정의 settings.gradle rootProject.name = 'study' include 'simple' 빌드 대상 프로젝트를 설정 멀티 모듈 프로젝트에서 build 대상 프로젝트를 지정 build.gradle 프로젝트 의존관계..

    [Spring Security] FormLogin에서 Custom Filter 처리 이슈

    @Override protected void configure(final HttpSecurity http) throws Exception { http .formLogin() .loginPage("/login.html") .loginProcessingUrl("/perform_login") .defaultSuccessUrl("/homepage.html", true) //.failureUrl("/login.html?error=true") .failureHandler(authenticationFailureHandler()) } Spring Security를 보다보면 위처럼 FormLogin을 통해서 Login 로직을 구성하는 경우가 굉장히 많다. @Override protected void configure(f..

    [JAVA] M1 jdk, jenv 환경 세팅

    brew 가 3.0.0부터 m1용 brew를 지원하기 시작하면서 설치 경로가 변경되었다. 기존엔 /usr/local에 설치되었지만, 현재는 /opt/homebrew에 설치되기 때문에 환경 설정에 주의해야 한다. jdk 설치 brew install openjdk@11 jdk java development kit의 약자로 자바 개발 키트이다. java로 만들어진 파일을 실행하려면 jre(java runtime environment)가 필요하듯이, java로 개발하기 위해선 jdk가 필요하다. jre와 함께 컴파일러인 javac나 java console, java doc 등을 포함한다. jenv 설치 brew install jenv echo 'export PATH="$HOME/.jenv/bin:$PATH"' ..

    [Spring Security] LoginSuccessHandler와 FailureHandler 호출 원리

    기본적인 인증 책임 구조 SpringSecurity에서 인증은 보통 AuthenticationFilter → AuthenticationManager → AuthenticationProvider 순으로 인증 책임을 위임한다. (UserDetailsService 는 User 정보를 load하는 역할만 수행) Authentication Success 로직 기본적인 Authentication Filter인 UsernamePasswordAuthenticationFilter 를 보면 AbstractAuthenticationProcessingFilter 를 extends 하는 걸 볼 수 있다. private void doFilter(HttpServletRequest request, HttpServletResponse..