Spring

    Circular Dependency

    토이 프로젝트 하면서 다음과 같은 문제가 생겼었다 spring security 를 도입하면서 UserDetailsService 인터페이스를 상속받아서 loadUserByUsername 을 오버라이드 해야 했는데 그 과정에서 다음과 같은 에러가 났었다. - Circular Dependency : 순환 종속, Spring 의 Bean 이 어떤 다른 Bean 에 대해서 의존성 주입을 받을 때 서로가 서로를 의존성 주입하는 과정에서 발생하는 에러이다. 만약 Bean A, B 가 있다고 했을때 Bean A 가 B 를 의존성 주입 받고, B가 A 를 의존성 주입받으면 이런 문제가 발생한다 - 스프링 내부 작업 Spring Context 가 실행되고 Bean 들을 생성할때 다음과 같은 순서로 생성한다 예를들어 (순환..

    Spring Boot 2.5 이후 버전과 Hibernate 와 data.sql

    Spring Cloud 강의를 들으면서 H2 데이터베이스와 Spring Data JPA 를 사용했는데 미리 넣어둘 데이터를 data.sql 에 정의해두고 테이블 생성은 Hibernate 에 의해서 하도록 하려고 하였으나 테이블이 생성되지 않고 에러가 났다. 결론부터 말하면 application.yml 에 다음의 요소를 추가하면 에러가 해결된다 spring.jpa.defer-datasource-initialization: true cs 2.5 이후 다음과 같은 내용이 추가되었다 Hibernate and data.sql By default, data.sql scripts are now run before Hibernate is initialized. This aligns the behavior of basi..

    Spring Cloud Eureka 와 기본 REST API

    간단한 토이 프로젝트를 만들다가 여러번 동일한 서비스의 eureka client instance 를 만든적이 있는데, 아무리 시간이 지나도 service discovery 에서 제거되지 않고 남아있어서 언제 지워지는지 그리고 어떻게 수동으로 지우는지를 알아보고자 찾아본 내용을 기록했다. - Eureka : eureka 는 MSA 에서 service 의 로드 밸런싱이나 실패 처리 등을 유연하게 처리하기 위해서 ip, port, instance id 등을 가지고 있는 미들웨어 서버를 의미한다 MSA 에서는 ip 나 port 가 항상 가변적이기 때문에 이들에 대한 주기적인 관리가 필요한데, 이를 관리하는 것이 MSA 에서 Service Discovery 이며 spring 에선 이를 spring cloud ne..

    Spring Boot 와 JWT 로 로그인하기

    저번 포스팅(https://sdy-study.tistory.com/269) 에서 이메일로 회원가입을 보내는 방법을 알아봤다 이번에는 JWT 로 로그인을 하는 방법에 대해 알아본다 * 로그인을 위한 사전지식들 1) 인증 : 웹에서 인증을 하기 위해선 과거엔 쿠키, 세션을 사용했지만 현재는 토큰을 이용한 방식을 가장 많이 사용한다 토큰 기반의 인증의 가장 대표적인게 바로 JWT (JSON Web Token) 이다 (참조 : https://sdy-study.tistory.com/44) 2) JWT : JWT (Json Web Token) 은 JSON 포맷을 이용하여, 유저에 대한 속성을 저장하는 Claim 기반의 Web Token 이다 JWT 는 토큰 자체를 정보로 사용하는 Self-Contained 방식으로..

    Spring Boot 로 이메일 회원가입 하기

    토이 프로젝트를 하다가 회원가입과 로그인, 로그아웃 기능을 만들게 되었는데 그때 사용했던 개념들을 정리하고자 한다 먼저 이메일을 통해서 회원가입을 했던 과정을 정리한다 - 개발환경 spring boot : 2.5.2 java : 16 maven : 3.6.3 - 의존성 pom.xml org.springframework.boot spring-boot-starter-mail org.springframework.boot spring-boot-starter-thymeleaf Colored by Color Scripter cs thymeleaf 는 이메일 보낼때 적을 내용을 담고 있다 (java 에서 로직처리한 데이터를 전달받아 랜더링하기 위해서 사용됨) - Gmail 설정하기 : 실제 서비스 운영시에는 Gmai..

    Spring Cloud Netflix Eureka

    참조한 강의 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4/dashboard - Service Discovery 란 : 클라우드 기반의 마이크로서비스를 운용하는 경우(컨테이너 기술 기반), auto-scaling 같은 기능으로 인해서 마이크로서비스 인스턴스의 IP 주소가 동적으로 변하기 때문에 클라이언트 입장에서 어떤 위치의 IP 주소로 요청해야 하는지 알기가 어렵다. 이런 상황에서 API Gateway 를 통해서 찾고자하는 인스턴스를 제대로 찾으려면 매핑시켜주는..

    Spring Cloud 와 Microservice 란

    참조 강의 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4/dashboard - IT System 의 역사 - Anti-Fragile 의 주요요소 1) Auto-Scaling : 사용량에 따라 자동으로 scale-out 하는 방식 2) Microservice : Monolith 방식 처럼 하나의 큰 프로젝트에 여러 요소 (Frontend, Backend, DB 등) 를 다 넣어서 관리하는게 아니라 각 서비스 마다 개별적인 모듈로 분리해서 관리하는 방식 3) Chao..

    Swagger 를 통한 REST API 문서화

    백엔드 개발자가 작성한 REST API 를 프론트엔드 개발자에게 문서화해서 넘겨줄때, 매번 일일이 문서화하여 작성하는 일은 매우 불편할 것이다 그래서 이런 단점을 개선하기위해 나온 것이 Swagger 이다 Swagger 는 백엔드 개발서버가 실행될때, 백엔드 서버내의 모든 API 를 탐색해서 알아서 문서화하여 UI 까지 제공한다 사용방법도 어렵지 않다 * 3.0 이상의 버전과 그 이하의 버전은 적용방법이 약간 다르다 여기서는 3.0 미만의 버전만 설명한다 또한 maven을 기준으로 설명되어 있다 (3.0 이상의 버전은 아래 링크 참조) woowacourse.github.io/javable/post/2020-08-31-spring-swagger/ API 문서 자동화 - Swagger 팔아보겠습니다 Spri..