목록전체 글 (531)
개발놀이터
요즘 공부할게 딱히 없을 때 포트폴리오로 작성했던 사이드프로젝트 온라인 쇼핑몰의 고도화를 진행하고 있습니다. 고도화라고 해봐야 별게 없지만... 버전을 4버전까지 업그레이드 하면서 대부분 성능개선 혹은 인프라적인 개선이 이루어졌습니다. 블로그 카테고리 "사이드 프로젝트" 부분을 참고해주세요! 하지만 코드는 2년전에 작성한 그대로 유지하고 있어서 굉장히 비효율적인 코드라던가 확장에 유연하지 않다던가하는 문제가 있었습니다. 이번 리팩토링은 세션 관리를 Authentication 객체를 이용해서 관리하도록 변경하였습니다. 기존 코드를 먼저 보시죠! if (loginId == null)) { User findUser = cacheRepository.findUserAtCache(username); Comment ..
약 2년전 시작했던 프로젝트인 온라인 쇼핑몰 프로젝트는 제가 취직을 함으로써 종료되었고 더이상 건드리지 않았습니다. 하지만 사이드프로젝트로서 나중에 이직할때 도움이 되고자 코드 리팩토링을 진행하게 되었습니다. 리팩토링을 진행하던 중에 조회수를 증가시킴과 동시에 쿠키에 조회했다는 정보를 넣어 조회수 중복 증가를 방지하는 로직을 발견했고 그 부분에서 리팩토링할 부분이 있었습니다. 바로 @Transcational 의 남용이었죠. @Servicepublic class ClickDuplicationPreventService { @Transactional public void viewCountUp(Item item, HttpServletRequest request, HttpServletResponse r..
오늘은 WebRTC와 미디어서버에 대해서 알아보도록 하겠습니다. 회사에서 미디어서버를 도입하여 공부하는김에 포스팅까지 해보려고합니다. 우선 WebRTC에 대해서 설명하고 넘어가야겠죠? WebRTC WebRTC를 설명하기 전에 TCP와 UDP에 차이에 대해서 짚고 넘어가도록 하겠습니다. 취준생 단골 질문이기도 한 TCP와 UDP에 차이는 조금만 깊이있게 공부하면 머리가 어지러워지는 상황에 봉착합니다. 제가 TCP의 흐름제어와 혼잡제어에 대해서 올린 포스팅도 있으니 한번 참고해주세요! https://coding-review.tistory.com/466 네트워크 흐름제어와 혼잡제어 (Flow Control, Congestion Control) 우리가 흔히 말하는 네트워크 통신은 TCP 3way handshak..
왜 뜬금없이 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..