본문 바로가기

Backend/SpringBoot

(29)
스프링의 콘셉트(IoC, DI, AOP, PSA) 쉽게 이해하기 ❕ 들어가며 이번 글에서는 스프링의 중요한 콘셉트인 IoC(제어의 역전), DI(의존성 주입), AOP(관점 지향 프로그래밍), PSA(이식 가능한 서비스 추상화)에 대해 알아보겠습니다. 💡 이 글을 읽게 됨으로써 얻을 수 있는 지식은 아래와 같습니다. - IoC(제어의 역전)이 무엇인지 - DI(의존성 주입)이 무엇인지 - 스프링 컨테이너와 빈이 무엇인지 - AOP(관점 지향 프로그래밍)이 무엇인지 - PSA(이식 가능한 서비스 추상화)이 무엇인지 위 네 개념을 쉽게 이해하고 싶어하시는 분들에게 도움이 되고자 스프링 부트 3 백엔드 개발자 되기 - 자바 편의 일부 내용을 공개하기로 했습니다. 이 내용은 책의 2.2장을 거의 그대로 옮겨온 내용으로, 많은 도움이 되었으면 좋겠습니다. 🙏 🔍 IoC와 DI..
Spring Boot에서 JWT 사용하기 🔐 들어가며 안녕하세요! 이번 포스팅에서는 JWT에 대한 간단한 설명과, Spring Boot에서는 JWT를 어떻게 사용하는지 소개해드리려고 합니다. 전체 코드는 Github에서 확인이 가능합니다. 📚 사전준비 1. 서버 기반 인증 vs 토큰 기반 인증 특정 사용자가 서버에 접근을 했을 때, 이 사용자가 인증된 사용자인지 구분하기 위해서는 여러 방법을 사용할 수 있는데요. 대표적인 방법으로는 서버 기반 인증 토큰 기반 인증 위 2가지 방법으로 나눌 수 있습니다. 위 방법들은 각각의 장, 단점이 존재하기 때문에 상황에 맞게 적절한 방법을 선택해야합니다. 그 중 JWT는 '토큰 기반 인증'에 해당하는 방법입니다. 토큰을 사용한다는 것은 요청과 응답에 토큰을 함께 보내 이 사용자가 유효한 사용자인지를 검색하는..
JUnit4에서 JUnitParams 이용해서 파라미터 테스트하기 🔐 들어가며 안녕하세요! 이번 포스팅에서는 JUnit4에서 사용할 수 있는 JUnitParams에 대해 소개해드리려고 합니다. // 만약 위 세 개의 테스트를 하나의 테스트로 돌릴 수 있다면? @Test public void positiveTest1() { Positive positive = new Positive(1); assertThat(positive.isPositive()).isEqualTo(true); } @Test public void positiveTest2() { Positive positive = new Positive(5); assertThat(positive.isPositive()).isEqualTo(true); } @Test public void positiveTest3() { Po..
단위 테스트에 Spring Securiy 인증 관련 어노테이션들 사용하기 🔐 들어가며 안녕하세요! 이번 포스팅에서는 테스트할 때 Spring Security 인증을 할 수 있게 제공되는 어노테이션들을 소개하려고 합니다. 이 포스팅에서 다루는 어노테이션 목록은 다음과 같습니다. @WithMockUser : UserDetail 생성 @WithAnonymousUser : 익명의 유저 생성 @WithUserDetails : UserDetail 조회 👻 의존성 추가 testCompile('org.springframework.security:spring-security-test') testCompile("org.springframework.boot:spring-boot-starter-test") 위 어노테이션들을 사용하기 위해 반드시 필요한 spring security test와, JU..
Spring Boot에서 Custom Valid Annotation 만들기 안녕하세요! 이번 포스팅에서는 Spring Boot에서 Custom Valid Annotation를 적용하는 방법에 대해 알아보겠습니다. 전체 코드는 Github에서 확인이 가능합니다. ✍️ 스프링에서 제공되는 Valid 관련 어노테이션을은 많지만, 가끔 제공해주지 않는 어노테이션을 Valid 처리하고 싶을 때가 있습니다. 예를 들어, Request 받을 때 전화번호 포맷을 확인하고 싶은데, 이와 관련된 Valid 어노테이션은 없습니다. 그렇다면 아래와 같이 구현해야하는 상황이 생기게 됩니다. public class Obj { @NotBlank private String tel; } @RestController public class ValidController { @PostMapping("/valid"..
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 { // ..