본문 바로가기

Spring19

Springboot - 서비스 단위 테스트 스프링 프로젝트를 진행하면서 service 클래스의 테스트를 진행해야 한다. 전에는 인 메모리 db를 활용하여 service 내의 repository를 실제 호출하면서 테스트를 진행하였다. 하지만 여기에는 문제가 있는데 repository를 사용하고 DB로 부터 영향을 받는 것이다. service 테스트를 진행하는 것은 순전히 service 내의 기능만을 잘 돌아가는 지를 확인하는 것이다. 하지만 예전 방식은 service 내의 repository 기능 또한 테스트를 진행하는 것이다. 통합테스트를 하는 것처럼 보일 것이다. 이러한 문제를 해결하는 것이 Mockito를 사용하는 것이다. Mockito는 단위 테스트를 위한 java mocking framework이다. Mockito에 대해 알기 전에 먼저 .. 2023. 4. 2.
Spring boot - 서버의 존재하지 않는 URL 접근 시 예외 처리 프로젝트를 진행하면서 서버의 존재하지 않는 URL로 접근 시, 아래와 같이 404 Status코드와 함께 에러메시지가 반환되는 것을 보았다. 이 페이지는 사용자가 보기에 매우 가독성 없는 페이지다. 이제 Spring boot에서 간단한 설정을 통해 위 페이지를 사용자의 가독성을 향상하도록 수정해 보겠다. 여기서 사용할 것은 예외 처리를 위한 @ExceptionHandler이다. @ExceptionHandler에 대해 궁금한 사항은 https://khdscor.tistory.com/29를 참고하길 바란다. 스프링 @ExceptionHandler 를 통한 예외 처리스프링으로 프로젝트를 진행하다 보면 정해진 입력값이 잘못되거나 없거나 하는 등 다양한 예외들이 발생할 것이다. 아래와 같이 흔히 JPA로 데이터를.. 2022. 4. 9.
스프링부트 - 인터셉터(Interceptor) 스프링 프로젝트를 진행하다 보면 controller에 접근전 공통적으로 처리해야 하는 로직이 있었을 것이다. controller로 이동하기 전에 로그인 정보를 확인한다든지, 보안토큰, 불필요한 파라미터나 파일 등을 전송 중인지 미리 확인하면 좋은데 이러한 상황에서 사용하는 것이 필터와 인터셉터이다. 필터와 인터셉터는 비슷한 기능을 하지만 차이가 존재한다. 아래 사진을 봐보자. 위 사진과 같이 스프링 프로젝트에서 요청이 와서 스프링 MVC를 사용하고 DispatcherServlet에 앞에서 처리를 하면 필터이고 뒤에서 처리하면 인터셉터이다. 아래는 좀 더 필터와 인터셉터의 구체적인 부분들이다.(출처: https://velog.io/@ansalstmd/%EC%8A%A4%ED%94%84%EB%A7%81%EB%.. 2022. 3. 6.
스프링부트 AOP에 대한 기본 정리 스프링의 여러 장점이 되는 특징들이 있고 그중 하나이 AOP에 대해 간단히 정리해 보고자 한다. 좋은 개발환경의 중요 원칙은 '개발자가 비즈니스 로직에만 집중할 수 있게 한다'이다. 대부분의 시스템이 공통으로 가지고 있는 보안, 로그 , 트랜잭션과 같이 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 스프링에서는 '횡단 관심사(cross-concern)'라고 한다. AOP는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임이다. AOP(Aspect-Oriented Programming)는 '관점 지향 프로그래밍'이라는 의미이고 '관점(Aspect)'이라는 용어는 개발자들에게는 '관심사(concern)'라는 말로 통용된다. 관심사는 핵심 로직은 아니지만, 코드를 온전하기 위해 필요한 것들이.. 2022. 2. 28.
Spring Controller를 REST 방식으로 변화 - Rest API 처음 spring을 공부하고 JSP를 이용하여 프로젝트를 진행했을 때 @Controller를 이용하여 요청이 오면 jsp페이지를 보여주는 방식으로 프로젝트를 진행하였었다. 하지만 이는 옛날 방식이며 요즘 자주 사용하는 방식은 @RestController을 이용한다고 한다.  모바일 시대가 되면서 서버의 데이터를 소비하는 주체가 '브라우저'라는 특정한 애플리케이션에서 앱이나 웹이 서버에서 제공하는 데이터를 소비하게 되었다.  즉, 과거에는 브라우저라는 하나의 대상만을 상대로 HTML이라는 형태만 전달하면 됐었고, 이러한 방식이 @Controller을 이용한 방식이다. 하지만 웹이나 앱은 자신만의 방식으로 화면을 보여주게 되므로 하나의 HTML을 전달하는 방식은 좋은 방식이 아닐 것이다. 앱이나 웹은 각자의.. 2022. 2. 23.
스프링 MVC에 대한 간단 정리 스프링 프레임워크로 웹 개발을 하면서 많이 본 용어는 스프링 MVC라는 용어이다. 스프링 프로젝트를 생성할 때 spring web라는 라이브러리를 추가했었는데 spring mvc를 사용할 수 있도록 하는 것이라고 한다. 그저 프로젝트를 생성할 때 자동으로 쓰는 것이었지만 도대체 이 spring mvc라는 것은 무엇인지 확실히 알아보고자 한다. 이 글에서는 '코드로 배우는 웹 프로젝트 - 구멍가게 코딩단'을 읽고 스프링 MVC에 대해 간단하게 정리하여 쓴 글이다. 우선 가장 기억해야 할 점은 스프링 MVC가 스프링의 서브 프로젝트라는 점이다. 스프링은 하나의 기능을 위해서만 만들어진 프레임워크가 아니라 '코어'라고 할 수 있는 프레임워크에 여러 서브 프로젝트를 결합해서 다양한 상황에 대처할 수 있도록 개발.. 2022. 2. 9.
스프링 프레임워크의 특징 및 의존성 주입 이 글에서는 스프링에 대한 기본적인 몇몇 특징과 의존성 주입에 대해서 간략하게 알아볼 것이다. 이 내용은 '코드로 배우는 스프링 웹 프로젝트(구멍가게 코딩단)'을 보고 공부한 내용을 간략하게 정리한 것이다. 스프링 프레임워크는 말 그대로 프레임워크이다. 프레임워크는 뼈대나 근간을 이루는 코드들의 묶음 즉, 큰 틀을 제공하고 내 코드는 프레임워크의 틀 안에 맞춰서 작성하는 것이다. 프레임워크는 프로그램의 기본 흐름이나 구조가 이미 정해져 있어서 개발자 간의 능력 차이를 메워준다. 이미 구조가 구현돼 있기에 반쯤 완성된 상태에서 필요한 부분을 조립하는 형태의 개발이 가능하다는 점이다. 이는 품질이 보장된 결과와 개발 시간 단축이라는 장점이 있다. 2000년대 초반 여러 프레임워크가 나와있지만 스프링은 가장 .. 2021. 12. 6.
스프링 @ExceptionHandler 를 통한 예외 처리 스프링으로 프로젝트를 진행하다 보면 정해진 입력값이 잘못되거나 없거나 하는 등 다양한 예외들이 발생할 것이다. 아래와 같이 흔히 JPA로 데이터를 가져올 때도 findById를 사용할 때 잘못될 경우를 대비하여 exception을 던질 것이다. User user = userRepository.findById(user.getId()) .orElseThrow(() -> new IllegalStateException( "userId가 " + user.getId() + "인 user를 찾지 못했습니다.")); 그렇다면 위에 코드처럼 findById를 통해 데이터를 가져오려고 했지만 예외가 발생했을 때에는 클라이언트한테는 어떻게 표시될까? 뭐라고 하는지도 모를 이상한 에러가 보여질 것이다. 그렇기에 이러한 예외들.. 2021. 10. 2.
springboot 이미지파일을 aws 서버에 보관하고 가져오기(s3) springboot를 다루면서 이미지를 저장해놓고 저장한 이미지 URL을 가져오는 기능이 필요하여 aws를 이용하여 구현해봤다. 이 글에서는 aws 사이트에서 이미지를 업로드하고 spring에서는 업로드한 이미지에 접근할 수 있는 이미지 URL을 가져오는 기능만 구현했으며 이미지 업로드 기능, 삭제 기능 같은 다른 기능들은 참고에 적어놓은 다른 블로그들을 확인해 보길 바란다. 또한 이 글에서는 로컬 환경에서의 설정만을 하였고 배포 환경에서의 설정에 대해서도 확인학 싶다면 참고에 다른 블로그들을 확인해 보길 바란다. 물론 이미지뿐만 아니라 다른 파일도 aws에 저장할 수 있지만 여기서는 이미지 파일만을 다루겠다. 먼저 aws에 로그인을 한다. 무료 계정으로 해도 특별히 과도한 기능을 사용하지 않는 한 지장.. 2021. 9. 16.