본문 바로가기
반응형

전체 글383

[springboot] ControllerAdvice 응용해 return 꾸미기(HttpStatus 지정 포함) WEB으로 구성한 서버에서 Exception을 활용해서 에러코드를 핸들링하는 경우가 있는데, 이럴때 ControllerAdvice를 쓴다. 예를들어 Exception을 날리면 ControllerAdvice에서 캐치하고, 데이터를 가공해 리턴하는 것이다. 다음과 같이 설정을 해보자 @RestController public class TestController { @GetMapping("/test/get") public String testGet(@RequestParam(value = "text") String text) { System.out.println("/test/get text = " + text); return "testGet"; } } GET방식으로 /test/get 을 호출하게 했고, text.. 2020. 4. 11.
[mysql] REPEATABLE-READ에서 dead lock이 걸린 이유 Mysql은 기본 isolation이 REPEATABLE-READ으로, Oracle은 COMMIT-READ으로 되어있다. 둘의 차이점은 무엇일까? 그리고 종종 Mysql에서는 Dead lock이 걸리는데 그 이유가 무엇일까? ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction MySQL의 InnoDB에는 lock에는 종류가 있다. - Row -level lock - Record lock - Gap lock 하나씩 알아보자 1) Row-level lock 가장 기본적인 lock으로서 테이블의 row마다 걸리는 단위다. 여기서는 2가지 종류가 있다. - Shared lock (S) - Exclusive l.. 2020. 4. 9.
JPA, 정말 최선일까 최근 일련의 사건이 있어 해결해야 할 일이 있었는데, 그 과정에서 JPA을 도입하는 게 최선일까라는 질문을 하게 되었다. ​ 정확히 이 질문을 하는 시기는 이미 레거시 시스템에 Mybatis로 운영되고 있는 와중에 내 생각(이라 쓰고 고집이라 읽는)으로 JPA를 하는 게 좋겠다 생각하여 프레임워크를 추가하였고, 아직 모든 코드를 JPA로 전환한 것은 아니지만 새로 만드는 것은 JPA를, 그리고 기존 것에서 리팩토링하게 되면 JPA로 바꾸는 중인데, 최근 어떤 계기로 인해 이걸 하는 게 정말 옳은가 생각하게 되었다. ​ ​ - Mybatis에선 당연했던 게 JPA에는 없었다 Mybatis는 기본 Query(쿼리) 베이스다. 쿼리를 잘 만들지 못하면 문제가 발생한다. 하지만 쿼리를 잘 다룰 줄 알면 별문제가.. 2020. 4. 8.
[spring oauth2 ResourceServer] oauth2 에서 CORS 설정 테스트 CORS란? 교차 출처 리소스 공유(Cross-Origin Resource Sharing) 이라 불리며 다른 사이트에서 우리쪽 서버에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제다. 대표적으로 모바일과 서버(back-end)가 그렇고, 요즘 Front-end 쪽에도 독립적으로 서버를 구성하는 경우가 있어 Oauth2를 사용한다면 반드시 알아두어야 할 점이다. 서비스를 구축하는 과정에서 cors 에러가 발생했고, 관련하여 정리하는 글이다. 아래는 브라우저에서 호출할 때 발생한 에러다 서버측 로그는 다음과 같다. org.springframework.security.access.AccessDeniedException: Access is denied at org.springframework.sec.. 2020. 4. 4.
[DBMS] 트랜잭션 격리수준 (isolation level) 트랜젝션 격리 수준이란? 특정 트랜잭션이 다른 트랜잭션에 의해 변경된 데이터를 볼 수 있도록 허용할지 여부를 결정하는 것이다. 격리수준은 4개로 나뉜다 - READ-UNCOMMITTED - READ-COMMITTED - REPEATABLE-READ - SERIALIZABLE 아래로 내려갈수록 고립 정도가 높아진다 고립정도가 높아진다는 의미는 단순하고 엄격해짐을 의미한다. SERIALIZABLE 수준잉 되면 SELECT를 하는것만으로도 잠금(LOCK)을 설정되어 다른 트랜잭션에서 이 레코드를 전혀 변경하지 못하게 된다. 데이터 정합성은 좋아지겠지만 문제는 성능저하가 높아진다는 것이다. 일반적인 온라인 서비스에서는 READ COMMITTED와 REPEATABLE READ를 사용한다. 오라클의 경우 기본값은 .. 2020. 4. 3.
[querydsl, mysql] DATE_FORMAT 등 이용해 groupby 사용하기 DB의 날짜형태가 datetime 으로 되어있는데, 종종 날짜별로 그룹해서 데이터를 뽑아야할 때가 있다. 예를들어 다음과 같은 형태다 (원본) 2020-04-01 11:25:00 => (원하는 포멧) 2020-04-01 이럴경우 mybatis에서는 dbms함수를 사용해서 호출하면 되는데 querydsl 을 사용한다면 dbms함수를 따로 호출해야 한다. 그리고 결과로 나온 값을 DTO로 담아야 하는것도 신경써야 한다. 그래서 여기서는 1. groupby 를 쓸때 date_format 함수(mysql, 날짜형 변형 함수)사용법 2. 결과값을 dto에 넣기 두가지를 알아볼 예정이다. 1. (groupby) datetime을 date 유형으로 묶기 테이블 엔티티를 선언할때 날짜유형을 LocalDateTime 으.. 2020. 4. 2.
반응형