목록Study (8)
Jiny
1. MySQL에 로그인터미널 또는 MySQL CLI에서 실행:mysql -u root -p비밀번호 입력 후 로그인.2. 데이터베이스 생성먼저 사용할 데이터베이스를 만듭니다. 예를 들어, mydb라는 데이터베이스를 생성하려면:CREATE DATABASE mydb;3. 사용자 생성 (이미 있으면 생략 가능)새로운 사용자 testuser를 만들고 비밀번호 설정:CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'your_password';4. 해당 데이터베이스에 대한 권한 부여이제 testuser에게 mydb 데이터베이스에 대한 권한을 부여합니다.GRANT ALL PRIVILEGES ON mydb.* TO 'testuser'@'localhost';변경 사항을 적용하려면:..
콘솔로 oauth2 구글 로그인이 이루어지면서 실행되는 메소드를 출력해봤다. https://github.com/Jieun13/springboot_login/tree/oAuth GitHub - Jieun13/springboot_login: Spring security & JWTSpring security & JWT. Contribute to Jieun13/springboot_login development by creating an account on GitHub.github.com실행한 코드는 여기에 있음 구글 로그인 시 --- 쿠키 생성 : oauth2_auth_request ------ 쿠키 생성 : refresh_token ---리프레시 토큰 생성, 쿠키에 저장액세스 토큰 생성, 패스에 추가 (re..
스프링부트로 구현을 진행했는데 백엔드만 구현해두니까 코드를 매번 발급받은 뒤에 복사해서 포스트맨으로 확인해야 하는 게 귀찮아서 간단하게 스프링부트 + 타임리프로 카카오 로그인, 로그아웃을 구현해봤다.카카오 로그인 및 로그아웃의 흐름이 어떤 지 알아보기 쉽게 하기 위한 용도... 정도로 구현을 해두었다. 전체 코드는 아래 깃허브에 있음! 근데 이 프로젝트에다가 폼 로그인도 구현해보고 JWT api 발급도 구현해보고 Kakao 로그인 백엔드도 섞여있고... 해서 필요 없는 코드도 많다. 이 구현 내용에 대한 건 oAuth 폴더, FEController, CookieService, KakaoAuthService 에 있는 코드만 참고하면 될 듯. https://github.com/Jieun13/springboo..
OAuth를 통해 가입하는 유저는 소셜 로그인(카카오, 구글, 네이버 등)을 사용하기 때문에 비밀번호가 필요하지 않지만, 회원 테이블에서 password가 필수 필드인 경우 해결 방법이 필요하다. 🔹 해결 방법 1. 랜덤 비밀번호 생성 후 저장 (단순 해결)import java.security.SecureRandom;import java.util.Base64;public class PasswordUtil { public static String generateRandomPassword() { byte[] randomBytes = new byte[16]; new SecureRandom().nextBytes(randomBytes); return Base64.ge..
1. 무상태성클라이언트에서 인증 정보가 담긴 토큰을 생성하고 인증하므로 서버는 클라이언트의 상태 정보를 유지하지 않아도 된다. 그렇기 때문에 stateless로 검증을 할 수 있다. 2. 확장성무상태성은 확장성과 연관이 있다. 만약 두 개 이상의 서버를 사용하게 된다면 세션 기반 인증은 각각의 API에서 인증을 수행해야 하지만, 토큰 기반 인증에서는 클라이언트의 정보가 담긴 하나의 토큰으로 모든 서버에 요청을 보낼 수 있다. 구글 로그인, 카카오 로그인 같은 OAuth 2.0 기반의 인증 시스템은 기본적으로 토큰을 활용하는데 이를 활용해 로그인 방식을 확장할 수 있다. 3. 무결성토큰 방식은 HMAC 기법이라고도 불린다. 토큰이 발급된 이후로는 토큰 정보를 변경할 수 없다. 즉, 토큰의 무결성이 보장되..
인증과 인가인증authentication은 사용자의 신원을 입증하는 과정, 인가authorization는 사이트의 특정 부분에 접근할 수 있는지 권한을 확인하는 과정이다.로그인을 하는 것은 인증이고 관리자 페이지에 admin 유저가 접근했을 때 권한을 확인하는 과정이 인가이다. 그리고 스프링 시큐리티는 이러한 인증과 인가에 대한 코드를 쉽게 작성할 수 있도록 돕는 스프링 하위 프레임워크이다. 스프링 시큐리티는 CSRF 공격, 세션 고정 공격을 방어하고 요청 헤더 역시 보안 처리를 해준다. -> 세션 고정 공격이란, 사용자의 인증 정보를 탈취하거나 변조하는 공격을 말한다. 스프링 시큐리티는 필터 기반으로 동작하고, 기본적으로 세션 기반 인증을 제공한다. 인증은 세션 기반과 토큰 기반으로 나뉘는데, 특징..
@RequestBodyjson 형식의 HTTP 요청 본문을 객체로 매핑할 때 사용. * 주로 json 형식을 많이 쓰지만 xml 등 다른 형식의 요청 본문도 객체로 변환 가능.HTTP 요청의 Content-Type에 따라 HttpMessageConverter를 통해 자동 변환.@ResponseBodyRESTful API 사용 시에 주로 사용.Controller에서 반환되는 객체를 json 형식의 HTTP 응답 본문으로 변환할 때 사용.@RestController를 사용하면 모든 메서드에 자동 적용되어 따로 붙일 필요는 없다. - 반환되는 객체는 `HttpMessageConverter`를 통해 JSON으로 변환되어 응답 본문에 포함됨.@RequestParamURL 쿼리 파라미터 값을 개별 변수로 바인..
1월 동안 스프링부트 프로젝트를 3개 정도 개발을 해봤는데, 그냥 막 적으니까 아무래도 이대로는 안 되겠다는 생각이 들더라고... 보통 프로젝트를 할 때 백엔드 아키텍처, 데이터베이스 테이블을 먼저 설계하고 개발을 시작한다고 하는데나는 냅다 인텔리제이를 켜고 무작정 개발을 시작했으니... 코드가 늘어날 수록 복잡해지고 꼬이는 기분이라서 이번에는 처음부터 천천히 설계를 다 하고 개발을 하기로 했다.그런데 문제는 데이터 베이스 설계 방법을 모른다! 그것만 모르는 게 아니라 프로젝트가 어떻게 돌아가야 정상적인 건지도 모른다. ㅋㅋㅋㅋㅋㅜㅜ그렇지만 이제부터라도 공부하면 되는 거니까~ ERM(Entity-Relationship Model)은 데이터베이스를 설계할 때 엔티티(Entity), 관계(Relations..