Study/Spring boot

들어가며 일반적으로 Spring boot에서 Get방식(혹은 쿼리파라미터가 필요한) 요청을 받을 때 사용되는 어노테이션에는 @RequestParam, @PathVariable, @ModelAttribute가 있다. 파라미터의 개수가 적은 경우에는 앞의 두개 어노테이션으로 충분하지만 파라미터가 많아질 수록 객체로 요청을 받는게 가독성 측면에도 관리 측면에도 수월해지기 때문에 @ModelAttribute를 사용한다. 종종 @ModelAttribute를 사용하면서 헷갈리거나 잊어버리는 개념이 있어 이번 포스팅에서는 @ModelAttribute 어노테이션에 대해 공부해보고자 한다! @ModelAttribute 사용 이유 요청을 받을 때 다음과 같이 파라미터의 개수가 적다면 @RequestParam 어노테이션으로..
들어가며 WebClient는 RestTemplate의 대안으로서 급부상된 WebFlux의 라이브러리이다. Spring MVC에서도 지원하는 WebClient는 RestTemplate과 비교했을 때 가장 큰 장점이 `비동기 통신을 지원한다`는 점이 아닐까 싶다. 물론 그 외에도 함수형 프로그래밍 스타일을 지원한다는 점, 다양한 설정과 에러처리를 지원한다는 점 등도 장점으로 꼽을 수 있겠다. WebClient의 최대 장점인 비동기 통신을 지금까지 사용하기 어렵고 쓸 데가 없다는 이유만으로 동기 방식을 고수해왔었는데 이번 회사 프로젝트를 하면서 비동기 통신이 필요해진 시점이 생겼다. 이번 기회에 WebClient의 비동기 통신을 구현해보았고 이번 포스팅의 주제로 삼아보고자 한다. 처음 비동기 통신을 구현해보았..
들어가며 회사에서 개발 중인 서비스가 통신하기 위한 서버가 특정 서버에서만 접근 가능한 상황이었다. 백그라운드에서 동작하는 (유저가 접근하지 않아도 되는) 어플리케이션은 그 특정 서버에 서비스를 띄워서 서로 통신이 가능한 방식을 사용하고 있었지만 개발 중인 서비스가 동작 중인 서버는 별도의 서버로 분리가 되어있었고, 이 서버는 정책상 특정 서버에서 인바운드가 막혀있는 상태였다. 조금 복잡한데 아무튼 개발 중 서비스 -> 타겟 서버로의 직접 접근이 안된다는 말이다. 이 문제를 해결하기 위해서는 타겟 서버로의 접속을 우회하는 방식을 사용해야하는데 이걸 SSH 터널링이라고 한다. 이번에는 SSH 터널링의 개념과 필요성, 구현 예시에 대해 작성해보고자 한다. SSH (Secure Shell) 시큐어 셸(Secu..
들어가며 2023.08.25 - [Study/Spring boot] - [Spring boot] WebClient 사용해보기 2-1 이전글에서는 내가 어떻게 웹클라이언트를 사용하고 있는 지에 대해 간단하게 설명했다. 이번 글에서는 코드를 하나씩 보면서 내가 짠 코드가 어떻게 작동하는 지에 대해 설명해보고자 한다. 지난 글에서 위의 그림과 같이 메서드 체이닝 방식을 직접 구현했었다. 위의 그림 순서에 따라서 차근차근 코드를 보자. ApiWebClientBuilder @Component @RequiredArgsConstructor public class ApiWebClientBuilder { private final WebClient.Builder webClientBuilder; // 체이닝 시작점 publ..
들어가며 무려 1년도 더 된 이전글이 항상 내 블로그 인기글 1위인걸 볼 때마다 마음에 걸렸다. 막 개발 공부하기 시작했을 즈음 webClient에 대한 자료가 별로 없어서 정리할 겸 작성했던 글인데 관련 키워드로 검색하면 저 글이 뜨는 걸 보고... 새롭게 알게된 내용들을 조금 더 추가하고, 현재는 어떻게 사용하고 있는 지에 대해 정리를 해보고자 한다. 기본 개념이나 RestTemplate과의 차이점 등등은 공식문서나 구글에 검색하면 깔끔하게 정리된 자료가 많기에 넘어가기로 하고, 내가 사용하면서 알게 된 개념들만 적어내려가보겠다! WebClient 최종적으로 완성될 구조는 위와 같다. 각 step 이 뭐고 어떻게 사용하는 지는 천천히 설명하기로 하겠다. 이 구조를 사용하면 아래와 같이 코드를 사용할 ..
들어가며 JPA를 이용해서 개발을 하다보니 처음에는 순환 참조 에러, 그 이후로는 지연 로딩 관련 에러를 계속 마주치게 된다. 특히나 지연로딩에 관련해서 애를 많이 먹었기 때문에 이번에는 지연로딩과 즉시로딩, 그리고 그 둘을 알기 위해 프록시까지 정리를 해보고자 한다. 객체는 객체 그래프로 연관된 객체들을 탐색한다. 그런데 객체가 DB에 저장되어 있으므로 연관된 객체를 마음껏 탐색하기는 어렵다. JPA 구현체들은 이 문제를 해결하려고 프록시라는 기술을 사용한다. 프록시를 사용하면 연관된 객체를 처음부터 DB에서 조회하는 것이 아니라, 실제 사용하는 시점에서 DB에서 조회할 수 있다. 하지만 자주 함께 사용하는 객체들은 조인을 사용해서 함께 조회하는 것이 효과적이다. JPA는 즉시 로딩과 지연 로딩이라는 ..
들어가며 이 포스팅은 김영한 강사님의 자바 ORM 표준 JPA 프로그래밍 강의와 저서를 주로 참고하여 작성하였음을 미리 밝힌다. Spring data JPA를 사용하여 개발을 진행하기 전에 JPA와 하이버네이트에 대한 이해가 부족하다고 판단하여 공부를 하기 위해 작성된 포스팅이므로 잘못된 정보가 있을 수 있기에 김영한 강사님의 저서와 강의를 직접 듣고 공부하는 걸 추천한다. 엔티티 매니저 팩토리와 엔티티 매니저 엔티티 매니저는 엔티티를 저장하고, 수정하고, 삭제하고, 조회하는 등 엔티티와 관련된 모든 일을 처리한다. 쉽게 생각하면 엔티티 매니저는 엔티티를 저장하는 '가상의 데이터 베이스'라고 볼 수 있다. 엔티티 매니저 팩토리는 이 엔티티 매니저를 만드는 '공장'인데, 공장을 만드는 건 현실에서든 개발에..
들어가며 짧은 시간 내에 JPA를 프로젝트에 적용하기 위해서 JPA를 제대로 공부할 시간 없이 바로 코드에 적용하느라고 수많은 에러를 만나고 해결해보았다. 하지만 코드를 작성하면서 EntityManager를 이용하지 않고 Repository 인터페이스만을 사용하였다. 사실 우리가 급하게 적용해본 기술은 JPA의 구현체인 Hibernate를 쉽게 사용하기 위한 Spring Data API라는 스프링에서 제공하는 '인터페이스'이다. JPA를 공부하면서 누군가 구현해둔 편리한 도구만을 이용해서 개발을 한다면 결국 각자 기본 개념을 제대로 알지 못하고 혼용해서 사용하거나 헷갈리는 문제, 그리고 에러가 발생했을 때 그 원인을 파악하지 못하는 여러가지 문제가 생길 것이다. 따라서 이번 포스팅에서는 가장 기본이 되면..
들어가며 @Valid 어노테이션으로 유효성 검사를 해주고 예외 처리를 해주지 않으면 사진과 같이 에러 로그가 그대로 노출되어버린다. 이렇게 되면 클라이언트 입장에서 유용한 정보를 주기도 어렵고, trace에서 운영환경에서의 구현이 노출되기 때문에 해커의 위협에서 벗어나기 어렵다. 따라서 적절하게 예외 처리를 함으로써 에러 응답을 변경해 줄 필요가 있고, 이 예외 처리 방법 중 가장 좋은 방식이 @RestControllerAdivce (혹은 @ControllerAdvice)어노테이션과 @ExceptionHandler를 함께 사용하는 방식이라고 한다. 다양한 예외처리 방법과 @RestControllerAdivce 어노테이션을 사용하는게 가장 좋은 이유는 다음 글을 참고하자. [Spring] Spring의 다..
들어가며 JAVA를 메인 언어로 선택했다면 당연히 사용하게 될 스프링 프레임워크. 당연하다고 무조건 사용하는게 아니라 어떤 특징이 있고 장,단점은 무엇인지 알고 사용하는게 좋지 않을까? 예전 포스팅에서 다룬 적이 있지만 이번에는 조금 디테일하게 스프링 프레임워크에 대해 알아보기로 하자. 스프링 프레임워크의 탄생 배경 늘 말하는 거지만 공부 목적인 이 포스팅보다는 잘 정리된 글을 읽어보는걸 더 추천한다! 자바EE의 역사 및 스프링과의 관계 OKKY | 자바EE의 역사 및 스프링과의 관계 다른 글타래 에서 어느 분이 스프링( Spring Framework )과 자바EE( Java Enterprise Edition )의 관계에 대해 질문을 주셔서 답글을 쓰다가, 어쩌면 경력이 길지 않은 다른 개발자 분들도 잘..
반응형
Anna-Jin
'Study/Spring boot' 카테고리의 글 목록