[Spring Boot] Access Token & Refresh Token
·
Spring/Spring Boot
1. JWT 비밀키 탈취 JWT 토큰은 우리가 서버와 클라이언트 간에 안전하게 정보를 주고받을 수 있게 해주는 열쇠와 같습니다. 이 열쇠는 사용자의 신원이나 권한 같은 중요한 정보를 담고 있습니다. 그래서 이 열쇠를 사용하면, 클라이언트와 서버는 서로를 신뢰하고 통신할 수 있습니다. JWT 토큰 인증방식은 비밀키(개인키 or 대칭키)를 사용하여 암호화합니다. 누군가 이 비밀키를 가지고 있다면 그 사람은 신뢰할 수 있는 사람으로 인정받습니다. 비밀키를 탈취당하게 된다면 문제가 발생하기 때문에 비밀키에 유효 기간을 두어야합니다 그런데 유효기간을 짧게 두면 사용자가 로그인을 자주 해야하므로 사용자 경험적으로 좋지 않고, 유효기간을 길게 두면 보안상 탈취 위험에서 벗어날 수 없습니다. 이런 문제를 해결하기 위해..
[Spring Boot] JWT(Json Web Token) - 웹의 안전한 인증 방식
·
Spring/Spring Boot
JWT에 대하여 설명하기 이전에 Session / Cookie 방식과 Token 방식에 대하여 먼저 설명하겠습니다. 1. Session / Cookie 방식 vs Token 방식 사용자 인증 방식에는 크게 Session / Cookie 방식과 Token 방식이 있습니다. 1-1) Session / Cokie 방식 쿠키-세션 방식은 클라이언트와 서버 간에 세션 ID를 주고받으며 사용자 인증을 처리합니다. 로그인이 성공하면, 서버는 세션 ID를 생성하고 이를 클라이언트에게 전송합니다. 클라이언트는 이 세션 ID를 쿠키에 저장하고, 이후 요청마다 쿠키에 저장된 세션 ID를 함께 보내어 사용자 인증을 수행합니다. 이 방식의 장점은 상태를 유지하면서 사용자 인증을 처리할 수 있다는 것입니다. 하지만 서버 측에서 ..
[Spring Boot] Lombok 사용법
·
Spring/Spring Boot
안녕하세요, 오늘은 스프링 부트에서 롬복을 사용하는 방법에 대해 알아보겠습니다. 롬복은 자바 개발에서 반복적으로 작성해야 하는 코드를 줄여주는 다이어트 라이브러리입니다. Lombok 라이브러리 추가 먼저, 롬복을 사용하기 위해선 우리의 프로젝트에 롬복 라이브러리를 추가해야 합니다. build.gradle 파일에 다음과 같이 롬복 의존성을 추가해줍니다. dependencies { // 롬복 추가 compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' } Lombok 플러그인 추가 다음으로 플러그인을 설치해야합니다. 인텔리제이 환경이라면 ctrl + shift + A 단축키를 사용하여 액션찾기로 플러그인에서 L..
[Spring Boot] DTO를 DB에 저장
·
Spring/Spring Boot
https://achieve-dev.tistory.com/41 [Spring boot] 폼데이터를 DTO로 받기 오늘은 스프링 부트에서 웹 폼(form) 데이터를 DTO(Data Transfer Object)로 받는 방법에 대해 알아보겠습니다. ● 폼 데이터(Form Data): 웹 페이지에서 사용자가 입력한 데이터를 서버로 전송하기 위한 형 achieve-dev.tistory.com 이전 시간에 웹 브라우저에서 전송한 폼 데이터를 DTO에 담아 컨트롤러로 받아왔었습니다. 이번에는 DTO를 데이터베이스에 저장하는 방법을 작성하겠습니다. ● JPA 스프링 부트는 자바언어를 사용합니다. 하지만 DB는 SQL이라는 언어를 사용하기 때문에 JPA(Java Persistence API)란 언어를 사용하여 자바 언..
[Spring boot] 폼데이터를 DTO로 받기
·
Spring/Spring Boot
오늘은 스프링 부트에서 웹 폼(form) 데이터를 DTO(Data Transfer Object)로 받는 방법에 대해 알아보겠습니다. ● 폼 데이터(Form Data): 웹 페이지에서 사용자가 입력한 데이터를 서버로 전송하기 위한 형식을 의미합니다. ● DTO(Data Transfer Object)는 서버와 클라이언트 간에 데이터를 효율적으로 전송하기 위해 사용하는 객체를 말합니다. 1. 뷰페이지 생성 {{>layouts/header}} 제목 내용 제출 Back {{>layouts/footer}} 뷰페이지를 생성하고 태그의 action 속성으로 데이터를 어디에 보낼지 정의하고 method 속성으로 데이터를 어떻게 보낼지 정의합니다. 2. 컨트롤러 생성 @Controller public class Artic..
[Spring Boot] 스프링 부트 폴더 구조 이해하기
·
Spring/Spring Boot
스프링 부트 프로젝트를 처음 생성하면, 주로 다음과 같은 폴더 구조를 가지게 됩니다. 1. java 폴더 /src/main/java 폴더는 애플리케이션의 주요 소스 코드가 위치하는 곳입니다. 이곳에는 컨트롤러, 서비스, 리포지토리, 도메인 모델 등의 자바 클래스 파일들이 저장됩니다. 2. resources 폴더 /src/main/resources 폴더는 애플리케이션에서 사용하는 각종 리소스 파일들이 위치하는 곳입니다. 이곳에는 정적 리소스, 뷰 템플릿, 설정 파일 등이 저장됩니다. 2.1. static 폴더 /src/main/resources/static 폴더는 웹 애플리케이션의 정적 리소스를 담기 위한 폴더입니다. 정적 리소스란, 웹 페이지에서 사용되는 CSS, JavaScript, 이미지 파일 등을 ..
[Spring Boot] 패키지 구조 : 계층형 vs 도메인형
·
Spring/Spring Boot
1. MVC 패턴(계층형) Spring MVC 패턴을 사용할 때 패키지를 model, view, controller로 나누는 것은 일반적인 방법 중 하나입니다. 이런 방식으로 패키지를 구성하면, 각 패키지의 역할이 명확해지고 코드의 관리가 쉬워지는 장점이 있습니다. 그러나 반드시 이런 방식으로 패키지를 나눠야 하는 것은 아닙니다. 패키지 구조는 프로젝트의 요구사항, 팀의 코딩 스타일, 유지보수의 편의성 등 여러 요인을 고려하여 결정하게 됩니다. 2. 스프링 부트 패키지 구조: 계층형 vs 도메인형 3. 계층형 패키지 구조 계층형 패키지 구조는 이름에서 알 수 있듯이, 프로젝트의 계층에 따라 패키지를 구성하는 방식입니다. 일반적으로 컨트롤러, 서비스, 리포지토리 등의 계층으로 패키지를 나눕니다. com.e..
[Network] HTTP vs HTTPS
·
Network
1. HTTP와 HTTPS란? HTTP(Hypertext Transfer Protocol)와 HTTPS(Hypertext Transfer Protocol Secure)는 웹에서 데이터를 전송하기 위해 사용되는 프로토콜입니다. 여기서 프로토콜이란 컴퓨터나 네트워크 장비가 서로 통신하기 위한 규약을 말합니다. 2. HTTP의 특징 https://achieve-dev.tistory.com/34 [Network] HTTP(Hypertext Transfer Protocol) 1. HTTP의 시작 1990년도 Tim Berners-Lee와 그의 동료들이 웹을 세상에 내놨을때 웹은 크게 4가지 요소였습니다. HTML : 웹페이지를 만드는 컴퓨터 언어 URL, URl : 원하는 웹 페이지에 방문할 수 있게 해주 ach..
[Network] HTTP(Hypertext Transfer Protocol)의 시작
·
Network
1. HTTP의 시작 1990년도 Tim Berners-Lee와 그의 동료들이 웹을 세상에 내놨을때 웹은 크게 4가지 요소였습니다. HTML : 웹페이지를 만드는 컴퓨터 언어 URL, URl : 원하는 웹 페이지에 방문할 수 있게 해주는 주소 web browser, web server : 웹 페이지를 주고받는 소프트웨어 HTTP : 웹 브라우저와 웹 서버가 통신할 때 사용하는 통신규칙 이것은 웹을 구성하는 가장 중요한 요소들이고 웹이 아무리 복잡해도 이 네 가지를 한 발자국도 벗어날 수 없습니다. 처음 세상에 등장한 HTTP는 단순한 통신 규칙이었습니다. 하지만 웹이 성장하면서 성능, 보안, 안정성을 확보하기 힘들어졌습니다. 오죽하면 당시 사람들은 World Wide Web을 World Wide wait..
[Spring] 의존성 주입(Dependency Injection, DI) 이해하기
·
Spring/Spring
1. 의존성이란? DI에서 의존성이란 한 객체가 다른 객체의 기능에 의존하는 관계를 의미합니다. 예를 들어, 자동차(Car) 객체가 엔진(Engine) 객체의 기능을 사용한다면, 자동차 객체는 엔진 객체에 의존하고 있다고 할 수 있습니다. 2. 의존성 주입(Dependency Injection, DI)이란? 의존성 주입은 한 객체가 다른 객체에 의존할 때, 이 의존성을 외부에서 주입하는 기법ㄱ을 말합니다. 이 기법을 사용하면 객체는 필요한 의존성을 직접 관리하지 않고, 외부에서 주입받아 사용할 수 있습니다. 이로 인해 객체는 의존성에 대해 더 이상 알 필요가 없습니다. 3. DI의 장점 DI의 가장 큰 장점은 코드의 결합도를 낮추고, 유연성을 높인다는 것입니다. 객체가 직접 의존성을 생성하거나 찾지 않기..
JoonYong
Dev Notes