본문 바로가기

분류 전체보기61

동시 세션 제어 / 세션 고정 보호 / 세션 정책 동시 세션 제어 현재 동일한 계정으로 인증을 받을 때, 생성되는 세션의 허용 개수가 초과되었을 경우에 어떻게 그 세션을 계속적으로 초과하지 않고 유지할 수 있을까? Spring Security의 동시 세션 제어 전략에는 2가지(이전 사용자 세션 만료 / 현재 사용자 인증 실패) 방식이 있다. http.sessionManagement() : 세션 관리 기능이 작동함 protected void configure(HttpSecurity http) throws Exception { http.sessionManagement() .maximumSessions(1) 최대 허용 가능 세션 수, -1 : 무제한 로그인 세션 허용 .maxSessionsPreventsLogin(true) true : 동시 로그인 차단함, .. 2024. 2. 6.
List<String> 타입의 경우 Nullable 할 때 주의할 점. 본격적으로 들어가기전, 아래의 개념을 숙지하자 null "어떠한 값으로도 초기화 되지 않은 상태" 아무것도 없는 것을 나타내는 자바의 Keyword 참조형 타입의 기본값 null 은 참조형 타입의 기본값이다.(초기값) null 은 참조형 타입에서만 사용할 수 있다. 기본형 타입의 변수에 할당하게 될 경우 컴파일 오류가 발생한다. 참조변수가 지역변수로 선언된 경우 선언과 동시에 초기화 되어야 하기때문에 , 따로 초기화를 해주지 않는다면 기본값인 null 값으로 초기화 한다. null 과 "" 빈값의 차이해 null 은 선언만 되어있고 초기화가 되어있지 않은 상태이다. 그래서 힙 메모리상 데이터가 존재하지 않는다. 하지만 ""은 빈값이라는 데이터로 초기화가 되어있는 상태이다. 힙메모리상 빈값이 들어가 있을 .. 2024. 2. 5.
[MySQL] 테이블 데이터 다 지우기 개요 API 테스트를 하면서 DB에 너무 많은 데이터 값이 쌓여 이를 깨끗히 비우기 위해서 사용한 방법을 소개하려고 한다. foreign key constraint fails 에러 개발 진행 중에 데이터가 너무 많이 쌓였거나 테스트 데이터에 빠진 컬럼이 있는 등 테이블의 데이터를 모두 삭제해야 하는 순간이 있다. 이 때 한 테이블에서 다른 테이블을 참조하고 있다면 다음과 같은 에러가 발생하면서 데이터가 삭제되지 않는다. mysql> DELETE TABLE [테이블명] or TRUNCATE [테이블명] ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails 이는 Mysql이 테이블 간 관계가 있는 데이터.. 2024. 2. 5.
@Transactional 어느 Layer에 두는게 맞을까? (2) 이전 게시물에 이어서 얘기하자면 Spring Docs의 Tip 부분에는 다음과 같이 제시하고 있다. 위의 Tip 부분을 살펴보면, @Transactional 어노테이션은 인터페이스에 추가하는 대신 구체적인 클래스 및 메소드에 달도록 권장하고 있다. Spring은 인터페이스에 주석을 추가하는 대신 @Transactional 주석으로 구체적인 클래스 (및 구체적인 클래스의 메서드)에만 주석을 달도록 권장합니다. 인터페이스 (또는 인터페이스 메소드)에 @Transactional 어노테이션을 배치 할 수 있지만 이는 인터페이스 기반 프록시를 사용하는 경우 예상 한 대로만 작동합니다. Java 주석이 인터페이스에서 상속되지 않는다는 사실은 클래스 기반 프록시 (proxy-target-class = “true”) .. 2024. 2. 4.
[Self-Invocation]@Transactional 어느 Layer에 두는게 맞을까? (1) 개요 프로젝트 진행중, 내가 작성한 코드가 @Transactional 어노테이션을 무의식적으로 Service 패키지 안에, 메소드 선언만 하는 인터페이스인 PostSaveUseCase와, 선언된 메소드의 구현체가 있는 PostSaveService 의 메소드 두군데에다 선언을 하고 있는것이 눈에 들어왔다. 아래 코드에서 선언한 방식만 봐도 알 수 있듯 @Transactional을 사용할때, 나는 그저 트랜젝션이 시작되었을때 다른시점에 시작된 트랜젝션과 서로 영향을 줄수 없어 격리성이 유지되며 에러 발생시 Rollback 하는 방법으로 일부만 남아있는것이 아닌 정상 전체저장 비정상 전체롤백을 통해 그 원자성을 유지함. 영속성 컨텍스트의 엔티티 자원관리 기능을 효율적으로 사용하기 위함. 이 두가지에만 초점을 .. 2024. 2. 4.
[ERROR] Circle CI에서 오류가 생길경우 살펴볼 것! 먼저 들어가기에 앞서 간단한 개념을 짚고 넘어가자 [TestContainer 로 멱등성있는 integration test 환경 구축하기] https://medium.com/riiid-teamblog-kr/testcontainer-%EB%A1%9C-%EB%A9%B1%EB%93%B1%EC%84%B1%EC%9E%88%EB%8A%94-integration-test-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0-4a6287551a31 테스트 환경과 멱등성 테스트 환경은 프로젝트 설정을 할 때 가장 중요한 부분 중 하나입니다. 가장 어렵고 귀찮은 작업이기도 하지만 처음 한번만 고생하면 추후 테스트 작성 시에 걱정 없이 아주 깔끔한 테스트 코드를 짤 수 있게 됩니.. 2024. 2. 4.