Back-end

·Back-end
스프링 프레임워크에서 어노테이션을 통해 트랜잭션을 읽기 전용 모드로 설정할 수 있다. 이는 예상치 못한 엔티티의 등록, 변경, 삭제를 예방할 수 있고 성능을 최적화할 수 있다. 🧐 성능이 왜 최적화되지? JPA, Hibernate, Spring Data JPA에 대한 이런저런.. 정리 [JPA] JPA, Hibernate, Spring Data JPA에 대한 이런저런.. 정리 ☁️ JPA 인터페이스 🫧 EntityManagerFactory JPA 설정을 기반으로 EntityManager 인스턴스를 생성하는 팩토리 역할 (여러 EntityManager 생성 가능) 보통 애플리케이션이 시작될 때 EntityManagerFactory 인스턴스를 chaewsscode.tistory.com 해당 글을 읽기 전에 ..
·Back-end
☁️ JPA 인터페이스 EntityManagerFactory EntityManager Persistence Context 관련 정보를 찾다가 이해에 도움이 될 찰떡같은 비유가 있어서 해당 블로그 사진을 참조한다. 🫧 EntityManagerFactory JPA 설정을 기반으로 EntityManager 인스턴스를 생성하는 팩토리 역할 (여러 EntityManager 생성 가능) 애플리케이션이 DB를 하나만 사용하는 경우 EntityManagerFactory 인스턴스를 한 번만 생성하고 재사용 더보기 🤔 여러 개의 DB를 사용하는 경우에는 EntityManagerFactory 인스턴스를 어떻게 다룰까? 1. 단일 EntityManagerFactory 인스턴스 사용 여러 DB를 사용하더라도, 모든 DB의 설정..
·Back-end
🌊 배포 흐름 🧐 GitHub Actions란 Github가 공식적으로 제공하는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD 플랫폼 GitHub Actions 사용 시 repository에서 이벤트(PR 혹은 push)가 발생할 때 특정 작업을 실행해 개발 및 배포 프로세스를 자동화할 수 있다. CI/CD 워크플로우 push, PR(Pull Request) 생성, Issue 등의 이벤트에 대해 지정된 작업을 실행하여 지속적으로 통합하고 배포한다. 이를 통해 빌드, 테스트, 코드 리뷰, 배포 등의 과정을 자동화할 수 있다. 테스트 자동화 코드 변경 사항을 테스트하여 품질 관리를 강화하고, 테스트 결과를 보고 및 분석하여 문제를 식별한다. 워크플로우 자동화 프로젝트 관리, 버전 관리, 알..
·Back-end
1. 가비지 컬렉션(Garbage Collection)이란? 가비지 컬렉션(Garbage Collection, 이하 GC)은 자바의 메모리 관리 방법 중의 하나로 JVM(자바 가상 머신)의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체(garbage)를 모아 주기적으로 제거하는 프로세스를 말한다. C언어의 경우 free()메서드를 이용해 직접 메모리를 해제할 수 있지만 Java나 Kotlin은 JVM의 가비지 컬렉터가 불필요한 메모리를 알아서 정리해주기 때문에 개발자가 메모리를 직접 해제할 필요가 없다. 따라서 개발자는 메모리 관리, 메모리 누수 문제를 관리하지 않아도 되어 개발에만 집중할 수 있다는 장점이 있다. 하지만 GC에도 단점이 있는데 메모리 관리를 자동으로 해준다 해..
·Back-end
연결 과정 목차 yml 파일에 OAuth 클라이언트의 설정 정보 작성 SecurityConfig 수정 OAuthService 구현 OAuthAttributes 생성 build.gradle 의존성 추가 UserProfile 생성 OAuth2UserService를 구현한 CustomOAuth2UserService 구현 Spring Boot는 어떻게 yml 파일에 작성한 정보로 OAuth 설정을 할까? Spring Boot는 어떻게 yml 파일에 작성한 정보로 OAuth 설정을 할까? Spring Security OAuth2 라이브러리는 Spring Boot의 자동 구성 기능을 활용하여 yml 파일에 작성된 OAuth 설정을 인식하고 처리한다. 이를 위해 5가지 핵심 구성 요소가 작동한다. 1️⃣ OAuth2..
·Back-end
Spring Security OAuth2 라이브러리는 Spring Boot의 자동 구성 기능을 활용하여 yml 파일에 작성된 OAuth 설정을 인식하고 처리한다. 이를 위해 5가지 핵심 구성 요소가 작동한다. 1️⃣ OAuth2ClientProperties & OAuth2ProviderProperties OAuth2ClientProperties yml 파일의 spring.security.oauth2.client 아래에 작성된 클라이언트 설정을 나타낸다. OAuth2ProviderProperties spring.security.oauth2.provider 아래에 작성된 공급자 설정을 나타낸다. 2️⃣ OAuth2ClientPropertiesRegistrationAdapter OAuth2ClientPrope..
Spring Data JPA 사용 중 unique 제약조건이 있는 데이터를 삭제한 뒤 추가하는 경우 duplicate entry 에러가 발생했다. 🫠 나는 데이터를 삭제했는데 왜 에러가 나지?1. 영속성 컨텍스트의 쓰기 지연 성질로 @Transactional 내부의 쿼리문들은 마지막에 한 번에 실행2. Hibernate의 쿼리 실행 인터페이스(AbstractFlushingEventListener)의 구현 메서드(performExecutions)는 동작하는 SQL 순서가 정해져 있다. 따라서 delete 코드를 먼저 작성했더라도 insert 쿼리를 먼저 실행한 후에 delete를 실행한다. 엔티티 매니저는 트랜잭션을 커밋하기 직전까지 DB에 쿼리를 날리지 않고 내부 쿼리 저장소에 모아둔 후 트랜잭션을 ..
·Back-end
1️⃣ HashTable 자료구조에 대해 알아보자 (Key, Value) 구조로 데이터를 저장하는 자료구조로, 빠르게 데이터를 검색할 수 있다. 각각의 Key 값에 해시함수를 적용해 고유 index를 생성하고, 이 index를 활용해 값을 저장하고 검색한다. 평균 O(1)의 시간복잡도를 갖지만 충돌이 일어나 연속적으로 검색해야 되는 경우 O(n)까지 증가할 수 있다. 💥 해시값이 충돌하는 경우 서로 다른 Key 값에 해시함수를 적용한 값이 동일한 경우에는 어떻게 할까? 1. 분리연결법(Seperate Chaining) 동일한 버킷일 경우 추가 메모리를 사용해 데이터를 연결해 관리한다. 분리연결법의 경우 해시 테이블의 확장이 필요 없고, 구현이 간단하지만 데이터의 수가 많아지면 동일한 버킷에 연결되는 데이..
이전에 썼던 상품 좋아요 생성 API를 구현하면서 "상품 좋아요 수"의 동시성 문제에 대해 고민하게 되었다. 👍 상품 좋아요 수회원이 상품 좋아요를 생성하면 해당 상품은 좋아요 개수가 1 증가한다.트래픽이 많아지고 동시에 요청하게 될 경우 동시성 문제가 발생할 것이다. 🧐 DB 락을 사용해 볼까?🔓 Optimistic Lock(낙관적 락)대부분의 트랜잭션이 충돌이 발생하지 않을 것이라고 낙관적으로 가정하는 방법이다. 따라서 데이터베이스가 제공하는 락 기능을 사용하지 않고, 엔티티의 버전을 통해 동시성을 제어한다. 즉, DB Transaction을 이용하는 것이 아닌 애플리케이션 레벨에서 지원하는 락이다.낙관적락은 version 등의 구분 컬럼을 이용해서 충돌을 예방한다. (version 뿐 아니라..
서채리
'Back-end' 카테고리의 글 목록 (4 Page)