목록Spring (102)
개발놀이터
클라이언트를 개발하기 전에 한가지 해야할 일이 있습니다. 바로 CAS 인증 서버에 우리가 사용할 서비스를 등록해줘야한다는 것이죠. 우리가 첫번째 시간에 만들었던 services 폴더 기억하시나요? 그곳은 우리가 생성할 서비스들을 관리하는 폴더입니다. 우리는 첫번째 시간에 의존성도 추가했는데 그때 json 기반 registry를 기억하실겁니다. 그것을 이용해 서비스를 json 파일로 등록할 수 있습니다. 프로젝트/etc/cas/services 로 가서 파일을 하나 만들어줍니다. $ vim casSecuredApp-19991.json 자 간단하게 설명드리자면 @class는 Regex 즉 정규표현식을 이용해 서비스를 등록하는 레지스트리를 만들겠다는 뜻입니다. 때문에 serviceId에 맨처음 " ^ " 이것을..
이제 로그인을 하기 위해서 사용자가 있어야겠죠? 가장 간단한 방법은 static한 사용자를 만들면 됩니다. 그냥 하드코딩으로 때려박는거죠. 하지만 이 방법은 생략하도록 하겠습니다. 우리가 본질적으로 원하는 것은 데이터베이스에 존재하는 사용자를 이용해서 로그인을 진행하는 것이니까요. static한 사용자 인증을 패스하고 바로 데이터베이스 사용자를 등록해보도록 하겠습니다. 일단 CAS 서버를 띄웠으니 데이터베이스를 위한 서버를 하나 더 띄우겠습니다. 그곳에서 docker, docker-compose을 내려받아주고 Docker를 이용해 MySQL을 띄웁니다. MySQL 사용자를 만들어주고 외부 연결까지 마치고 나면 준비 끝입니다. 너무 두루뭉술하게 넘어가서 왜이렇게 금방금방 넘어가? 하신다면 아래의 링크를 통..
이전 포스팅과 이어집니다. 바로 HTTPS를 위해 thekeystore를 만들어주도록 하죠. 우리는 먼저 /etc/cas 폴더로 이동해야합니다. 이동해주시구요. 이제 thekeystore를 만들어봅시다. $ keytool -genkey -keyalg RSA -alias thekeystore -keystore thekeystore -storepass changeit -validity 360 -keysize 2048 하지만 이렇게 쓰면 에러가 날겁니다. 우리가 아직 openjdk를 설치하지 않았거든요 ㅎㅎ.. CAS overlay template은 최신 버전인 7.0이 JDK 21을 사용하고 6.6버전까지는 JDK 11을 사용합니다. 때문에 저희는 JDK 11을 설치해주도록 합시다. $ sudo apt-ge..
CAS의 Overview를 보고 오시는 것을 추천드립니다! https://coding-review.tistory.com/475 SSO (부제 : Spring Security CAS) 서로 물리적으로 분리된 서버끼리 사용자의 로그인 상태를 유지하고 싶으면 어떻게 해야할까요? 저는 이 문제 상황에서 제일 먼저 떠오른 것이 상태저장 데이터베이스를 중간에 두는 것이었습 coding-review.tistory.com 포스팅에 들어가기 앞서 Docker와 Docker-Compose에 대한 내용은 포스팅과 어울리지않아 빼도록 하겠습니다. Docker와 관련된 내용은 아래의 링크를 확인해주세요! 또한 AWS에 대한 내용도 생략하도록 하겠습니다. https://coding-review.tistory.com/categor..
서로 물리적으로 분리된 서버끼리 사용자의 로그인 상태를 유지하고 싶으면 어떻게 해야할까요? 저는 이 문제 상황에서 제일 먼저 떠오른 것이 상태저장 데이터베이스를 중간에 두는 것이었습니다. 사용자가 A서버에 로그인하면 쿠키에 간단한 값을 저장합니다. 예를 들어서 회원의 인덱스를 저장한다고 해보죠 그 값을 1이라고 가정하겠습니다. 그리고 동시에 Redis와 같은 캐시, 세션 저장소에 1이라는 값을 씁니다. 만약 B서버에 사용자가 접근하면 쿠키 값을 읽고 회원 인덱스가 존재하니 Redis에 해당 값을 조회해봅니다. 그리고 존재하기 때문에 MySQL과 같은 RDBMS에서 회원을 조회하고 그 값을 토대로 Spring Security에서 제공해주는 SecurityContextHolder에 Authentication..
이번 프로젝트에서 프로메테우스와 그라파나로 모니터링 환경을 구축했는데 어떤 포스팅에서 Spring Actuator를 사용해서 의미있는 모니터링을 하고싶다는 글을 봤습니다. 엑추에이터..? 이게 뭐지? 궁금해서 공부해보고 포스팅하려고 합니다! 그리고 실제로 시각화 툴과 조합해서 이용해보도록 하겠습니다. Spring Actuator? Spring Actuator는 우리의 애플리케이션을 모니터링하고, 메트릭스를 수집하고, 트래픽을 관찰하고, 우리의 데이터베이스의 상태를 모니터링할 수 있는 스프링의 프로젝트 중 하나입니다. 이 라이브러리를 사용하면 실제로 아무것도 구현하지 않아도 프로덕션 레벨의 도구를 사용할 수 있다는 엄청난 장점이 있습니다. Actuator는 주로 구동중인 애플리케이션에 대한 설정 정보들을 ..
이번 포스팅에는 프록시 패턴과 데코레이터 패턴에 대해서 알아보겠습니다. 뜬금없이 왜 프록시 패턴과 데코레이터 패턴을 공부했냐면 제가 AOP를 공부했기 때문입니다. 스프링 AOP에서 사용하는 GOF 디자인 패턴 중 데코레이터 패턴이 사용되었기 때문에 공부차 한번 구현해봤습니다. 한번 시작해보죠! 프록시 이 두 패턴을 알아보기 전에 프록시에 대해서 알아봐야 합니다. 보통 프록시는 '대리자' 라고 번역이 되고 내가 수행해야 할 일을 대신 수행해주는 존재 라고 생각하시면 됩니다. 이렇게 대신 내 일을 대신 수행해주면 무슨 이점이 있을까요? 프록시를 이용하면 얻을 수 있는 것은 두 가지 입니다. 접근 제어 (캐싱) 부가 기능 (로깅, 트랜잭션) 접근 제어 예를 들어 클라이언트가 서버에 A라는 데이터를 조회했다고 ..
이번 프로젝트에서 단위테스트를 해야할 일이 생겨서 알아보던 중에 Mockito에 대해서 알게 되었습니다. 스프링을 공부한지 만으로 2년이 되어가지만 아직까지 Mockito를 이용해 테스트 케이스를 만드는 법을 모른다는 사실에 반성하게 되었습니다. 많은 개발자 선배님들이 TDD를 외치셨는데 저는 그걸 지키지 못한 것 같아서 조금 아쉽지만... 지금이라도 TDD를 실천하고자 이렇게 포스팅 적어봅니다. 이번엔 Mockito를 어떤 방식으로 사용해야 하는지 그리고 주요 문법은 무엇이 있는지에 대해서 알아보도록 하겠습니다. Mockito Mock 이라는 단어는 가짜, 허구의 라는 뜻입니다. 즉 Mock 객체를 만들어 (가짜 객체를 만들어) DB의 접근 없이도 자신의 코드의 논리적인 부분을 체크하는 방법이 바로 M..
이번 포스팅은 스프링 부트가 얼마전 3.0이 됨에 따라 바뀌게 된 점 중 저에게 해당하는 점만 정리해보겠습니다. 자세한 내용은 이곳! https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide Spring Boot 3.0 Migration Guide Spring Boot. Contribute to spring-projects/spring-boot development by creating an account on GitHub. github.com 스프링 부트 3.0 1. JavaEE에서 JakartaEE로 변경 javax 패키지에 있던 것들이 전부 jakarta로 변경되었습니다. 때문에 만약 JPA를 사용하신다면 ..
스프링 부트가 5.0에 들어오면서 기존 Job과 Step을 작성할 때 사용하던 JobBuilderFactory, StepBuilderFactory가 Deprecated 되었습니다. 때문에 기존 방법 대신 아래와 같은 방법으로 사용해야합니다. @Configuration @RequiredArgsConstructor @Slf4j public class MonthClickToZeroBatch { private final EntityManagerFactory emf; private final JobRepository jobRepository; private final PlatformTransactionManager platformTransactionManager; private static final int PA..