반응형 Back-End89 Redis 트랜잭션 Intro 기존 프로젝트에 Redis + refreshToken, accessToken을 이용한 인증을 적용 중이다. 현재는 로그인 부분을 리팩토링 중인데 redis에 refreshToken값을 넣는 로직을 만드는 도중 'redis 트랜잭션은 어떻게 하지?'라는 의문이 생겼다. 그래서 이번 글에는 Redis 트랜잭션에 대해 공부한 내용을 적어보겠다. Redis 트랜잭션 MULTI - Redis의 트랜잭션을 시작하는 명령어 - 트랜잭션을 시작하면 Redis는 이후 커맨드는 바로 실행되지 않고 queue에 쌓이게됨 EXEC - 정상적으로 처리되어 queue에 쌓여있는 명령어를 일괄적으로 실행 - RDBMS의 Commit과 동일 DISCARD - queue에 쌓여있는 명령어를 일괄적으로 폐기 - RDMS의 R.. 2024. 3. 11. Redis란 무엇인가 Intro 개인 프로젝트 리팩토링 중 첫 번째로 Access Token, Refresh Token을 이용한 인증을 구현해보려 한다. 그전에 Redis에 대해서 알아보자! Redis란? Redis는 NoSql In-memory database이다. 주로 캐싱, 세션 관리 등의 용도로 사용된다. Redis는 키-값 형태로 메모리에 저장된다. 메모리의 경우 전기적 신호를 통해 데이터에 직접 접근하기 때문에 빠른 데이터 액세스가 가능하다. 또한 메모리접근이 디스크 접근보다 더 빠른데, 메모리의 경우 디스크에 비해 물리적으로 cpu와 더 가깝기 때문이다. 이러한 이유로 인해 디스크 기반의 데이터베이스보다 Redis의 속도가 더 빠르다고 할 수 있다. Redis 설치하기 Redis 공식 문서에 따르면 Redis는 .. 2024. 2. 27. 자동 배포로 한걸음 다가가기 - 빌드 관리 도구 Gradle Intro자동 배포에 대해서 공부하다 보니 빌드에 대한 지식이 부족함을 느꼈다. 항상 프로젝트를 생성함과 동시에 빌드 도구가 나도 모르는 사이 다운받아져서 당연한 듯 사용하다 보니, 언제 다운받아지고 어떻게 사용되는지에 대해 깊게 모르고 있었다. 그래서 오늘은 빌드 관리도구가 정확히 어떤 일들을 도맡고 있는지, 그중에서도 Gradle은 어떻게 동작하는지에 대해서 알아보려 한다. 빌드 도구란?소프트웨어 개발에 있어서 소스 코드를 실행 가능한 애플리케이션으로 만들어주는 도구를 뜻한다. 프로젝트를 진행하게 되면 단순히 자신이 작성한 코드만드로 개발하는 것이 아니라 많은 라이브러리들을 활용해서 개발을 하게 된다. 이때 사용되는 라이브러리들의 수가 굉장히 많아진다면 관리하기가 수월하지 못할 수 있다.(빌드 도구를.. 2024. 1. 5. 트랜잭션 트랜잭션 ACID 원자성(Atomicity) : 원자처럼(원자는 절대 깨지지 않는것 처럼) 마치 하나의 작업인것처럼 일관성(Consistency) : 무결성 제약 조건 항상 만족 격리성(Isolation) : 동시에 같은 데이터를 수정하지 못하도록 지속성(Durability) : 중간에 시스템에 문제가 발생해도 데이터베이스 로그 등을 사용해서 성공한 트랜잭션 내용을 복구해야 함 격리성 완전한 격리성을 보장하려면 직렬처리가 가장 적합하나, 성능이슈가 생기기 때문에 트랜잭션 격리 수준(Isolation level)을 선택할 수 있다. 수동 커밋 모드 set autocommit false; 락(lock) SET LOCK_TIMEOUT 10000 (10초안에 락을 얻지 못하면 LOCK TIMEOUT 오류 발생됨.. 2023. 9. 4. JDBC 이해 JDBC 표준 인터페이스 JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트 하는 방법을 제공한다. Connection - 연결 Statement - SQL 전달 ResultSet - 결과 응답 JDBC 드라이버 JDBC 인터페이스를 각각의 DB 벤더(회사)에서 자신의 DB에 맞도록 구현해서 라이브러리로 제공한다. PreparedStatement Statement의 자식 타입 '?'(물음표 기호)를 통한 파라미터 바인딩을 가능하게 해줌 SQL Injection 공격을 예방하려면 PreparedStatement를 통한 파라미터 바인딩 방식을 사용해야함 DriverManagerDat.. 2023. 8. 30. 파일 업로드 enctype = "multipart/form-data" 다른 종류의 여러 파일과 폼의 내용을 함께 전송할 수 있다. (그래서 이름이 multipart) 멀티파트 사용 옵션 properties 파일에 업로드 사이즈 제한 코드 작성 가능 spring.servlet.multipart.max-file-size=1MB spring.servlet.multipart.max-request-size=10MB 파일 업로드 실제 경로 입력 file.dir=파일 업로드 경로 설정 예) /User/Kim/study/file MultipartFile 파일 저장 로직 @Value("${file.dir}") private String fileDir; @PostMapping("/upload") public String saveFil.. 2023. 8. 25. 스프링 타입 컨버터 스프링 타입 변환 적용 예 스프링 MVC 요청 파라미터 @RequestParam, @ModelAttribute, @PathVariable @Value 등으로 YML 정보 읽기 XML에 넣은 스프링 빈 정보를 변환 뷰를 렌더링 할 때 conversionService 인터페이스 컨버팅 가능 여부 확인, 컨버팅 지원 인터페이스 분리 원칙(Interface Segregation Prinsipal) 클라이언트가 자신이 이용하지 않는 메소드에 의존하지 않아야 한다. 컨버터를 사용하는 클라이언트는 'ConversionService'만 의존하면 되므로, 컨버터를 어떻게 등록하고 관리하는지는 전혀 몰라도 된다. FormatterRegistry.addConverter() 컨버터를 추가하면 추가한 컨버터가 기본 컨버터 보다.. 2023. 8. 25. 예외처리 서블릿 밖으로 까지 예외가 전달되는 경우 서블릿의 예외 처리 방식 @GetMapping("/error-ex") public void errorEx() { throw new RuntimeException("예외 발생"); } @GetMappint("/error-500") public void error500(HttpServletResponse response) throw IOException { response.sendError(500); } 'Exception'의 경우서버 내부에서 처리할 수 없는 오류가 발생한 것으로 생각해서 HTTP 상태 코드 500을 반환한다. 서블릿의 예외처리 2가지 방식 Exception (예외) reponse.sendError (HTTP 상태코드, 오류메세지) Exception.. 2023. 8. 25. 로그인 처리 쿠키와 보안문제 쿠키값은 브라우저상에서 쉽게 바꿀수 있기 때문에 보안문제가 생길 수 있다. (클라이언트가 쿠키의 값을 강제로 변경하게되면 다른 사용자 로그인이 돼버린다) 쿠키에 보관된 정보를 훔쳐갈 수 있다. 해커가 쿠키를 한번 훔쳐가면 평생 사용할 수 있다. 로그인 유지를 하려면 쿠키가 사용되야하지만 보안이슈가 있다. 이 문제를 해결하기 위해 쿠키에 세션 저장소의 개념을 도입시켜 사용한다. 세션을 이용한 쿠키 보안문제 해결 예상 불가능한 복잡한 세션 id를 사용한다. 해커 입장에서 세션 id를 알게되어도 세션 id 자체만으로 알아낼 수 있는 중요한 정보가 없다. 세션 만료 시간을 짧게 설정하여 해커가 토큰을 알아내도 시간이 지나면 사용할 수 없게 또는 해킹이 의심되는 경우 해당 세션을 강제로 제거하면 .. 2023. 8. 19. 이전 1 2 3 4 5 ··· 10 다음 반응형