전체 글
Circular Dependency
토이 프로젝트 하면서 다음과 같은 문제가 생겼었다 spring security 를 도입하면서 UserDetailsService 인터페이스를 상속받아서 loadUserByUsername 을 오버라이드 해야 했는데 그 과정에서 다음과 같은 에러가 났었다. - Circular Dependency : 순환 종속, Spring 의 Bean 이 어떤 다른 Bean 에 대해서 의존성 주입을 받을 때 서로가 서로를 의존성 주입하는 과정에서 발생하는 에러이다. 만약 Bean A, B 가 있다고 했을때 Bean A 가 B 를 의존성 주입 받고, B가 A 를 의존성 주입받으면 이런 문제가 발생한다 - 스프링 내부 작업 Spring Context 가 실행되고 Bean 들을 생성할때 다음과 같은 순서로 생성한다 예를들어 (순환..
직렬화
그냥 막연하게만 직렬화가 클래스를 바이트 형태로 바꾸는거다 (역직렬화는 그 반대) 정도로만 알고 있었는데 막상 면접때 말하려니 왜 쓰는지도 모르고 그냥 추상적이게 말하니 허접하게 대답할 수 밖에 없었고 당연히 좋은 결과를 얻을 수도 없었다 그래서 한번 정리를 해보고자 포스팅을 남겼다 - 가상메모리주소공간 운영체제에서 메모리 용량보다 큰 프로세스에 대해서 처리를 할 때 사용하는게 가상 메모리인데, 서로 다른 운영체제 마다 가상메모리를 다르게 갖기 때문에 Object 같은 타입의 참조값(주소값) 데이터는 다른 운영체제에 전달해봐도 그 의미가 없어진다. 그래서 메모리 참조하는게 아니라 Byte 형태로 변환된 데이터를 전달하게 되면, 가상메모리 문제를 신경쓰지 않고 참조형 데이터에 대한 처리를 할 수 있게 된다..
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..