전체 글 (34) 썸네일형 리스트형 TDD 보호되어 있는 글입니다. [Database] 클러스터 인덱스와 넌클러스터 인덱스 인덱스인덱스는 데이터 레코드를 빠르게 접근하기 위해서 쌍으로 구성되는 데이터 구조다. 형태로 자료구조로 묶어서 저장한다. 따라서, DB의 테이블에 데이터가 많을 때, 검색 속도를 향상시켜주기 위해 사용한다.하지만, 인덱스를 생성하면 무조건 데이터를 빠르게 검색할 수 있을까? 아니다. 인덱스를 무작정 생성한다고 좋은 방법은 아니다.인덱스를 생성하면 인덱스를 위한 디스크 공간이 필요하고, 인덱스를 가진 테이블에 DML(데이터 조작 명령어. 예) INSERT, DELETE, UPDATE) 작업을 할 경우 더 많은 비용과 시간이 필요하다. 때문에 인덱스를 생성 시 해당 테이블의 의도를 정확히 파악 후 상황에 맞게 Clustered Index와 Non Clustered Index를 구성해야 한다. 클러스터 인덱.. [Spring] JPA hibernate의 ddl-auto 속성 JPA의 구현체 중 하나인 하이버네이트는 다양한 기능을 제공하는데,그 중 엔티티만 작성해놓으면 자동으로 테이블을 생성하거나 수정해주는 ddl-auto 라는 설정이 있다.create, create-drop, update, validate, none 이렇게 속성이 있는데, 여기서는 create과 update에 대해서만 작성한다.createcreate은 애플리케이션을 실행할 때마다 테이블을 자동으로 생성해준다.실행 시 데이터베이스에 해당 테이블이 존재하지 않으면 새로 테이블을 생성하고, 이미 테이블이 존재한다면 drop 후 다시 생성한다. 하지만 이 옵션은 기존의 데이터가 모두 삭제되고 새로운 테이블이 생성되기 때문에, 실제 운영 환경에서는 절대 사용하면 안된다고 한다.updateupdate도 실행 시 해당 .. [Spring] @Profile로 활성 프로파일 지정하기 개발을 하다 보면 여러 개의 환경을 관리해야 한다. 예를 들어 테스트 코드를 위한 테스트 환경, 개발을 하고 테스트를 하기 위한 로컬 환경, 실제 서비스가 운영되는 배포 환경 등이 있다.그렇기 때문에 각각의 환경들에 맞게 서로 다른 빈 또는 프로퍼티들을 정의해야 할 수도 있다. 예를 들어, 배포 환경에서는 S3Service가 필요하겠지만개발이나 테스트 할 시에는 계속 S3에 업로드 되는 것이 비용적으로 부담이 될 수도 있고 매번 S3를 실행시키는 것이 불필요할 수도 있다. 이를 위해, Spring은 3.1부터 환경에 따라 서로 다르게 빈을 정의할 수 있도록 환경을 분리하는 기술을 제공하는데, 이것을 @Profile이라고 한다. Spring의 다중 Profile을 사용하면 환경을 바꿀 때마다 번거롭게 매번.. [GitHub Actions] GitHub Actions에서 gradle 캐싱하기 현재 진행하고 있는 쇼핑몰 프로젝트에서 GitHub Actions를 통해 CI를 구축했다.젠킨스처럼 별도의 젠킨스 서버를 구축하지 않아도 되고, Travis CI처럼 유료 전환이 되는 것도 아닌 점이 큰 장점이다.왜 gradle을 캐싱해서 사용할까?gradle은 빌드할 때 의존성 패키지들을 모두 다운받는다.(이때 gradle은 빌드 시간과 네트워크 통신을 줄이기 위해 의존성 패키지를 캐싱해서 재사용하는 방법을 사용한다.) 하지만 GitHub Actions의 workflow는 매 실행마다 새로운 환경을 구축하고, 매번 새롭게 의존성 패키지들을 가져와야 한다.이는 전체 빌드 시간의 증가로 이어진다. 또한 이런 반복되는 작업은 리소스가 낭비되며, 요금 청구가 늘어날 수 있다. GitHub Actions는 20.. JPA Batch Size 보호되어 있는 글입니다. [Spring] 트랜잭션 격리수준 트랜잭션 격리수준동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 격리되어 있는 지 수준을 말한다.격리성을 강화시키면 다른 트랜잭션이 끼어들지 못하게 보장할 수 있고, 약화시키면 다른 트랜잭션도 중간에 끼어들 수 있다. 준수한 처리 속도를 위해서는 트랜잭션의 완전한 격리가 아닌 완화된 수준의 격리가 필요하다. 이처럼 속도와 데이터 정확성에 대한 트레이드 오프를 고려하여 트랜잭션의 격리성 수준을 나눈 것이 바로 트랜잭션의 격리수준이다.트랜잭션 ACID1. Atomicity 원자성한 트랜잭션의 연산은 모두 성공하거나, 모두 실패해야 한다. 예를 들어, 돈을 이체할 때 돈을 빼오는 작업만 성공하고, 돈을 넣는 작업은 실패하면 안된다. 2. Consistency 일관성트랜잭션 처리 후에도 데이터의 상태는.. [Spring] Spring Security 동작 원리, 왜 사용하는 지 Spring SecuritySpring 기반 애플리키이션의 보안을 담당하는 프레임워크다.인증, 인가, 응답 등 보안에 관련하여 많은 기능을 제공하고 있기 때문에 개발자가 하나하나 보안에 관련된 코드를 짜지 않아도 되는 장점이 있다.대부분 우리는 Spring Security를 로그인 유지/페이지 권한 등에 사용한다인증(Authentication): 사용자가 본인인지 확인하는 절차(로그인)인가(Authorization): 인증된 사용자가 요청한 경로에 권한이 있는지 결정하는 절차접근주체(Principal): 권한이 있어야 접근 가능한 경로에 접근하려고 하는 사용자비밀번호(Credential): 경로에 접근하려고 하는 사용자의 비밀번호 (접근주체의 비밀번호)동작 원리1. 요청사용자가 로그인 정보.. 이전 1 2 3 4 5 다음