본문 바로가기

Spring13

Springboot 3.x.x 를 사용해보자 들어가기 최근 Springboot 프로젝트를 생성하기 위해 Spring.io(https://start.spring.io/)에서 다운을 받으려고 들어갔더니 아래와 같이 나왔다. Spring Boot의 버전과 Java 버전을 봐보자. Springboot는 3.x.x이고 Java는 최소가 17이다. 나는 Springboot 2.x.x 때 시작하였고 Java 버전은 항상 11 버전을 사용하였기에 어색한 모습이었다. 확인해 보니 Springboot 3.x.x는 22년 1월부터 정식 릴리즈 됐었고, 2.x.x 버전은 23년 11월까지 지원하는 것이었다. Springboot 프로젝트를 이전 버전으로 사용하려면 위의 방법으로 jar 파일로 다운로드하지 않고 gradle 혹은 maven에서 직접 하면 되기는 하지만, 계.. 2024. 1. 24.
springboot(jpa, mybatis) - page 객체 및 커버링 인덱스를 사용해보자! 들어가기 평소 프로젝트를 진행할 때는 페이지 처리를 할 때, 페이지 처리 로직이나 객체를 직접 만들어서 사용했었다. 하지만 최근 Page 객체라는 것이 있고 spring에서 제공하고 있다는 것을 알았다. Page 객체를 사용하면 다음페이지가 있는지, 전체 사이즈가 몇인지, 이전 페이지가 있는지 등 구현하기 귀찮은 여러 메서드들을 제공해 주니 유용하게 사용된다고 한다. 페이지 처리를 하는데 있어 Page 객체를 사용 안 해볼 수는 없기에 직접 사용해 보기로 하였다. 이 글은 페이지 객체를 사용한 경험담을 담고있다. 처음에는 Page 객체니, PageRequest 니 Pagable이니 PageImpl 등 뭔 Page 하나에 관련된 객체가 너무 많아서 어디서부터 접근해야 할지 막막했었다. page처리를 위해 .. 2023. 8. 24.
springboot service 계층: 인터페이스와 여러 구현체로 구현(공통 메서드 분리) 들어가기 이 글은 개인적인 생각을 포함하여 작성한 글이다. 나는 프로젝트를 할 때 항상 service 계층에 class 하나로만 구현을 하였었다. 하지만 다른 사람들이 한 프로젝트에서는 service 명칭으로 된 interface와 serviceImpl 명칭으로 된 class 구현체로 구현되어 있었다. 이는 디자인 패턴 중 전략 패턴을 적용한 것이라고 할 수 있다. 이게 과연 의미가 있나 싶어서 지금까지 적용하지 않았었는데 마침 리펙토링을 하면서 한번 알아보고 적용해 보기로 하였다. 이 글에서는 impl을 쓰는 이유와 간단 적용, 인터페이스와 여러 구현체일 때 공통 메서드 처리 등을 다룰 예정이다. Service 계층에서 인터페이스와 구현체의 구분은 왜 생긴 것인가? 처음 인터넷에 'spring serv.. 2023. 7. 15.
Java Springboot AOP를 통한 로그 출력 및 파일화(메서드 이름을 활용) 이 글에서는 Springboot 프로젝트를 진행하면서 AOP를 통해 로그 출력을 하는 과정을 담았다. AOP에 대한 개념적인 부분은 별도의 참고 URL로 표기하였고 활용 위주로 작성하였다. 글을 작성하기 전 간단하게 AOP를 통해 로그 처리를 한 소감을 말하자면 정말 말도 안 되게 유용한 기능이라고 생각한다. 처음에는 그냥 메서드마다 로직 사이에 log.info를 추가하기만 하면 되는 것을 뭐 하러 코드까지 늘리면서 다른 AOP 클래스를 생성할까? 하고 의구심이 들었다. 하지만 구현해놓고 수정할 일이 있어 메서드를 수정할 때 log출력에 관한 부분은 하나도 신경을 쓰지 않고 메인 로직을 수정할 수 있었다. 이게 AOP를 사용하는 진정한 장점이라는 것을 깨달았다. 다음 프로젝트에서도 계속 AOP를 통해 로.. 2023. 7. 8.
Springboot - 서비스 단위 테스트 스프링 프로젝트를 진행하면서 service 클래스의 테스트를 진행해야 한다. 전에는 인 메모리 db를 활용하여 service 내의 repository를 실제 호출하면서 테스트를 진행하였다. 하지만 여기에는 문제가 있는데 repository를 사용하고 DB로 부터 영향을 받는 것이다. service 테스트를 진행하는 것은 순전히 service 내의 기능만을 잘 돌아가는 지를 확인하는 것이다. 하지만 예전 방식은 service 내의 repository 기능 또한 테스트를 진행하는 것이다. 통합테스트를 하는 것처럼 보일 것이다. 이러한 문제를 해결하는 것이 Mockito를 사용하는 것이다. Mockito는 단위 테스트를 위한 java mocking framework이다. Mockito에 대해 알기 전에 먼저 .. 2023. 4. 2.
스프링부트 - 인터셉터(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 방식으로 변화 처음 spring을 공부하고 JSP를 이용하여 프로젝트를 진행했을 때 @Controller를 이용하여 요청이 오면 jsp페이지를 보여주는 방식으로 프로젝트를 진행하였었다. 하지만 이는 옛날 방식이며 요즘 자주 사용하는 방식은 @RestController을 이용한다고 한다. 모바일 시대가 되면서 서버의 데이터를 소비하는 주체가 '브라우저'라는 특정한 애플리케이션에서 앱이나 웹이 서버에서 제공하는 데이터를 소비하게 되었다. 즉, 과거에는 브라우저라는 하나의 대상만을 상대로 HTML이라는 형태만 전달하면 됐었고, 이러한 방식이 @Controller을 이용한 방식이다. 하지만 웹이나 앱은 자신만의 방식으로 화면을 보여주게 되므로 하나의 HTML을 전달하는 방식은 좋은 방식이 아닐 것이다. 앱이나 웹은 각자의 맞.. 2022. 2. 23.
스프링 MVC에 대한 간단 정리 스프링 프레임워크로 웹 개발을 하면서 많이 본 용어는 스프링 MVC라는 용어이다. 스프링 프로젝트를 생성할 때 spring web라는 라이브러리를 추가했었는데 spring mvc를 사용할 수 있도록 하는 것이라고 한다. 그저 프로젝트를 생성할 때 자동으로 쓰는 것이었지만 도대체 이 spring mvc라는 것은 무엇인지 확실히 알아보고자 한다. 이 글에서는 '코드로 배우는 웹 프로젝트 - 구멍가게 코딩단'을 읽고 스프링 MVC에 대해 간단하게 정리하여 쓴 글이다. 우선 가장 기억해야 할 점은 스프링 MVC가 스프링의 서브 프로젝트라는 점이다. 스프링은 하나의 기능을 위해서만 만들어진 프레임워크가 아니라 '코어'라고 할 수 있는 프레임워크에 여러 서브 프로젝트를 결합해서 다양한 상황에 대처할 수 있도록 개발.. 2022. 2. 9.