JaeWon's Devlog
article thumbnail
[Spring] @Scheduled 어노테이션에서 cron 사용 및 정리
BackEnd/Spring 2022. 8. 11. 18:08

회사에서 업무를 할당받게 되면서 Spring Batch 를 사용하고 있는 배치서버를 맡게 되었습니다.(Spring Batch 에 대해서는 추후 포스팅하기위해, 공부하고 정리하고 있습니다...) 그전에 간단하게 스프링에서 @Scheduled 어노테이션을 사용하여 간단하게 스케줄링 하는 것을 정리해보고자 합니다. 1. Spring Schedule(스케줄) 설정하기 - 간단하게 스프링부트(SpringBoot)에서 스케줄 설정은 아래와 같이 할 수 있습니다. @SpringBootApplication @EnableScheduling public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestAppl..

article thumbnail
[Spring] WebClient 정리(API 통신)
BackEnd/Spring 2022. 8. 7. 13:35

회사에서 코드를 분석하다가 외부 API 통신 시 사용하고 있는 WebClient 를 발견할 수 있었다. Spring 5 부터 제공하는 기능이였고, 이전에는 RestTemplate 를 사용하고 있었어서 WebClient 에 대해 알아보고 정리해보고자 한다. 1. WebClient 란? - Spring 5 부터 제공하는 RestTemplate 를 대체하는 웹 클라이언트(HTTP Client). - 웹으로 API를 호출하기 위해 사용되는 Http Client 모듈 중 하나. - 기존의 동기(Sync) API 를 제공할 뿐만 아니라, 논블로킹(Non-Blocking) 및 비동기(Async) 방식을 지원해서 효율적인 통신이 가능. - 요청을 나타내고 전송하게 해주는 빌더(Builder) 방식의 인터페이스를 사용...

article thumbnail
[Spring] JPA - 영속성 컨텍스트(Persistence Context) 정리
BackEnd/Spring 2022. 7. 25. 09:22

이전 글에서 JPA에 대한 기본 정리를 진행해보았습니다. 이번 글에서는 JPA 에서 가장 중요할 수 있는 영속성 컨텍스트(Persistence Context)에 대해서 정리해보고자 합니다. 1. 영속성 컨텍스트란? - 엔티티(Entity)를 영구 저장하는 환경. - 어플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 저장소 같은 역할. - 엔티티 매니저(EntityManager)를 통해 영속성 컨텍스트에 접근. - EntityManager 를 통해 Entity 를 저장, 조회하면 EntityManager 는 영속성 컨텍스트에 해당 Entity 를 보관하고 관리. 2. 영속성 컨텍스트 생명주기 - 영속성 컨텍스트의 생명주기는 아래 이미지와 같이 4가지 상태가 있다. 비영속(new) : 영속성 컨텍스..

article thumbnail
[Spring] JPA 정리
BackEnd/Spring 2022. 7. 22. 10:49

개발을 배우면서 처음 Java에서 DB 와 관련된 작업을 할 때는 JDBC API를 배웠습니다. JDBC API는 항상 모든 로직 안에서 Connection 객체를 받아오고, SQL 문을 작성하고, 끝나면 close 시켜야 했습니다. 그리고 이러한 중복되고 불필요한 코드를 작성하는 것을 보완해주는 MyBatis, Spring JdbcTemplate 를 배워 사용하였습니다. 최근에는 ORM 기술을 통해 SQL 작성없이 객체를 DB에 직접 저장/관리를 할 수 있게 도와주는 JPA 를 사용하여 DB 작업을 대부분 사용하고 있습니다. 이번 글에서는 이 JPA에 대해서 정리를 해보고자 합니다. 0. ORM(Ojbect-Relational Mapping) 이란? - JPA에 대해서 알기전에 기본이 되는 ORM에 대..

article thumbnail
[Spring] 의존성 주입(DI) 시 생성자 주입(Constructor Injection)을 사용해야하는 이유
BackEnd/Spring 2022. 7. 17. 14:30

회사에서 소스를 분석하는 도중에 의존성 주입을 필드에 @Autowired 어노테이션을 사용하지 않고, 생성자를 생성하여 주입하고 있었다. 그리고 종종 생성자에는 아예 @Autowired 어노테이션도 사용되지 않고 @RequiredArgsConstructor을 사용하고 있었다. 항상 필드 주입으로 사용하고 있었어서, 궁금해서 시니어 분께 여쭤보니 @Autowired는 deprecated 돼가는 분위기이고, 또한 생성자 주입을 권고하고 있기도 하다는 답변을 받았다. 추가로, 인텔리제이에서도 Autowired 어노테이션을 사용하면 아래와 같이 경고메시지를 보여주고 있었다.(매번 자세히 확인도 안 하고 넘어갔는데...) 대충 번역해보자면 "필드 주입은 권장하지 않습니다. 항상 빈에서 생성자 기반으로 종속성을 주..

article thumbnail
[SpringBoot] 스프링부트 + 슬랙(slack bot) 연동하기
BackEnd/Spring 2022. 7. 10. 15:55

예전에는 서비스를 운영하다 보면 직원들에게 알림(장애, 배치, 반영 등)을 알려주기 위해 메시지를 보내거나 하였지만, 최근에는 대부분 슬랙(Slack)이란 메신저를 사용한다. 대부분의 회사가 초기에 구축을 해두어, 업무시에는 간단한 양식을 추가하여 사용하고 있는데, 실제 구축하여 연동을 해보고자 하였다. 이번 글에서는 백엔드를 스프링부트로 하여 간단하게 슬랙을 연동해보도록 하겠다. 1. Slack Bot 생성하기 - 기본적으로 Slack에는 가입되어 있다고 가정하고 진행합니다. - 아래 사이트를 통해서 메시지를 보낼 Slack Bot을 생성합니다. - https://api.slack.com/ Slack은 미래의 업무가 이루어지는 곳입니다 Slack은 여러분의 팀과 소통할 새로운 방법입니다. 이메일보다 빠..

article thumbnail
[Spring] 문자열 유효성 검사(isEmpty(),hasText())
BackEnd/Spring 2022. 7. 3. 14:38

개발을 하던 도중에 종종 문자열 유효성 검증(ex: Null 검증)이 필요할 때가 있다. 해당 상황에서 사용하는 메소드를 살펴보고자 한다. 1. String.isEmpty() - Java에서 제공하는 String 클래스의 isEmpty()메소드가 있다. - 해당 메소드로 문자열 유효성 검사를 진행이 가능하다. - 그러나, 해당 메소드로는 Null 체크가 안되어, 로직에서 String이 null 일 경우에는 NullPointerException(NPE)이 발생한다. - 아래 이미지에서와 같이 length로 길이는 체크하지만 null은 체크하지 않는다. 2. (deprecated)StringUtils.isEmpty() - 스프링에서 제공하는 Util 클래스 중 StringUtils 클래스에도 isEmpty(..

article thumbnail
[Spring] @Component 어노테이션을 사용한 싱글톤패턴 유사 구현
BackEnd/Spring 2022. 1. 16. 18:04

프로젝트 개발 도중에 싱글톤 패턴을 사용하여, DB에서 데이터를 불러와 저장 후에 사용하고자 하였다. 그러나, 스프링 객체생성주기로 인해 싱글톤으로 생성한 인스턴스에서 DB 접근이 어려웠고, 공부하여 해결을 하고 싶었지만, 시간이 부족하여 유사한 방법으로 해결하고자 하였다. Spring에서 제공하는 @Component 어노테이션을 사용하여 유사하게 구현해보았다. 1. @Component 어노테이션 - @Component 어노테이션을 붙인 클래스를 spring에서 스캔할 수 있도록 설정이 필요하다. ..... - 태그의 base-package에 스캔하고자 하는 패키지 경로를 설정한다. (해당 글에서는 예제를 위해 test 아래 모든 경로로 선언하였다.) - 패키지가 여러개일 경우 위 태그를 여러개 작성하여..

article thumbnail
[SpringBoot] 간단하게 에러페이지 설정하기
BackEnd/Spring 2021. 5. 16. 15:08

웹 서비스를 개발하면서 404, 500 에러 등 많은 에러가 발생하고 각각의 에러에 맞는 화면을 보게 됩니다. 해당 글에서는 에러가 발생하면 해당 에러에 맞는 에러 페이지를 보여주도록 설정해보도록 하겠습니다. 개발환경은 아래와 같습니다. SpringBoot : 2.4.4 Java8 thymeleaf SpringBoot에서 간단하게 에러페이지를 설정해보도록 하겠습니다. 1. 에러페이지를 관리할 Controller를 생성하여 ErrorController 인터페이스를 상속받아 에러 컨트롤러를 생성합니다. 2. error 페이지를 만듭니다. 1. 에러컨트롤러 생성(CustomErrorController) - 기본적으로 Spring Boot는 모든 Error를 적적한 방식으로 처리하는 /error 로 맵핑을 제공..

article thumbnail
[SpringBoot] Vue.JS + SpringBoot 연동하기
BackEnd/Spring 2021. 5. 9. 18:00

해당 내용에 추가하여 새롭게 글을 작성하였습니다. 부족한 부분은 여기 를 통해 확인 부탁드립니다~ [Vue.js] Vue + SpringBoot + Mysql 를 이용한 Todo 구현(1) - 프로젝트 구성하기 블로그를 하면서 여러 개의 글을 작성하였는데, 그중에서도 vue.js 와 springboot 연동하는 글이 제일 많이 봐주셨다. 매번 다른 글도 작성하면서 간단하게 db까지 연동하는 글을 작성하고자 하였지 dev-jwblog.tistory.com 대부분 프론트엔트 프레임워크(vue.js, react.js 등)을 사용할 때에는 백엔드 구성을 Node.js를 사용합니다. 하지만, SpringBoot로도 백엔드를 구성하여 사용을 해보고자 하여 한번 적용해보기로 하였습니다. 해당 글에서는 SpringBo..