목록전체 글 (518)
개발놀이터
왜 뜬금없이 CAS 서버의 인증정책에 대해서 알아보냐... 제가 지금 문제 상황에 놓여있기 때문입니다. 이를 위해 공식문서를 얼마나 뒤져봤는지 아주 눈알이 빠지기 직전입니다. 우선 제가 이 문제 상황에 빠지게 된 경위에 대해서 설명드리겠습니다. CAS 공식문서엔 다음과 같이 나와있습니다. https://apereo.github.io/cas/6.6.x/authentication/Database-Authentication.html CAS - Database AuthenticationThis property controls the maximum lifetime of a connection in the pool. When a connection reaches this timeout, even if rec..
저번 포스팅에선 SSLHandshakeException이 발생했었습니다. 이 문제를 해결하기 위해서는 EC2 인스턴스의 SSL 설정을 해줘야합니다. 보통 WAS 서버에 HTTPS를 적용하는 방법은 NginX나 Apache같은 웹서버에 SSL 인증서를 등록하여 해결할 수 있습니다. 저는 AWS ACM 인증서를 가지고 있었기 때문에 AWS ALB에 ACM을 연결하여 HTTPS 설정을 할 수 있었지만 이참에 회사에서 사용하는 NginX에 대해 공부하고자 NginX에 SSL 설정을 하는 방법을 강구했습니다. 네... 결론만 말하자면 ACM을 이용해서 SSL을 설정하는 것을 불가능합니다. 우선 NginX에 SSL 설정을 위해서는 다음과 같은 설정이 필수적으로 필요합니다. server { listen 443 ssl..
클라이언트를 개발하기 전에 한가지 해야할 일이 있습니다. 바로 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..
드디어 취뽀했습니다. 후... 초기 스타트업에 취직하게 되었습니다. 요즘 취업 힘들다 힘들다 얘기만 들었지 몸으로 체감하니까 차원이 다르더군요. 취뽀한김에 회고를 안적을 수 없겠죠. 한번 적어보겠습니다. 공부 기간은? 코딩을 시작한지는 3년, 본격적으로 공부를 시작한지는 2년7개월 됐습니다. 처음 개발 공부를 시작했을 때가 정말 새록새록 떠오르네요. JSP로 프로젝트 하는데 JSTL에서 이거 진짜 애먹었습니다. 게시판도 만들어보고 MVC1 MVC2로 프로젝트 해보면서 개발에 대한 흥미를 잃지 않았던게 가장 큰 포인트였던 것 같습니다. 공부 방법은? 인프런의 영한님 강의를 들었습니다. 영한님이 강의를 너무 재밌게 찍으셔서 영한님 강의를 전부 다 들었습니다. 인강이 좋은 점이 모르는 부분 있으면 잠깐 멈췄다..
이번에도 Redis에 관한 내용...은 아니고 JWT에 대한 내용입니다. Redis는 조연입니다. 많은 분들이 회원 인증에 JWT를 사용하곤 하십니다. 실제로 저도 프로젝트에 JWT와 Spring Security를 접목시켜 회원 인증을 진행했습니다. 프로젝트에 JWT로 인증을 진행하는건 좋은데 그 뒤가 궁금했습니다. 만약에 Redis에 장애가 발생하면 JWT인증은 어떻게 될까? JWT와 Redis 구글링 한번이면 나오는 내용이기 때문에 자세히 다루지는 않겠습니다. JWT는 stateless한 인증 방식이라고 알고들 계시겠지만 이는 반은 맞고 반은 틀린 이야기입니다. 보통 JWT로 인증을 진행할 때 Access Token은 쿠키에 Refresh Token은 Redis에 저장하곤 합니다. 쿠키에 HTTP o..
만약 캐싱 솔루션으로 Redis를 사용하고 있다면 Redis가 장애상황으로 죽어버리는 경우 RDBMS에 부하가 심하게 발생하여 RDBMS까지 연쇄적으로 장애가 발생하는 상황이 충분히 있을 수 있습니다. 저는 프로젝트를 진행하면서 Redis를 이용해서 캐싱 솔루션을 도입했고 결과적으로 RDBMS의 부하를 30퍼센트 이상 줄이기도 하였습니다. 이 30퍼센트라는 수치는 결코 무시할 수 없기 때문에 Redis의 장애상황에 대한 대비책이 있어야합니다. 이번 포스팅에선 Redis가 장애시 RDBMS의 연쇄적인 장애를 대응하기 위해 어떤 전략을 사용하는지 알아보도록 하겠습니다. Redis의 가용성을 높이자! 흔히 생각할 수 있는 방법으로 Redis를 죽지않게 관리하는 것입니다. Redis에는 두가지 배포 방식이 있습..