본문 바로가기

Backend

(37)
Spring Boot에서 이벤트 사용하기 안녕하세요! 이번 포스팅에서는 Spring Boot에서 이벤트를 적용하는 방법에 대해 알아보겠습니다. 전체 코드는 Github에서 확인이 가능합니다. ✍️ 📚 개념 정리 & 사전준비 1. 이벤트 Spring Boot에서 이벤트를 적용하는 방법에 대해 들어가기 전에, 이벤트를 왜 써야하는지, 사용하면 좋은 상황에 대해 먼저 소개하겠습니다. 회원가입을 하고 나면 가입 축하 메세지를 전송하는 동시에 쿠폰을 전송하는 서비스가 있다고 가정해보겠습니다. @Service public class RegisterService { @Autowired ApplicationEventPublisher publisher; public void register(String name) { // 회원가입 처리 로직 System.out..
Spring Boot에서 CORS 적용해보기 안녕하세요! 이번 포스팅에서는 CORS가 무엇인지 간단하게 알아보고, Spring Boot에서 CORS를 적용하는 방법에 대해 알아보겠습니다. 전체 코드는 Github에서 확인이 가능합니다. ✍️ 저는 만들어둔 API 서버로 클라이언트에서 통신을 시도할 때, 콘솔에 아래와 같은 오류 메세지를 마주친 경험이 있습니다. ❌ Access to XMLHttpRequest at '~' from origin '~' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. 부랴부랴 구글링을 해서 검색해보니, 'CORS'를 적용하면 되는데, 아래 어노테이션을 추가하면 해당 현상이..
Spring Boot에서 Spring Rest Docs 사용해보기 안녕하세요! 이번 포스팅에서는 Spring Rest Docs를 적용하고 사용하는 방법에 대해 알아보겠습니다. 전체 코드는 Github에서 확인이 가능합니다. ✍️ Spring Rest Docs는 API들을 자동으로 문서화할 수 있게 도와주는 도구입니다. 비슷한 서비스로는 Swagger가 있습니다. 저도 초반에는 Swagger를 사용했는데, 사용하면서 아래와 같은 불편함을 느꼈습니다. 1. 서비스 코드에 Swagger 관련 어노테이션을 추가해줘야한다. @Api @Controller public class AccountController { @ApiOperation("회원정보 가져오기") public ResponseEntity changeInfo() throws BizCheckedException { // ..
Spring Boot Custom Annotation 만들기 안녕하세요! 이번 포스팅에서는 Spring Boot에서 Custom Annotation을 만드는 방법에 대해 알아보겠습니다. 전체 코드는 Github에서 확인이 가능합니다. ✍️ 📚 개념 정리 1. 커스텀 어노테이션이란? 프로그램에 관한 데이터를 제공하거나 코드에 정보를 추가할 때 사용하는 것을 어노테이션이라고 합니다. 대표적인 어노테이션으로는 @Controller, @SpringBootApplication등이 있습니다. 하지만 위 예시 어노테이션들은 이미 만들어진 어노테이션들이고, 직접 커스텀해서 어노테이션을 만들 수 있는데, 이것을 커스텀 어노테이션이라고 합니다. 2. 프로젝트 설명 이번 프로젝트는 예전에 AOP를 사용해서 모든 요청/응답에 로그를 적용한 프로젝트에서 특정 메소드에는 로깅에서 제외하는..
DIP(Dependency Inversion Principle) DIP에 대해 알아보도록 하겠습니다. DIP는 객체지향설계 5원칙(SOLID)에서 D에 해당하는 원칙이며, 아래와 같은 의미를 가지고 있습니다. 저수준 모듈이 고수준 모듈에 의존하게 되는 것 하지만 이 설명만 봐서는 도저히 무슨 소리인지 감이 잘 잡히지 않습니다. 그래서 DIP가 무엇인지, 왜 사용하는지, 어떻게 사용하는지에 대해 조금 더 자세히 알아보도록 하겠습니다. 혹시 글을 읽으면서 잘못된 내용이 있으면 댓글로 알려주시면 감사하겠습니다! 🌳 계층 구조 아키텍처 보통 계층 구조는 위 사진과 같은 구조로 되어 있습니다. 표현 계층 : 사용자의 요청을 받아 응용 영역에 전달함과 동시에 처리 결과를 사용자에게 표시 응용 영역 : 사용자에게 제공해야 할 기능 구현 도메인 영역 : 도메인의 핵심 로직 & 도메..
Spring Security Error Message 커스텀하기 안녕하세요! 이번 포스팅에서는 Spring Security에서 로그인에 실패했을 때 나오는 에러 메세지를 커스텀 해보도록 하겠습니다! 🤗 이번 포스팅에서 사용할 스프링 시큐리티가 적용된 프로젝트는 전 게시글에서 진행한 프로젝트입니다. 전체 코드는 Github에서 확인이 가능합니다. 💻 구현 1. Config 파일 작성하기 가장 먼저, Message 인코딩 설정을 위해 Config 파일을 작성해보겠습니다. SecurityMessageConfig.java /** * 메세지 관련 Config 파일 */ @Configuration public class SecurityMessageConfig { @Bean public MessageSource messageSource() { Locale.setDefault(Lo..
Spring Security로 로그인/회원가입 프로젝트 안녕하세요! 이번 포스팅에서는 Spring Security에 대해 알아보겠습니다. 🤗 Spring Security는 정말 자주 사용하는 기능이자 그만큼 중요하기 때문에 전체적인 내용을 복습할 겸 잊어버리지 않기 위해 포스팅에 기록해두려고 합니다. 전체 코드는 Github에서 확인이 가능합니다. ✍️ 개념 정리 1. Spring Security란? Spring Security란 보안 솔루션을 제공해주는 Spring 기반의 스프링 하위 프레임워크입니다. Spring Security에서 제공해주는 보안 솔루션을 사용하면 개발자가 보안 관련 로직을 짤 필요가 없어 굉장히 간편합니다. Spring Security를 이해하기 위해서는 인증과 권한에 대한 뜻을 알아야 합니다. 2. 인증과 권한 인증(Authentic..
SpringBoot API 요청 값 검증하고 Validation Exception Handing하기 안녕하세요! 이번 포스팅에서는 SpringBoot의 Validation을 이용해서 예외를 발생시키고 처리하는 방법에 대해 알아보겠습니다. 🤗 예전에 Spring Boot Validation을 사용하여 요청 값 검증하기라는 주제로 Validation을 이용해서 요청값을 검증하고 에러를 뷰로 리턴하는 방법에 대해 포스팅했는데, 이번에는 뷰를 리턴해서 템플릿 엔진으로 처리하는게 아닌, API 요청이 왔을 때 요청값을 검증하고 에러가 발생했을 때 응답을 보내는 방법에 대해 알아보도록 하겠습니다. 전체 코드는 Github에서 확인이 가능합니다. 사전 준비 1. 프로젝트 설명 도메인 객체에서 어노테이션을 이용해서 Validaion 처리를 하고, Validaion에서 걸렸을때, @RestControllerAdvice..