반응형 공부/프로그래밍346 [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. [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. [springboot, oauth] Resource Server(자원서버) 구축하기 이전 포스팅에 이어 자원서버 구축하는 과정이다. Authorization Server(인증서버) 구축하기 https://lemontia.tistory.com/927 [springboot, oauth] Authorization Server(인증서버) 구축하기 OAuth2 역할은 크게 4가지로 분류된다 - Resource Owner - Authorization Server - Resource Server - Client :: Resource Owner는 유저를 뜻한다. 내가 만든 서비스를 이용하고자 하는 고객을 의미한다 :: Author.. lemontia.tistory.com 지난번 포스팅에서는 access_token을 받을 수 있는 서버 구축의 글이었다면, 이번에는 서버 접근 제한 권한 및 토큰을 이용해.. 2020. 3. 29. 이전 1 ··· 22 23 24 25 26 27 28 ··· 58 다음 반응형