이 글은 오라클을 기준으로 설명된 글입니다. Lock이란? 먼저 오라클에 왜 Lock이 필요한지 예를 한번 들어보겠습니다. 만약 고객이 창고에 ID=1인 물건의 내용에 숫자 1을 더하고 싶다고 요청했습니다. 요청을 처리하기 위해 SQL문은 아래와 같습니다. SELECT counter FROM counter_table WHERE id = 1; UPDATE counter_table SET counter = WHERE id = 1; 하나의 요청만을 보니 아무런 문제가 없을것 같아보입니다. 하지만 오라클은 병렬처리가 가능하다는 특징이 있습니다. 만약 A라는 고객이 ID=1 인 물건에 숫자 1을 더하고 싶다고 요청을 해서 SQL을 처리하고 있는 중에 B라는 고객이 ID=1인 물건에 숫자 1을 더하고 싶다고 요청을..
SQL문 분석 일반적인 프로그래밍 언어와 SQL의 차이는 무엇일까요?? 여러가지가 있을 수 있지만 SQL은 처리 방법(절차)을 기술하지 않는다는 점이 가장 큰 차이라고 말할 수 있습니다. 예를들어 프로그래밍할 때는 '여기에서 데이터를 꺼내 와서 반복문을 수행하고 조건문을 사용해 분기를 시킨다'와 같이 처리 방법을 기술했을 겁니다. 이에 비해 SQL문에서는 'SELECT A FROM B WHERE C=1'과 같이 테이블 B에서 C=1이라는 조건을 만족하는 데이터에서 A라고하는 속성의 정보를 꺼내오라고만 하지 어디에도 '인덱스를 사용해라', '풀 스캔을 하라' 와 같은 처리 방법을 기술하지는 않습니다. 그러면 SQL은 어떻게 우리가 원하는 데이터를 가져올까요?? RDBMS는 옵티마이저(파서,parse)라고 ..
Error 상황 프로젝트 환경 설정 application.yml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/awss3?serverTimezone=UTC&characterEncoding=UTF-8 username: root password: 1234 jpa: database-platform: org.hibernate.dialect.MySQL5InnoDBDialect open-in-view: false show-sql: true hibernate: format_sql: true ddl-auto: create JPA관련 테스트를 하기 위해 @DataJpaTest를 이용해서 테스트를..
캐시란? 데이터베이스는 SQL문을 빠르게 처리하기 위한 많은 방법을 사용합니다. 그중에서도 데이터베이스의 처리속도에 가장 큰 영향을 미치는 것은 디스크 I/O 동작입니다.그래서 데이터베이스는 캐시라고 불리는 기술을 사용해 가능한 디스크에서 처리하지 않고, 메모리에서 처리하는 구조를 갖고 있습니다. 빈번하게 사용하는 데이터를 매번 디스크에서 꺼내오지 않고 캐시라고 불리는 메모리에 두고 꺼내오므로써 디스크 I/O동작을 생략해 처리속도를 올리는 것입니다. 오라클에서의 데이터 캐시는 '버퍼 캐시'라고 불립니다. 오라클에서 버퍼 캐시의 존재 유무에 따라 동작이 어떻게 다른지 한번 살펴보겠습니다. 클라이언트가 데이터1을 요청합니다. 요청한 데이터가 버퍼 캐시에 놓여 있는지 확인합니다. 버퍼 캐시에 요청한 데이터가 ..
DBMS DBMS를 이해하기 위해 3가지 키워드를 소개하겠습니다. 키워드 병렬 처리를 가능케 하고 높은 처리량을 실현한다. 응답 시간(response time)을 중시한다. 커밋(commit)한 데이터는 지킨다. 오라클을 포함한 모든 DBMS(Database Management System)은 매우 복잡한 구조로 되어있습니다. DBMS가 복잡해지는 이유는 위에서 이야기한 3가지의 특성을 모두충족시켜야 하기 때문입니다. 세가지 특성은 상반된 성향이 있어서 동시에 모두 만족시키기가 매우 어렵습니다. 예를 들어, '커밋(commit)한 데이터를 지킨다'를 만족하기 위해 커밋하는 순간 데이터를 디스크에 기록하고 싶지만, 그렇게 하면 응답 시간이 나빠지게 됩니다. 오라클을 기준으로 이러한 특성을 어떻게 반영하고 ..
문제 기존에 프로젝트를 진행할때 클라이언트로 부터 오는 요청데이터를 Bean Validation한후 Error가 있다면 bindingResult에 에러 내용을 담아 다시 넘겨주었습니다. 그런데 댓글 작성을 구현할때 요청데이터를 validation(유효성 검사)를 한뒤 bindingResult에 에러내용을 담아 Json응답으로 반환하니 에러메시지가 의도와 다르게 전달되는것을 확인할 수 있었습니다. 댓글 작성 소스 ReplyRequest 요청 DTO @Getter @Setter public class ReplyRequest { @NotNull private Long bno; @NotEmpty @Length(min = 4) private String comment_content; } error.properti..
빌더 패턴 빌더 패턴은 복잡한 객체를 생성하는 방법을 정의하는 클래스와 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공하는 패턴입니다. 빌더 패턴은 생성 패턴으로 인스턴스를 만드는 절차를 추상화하는 패턴입니다. 특히 빌더 패턴은 많은 Optional한 멤버 변수(혹은 파라미터)나 지속성 없는 상태 값들에 대해 처리해야 할 때 큰 장점을 가지고 있습니다. 빌더 패턴 구현 방법 빌더 클래스를 Static Nested Class로 생성합니다. 이때, 관례적으로 생성하고자 하는 클래스 이름 뒤에 Builder를 붙입니다. 빌더 클래스의 생성자는 public으로 하며, 필수 값들에 대해 생성자의 파라미터로 받습니다. Optional한 값들에 대해서..
네이버웹툰 면접안내 메일을 받았습니다. 면접은 총 3시간으로 1시간씩 총 3분의 면접관과 이야기를 나누는 방식이었는데 처음에는 면접을 3시간이나 보는걸 보고 놀라움과 동시에 두려움도 생겼습니다. 과연 3시간동안 잘 얘기를 할 수 있을까 무서웠는데 막상 면접을 보니 면접관분들이 최대한 편하게 해주시고 내 말에 최대한 집중해서 들어주시려고 노력해주시는 모습을 보며 마음이 조금은 편해져 대답을 잘 하지는 못한거 같지만 면접 시간은 체감상 빨리 지나간것 같았습니다. 면접 내용 기술면접을 진행하는데 면접중에 라이브 코딩을 진행할 수 있다고 사전에 안내가 있었고 저는 마지막 3번째 면접때 라이브 코딩을 진행하였습니다. 저는 3분 모두 자기소개를 요청하셨지만 각 면접관님 별로 질문하시는 스타일은 모두 달랐습니다. 나..
- Total
- Today
- Yesterday
- java
- Spring Batch
- asSequence
- WrongTypeOfReturnValue
- 클린 아키텍처
- trailing comma
- GSLB
- assertj
- Collection
- spring data jpa
- scenario test
- Spring
- Mockito
- meta-data
- kotlin
- A레코드
- BatchStatus
- AWS INDUSTRY WEEK
- autoconfigure
- 시나리오 테스트
- Parameterized
- JUnit5
- ExitStatus
- test
- datasource
- Stream
- prinicipal
- IntelliJ
- mockK
- mockito-kotlin
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |