반응형

에디 135

[Hateoas] Rest API를 구현해보자

지난 글에서는 Rest API가 무엇인지? 우리가 Rest API로 알고 사용했던 것이 RestAPI가 아니었고 HttpAPI 였다는 것을 정리하였습니다. 이번 글에서는 Rest API를 직접 구현해보겠습니다. 모든 소스는 github에 올려두었습니다. 개발자는 소스로 대화하고 설명하는 것이 가장 쉽다! build.gradle 최소 아래와 같은 의존성을 추가해줍니다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-hateoas' compileOnly 'org.projectlombok:lombok' a..

Study/spring 2020.12.17

Rest API란?

Rest API에 대해서 정리해보겠습니다. 우리가 흔히 알고 있는 Rest API를 과연 Rest API로 사용하고 있는지 알아보겠습니다. 모든 소스는 github에 올려두었습니다. 참조 www.youtube.com/watch?v=RP_f5dMoHFc Rest API란? Rest REpresentational State Transfer API Application Programming Interface 먼저 Rest에 대해서 알아보겠습니다. Rest의 풀네임을 해석하면 재현상 상태 전송 입니다. 좀 더 말을 풀어본다면 분산 하이퍼미디어 시스템을 위한 아키텍쳐 스타일입니다. 좀 더 쉽게한다면 웹을 위한 아키텍쳐 스타일입니다. Rest를 구성하는 스타일 client-server Client Server 구조..

Study/spring 2020.12.16

Spring Triangle [IoC, AOP, PSA] - 3탄 PSA편

Java개발자로 전향한지 4년차가 되었습니다. 문득 저에 대해서 돌아보는 시간을 강제로 갖게되었고 난 개발자로써 살아가고 있는가에 대해서 궁금해졌습니다. 1편 IoC편 2편 AOP편 3편 PSA편 모든 소스는 github에 올려두었습니다. 나에게 질문을 해보았습니다. 기초는 튼튼한가? 자바에 대해서 얼만큼 알고 있지? Spring은? 블로그를 시작한지 한달이 조금 넘어가는 시점에서 다시 개념을 정리하고 복습하는 의미에서 되돌아가기로 하였습니다. 이번 글에서는 Spring Triangle 중 하나인 PSA에 대해서 정리해보겠습니다. PSA란? Portable Service Abstraction 그대로 번역하자면 호환성있는 서비스 추상화이다. 무슨 의미야 한국말인데 무슨말이야? 조금 더 이해하기 쉽게 설명하..

Study/spring 2020.12.15

Spring Triangle [IoC, AOP, PSA] - 1편 IOC편

Java개발자로 전향한지 4년차가 되었습니다. 문득 저에 대해서 돌아보는 시간을 강제로 갖게되었고 난 개발자로써 살아가고 있는가에 대해서 궁금해졌습니다. 1편 IoC편 2편 AOP편 3편 PSA편 모든 소스는 github에 올려두었습니다. 나에게 질문을 해보았습니다. 기초는 튼튼한가? 자바에 대해서 얼만큼 알고 있지? Spring은? 블로그를 시작한지 한달이 조금 넘어가는 시점에서 다시 개념을 정리하고 복습하는 의미에서 되돌아가기로 하였습니다. 이번 글에서는 Spring Triangle 중 하나인 IoC에 대해서 정리해보겠습니다. IoC란? Inversion Of Control 그대로 해석하자면 제어의 역전입니다. 말 그대로 제어를 역전시키는 방법입니다. 개발자는 소스로 얘기하자는 주의라서 예제소스를 작..

Study/spring 2020.12.13

[Monitoring] Actuator, Prometheus를 이용한 monitoring해보자! - 3편 (Grafana docker로 띄우기)

모니터링 서비스가 없으면 정말 불편합니다. 간단한 예로 ~ 하루는 출근했는데 "** 서비스가 실행이 안되는데?" 확인해보니 메모리 초과로 셧다운되있었습니다. 개발 서버에서 테스트 중에 public망에 있던 서비스와 통신 중에 계속 에러가 발생 확인해보니 셧다운되있었습니다. ** 서비스 죽었어? 잠시만요... 터미널 열고 타자 다다다다다 ps -ef... docker ps .. 매번 이럴순 없습니다. 소스는 github에 올려놓았습니다. 1편 - actuator 적용한 application을 띄우기 2편 - monitoring application, prometheus docker로 띄우기 3편 - Grafana docker로 띄우기 4편 - AlertManager 적용 actuator는 Spring In..

Develop/devops 2020.12.12

[JPA] java.lang.NoSuchMethodException: org.springframework.data.domain.Pageable.<init>

오늘도 어김없이 Exception 발생했네요! 요즘은 Exception이 발생하면 어떻게 풀어서 블로그를 작성할까하고 Exception을 기다리고 있습니다 :) 증상 오늘 발생한 에러는 Querydsl에 Paging 처리가 필요하여 Pageable을 사용했을 때 발생하는 에러였습니다. 아래와 같은 코드를 작성하여 Parameter로 Pageable 객체를 받는 부분에서 에러가 발생하였습니다. @RestController @RequiredArgsConstructor// DI public class StoreController { private final StoreService storeService; @GetMapping(value = "/stores/{storeId}") pubic DefaultRespo..

TroubleShooting 2020.12.11

[JPA] Querydsl에 pageable을 적용하며... 2가지 방법을 소개하겠습니다.

Querydsl을 적용하고 paging 처리를 위해 pageable을 적용한 내용을 정리하겠습니다. Querydsl을 적용방법은 지난 글에 정리해놓았습니다. 지난글에서 정리한 Querydsl 3가지 방법 중 제가 테스트를 해본 2가지 방법 모두 적용방법을 알아보겠습니다. QuerydslRepositorySupport 상속받아서 사용 @Repository public class StoreRepositorySupport extends QuerydslRepositorySupport { private final JPAQueryFactory jpaQueryFactory; private final EntityManager entityManager; /** * Creates a new {@link QuerydslRe..

Develop/spring-data 2020.12.10

[Jetbrain 강의] 온/오프라인에서 활동하는 인플루언서의 이야기 (백기선님, 이동욱님, 박상권님, 백승주님)

Jetbrain 강의를 시청하고 와닿는 주제 위주로 개인적인 정리하는 글을 작성하겠습니다. 시간은 약 50분정도로 Jetbrain 강의 4 Session 중 마지막 Session 내용을 정리하겠습니다. 개인적으로 존경하시는 분들의 강의이므로 시간이 어떻게 가는지도 모르게 시청했네요 :) 이 글에서 작성되는 내용은 모든 내용이 아니고 제가 이해한대로 작성하므로 원본 영상과 내용이 다를 수 있습니다. 원본 영상을 보시고 싶으시면 여기를 참조해주세요. 블로그를 작성하는 이유 기억은 무한하지 않습니다. 기억이 사라지기 전에 블로그로 남겨놓는 공간으로 블로그를 선택하여 작성한다. 퍼블릭한 공간이므로 글을 작성하기에 앞서 한번 더 검색해보게 되고 정리하게 된다. 사람들이 보게 되면 다른 방법도 제시해주고 공유할 수..

MindControl 2020.12.09

[prometheus] org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

Prometheus를 띄워봤으니 프로젝트에 적용해보자! 하던 중에 Exception이 어김없이 발생했습니다. 정말 고마운 분의 글을 참조해서 문제를 해결하였습니다. 증상 application에 actuator, prometheus 디펜던시를 추가하고 Security Endpoint도 적용하고 다 했는데 안되었습니다. actuator, health, info, metrics 는 다 되는데 prometheus만 안되는 현상이었습니다. 증상으로는 에러도 아니고 WARN 이네요 아래와 같습니다. WARN org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver [AbstractHandlerExceptionResolver.java:19..

TroubleShooting 2020.12.08

[Querydsl] Querydsl 사용방법 3가지

직장 동료의 조언 덕분에 Querydsl 설정 방법에도 여러가지가 있다는 것을 알았습니다. 지난번에 작성한 Spring Data JPA 기반 Querydsl 사용해보자. ( Entity 관계 매핑 편, 테스트 코드 포함 )글에서는 QuerydslRepositorySupport를 상속받아 사용하는 방법에 대해서 작성하였습니다. 이번글에서는 이 것외에도 2가지가 더 있고 어떤 것을 선택했는지까지 작성하겠습니다. 모든 소스는 Github에 있습니다. 이동욱님의 티스토리를 참조해서 작성하였습니다. (https://jojoldu.tistory.com/372) Querydsl 사용방법 3가지 QuerydslRepositorySupport 상속받아 사용 JpaRepistory에서 Querldsl 사용 가능하도록 설정..

Develop/spring-data 2020.12.07

[JPA] JPA를 적용하며... mysql 함수 2번 호출되는 문제

왜 querydsl로 조회할때 mysql 함수가 두 번 발생하는 문제가 나타났습니다. 먼저 Spring Data JPA를 사용하면서 왜 mysql 함수를 썼어야 했는지부터 설명드리겠습니다. 진행중인 프로젝트는 mybatis를 사용했었습니다. 그리고 새로운 버전으로 업그레이드하면서 JPA를 도입했고 기존 mapper 쿼리를 걷어내면서 작업을 진행하고 있습니다. 그래서 mybatis를 걷어내기 전까지는 mysql를 함수를 사용하기로 하였습니다. ( 관리포인트를 2개로 나누는 것은 좋지 않다고 판단 ) 증상 querydsl로 아래 소스처럼 mysql function을 이용하여 조회하는 로직이 있습니다. 그런데 function이 두번 호출되고 있습니다. public StoreVo findByName(String..

Develop/spring-data 2020.12.06

org.springframework.dao.InvalidDataAccessApiUsageException

오늘도 어김없이 등장하는 Exception!! org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query 증상 Querydsl로 Update, Delete하던 중 에러가 발생하였습니다. 에러가 발생한 코드는 다음과 같습니다. public Long deleteQuery(Long id) { // JpaQueryFactory 사용 시 // return jpaQueryFactory.delete(store) // .where(s..

TroubleShooting 2020.12.05

[junit] Auditor must not be null! Returned by: class com.example.demo.db.LoginUserAuditorAware!

Junit 테스트 코드를 작성하는 도중 Auditor must not be null 에러가 발생하였습니다. 증상 Junit 테스트 할 로직 중 SecurityContext 정보를 조회할 필요가 있었습니다. 그래서 @BeforeEach 메서드에서 SecurityContext를 Mock으로 임의의 데이터를 넣고 @Test를 실행하는 경우였습니다. @BeforeEach void setUp() { // SecurityContext에서 가져올 유저 정보 UserVo userVo = new UserVo(); userVo.setUserId(1L); List roleNames = Arrays.asList("ROLE_ADMIN"); // userDetails Mock 설정 UserDetails userDetails = ..

TroubleShooting 2020.12.04

[Java] if, else 에서 탈출해보자! interface활용

프로젝트를 진행하다보면 프로세스 로직에서 수많은 분기를 처리하기 위해 if, else가 무수히 달리는 것을 확인할 수 있습니다. 이번 글에서는 if, else를 최대한 줄이고 가독성을 높이는 작업을 진행해보겠습니다. 모든 예제 소스는 github에 올려두었습니다. 이번에 작성하는 글은 주관적인 생각입니다. 전 if, else가 많으면 확장성, 가독성이 좋치 않다고 생각하는 개발자1이기 때문에 이글을 작성합니다. 늘 그랬듯이 개발자는 소스를 보면 가장 이해가 빠르기 때문에 예제소스를 작성해보겠습니다. ProcessService.java @Slf4j @Service @RequiredArgsConstructor public class ProcessService { private final StoreReposi..

Develop/java 2020.12.03

[Monitoring] Actuator, Prometheus를 이용한 monitoring해보자! - 2편 ( monitoring application, prometheus docker 띄우기 )

모니터링 서비스가 없으면 정말 불편합니다. 간단한 예로 ~ 하루는 출근했는데 "** 서비스가 실행이 안되는데?" 확인해보니 메모리 초과로 셧다운되있었습니다. 개발 서버에서 테스트 중에 public망에 있던 서비스와 통신 중에 계속 에러가 발생 확인해보니 셧다운되있었습니다. ** 서비스 죽었어? 잠시만요... 터미널 열고 타자 다다다다다 ps -ef... docker ps .. 매번 이럴순 없습니다. 소스는 github에 올려놓았습니다. 1편 - actuator 적용한 application을 띄우기 2편 - monitoring application, prometheus docker로 띄우기 3편 - Grafana docker로 띄우기 4편 - AlertManager 적용 actuator는 Spring In..

Develop/devops 2020.12.02
728x90
반응형