분류 전체보기 55

24.09.04 TIL - Bean Validation

오늘 배운 것validationBean Validation 종류Bean Validation 적용Validation 예외 처리 Validation이란백엔드 서버에서 입력 값을 검증해야 할 때가 있습니다.  예를 들어 Java에서는 null 값이 있어서 입력 값으로 null 값이 들어왔을 때 제대로 된 처리를 하지 않으면 NullPointException이 발생합니다.  이런 NullPointException을 예방하기 위해서 Validation 즉 검증 과정이 필요하다.  또 비즈니스 요구사항으로 'id는 소문자, 숫자로만 구성되고 6~10자로 구성되어야 한다' 이런 것이 있을 수 있습니다.  이럴 때 입력 값으로 들어온 id가 비즈니스 요구 사항에 맞는지 검증 과정이 필요하다.  이전에는 이런 검증은 프..

TIL 2024.09.08

24.09.03 TIL - Spring Security Login with JWT

오늘 배운 것Spring Security 설정Spring Security Config 설정UserDetailsService 인터페이스 구현UserDetails 인터페이스 구현JWT 인증 처리 필터 생성JWT 인가 처리 필터 생성@AuthenticationPrincipal@Secured 개요Spring Security의 기본 설정으로는 세션 기반 로그인이다.  로그인이 성공하면 세션 ID를 반환하는 방식으로 진행이 된다.  따라서 JWT 기반으로 로그인을 진행하려면 커스텀을 좀 해야 한다.  JWT를 기반으로 로그인을 하려면 어떻게 해야 하는지 보자.  Spring Security 설정Spring Security를 사용하려면 역시 build.gradle에 추가해줘야 한다. // Securityimpleme..

TIL 2024.09.08

24.09.02 TIL - Spring Security 동작 원리

오늘 배운 것spring security 란?filter 란?spring security filter chainUsernamePasswordAuthenticationFilterSecurityContextHolderAuthenticationSpring Security 로그인 처리 과정 Spring Security 란?Spring Security는 프레임워크다.Spring Security는 Spring 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공한다. 따라서 개발자가 인증 및 인가에 대한 코드를 직접 작성하지 않아도 된다. 마치 Spring 프레임워크가 웹 서버 구현에 편의 제공하는 것과 같다. Spring Security 프레임워크는 인증 및 인가 구현에 편의 제공하는 것이다.  Filter 란?..

TIL 2024.09.07

24.08.28 - JWT in Spring

오늘 배운 것JWT in Spring 개요JWT를 사용해 Spring에서 로그인을 구현하려고 한다.  여기에서 사용하는 것들이 이후에 스프링 시큐리티를 사용해 로그인을 구현할 때에도 사용이 된다.  회원 가입은 입력 받은 Id, Password를 DB에 저장하는 것이다. 로그인은 입력 받은 Id와 Password가 DB와 같은지 비교하는 것이다. JWT나 세션은 결국 아래와 같은 일을 하는 것이였다.- 인증 (사용자가 로그인한 사용자인지 아닌지 판단)- 인가 (사용자가 필요한 권한 가진 사용자인지 아닌지 판단)이 인증과 인가가 애플리케이션의 보안에서 중요한 부분이라고 한다. 그저 입력 받은 입력 받은 Id와 Password가 DB와 같은지 비교하는 것이 전부가 아니였다. 그래서 로그인을 내가 직접 구현하..

TIL 2024.08.30

24.08.27 TIL - JWT

오늘 배운 것JWT JWT란?JWT는 Json Web Token의 약자다.  JSON 포맷을 이용해 사용자에 대한 속성 저장하는 Web Token이라는 의미다.  Token은 동전이라는 의미인데 Web Cookie처럼 정보를 담고 있는 것이다.  그래서 그런지 일반적으로 쿠키 저장소를 사용해 JWT를 저장한다.  JWT 사용 이유로그인에 쿠키-세션 방식과 JWT 방식이 있는데 왜 JWT 방식을 요즘 많이 사용하는지 의문이 있었다.  각각 장단점이 있고 단점을 보완하는 방법도 존재하는 것 같은데 왜 JWT를 많이 사용하는지 궁금했다.  그래서 JWT 사용 이유에 대해서 보자.   서버가 1대인 경우 서버가 1대인 경우에는 쿠키-세션 방식을 사용해도 문제가 없다. 서버가 모든 클라이언트에 대한 로그인 정보를..

TIL 2024.08.28

24.08.26 TIL - 발생 가능 장애

오늘 배운 것발생 가능 장애DB Lock 관련 장애DB 복제 지연메모리 릭캐시 압력 발생 가능 장애실제 서비스를 진행하면 많은 장애 상황을 마주할 수 있습니다.  다양한 장애 상황이 발생했을 때 어떻게 해결해야 하는지 아는 것이 중요합니다.  이보다 더 중요한 것은 이런 장애 상황이 발생하지 않도록 개발을 진행할 때 어떤 것에 신경을 써야 하는지 아는 것입니다.  살펴볼 장애 상황들은 아래와 같습니다. DB Lock 관련 장애DB 복제 지연메모리 릭캐시 압력 DB Lock 관련 장애데이터베이스는 여러 사용자나 시스템이 동시에 데이터를 읽고 쓰는 환경에서 운영된다.  따라서 트랜잭션이라는 DB의 상태를 변경시키는 작업의 단위가 있다.  이런 환경에서 문제가 발생할 수 있는 대표적인 사례가 있다.  Dirt..

TIL 2024.08.27

24.08.23 TIL - 모니터링

오늘 배운 것모니터링Spring Boot ActuatorPrometheusGrafanaLoki 모니터링모니터링은 시스템의 성능, 안정성 및 가용성을 실시간으로 관찰하고 측정하는 과정 의미한다.  모니터링 도구를 사용해 다음과 같은 것들을 할 수 있다. 시스템 상태 추적문제 감지 및 예방성능 최적화장애 발생 시 빠르게 대응사용자 경험 향상시스템 가용성 보장 모니터링의 범위로는 아래와 같은 것들이 있다. 서버 모니터링CPU, 메모리, 디스크 사용량, 네트워크 트래픽 등 모리터링애플리케이션 모니터링애플리케이션의 상태, 성능, 로그 등 모니터링네트워크 모니터링네트워크 트래픽, 대역폭 사용량, 네트워크 지연 등 모니터링데이터베이스 모니터링쿼리 성능, 연결 수, 데이터베이스 사용량 등 모니터링보안 모니터링보안 이벤..

TIL 2024.08.26

24.08.22 TIL - 캐싱

오늘 배운 것캐싱캐싱 전략캐싱 in Spring 캐싱이란?Cache란?캐싱은 컴퓨팅에서 데이터를 더 빠르게 접근할 수 있는 장소에 임시로 저장하여 시스템 성능을 향상시키는 기법이다.  더 빠르게 접근할 수 있는 장소가 Cache이다.  Cache는 본래 CPU 내부의 작은 영역으로, 정말 빈번히 접근하게 되는 데이터를 저장해두는 임시 기억 장치다.  데이터를 영속성을 위해 파일시스템(디스크)에 저장하고, 빠른 활용을 위해 메모리(RAM)에 저장한다.  그리고 정말 많이 사용되는 휘발성 데이터가 캐시에 저장된다. Cache는 CPU에 딱 붙어 있어서 RAM을 오가는 속도보다 캐시의 데이터 가져오는 것이 더 빠르다.  캐싱 in WEB 캐시의 목적과 방식을 웹 개발에 적용했다.  빈번하게 접근하게 되는 데이..

TIL 2024.08.23

24.08.21 TIL - session clustering

오늘 배운 것session clustering 문제 인식세션로그인을 구현할 때 세션 방식을 사용하는 방법도 있다.  세션 방식 간단히 설명해보겠다.  사용자가 로그인에 성공하면 서버 메모리에 세션 저장소가 있는데 이곳에 사용자 정보를 넣어 놓는 것이다. 서버는 이 사용자에 대한 session id를 쿠키에 넣어 다시 브라우저 (사용자)에게 돌려준다. 브라우저는 쿠키 저장소에 쿠키를 저장해 두었다가 서버에 요청을 보낼 때 session id를 같이 넣어서 보낸다. 서버는 세션 저장소에서 session id와 연관된 사용자 정보로 요청 보낸 사용자가 누구인지 파악한다.  어떻게 보면 세션은 로그인에서 중요한 어떤 사용자인지를 판단하는 일을 하는 것이다.  HTTP의 특징인 stateless 때문에 어떤 사용..

TIL 2024.08.23

스프링 심화 AI 검증 비즈니스 프로젝트 - Starting Assignments

API 명세서https://www.notion.so/teamsparta/API-0191bf4047484aadbe49e6a5ec30266c API 명세서 | NotionBuilt with Notion, the all-in-one connected workspace with publishing capabilities.teamsparta.notion.site  테이블 명세서https://www.notion.so/teamsparta/8e7bb056d2ac41aa8952a39e4575c89e 테이블 명세서 | Notion1. user (사용자)teamsparta.notion.site ERD 명세서 인프라 설계서

프로젝트 2024.08.22