본문 바로가기

쿤즈 Dev/Spring Boot25

[Spring Boot] 롬복(Lombok)과 Mybatis 사용시 IndexOutOfBoundsException 발생 그리고 해결 방법 스프링 부트(Spring Boot)를 사용해서 백엔드 API를 개발할 때, 롬복(Lombok)을 많이 사용한다. 편하기도 하고 반복된 메서드를 만들 필요도 없기 때문에 잘만 사용하면 매우 훌륭한 라이브러리라 생각된다. 최근 Mybatis를 함께 사용하여 프로젝트를 진행 중에 갑자기 발생된 문제를 해결한 방법에 대해서 공유하려 한다. 롬복(Lombok)의 사용 시 @Builder의 사용 롬복에는 여러 가지 애노테이션이 있습니다. 주로 @Getter, @Setter, @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor, @Data, @ToString을 사용한다. 거의 대부분의 모든 것을 사용하는 것 같다. 저의 경우는 @Builder는 잘 사.. 2023. 8. 9.
[Spring Boot] Swagger 3.0 적용하기 Swagger의 3.0 버전을 새로운 토이 프로젝트에 적용해 보려 한다. 기존에는 적용해보지 않았지만 API 문서작업이 필요함을 느끼고 작업을 진행해 보려 한다. 문서작업이 항상 먼저지만 그와는 별개로 Swagger는 클라이언트에서 작업하기에 편한 문서가 안닐까 생각된다. 물론 서버에서 API를 실행해 보기 좋은 방법이기도 하다. Swagger 3.0 종속성 설치 첫 시작부터 쉽지 않았던것 같다. 종속성을 설치해도 페이지가 접속되지 않았기 때문이다. 그렇게 한참을 뒤져보다가 하나의 해답을 찾아냈다. https://stackoverflow.com/questions/74614369/how-to-run-swagger-3-on-spring-boot-3 How to run Swagger 3 on Spring Bo.. 2023. 7. 25.
[Spring Boot] 앱 배포시 profile 설정 방법 스프링 부트를 통해서 웹 프로그래밍을 완료하고 Build를 하면 로컬에서는 쉽게 테스트가 가능하다. 그리고 배포할 때에는 이 프로젝트를 jar 파일로 만들어서 배포하면 Tomcat까지 포함되어 만들어지기 때문에 배포 과정도 굉장히 편리하다. 이것이 스프링 부트를 사용하여 웹 서비스를 만들면 쉬운 부분 중 하나인 것 같다. 하지만 로컬에서 테스트할 때와 실제 운영에 배포하여 서비스할 때에는 환경 구성이 다르다. 그래서 profile 설정을 다르게 만들어 주어야 한다. 어떻게 하는 것인지 알아보자. application.yml 설정 대부분의 중요한 설정들은 application.properties 혹은 application.yml을 이용해서 만든다. 이 파일 내부에는 디비에 접근하는 url이나 jwt에 사용.. 2023. 1. 30.
[Spring Boot] 엔티티에서 Setter 사용에 대한 생각 이번 포스팅에서는 고민하고 있는 생각들을 적어보려 한다. 그래서 이번에 생각해본 주제는 데이터베이스와 바로 직결되어 있는 엔티티, 그 중에서도 엔티티의 데이터가 변경되는 Setter(세터) 메서드에 대한 고민들이다. 생각하고 고민하던 것들을 나열해 본다. 엔티티는 소중하다 엔티티는 굉장히 소중한 객체이며 클래스라 생각한다. 데이터베이스 테이블과 동일한 데이터를 담는 곳이기 때문이다. 따라서 이 데이터가 잘못되었거나 없다거나 부문별하게 변경될 수 있다 생각하면 아찔하다. 그래서 엔티티를 다룰때에는 반드시 소중하게 다뤄야 할 필요가 있다. 새로운 엔티티가 생성되는 것인지, 이미 만들어진 엔티티를 수정하는 것인지 판단해야한다. 혼자 작업을 할 때에는 이런것들은 개발자 한 사람이 다 생각하기때문에 전혀 문제가 .. 2023. 1. 8.
[Spring Boot] Java Optional 사용 방법 Java를 이용하여 웹 프로그래밍을 할 때, 많은 부분은 CRUD를 사용하게 될 것입니다. 그리고 Read 부분이 가장 많이 이용되는 부분이 아닌가 싶습니다. 특히 Repository를 접근할때 JPA 기능을 사용하여 인터페이스를 상속받고 사용하는 메서드중에서 Optional 타입들이 있습니다. 이번 포스팅에서는 Optional 타입을 어떻게 사용하는지 알아보도록 할게요. Optional 은 무엇인가? Spring boot에서 엔티티를 조회하기 위해서 사용하는 메서드중 findById()라는 메서드가 있습니다. 이 메서드는 Id를 조회하여 엔티티 하나를 가져오는 메서드입니다. 이때 반환 타입을 보면 Optional로 되어 있습니다. 그리고 그 내부에 저희가 원하는 T 반환타입이 제너릭으로 만들어져 있어요.. 2022. 12. 28.
[Spring Boot] RabbitMQ 란 무엇인가(1) 스프링부트를 사용하면서 데이터를 다른 서버로 전달해야할 경우가 최근에는 많이 발생합니다. 많는 서버들이 덩치가 커지면서 MSA로 넘어가는 일이 많이지기 때문이죠. 그래서 결제와 같은 데이터나 통계를 위해 데이터가 다른서버로 이동해야할때 많이 사용하는 기술 중 하나가 바로 MQ(Message Queue)입니다. 이번 포스팅에서는 여러가지 메세지 큐중에서 RabbitMQ 에 대해서 알아보도록 할게요. RabbitMQ 란? 래빗엠큐는 메세지 브로커를 의미합니다. 즉, 어떠한 메세지, 정보를 전달할때 중간에서 그 메세지를 받아서 다른 서버로 전송하는 기능을 합니다. 그래서 브로커라는 단어를 사용하는것 같아요. 래빗엠큐는 AMQP 표준을 따릅니다. Advanced Message Queuing Protocol의 약.. 2022. 12. 26.
[Spring Boot] 앱 실행시 banner 만드는 방법 스프링부트 프로젝트를 개발하다 보면 앱을 실행할 때 톰캣이 실행되면서 상단에 배너가 뜨는 것을 보실 수 있습니다. 아무런 설정을 하지 않았다면 Spring이라는 글자와 함께 버전 정보가 나타나게 됩니다. 이번 포스팅에서는 스프링부트 애플리케이션 실행 시 등장하는 배너를 만드는 방법에 대해서 알아보겠습니다. 배너 생성 사이트 배너를 생성하기 위해서 고민하실 필요는 없습니다. 원하는 글자만 입력하는 배너를 만들어 주는 사이트가 있습니다. 배너 생성사이트: https://devops.datenkollektiv.de/banner.txt/index.html 사이트에 들어가시면 아래와 같은 화면이 나타납니다. 여기서 원하는 글자를 입력해서 배너를 만들 수 있습니다. 저는 예를들어서 Customer라는 배너 글자를 .. 2022. 6. 8.
[Spring Boot] Service 테스트 코드 작성하기 (feat. Kotlin) 지난 포스팅에서는 Entity를 생성하고 Repository를 만들어서 테스트 코드를 작성해 보았습니다. 2022.06.04 - [쿤즈 Dev/Spring Boot] - [Spring Boot] Repository 테스트 코드 작성하기(feat. Kotlin) [Spring Boot] Repository 테스트 코드 작성하기(feat. Kotlin) 스프링 부트 프로젝트를 진행하면서 이제는 선택이 아닌 필수가 되는 것 중 하나가 바로 테스트 코드의 작성입니다. 테스트 코드는 무작정 작성해도 되지만 잘 작성해 놓으면 여러 가지 오류에 koonsland.tistory.com Repository를 만들 때에는 간단하게 JpaRepository를 상속받았고 API하나를 추가하여 테스트를 진행해 보았습니다. 이번.. 2022. 6. 7.
[Spring Boot] Repository 테스트 코드 작성하기(feat. Kotlin) 스프링 부트 프로젝트를 진행하면서 이제는 선택이 아닌 필수가 되는 것 중 하나가 바로 테스트 코드의 작성입니다. 테스트 코드는 무작정 작성해도 되지만 잘 작성해 놓으면 여러 가지 오류에 대해서 대처가 가능합니다. 이번 포스팅에서는 Repository를 만들고 테스트 하는 방법에 대해서 알아볼게요. JPA를 이용해 Repository 만들기 레포 테스트를 위해서는 우선 클래스를 만들어야 합니다. JPA를 이용하면 이러한 Repository 클래스들을 손쉽게 만들고 CRUD가 가능합니다. 먼저 회원 Entity를 만들어 보겠습니다. @Entity class Member( var name: String, var age: Int, ) { @Id @GeneratedValue @Column(name = "membe.. 2022. 6. 4.