Spring
[JPA] native query 사용 시 enum을 변수로 하기 ( SpEL expression )
🙂 Native Query 란? JPQL을 사용해서 쿼리 메소드를 사용하는 것이 아닌 MySQL과 비슷한 형식으로 쿼리를 만들어 적용할 수 있다. 그러나, JPQL에서는 표준 SQL의 대부분의 기능을 지원하지만, 지원하지 못하는 문법들도 존재한다. ( ex. sub query ) 이때 Native Query를 사용하면 JPQL에서 지원하지 못하는 문법들을 사용할 수 있다. 🙂 Native Query 를 사용하는 방법 //-- JPQL @Query(value="SELECT M from Member M" ) //-- Native Query @Query(value="SELECT * from Member m", nativeQuery= true ) 🙂 Native Query에서 @Param에 Enum을 넣는 방법..
[F.Y.R] Jitter? ( Retry의 전략 )
맡고 있는 프로젝트에서 다른 서버와 통신을 하는 코드를 보던 중, 통신을 하는 서버에서 동시성 이슈로 재시도를 원하는 에러코드가 내려왔고, 이에 잠깐의 sleep을 한 후에 재시도하는 것을 볼 수 있었다. Retry? MSA구조에서는 서로 다른 서버와 통신을 할 일이 많다. 그렇기 때문에 서로 다른 서버와 통신할 때 실패율을 줄이는 것이 중요하며, 호출 재시도를 하며 실패율을 줄일 수 있다. 보통 Sleep을 해주는 이유는 동시에 요청이 왔을 때, 바로 재시도를 하게 된다면 동시성 이슈에 있어서 성공률은 떨어지기 때문이다. 그래서 보통은 Exponential Backoff Algorithm ( 백오프 ) 를 사용해야하는 걸로 알고 있었다. 1번째 재시도 : 1초 -> 2번째 재시도 : 2초 -> 3번째 ..
[Spring Boot] 차근차근 OAuth 2.0 구현하기 - (3) Access Token 받기
[Spring Boot] 차근차근 OAuth 2.0 구현하기 - (2) Code 가져오기 우리에게 친숙한 카카오의 Resource Server에서 데이터를 받아 볼 것이다. 앞선 글에서 봤듯이 🧐 우선 사용자가 카카오를 통해 로그인을 한 후 카카오 Authorization Server에서 Code를 받아오자! 카카오 A withseungryu.tistory.com 지금까지 Kakao Authorization Server에서 Code를 받아오기까지 성공했다. 🔍 이제 code를 받았으니 Resource Server에 접근하기 위한 Access Token(사용자 토큰)을 받아와 보자. 우선 카카오 로그인 REST API 문서를 보면, 필수 파라미터 값들을 담아 POST로 요청하고, 요청 성공 시, 응답은 J..
[JPA] JPA (Java Persistence API)란?
🧐 JPA란? 자바 객체와 DB테이블 간의 매핑을 처리하기 위한 ORM 표준 💡 요소 엔티티 DB에서 지속적으로 저장된 데이터를 자바 객체에 매핑 메모리 상에 자바 객체의 인스턴스 형태로 존재하며 EntitiyManager에 의해 DB의 데이터와 동기화 엔티티 매니저 필요에 따라 Enitity와 데이터베이스의 데이터를 동기화한다. EntitiyManager에서 제공하는 Entity 조작 API를 이용해 Entity에 대해 CRUD 작업을 할 수 있다. 영속성 컨텍스트 ( Persistence Context ) 엔티티를 영구적으로 저장하는 환경 엔티티를 저장하거나 검색할 때 엔티티 매니저는 영속성 컨텍스트에서 엔티티를 저장하고 관리 엔티티 매니저를 생성할 때 영속성 컨텍스트가 만들어진다. 영속성 컨텍스트에..
[Spring Boot] Rest API 구현 (Feat. spring date rest)
💡 Rest API 란? 참고 : https://withseungryu.tistory.com/100 💡 Spring data rest 란? spring-data-rest, a recent addition to the spring-dataproject, is a framework that helps you expose your entities directly as RESTful webservice endpoints. Unlike rails, grails or roo it does not generate any code achieving this goal. spring data-rest supports JPA, MongoDB, JSR-303 validation, HAL and many more. It is ..
[Spring] 리팩토링 해보기 (feat. 객체지향적인 관점)
💡 리팩토링이란? 리팩터링(refactoring)은 소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻한다. 주로 가독성을 높이고 유지보수를 편하게 한다. 버그를 없애거나 새로운 기능을 추가하는 행위는 아니다. 사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 바꾸고 개선하는 유지보수 행위이다. ✏️ 리팩토링 전 코드 점검 항목 코드에 중복된 부분은 없는가? 코드가 무엇을 하는 것인지 이해하기 불편하지 않은가? 코드가 자신이 있어야 할 자리에 있는가? 앞으로 변경이 일어난다면 어떤 것이 있을 수 있고, 그 변화에 쉽게 대응할 수 있게 작성되어 있는가? ✏️ UserService를 리팩토링 해보자 각 User마다 갖고 있는 level을 login, recommend를 검사해 기..