본문 바로가기

전체 글

(100)
Transaction Deep Dive (1) 1. Pessimistic, Optimistic Concurrency Control(Lock) Pessimistic Concurrency Control : 요약하자면 Lock 체크 후 작업. 그렇기에 성능이 하락, 쓰기 비중이 높을 때 사용DB 빌트인 방식 : DB의 무결성, 일관성의 책임을 DB가 갖는다.단위 : Table 단위 / Row 단위 Lock이 있다.범주 : Shared Lock(s-lock, 읽기 잠금) : 다중 읽기 가능, 쓰기 작업 트랜잭션 불가 Exclusive Lock(x-lock, 쓰기 잠금) : 해당 잠금 중에는 모든 트랜잭션 접근 불가Optimistic Concurrency Control : 같은 방식으로 선 작업 후 버전 체크. 개발자가 DB 일관성의 책임을 가질 수 있다.읽..
디렉토리 구조와 Facade 패턴 1. 디렉토리 구조 Spring을 통한 Backend의 프로젝트나 Frontend의 React를 사용한 프로젝트를 만들거나어떤 프로젝트를 만들 때도 개발자는 항상 디렉토리 구조를 잘 생각하고 설정해야 한다.프론트엔드 입장에서 디렉토리 구조를 짤 때 깊은 생각을 해보지는 않았지만,React를 사용해서 한번이라도 SPA를 만들어 본 입장에서 이 블로그의 내용이 참 좋아보였다.https://velog.io/@teo/separation-of-concerns-of-frontend 프론트엔드 개발자 관점으로 바라보는 관심사의 분리와 좋은 폴더 구조 (feat. FSD)최근 프론트엔드 개발에서 주목받는 FSD 아키텍쳐 폴더 구조를 주제로 소프트웨어 공학 관점에서의 관심사의 분리라는 원칙을 통해 설명하고자 했습니다. ..
Docker, CI/CD, Github Action (2) Docker 는 왜 사용하는가? 핵심들만 간단 명료하게 설명하라더보기Application의 일관적인 실행 환경을 제공하기 위해 사용되는 가상화 플랫폼이다.로컬 실행 환경과 격리된 환경에서 필요한 실행 환경만을 구성할 수 있다.  Docker 가 없을 때와, Docker 를 사용할 때의 차이를 통해 Docker 사용 이유에 대해 설명하라더보기가령 개발 환경에서의 JVM의 버전이 17이고, 테스트를 위한 실행 환경에서의 버전은 11이라면Docker가 없을 경우에 로컬에는 두 가지 버전의 JVM의 설치가 필요해 로컬 환경이 오염된다.Docker를 사용한다면 격리된 실행 환경을 통해 추가 버전 설치의 필요가 없어진다. 하나의 인스턴스에서 다중 컨테이너를 사용하는 사례 몇 가지만 이야기하라더보기side car 패..
JPA와 데이터 타입 1. JPA에서 다루는 타입⭐ Entity 타입@Entity로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적 가능 ⭐ Value Objectint, Integer, String처럼 값으로 사용하는 자바 기본 타입이나 객체식별자가 없음. 값만 있음. 변경 시 추적 불가기본 값 타입자바 기본 타입(int, double) / 래퍼 클래스(Integer, Long) / String생명 주기를 엔티티에 의존한다.값 타입은 공유하지 말아야 한다.Primitive Type은 값을 공유하지 않기에 side-effect가 없다.(항상 값을 복사하기 때문)Integer같은 Wrapper class나 String class는 공유 가능한 객체이지만 변경을 불가능하게 만들어 놨음.Embedded type : 복합 값 타..
DB, Concurrency Control, Transaction (2) MySQLWorkbench 나 DBeaver 같은 프로그램을 무엇이라고 부르는가?더보기DB Client로, DB 서버에 접속해 쿼리를 실행하고 데이터를 조회하거나 수정할 수 있는 도구이다. 관계형 데이터베이스는 어떤 특징을 갖고있는지 간단히 설명하라더보기2차원 행렬, 테이블로 구성되어있는 Fixed Schema를 가진 데이터 베이스이며Table과 사이의 FK와 PK를 통한 관계가 형성되어있다. 고신뢰성, 데이터 무결성을 지향하며이를 위해서 Guaranteed Consistency, 보장된 일관성을 위해 Isolation Level과 Transaction을 사용한다.ACID 조건을 충족하는 Transaction을 지원한다. 비관계형 데이터베이스는 왜 등장하였는가?더보기빅데이터 시대에 빅데이터 특성에 따른 ..
프록시, JPA 최적화 Member와 Team을 같이 출력해야 하는 경우, 따로 조회해야 하는 경우 등비즈니스 로직은 다양하다. 그렇기에 상황에 따라 최적화가 필요함.지연 로딩, 즉시 로딩 등을 사용하려면 프록시에 대한 이해가 필요하다. 1. Proxy Class em.find vs em.getReference전자는 DB를 통한 실제 엔티티 객체 조회후자는 DB조회를 미루는 가짜(프록시) 엔티티 객체 조회Member findMember = em.getReference(Member.class, member.getId());// 사용을 안하면 SELECT query안나감Member findMember = em.getReference(Member.class, member.getId());System.out.println(findMe..
연관 관계 Mapping (3) 1. 상속 관계 매핑 RDBMS에는 상속 관계 없지만, 슈퍼타입, 서브타입 관계 모델링 기법이 객체 상속과 유사객체는 상속 관계의 형태가 유일하지만,DB설계는 아래와 같이 3가지 방식이 있다. 어떤 방법을 구현하더라도 JPA는 매핑을 지원해준다.JOIN 전략 : 상속 관계처럼 각각의 테이블로 변환기본적, 정석적인 전략. 객체와 잘맞고, 정규화 잘 되어있고, 설계 입장에서도 좋음.장점 : 테이블 정규화, 저장 공간 효율화외래 키 참조 무결성 제약 조건 활용 가능 (Item만 보면 album, movie, book 조회 가능)단점 : 조회 시 JOIN을 많이 사용, 성능 저하조회 쿼리가 복잡함, 데이터 저장 시 INSERT 2번 호출단일 테이블 전략 : 논리 모델을 한 테이블로 합치는 것 (성능 때문에)DT..
IntegerCache, Atomic, CAS 0. 서론 Java 관련 공부를 하다가 흥미로운 사실을 알게 됐다.Integer i1 = 45;Integer i2 = 45;Integer i3 = 999999999;Integer i4 = 999999999;System.out.println(i1 == i2); // trueSystem.out.println(i3 == i4); // false위쪽은 왜 true이고 아래쪽은 왜 false인가? 에 대한 의문이었다. Java는 Stack 영역에 primitive type일 경우, 그 값을 직접 가지게 되고reference type은 Heap이나 Static영역에 객체 주소를 가지는 것으로 알고 있는데, 전자와 후자 모두 동일한 결과 값을 가져야 하는 것 아닌가?하는 생각이 들었기 때문이다.  1. Integer..