본문 바로가기

팀 프로젝트/cheerha.project36

배포(1) CI/CD와 github action 알아보기 공부 시작https://www.redhat.com/ko/topics/devops/what-is-ci-cd CI/CD(CI CD, 지속적 통합/지속적 배포): 개념, 툴, 구축, 차이CI/CD는 애플리케이션의 통합 및 테스트 단계부터 제공 및 배포까지 애플리케이션 라이프사이클 전체에서 지속적인 자동화와 지속적인 모니터링을 제공하는 것을 뜻합니다.www.redhat.com우선 나는 이부분에 문외한이고 CI/CD가 정확히 어떤 문제를 해결했는지부터 찾아봐야한다. CI란 개발자가 코드를 변경할 때 마다, 자동으로 빌드와 테스트를 수행해 문제를 조기에 발견하는 과정이다.동시에 개발 중인 어플리케이션의 분기(브랜치)가 너무 많아서 상호 충돌할 가능성이 있는 문제를 해결해줄 수 있다. CD는 Continuous De.. 2025. 2. 15.
트러블슈팅- 삭제된 RefreshToken 조회 시 500에러 문제상황로그아웃을 하고 레디스 저장소에서 삭제된 refreshToken에 대해 해당 에러가 나고있다.이건 한번 사용된 리프래시 토큰으로 테스트를 수행한 결과인데, 둘의 차이점은 무엇일까?  분석우선 에러 발생지는 이곳이니까 로그를 찍어보자.필터링 과정이 총 3번 수행되고, 마지막 토큰이 null로 찍혔다수행 과정을 정확히 분석하기 위해 디버깅 모드로 실행하자찾았다앞의 두번은 그냥 헤더의 토큰이 유효한 토큰인지 검사한거고,storedRefreshToken의 prefix를 제거하는 과정에서 생긴 로직 오류라는 것을 알 수 있었다.해당 user의 refreshToken이 이미 로그아웃 된 상태라 존재하지 않으므로 null이라 오류가 생긴 거다로직을 수정해주자.  결과여기 이 레디스 저장소에서 가져온 store.. 2025. 2. 15.
배포(0) 배포 성공 리눅스 환경이 친근해서 그런가 진짜 금방 끝났다vim이랑 cli 하루종일 쳐다보면서 산 게 도움이 되는구나아몰랑 첨부터 t2.large로 해버렸는데 몰라 캠프에서 돈 주니까 아래 종료된 놈은 24LTS버전으로 했다가 docker 빠른버전이 설치가 안 돼서 22.04로 인스턴스 다시 만들었다 리다이렉팅용 url도 bitly로 흉내만 냈는데만들었는데 서버는 일단은 닫아둘거다. 지금 굉장히 취약한 애기서버기때문에.. DB랑 레디스랑도 연결 했는데refreshToken도 잘 생기고로그인 한 정보도 잘 나온다 없으면 아쉬운 트러블슈팅트러블1: docker에서 openJdk 버전 17로 했다가 NPE가 떠서 좀 헤맸는데, FROM eclipse-temurin:17-jdk해당 버전으로 하니 잘 되더라. 트러블2: 오.. 2025. 2. 14.
JWT: Redis에서 RefreshToken & BlackList 관리하기 왜 Spring security를 사용하지 않았는가?1. spring security의 구조에 대한 이해가 필요하다. 학습곡선도 분명히 존재한다. spring security를 사용하더라도, 그저 ‘사용’만 한다면 보안측에서 허술한 건 당연하기에 상당한 시간이 필요할 것이다.2. 구조에 대한 이해가 제대로 되지 않은 상태로 jwt 블랙리스트나, refresh token 저장 등을 하려면 개발에 소요되는 시간이 꽤나 지체될 것이다.3. 구현하고 싶은 기능 중에 spring security에서 커스텀하려면 어려운 기능이 존재하는데,JWT Payload 암호화(AES로 암호화된 Payload 처리하기)JWT Key RotationRedis 기반 블랙리스트모두 spring security에서 기본적으로 제공하진.. 2025. 2. 13.
Java 자료구조와 Collection Framework 자바에서 자주 쓰는 컬렉션 구조인 List, Set, Map과, 이들 구현체의 자료구조에 대해 알아보자!여태 컬렉션에 대한 이해가 부족해서 대충 ArrayList나 유명한 것만 사용하였는데각각 다른 특징과 장단점이 있어서 상황에 맞게 골라서 사용해야 한다. 성능과 용도를 잘 파악해두면 좋을거다. 사실 Map은 자바 컬렉션 프레임워크에 포함되지만, 엄밀히 말하면 Collection 인터페이스를 상속받지 않아서 List, Set처럼 Collection의 하위 타입은 아니다. 컬렉션List대표적인 구현체: ArrayList, LinkedList 중복이 허용되어 같은 값을 여러 번 저장할 수 있다.List의 요소들은 삽입된 순서대로 저장되므로,DB 쿼리 결과나 API 응답 데이터를 순서대로 처리할 때 유리하다... 2025. 2. 12.
ConfigurationProperties로 민감정보 관리하기 문제가 되는 상황TOKEN_TIME처럼 민감한 정보들이 하드코딩되어있다.설정 파일에서 관리해 줄 필요가 있었고, 모든 설정을 일일이 @Value 어노테이션으로 불러오면 코드가 복잡해질 것이다.이런 불편함을 해소해 주는 어노테이션이 @ConfigurationProperties이다.  ConfigurationProperties스프링의 @ConfigurationProperties는 외부 설정 파일(application.properties나 application.yml)에 정의된 설정 값을타입 안정성이 있는 자바 빈인 POJO에 바인딩 해주는 어노테이션이다.단순히 문자열로 읽어오는 게 아니라, 정수, 불리언, 리스트 등 다양한 타입으로 변환해서 자바 객체에 담아준다.복잡한 설정 값을 계층적으로 매핑할 수 있어서.. 2025. 2. 11.