혼자공부한거 7

혼자 만든 앱에 무중단 배포 적용해보기 – Jenkins, Docker, Nginx

운영 중인 앱: 축잘알 테스트 (구글 플레이) 🧭 왜 무중단 배포를 하게 됐을까혼자서 기획하고 개발한 축잘알 테스트 앱은EC2에서 Spring Boot + Docker + Nginx 조합으로 서비스되고 있다.처음에는 그냥 수동으로 배포했다.방법은 아주 단순했다:GitHub에 코드 pushEC2에 SSH 접속해서 git pullDocker 이미지 다시 만들고 기존 컨테이너 정리새 컨테이너 띄우고 Nginx 설정 수정근데 이 과정이 너무 귀찮았다.캐시도 직접 지워야 하고, SSH도 매번 접속해야 했다.그래서 자동화 스크립트를 먼저 만들었고,이후에는 Jenkins + GitHub Webhook으로 자동 배포까지 붙였다.💥 무중단 배포를 결심하게 된 계기새벽에 배포하면서 서버를 잠깐 내린 적이 있었는데,그 ..

혼자공부한거 2025.04.21

Redis로 유저 랭킹을 불러오면 정말 더 빠를까?

운영 중인 앱: 축잘알 테스트 (구글 플레이)🚀 Redis로 유저 랭킹 조회, 정말 더 빠를까?게임이나 퀴즈 서비스에서 랭킹 기능은 빠질 수 없다.근데 어떻게 불러오느냐에 따라 체감 속도는 완전히 달라진다.그래서 직접 MySQL vs Redis 성능을 비교해봤다.과연 Redis는 정말 빠를까?✅ 기존 방식: MySQL로 랭킹 조회 처음엔 이렇게 했다:10분마다 랭킹 데이터를 UserRankInfo 테이블에 저장요청이 올 때마다 MySQL에서 다시 조회@Query(nativeQuery = true, value = "SELECT * FROM front_user_info WHERE total_quiz_count > 30 ORDER BY percentage_of_answer DESC..

혼자공부한거 2025.04.17

랜덤 퀴즈 데이터 추출, 어떤 방식이 가장 빠를까? (MySQL vs Redis vs Java)

운영 중인 앱: 축잘알 테스트 (구글 플레이)🎯 랜덤 퀴즈 데이터 추출, 어떤 방식이 가장 빠를까?MySQL vs Java vs Redis – 실전 성능 비교내가 만든 축구 퀴즈 앱에서는사용자가 5, 10, 15, 20문제를 랜덤으로 풀 수 있는 기능이 핵심이다.처음에는 그냥 MySQL의 RAND() 함수 쓰면 끝 아니야? 싶었는데...퀴즈가 쌓이고, 유저 수가 많아지다 보니 점점 느려지기 시작했다.그래서 아래 세 가지 방식으로 직접 성능을 비교해봤다: ✅ 방식 1: MySQL RAND() @Query(nativeQuery=true, value="SELECT * FROM quiz_info ORDER BY rand() LIMIT ?1")List findRandomQuiz(@Param("number")Lo..

혼자공부한거 2025.04.16

키클락 취약점 살펴보기 (CVE-2024-8698)

최근에 키클락에 어떤 취약점이 있는지 그냥 궁금해서 검색해봤다. 2024년 9월에 나온 취약점이다 간단하게 SAML 서명 검증을 우회해버리는 취약점이다.. 그냥 SSO 시스템을 뚫어버리는 엄청난 취약점.. 취약점 분석  안랩 https://asec.ahnlab.com/ko/83323/ Keycloak 보안 업데이트 권고(CVE-2024-8698) - ASEC개요 Keycloak에서 발생하는 취약점을 해결하는 업데이트를 발표하였습니다. 해당하는 버전의 사용자는 최신 버전으로 업데이트하시기 바랍니다.    대상 제품   CVE-2024-8698 Keycloak 버전: ~ 25.0.6(asec.ahnlab.com 안랩의 데이터이고 내용은 Keycloak XMLSignatureUtil 클래스 내의 SAML 서명..

혼자공부한거 2024.12.01

SSO 란 무엇일까

SSO는 이름 그대로 단일 로그인, 즉 한번의 로그인으로 여러개의 애플리케이션들을 이용할 수 있게해주는 서비스 입니다. 한번의 로그인으로 구글 관련 서비스를 모두 이용할수 있는것이다. 장점ID/Password 개별 관리의 위험성 해소사용자 편의성 증가단점구축비용이 비싸고 시스템 복잡도 증가 Single Point of Failure구현 방식위임(Delegation) 방식SSO 에이전트가 인증을 대행하는 방식대상 애플리케이션의 인증 방식을 변경하기 어려울 때 많이 사용사용자의 인증 정보를 SSO 에이전트가 관리하며 로그인 대신 수행 이건 앞단에 SSO 서버를 두고 리버스 프록시 형태로 서비스를 제공한다.사용자의 인증 정보를 Agent가 관리하여 대신 로그인 해주는 방식이다.EX ) ID / password..

혼자공부한거 2024.11.22

JWT 토큰

기본 정보JSON Web Token (JWT) 은 웹표준 (RFC 7519) 으로서 두 개체에서 JSON 객체를 사용하여 가볍고 자가수용적인 (self-contained) 방식으로 정보를 안전성 있게 전달해줍니다. 라고 설명이 나와있다. 여기서 중요한건self-contained  JWT는 이런식으로 구성되어 자체적으로 토큰에 정보를 담고있다. 그래서 전달이 쉽다.웹서버의 경우 HTTP의 헤더에 넣어서 전달 할 수도 있고, URL 의 파라미터로 전달 할 수도 있다. 헤더{ "typ": "JWT", "alg": "HS256"} 이런식으로 타입은 JWTalg 는 알고리즘으로 보통 HMAC SHA256 혹은 RSA 가 사용된다. 내용JWT의 표준 스펙 1. iss (Issuer) : 토큰 발급자2. sub ..

혼자공부한거 2024.05.24

[스프링부트] 스프링부트 CRUD deleteMapping 사용하기

@Bean public HiddenHttpMethodFilter hiddenHttpMethodFilter() { return new HiddenHttpMethodFilter(); } 빈에 등록해주시고( 등록안하면 delete로 안나가고 post 로 나감) get post 만 지원하는 이유를 알고싶으면 밑 링크 보시면 됩니다. http://haah.kr/2017/05/23/rest-http-method-in-html-form/ REST - HTML Form에서 GET/POST만 지원하는 이유 연재 목록 REST - 긴 여정의 시작 REST - HTML Form에서 GET/POST만 지원하는 이유 REST - 논문(요약) 훑어보기 REST - REST 좋아하시네 REST - Roy가 입을 열다 REST - ..

혼자공부한거 2021.08.11