본문 바로가기

전체 글

(144)
@ExceptionHandler, @ControllerAdvice를 사용한 예외를 원하는 Response 처리 개요와 목적 스프링 REST API 서버에 정상적인 요청이 오면, 예외 발생 없이, 2XX Status Code와 api 정보를 제공한다. 하지만 잘못된 요청이 왔을 때(잘못된 파라미터 타입 등)는 예외가 발생하고, 그 예외를 catch하여 그에 맞는 Response header, body를 전송한다. 모든 예외를 Controller영역에서 try - catch하여 Response를 설정하면, 코드가 굉장히 복잡해지고, 유지 보수성이 떨어진다. 그래서 예외 발생 시, 스프링의 ExceptionResolver(@ExceptionHandler)를 사용해, 원하는 Response를 반환하는 방법에 대해서 알아보자. Spring이 제공하는 ExceptionResolver 종류 ExceptionResolver가 ..
MySQL 데이터 타입 이해와 Java와 Type Mapping(+MSSQL) MySQL Data Type Mapping MySQL 설명 Java TINYINT 1바이트(-128~127) 이론으로 byte, Byte가 맞는데 현실적으로 Java boolean과 맵핑을 한다. boolean, Boolean INT 4바이트(-21억 ~ 21억) int, Integer BIGINT, BIGINT UNSIGJNED 8바이트 primary key Id의 타입으로 많이 사용한다. long, Long FlOAT 4바이트 - 부동 소수점 타입 - 실수 값을 대략적으로 표현 float, Float DOUBLE 8바이트 - 부동 소수점 타입 double, Double DECIMAL(M,D) (고정 소수텀 타입) 정확한 실수 값 표현하기 위해, M은 소수 부분을 포함한 실수 총 자릿수, D는 소수 부..
RFC7807가 제시한 오류 메시지 생성하기 개요 목적 REST API에서 클라이언트 요청에 에러가 발생 했을 때, 서버는 HTTP status 에러 code를 보낸다. (400 bad request, 404 not found) 하지만, HTTP status code만으로 에러의 원인을 정확히 파악하기 힘들다. 그 때 사용하는 것이, Response Body에 에러에 대한 정보를 담은 오류 메시지를 보내는 것이다. 이제 문제는 오류 메세지에 어떤 내용을 담을 지 생각해야 한다. 이런 고생을 덜어주는 것이, RFC 7807 표준이다. 이번 시간에는 RFC7807 제시한 오류 메세지의 구성과 내용에 대해서 알아보자. 오류 메시지 사용 시 주의사항 에러 상황에 맞는 적절한 HTTP status code를 제시하는 데 먼저 집중해야 한다. 단순 에러코드만..
Read 시도 후 없으면 Insert , 있으면 Update 쿼리를 만들면 안 되는 이유 +Upsert 쿼리 알아보기 개요 목적 데이터 베이스를 사용할 때, Read 시도 후 없으면 Insert , 있으면 Update 쿼리를 만들면 안 되는 이유에 대해서 알아보자. 그리고 이 문제를 해결할 다양한 DB에서 직접 제공하는 Upsert 쿼리에 대해서 알아보자. Read 시도 후 없으면 Insert , 있으면 Update 쿼리를 만들면 안 되는 이유 그 이유는 해당 글, DB Lock에 대한 이해와 MySQL Lock의 특징 MySQL 락의 특징에서 나온, Lock을 걸 때 행 단위 Record Lock을 걸기 때문이다. Record Lock이란, primary key 또는 unique index (multi-column unique index 포함)로 조회해서 하나의 인덱스 레코드(=row=행)에만 lock을 거는 것을 의..
DB Lock에 대한 이해와 MySQL Lock의 특징 개요 목적 이번 시간에는 DB Lock에 대해서 알아본다. 먼저 DB 락의 필요성과 역할을 알아본 후에 Lock종류와 Lock에서 발생할 수 있는 문제도 알아본다. 그리고 Lock 문제 중 데드락을 해결하는 방법을 제시한다. 마지막으로, 많이 쓰이는 MySQL은 어떻게 Lock을 사용하고 있는지 알아보자. DB Lock의 필요성과 역할 DB Lcok이란, 한 세션에서 트랜잭션을 시작하고 데이터를 수정하는 동안 커밋이나 롤백되기 전에는 다른 세션이 해당 데이터를 수정할 수 없게 하는 역할을 한다. 그렇지 않으면, 데이터의 무결성을 보장할 수 없다. Lock 개념과 헷갈리는 트랜잭션의 개념과 글에서 자주 나오는 세션 개념을 아래 블로그 글에서 확인할 수 있다. [백엔드/데이터베이스] - Transaction..
JavaBean 요구 조건과 Property JavaBean이란, JavaBean 규격서 조건을 충족한 자바 클래스이다. JavaBean이 충족되려면, 먼저 파라미터가 없는 생성자가 반드시 있어야 한다. 그리고 클래스 외부에서 필드에 접근할 때는 반드시 메소드를 통해서 접근해야 하며, get, set 메소드를 사용한다. 이런 메소드를 통해서 관리되는 데이터를 Property라고 한다. get, set메소드에서 get, set 다음에 오는 이름을 Property이름으로 취급한다. → Java외에 다른 언어에서는 언어와 VM레벨에서 Property를 제공한다. Java는 Property 언어 레벨에서 제공하지 않고, get, set 메소드를 사용하는 필드를 Property로 사용한다는 JavaBean 규격만 제공했다. → 스프링에서는 완화된 JavaB..
정규화(1,2,3,BNCF) 쉽게 이해하기 개요 목적 이번 시간에는 데이터 베이스 정규화에 대해서 알아본다. 데이터 베이스 정규화란, 잘못된 데이터 베이스 설계에서 발생하는 이상현상을 해결하고, 저장 공간을 효율성을 증가하기 위해, 테이블을 여러개로 분리하는 과정이다. 정규화 방법에는 1차, 2차, 3차, BCNF, 4차, 5차 정규화가 있다. 실무에서 주로 쓰이는 1, 2, 3, BNCF 정규화 방법과 예시를 통해 어떻게 데이터를 깔끔하고, 이상 현상을 방지하는 지 알아보자. 이상현상이란, 데이터베이스의 설계를 잘못하게 되었을 때 데이터 삽입, 갱신, 삭제 연산을 수행할 대 부작용이 발생하는 것을 의미한다. ex) 삽입 이상 - 불필요한 데이터도 같이 삽입해야 하는 문제 윤성빈은 이벤트에 참여하지 않았는데, 관련 컬럼이 있어서, null이라는 ..
DB Isolation Level 격리 수준 이해하기 개요와 목적 [백엔드/DB 지식] - DB Lock에 대한 이해와 MySQL Lock의 특징 해당 글에서는, 트랜잭션을 시작하면, 데이터를 DB Lock 설정으로, 다른 트랜잭션은 해당 데이터 접근을 막아 동시성 문제를 해결함을 배웠다. 이번 시간에는, 트랜잭션 격리성 레벨에 대해서 알아본다. 격리성 레벨에 따라 트랜잭션이 가지는 격리성(동시성 해결 능력)과 동시성(동시에 실행되는 정도)이 달라진다. 예를 들어 가장 강한 정도의 격리성 레벨, 완전히 순차적 실행이 되면 격리성(동시성 해결 능력)은 높아지지만 동시성은 너무 낮아져서 DB 처리 속도가 너무 느려진다. 한 트랜잭션이 읽기 작업만 해도, 다른 트랜잭션은 끝날 때까지 기다려야 하기 때문이다. (트랜잭션의 격리성과 동시성은 반비례 관계이다.) 각 ..

반응형