전체 글 168

[MySQL] Transaction Isolation level

MySQL 8.0 을 기준으로 작성되었습니다. Transaction Isolation level Transaction Isolation level 이란 다른 Transaction 에서 접근해 데이터를 변경하거나 조회할 수 있도록 하는 수준입니다. 예를들어 현재 실행중인 Transaction_A, 그 다음 실행된 Transaction_B 가 있다고 가정하겠습니다. Transaction_A 의 격리 수준을 높이면 Transaction_B 가 방해할 여지가 줄어들게 됩니다. 그러면 데이터의 일관성(Consistency)이 높아집니다. 하지만 Transaction_A 가 끝날때까지 Transaction_B 는 대기해야합니다. 그래서 동시성(Concurrency) 은 감소합니다. 반대로 Transaction_A ..

데이터베이스 2022.05.12

JPA소개

이 글은 자바 ORM 표준 JPA 프로그래밍을 보고 작성한 글 입니다. 혹시 잘못된 내용이 있을 경우 편하게 댓글 달아주시면 감사하겠습니다. SQL 중심적인 개발의 문제 SQL 중심적인 개발을 주로 하던 시절에는 CRUD 쿼리 개발을 중심으로 해야했습니다. INSERT, UPDATE, SELECT, DELETE 등등의 쿼리 작성 데이터가 담겨있는 자바 객체의 속성을, 쿼리 파라미터로 설정하는 로직 쿼리 결과를 다시 자바 객체로 변환하는 로직 작성 등등 비슷하면서 귀찮은 작업들이 정말 많았고, 테이블이 수정될 경우 모든 SQL을 수정해야 하는 경우도 있었습니다. 그래서 전체 개발시간 중 쿼리를 작성하거나, 쿼리와 관련된 자바 코드를 작성하는 시간이 차지하는 비중이 아주 많았습니다. 패러다임의 불일치 객체 ..

Java/JPA 관련 2022.05.10

[MySQL] 4. 아키텍처(1)

Real MysQL 8.0 1권을 읽고 정리한 내용입니다. 잘못된 내용이 있을 경우 댓글로 남겨주시면 감사하겠습니다🙏 MySQL 엔진 아키텍처 MySQL 의 내부에서 사용되는 엔진은 사람의 머리에 해당하는 MySQL 엔진 과 손발에 해당하는 스토리지 엔진 이 있습니다. MySQL 엔진 커넥션 핸들러 : 클라이언트로부터의 접속 요청 처리 SQL 파서 & 전처리기 : 쿼리 요청 처리 옵티마이저 : 쿼리 최적화 스토리지 엔진 MyISAM InnoDB 특징 지원하는 기능이 많지 않아, 구조가 단순함 지원하는 기능이 많아 구조가 복잡하고, 자원을 많이 사용함 기능 지원 Full-text 인덱싱 가능 인덱싱(Full-text 인덱싱 포함), 외래키, 제약조건, 동시성제어, 트랜잭션 지원 Lock 단위 Table l..

데이터베이스 2022.05.10

Entity 의 Equals 와 HashCode 를 오버라이드 해도 될까?

엔티티 검증 테스트 코드를 작성하다가, 두 객체가 같은지 비교하는 로직의 작성이 필요했습니다. @Test void TestSomething() { // ... 생략 assertThat(resultEntity.getId()).isEqualTo(expectedEntity.getId()); assertThat(resultEntity.getName()).isEqualTo(expectedEntity.getName()); assertThat(resultEntity.getPrice()).isEqualTo(expectedEntity.getPrice()); assertThat(resultEntity.getStockQuantity()).isEqualTo(expectedEntity.getStockQuantity()); }이..

Java/Spring 2022.04.27

13. 입출력 시스템

Disk Scheduling head 가 움직이는 시간이 가장 오래걸리기 때문에, head 의 이동거리를 줄이는게 Disk Scheduling 의 핵심이다. Disk 의 구성요소 platter : 원판을 말함 track : platter 를 구성하는 원형 단위를 말함 cylinder : track 들의 세로 집합 sector : track 의 일부로 데이터가 저장하는 공간 header + 실제 데이터(512byte) + trailer 로 구성된다 header 와 trailer 는 관리용 데이터들이 들어감 ex) sector number, ECC(Error-Correcting Code) 등등 head : 데이터를 읽고, 쓰는 구성요소 Dist Management physical formatting : 컨트..

운영체제 2022.04.20

12. 파일 시스템

Disk Scheduling head 가 움직이는 시간이 가장 오래걸리기 때문에, head 의 이동거리를 줄이는게 Disk Scheduling 의 핵심이다. Disk 의 구성요소 platter : 원판을 말함 track : platter 를 구성하는 원형 단위를 말함 cylinder : track 들의 세로 집합 sector : track 의 일부로 데이터가 저장하는 공간 header + 실제 데이터(512byte) + trailer 로 구성된다 header 와 trailer 는 관리용 데이터들이 들어감 ex) sector number, ECC(Error-Correcting Code) 등등 head : 데이터를 읽고, 쓰는 구성요소 Dist Management physical formatting : 컨트..

운영체제 2022.04.13

11. 가상메모리

Demand Paging 실제로 필요할 때 page 를 메모리에 올리는 것으로 다음과 같은 장점이 있습니다. I/O 양의 감소 Memory 사용량 감소 빠른 응답 시간 더 많은 사용자 수용 Demand Paging 또한 Valid/Invalid bit 을 사용합니다. 여기서 Invalid bit 은 여러가지 의미를 나타냅니다. 프로세스가 사용하지 않는 주소 영역 페이지가 물리 메모리에 없는 경우(backing storage 에 있는 경우) 이 경우 page fault 가 났다고 표현합니다. Page fault Page fault 가 발생하면, trap 이 발생되어 운영체제에게 CPU 제어권이 넘어가게 됩니다. 그러면 운영체제는 다음과 같은 순서로, 디스크에서 메모리로 페이지를 올리는 작업을 하게 됩니다...

운영체제 2022.04.05

[TIL] 코드스쿼드 2022 백엔드 58일차 회고(12주차)

오늘은 무슨 일이? 테스트 코드를 위한 리펙토링 4단계 로그인 로그아웃을 구현하고, 주요 로직들에 대해 루시드와 테스트 코드를 작성해보기로 했었는데요. 그래서 기존 소스를 보며 테스트 가능한 구조로 리펙토링하는 작업을 하며 느낀점을 기록합니다. static 클래스는 최대한 지양하기 WAS 에서 동적 요청을 확인하기 위해, 아래와 같은 형태의 RequestMapping 이라는 클래스를 만들었습니다. public class RequestMapping { private static final Map servletMapping = new HashMap(); static { servletMapping.put(new URL("/user/create"), new UserCreateServlet()); servletM..

메모리 관리 II & 메모리 관리 III

Paging 메모리 단편화를 방지하기 위해 메모리를 페이지 라는 작은 단위로 나누어 메모리를 관리하는 관리하는 방법 프로세스(Process) 의 가상 메모리(Virtual memory)를 동일한 크기의 페이지(page) 단위로 분할 가상 메모리(Virtual memory) 의 내용이 페이지(page) 단위로 불연속적으로 저장됨 일부는 백업 저장소(Backing storage) 에, 일부는 물리 메모리(Physical memory) 에 저장됨 Paging 의 기본적인 기능 frame 과 page를 동일한 크기로 잘라서, frame 에 page 를 담습니다. External fragmentation(외부 조각) 이 발생하지 않는다는 장점이 있습니다. Internal fragmentation(내부 조각) 은 ..

운영체제 2022.03.30

[TIL] 코드스쿼드 2022 백엔드 56일차 회고(12주차)

오늘은 무슨 일이? 이번주도 루시드와 페어프로그래밍을 계속합니다. 저번주 금요일에 웹서버 3단계 미션 구현은 끝내놓아서, 오전에 빠르게 readme 작성을 마쳤습니다. 그리고 4단계를 잠시 구현하다보니 어느새 점심시간이 되어, 오전이 순삭되었네요. 오늘 오후는 원래 2시~4시 호눅스의 수업이 있었는데, 컨디션이 안좋으셔서 내일로 미뤄졌습니다. 그래서 오후에도 페어프로그래밍을 하게되었는데, 시작전에 잠깐 담소를 나눈다는게 30분이나 애기를 해버렸습니다 ㅋㅋㅋ 요즘 키보드가 말썽이라 새로운 키보드를 물색중인데, 마침 루시드가 한성 GK993B 키보드를 추천해주셨습니다. 안그래도 저는 조용한 키보드를 좋아하는데 이 키보드는 저소음 적축 키보드라 관심이 갔습니다 ㅎㅎ 4단계 도중 잠깐 삽질이 있었는데, 그래도 ..