이전 내용
[GitHub] 깃허브 대용량 (인텔리제이 깃허브 연동)
이전 내용 [Java] Spring Boot: 외부 파일 열기이전 내용 [Java] Spring Boot: 블로그 앱 만들기이전 내용 [Java] Spring Boot: 스프링 시큐리티, OAuth2, JWT이전 내용 [Java] Spring Boot: 네이버 로그인 구현하기이전 내
puppy-foot-it.tistory.com
방명록 프로젝트 디벨롭 개요
수업 시간에 배웠던 스프링 부트 블로그 프로젝트를 기반으로, 이전에 CRUD 기능을 연동했던 방명록 프로젝트를 디벨롭하려고 한다. 현재까지 진행된 상태는 MySQL과 연동하여 CRUD 기능이 가능한 방명록 Restful API를 구현해놓은 상태다.
[Java] Spring Boot: 방명록 Rest API 구현(feat. MySQL 연동)
이전 내용 [Java] Spring Boot: 코드, 요청&응답 과정 이해하기이전 내용 [Java] Spring Boot: Maven Repository이전 내용 [Java] 스프링부트: Spring Initializr - Dependencies이전 내용 [Java] Spring Boot: 제어 역전, 의존성
puppy-foot-it.tistory.com
여기서 추가하려고 하는 최종적인 기능은 소셜 로그인 OAuth2 기능이며, 이를 위해 필요한 패키지, 클래스, 인터페이스 등을 생성하고 그에 맞는 코드를 작성할 예정이다.
앞서 블로그 프로젝트를 정리해 놓긴 했는데, 내용이 방대하고 우선 프로젝트를 잘 만들어놓고나서 내것을 만들어보며 하나 하나 세부적으로 정리해 보자 계획했던 터라 블로그 프로젝트 내용은 스프링 부트를 이해하는 데 전반적으로 어려움이 있다.
(그래도 보시려면)
[Java] Spring Boot: 블로그 앱 만들기
이전 내용 [Java] Spring Boot: 스프링 시큐리티, OAuth2, JWT이전 내용 [Java] Spring Boot: 네이버 로그인 구현하기이전 내용 [Java] Spring Boot: 카카오 로그인 기능 추가하기이전 내용 [Java] Spring Boot: 구글 로그
puppy-foot-it.tistory.com
아무튼, 대부분의 구조와 코드도 해당 프로젝트와 크게 다르진 않을 거 같으나, 코드를 리뷰하는 방식으로 세세하게 진행할 예정이다.
방명록 프로젝트 디벨롭 과정
대략적인 방명록 프로젝트 디벨롭 과정은 다음과 같다.
주요 과정
1&2. 방명록 화면 개발 및 컨트롤러 메소드 작성
- 타임리프 템플릿 엔진을 사용하여 방명록 화면을 개발하고, 이를 통해 웹 페이지에 데이터를 표시한다.
- 의존성을 추가하기 위해 `build.gradle` 파일에 코드를 삽입한다.
`implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'`
- 글 전체 리스트를 반환하는 뷰를 위해 ` articlelistviewresponse.java` 파일을 생성하여 글 정보를 담는 객체를 만든다.
- 글 리스트를 처리하는 `getArticles()` 메소드를 `GuestBookViewController.java` 파일에 추가하고, 글 리스트를 모델에 저장하여 뷰를 조회한다.
- 새로운 글을 생성하거나 수정하기 위한 `newArticle()` 메소드를 작성하고, 쿼리 파라미터 `id`에 따라 동작을 달리한다.
1-2. ️ 방명록 글 조회 및 등록 뷰 작성
- articleList.html 파일을 생성하여 글 리스트를 표시하고, 글 등록을 위한 [생성] 버튼과 로그아웃버튼을 추가한다.
글 등록 버튼은 클릭 시 /new-article 경로로 이동하도록 설정되어 있다. - 각 방명록 글은 카드 형태로 표시되며, 제목과 내용을 보여주고, 상세 보기를 위한 보러가기 버튼이 포함되어 있다.
- article.html 파일을 생성하여 글쓴이 정보를 포함한 개별 글 뷰를 작성하고, 글 제목과 작성 날짜도 표시한다.
- newArticle.html 파일을 통해 글 수정 및 등록 뷰를 만들고, 제목과 내용을 입력할 수 있는 폼을 추가하며, 수정 및 등록 버튼을 구현한다.
1-3. ️ CRUD 기능 구현
- 삭제 기능은 "삭제 완료되었습니다"라는 알림과 함께 `/articles` 페이지로 리다이렉트되는 HTTP DELETE 요청을 처리한다. 또한, 삭제 실패 시에는 "삭제 실패했습니다" 메시지를 표시하고 같은 페이지로 이동한다.
- 수정 기능은 사용자가 입력한 제목과 내용을 JSON 형태로 변환하여 HTTP PUT 요청을 수행하며, 성공 시 "수정 완료되었습니다"라는 알림 후 해당 게시물 페이지로 이동한다. 실패 시에도 "수정 실패했습니다" 알림과 함께 같은 페이지로 돌아간다.
- 생성 기능은 사용자가 입력한 제목과 내용을 포함한 JSON을 통해 HTTP POST 요청을 보내며, 등록 성공 시 "등록 완료되었습니다"라고 알리고 `/articles` 페이지로 이동한다. 실패 시 "등록 실패했습니다"는 메시지를 표시하며 같은 페이지로 이동한다.
- HTTP 요청을 송신하는 함수는 요청 성공 및 실패에 따라 알림을 표시하며, 401 오류 발생 시 쿠키에서 `refresh_token`을 찾아 재발급 요청을 수행한다. 이러한 흐름을 통해 사용자의 인증을 유지한다.
- articleviewresponse dto는 방명록 게시물 정보를 담기 위한 데이터 구조체로, 게시물의 ID, 제목, 내용, 작성 시간, 작성자 정보를 포함하고 있다. 이 클래스는 `Article` 객체를 입력받아 필드를 초기화한다.
3. 스프링 시큐리티 및 JWT를 통한 인증 설정
- 스프링 시큐리티를 사용하기 위해 build.gradle 파일에 의존성을 추가해야 한다.
`spring-boot-starter-security`
`thymeleaf-extras-springsecurity6`
`spring-security-test`
- User 엔티티를 생성하여 사용자 정보를 저장할 테이블을 정의하며, 주요 칼럼으로 `id`, `email`, `password`, `nickname` 등이 포함된다.
- userdetails 클래스를 상속받는 User 클래스를 작성하고, 사용자 인증관련 메소드를 구현하여 계정의 만료 여부 및 활성 상태를 반환하도록 설정한다.
- UserRepository를 생성하여 사용자 정보를 데이터베이스에 접근하기 위한 메소드를 정의하고, 이메일을 기준으로 사용자 정보를 가져오는 `findByEmail` 메소드를 포함한다.
- SecurityFilterChain 설정을 통해 HTTP 요청에 대한 보안 규칙을 설정하고, 로그인 페이지 및 회원가입 경로를 공용으로 허용한다.
- jwt 서비스 구현에 필요한 의존성 추가, 발행자 정보 및 비밀키 설정 등 단계를 포함하여 토큰 생성과 검증 과정을 상세히 설명한다.
3.1. 스프링 시큐리티 설정 방법
- 스프링 시큐리티를 활용하기 위해 `build.gradle` 파일에 의존성을 추가하고 빌드를 새로 고침해야 한다. 필요한 의존성
`org.springframework.boot:spring-boot-starter-security`
`org.thymeleaf.extras:thymeleaf-extras-springsecurity6`
`org.springframework.security:spring-security-test`
- User 엔티티를 만들기 위해 필요한 칼럼은 id, email, password, created_at, updated_at으로 구성된다. 여기서 id는 기본키이고, email과 password는 각각 null을 허용하지 않는다.
- User 클래스는 `userdetails` 클래스를 상속받아 인증 객체로 사용되며, 사용자 정보 업데이트를 위한 코드가 포함될 예정이다. 이 클래스는 `nickname` 필드를 추가하여 사용자의 이름을 관리한다.
- User 클래스는 사용자 정보를 처리하기 위해 여러 개의 오버라이드 메서드를 제공하여 계정의 만료, 잠금 여부 및 패스워드의 상태 등을 반환한다. 모든 메서드는 기본적으로 true를 반환하여 계정이 유효함을 나타낸다.
- 사용자의 정보를 데이터베이스에서 조회하기 위해 UserRepository 인터페이스를 생성하고 `jparepository`를 상속 받아야 한다. 여기서 사용자 정보는 이메일을 통해 조회된다.
4. 시큐리티 설정 및 회원 가입 구현
- 시큐리티 설정 파일인 WebSecurityConfig.java를 config 패키지 내에 생성하며, 이 파일에서는 스프링 시큐리티기능을 비활성화하는 설정과 웹 기반 보안을 구성한다. ▶ 추후 OAuth2 구현 시 필요없어지게 되므로 생략
- 특정 HTTP 요청에 대해 로그인 페이지와 회원 가입 페이지는 누구나 접근 가능하고, 그 외 요청은 인증이 필요하도록 설정한다.
- 사용자 정보를 추가하는 서비스 메소드를 작성하기 위해 AddUserRequest.java dto클래스를 만들고, 이메일과 비밀번호를 속성으로 설정한다.
- UserService.java 클래스를 생성하여 유저를 데이터베이스에 저장하는 메소드를 구현하며, 비밀번호는 bcryptpasswordencoder를 사용해 암호화한다.
- UserApiController.java에서 회원 가입 및 로그아웃메소드를 구현하며, 회원 가입 시 저장 후 로그인 페이지로 리디렉션한다.
5. 회원가입 및 로그인 뷰 작성
- UserViewController.java 파일을 생성하여 로그인과 회원 가입 경로의 뷰 파일을 연결하는 컨트롤러 코드를 작성한다.
- oauthLogin은 이후 oauth2 로그인 서비스 구현을 위해 미리 지정한다.
- 로그인과 회원가입에 대한 각기 다른 경로를 설정하며, 로그인 경로는 "oauthLogin"으로 반환하고 회원가입 경로는 "signup"으로 반환한다.
- 로그인 페이지는 사용자에게 이메일과 비밀번호 입력을 요청하며, 제출 버튼과 회원가입 버튼이 포함되어 있다.
6. JWT 서비스 구현 단계
- 의존성 추가: `build.gradle` 파일에 의존성을 추가해야 한다.
`io.jsonwebtoken`
`javax.xml.bind`
- 설정 파일 구성: `application.properties`에 이슈 발행자와 비밀키 정보를 설정해야 한다.
- jwtProperties 클래스 생성: ` jwtProperties` 클래스를 통해 이슈 발행자와 비밀키 값에 접근할 수 있도록 해야 하며, @ConfigurationProperties 애너테이션을 사용하여 프로퍼티 값을 가져온다.
- TokenProvider 클래스: `TokenProvider` 클래스를 만들어 토큰 생성, 유효성 검사 및 정보 추출 기능을 구현해야 하며, 예외 처리를 통해 오류를 방지한다.
- 인증 정보 및 사용자 ID 추출: jwt토큰을 기반으로 인증 정보와 유저 ID를 추출하는 메소드를 제공하여 사용자 인증을 구현해야 한다.
7&8. TokenProvider 클래스와 리프레시 토큰 구현
- TokenProviderTest 클래스는 jwt관련 기능의 검증을 위한 테스트 클래스로, `generateToken`, `vali dtoken`, `getAuthentication`, `getUserId` 메소드를 검증한다.
- `generateToken()` 메소드는 주어진 유저 정보와 만료 기간으로 jwt를 생성하고, 생성된 토큰에서 유저 ID를 추출하여 검증하는 테스트를 포함한다.
- `vali dtoken()` 메소드는 만료된 토큰과 유효한 토큰의 경우를 검증하며, 각각의 결과를 확인하는 테스트가 포함된다.
- 리프레시 토큰은 데이터베이스에 저장되며, 이에 대한 엔티티`RefreshToken` 클래스를 생성하여 유저 ID와 함께 토큰 값을 저장한다
- `RefreshTokenRepository` 인터페이스는 유저 ID로 리프레시 토큰을 조회하는 메소드를 정의하고 있으며, Spring Data JPA의 기능을 활용한다.
9&10. 토큰 필터 및 API 구현
- 토큰 필터는 요청 처리 전후에 URL 패턴에 맞는 모든 요청을 처리하는 기능을 제공하며, 유효한 토큰이 있는 경우 시큐리티 콘텍스트 홀더에 인증정보를 저장한다.
- 시큐리티 컨텍스트는 인증객체가 저장되는 보관소로, 언제든지 인증정보를 꺼내 사용할 수 있으며, 스레드 로컬에 저장되어 독립적으로 사용 가능하다.
- `TokenAuthenticationFilter` 클래스는 Authorization 헤더에서 액세스 토큰을 가져와 유효 여부를 확인하고, 유효한 경우 인증정보를 설정한다.
- `RefreshTokenService` 클래스는 리프레시 토큰으로 리프레시 토큰 객체를 검색하는 `findByRefreshToken()` 메소드를 구현하며, 리프레시 토큰이 유효하지 않을 경우 예외를 발생시킨다.
- 액세스 토큰은 `createNewAccessToken()` 메소드를 통해 리프레시 토큰의 유효성을 검사한 후 생성되며, 유효한 경우 사용자 ID를 기반으로 새로운 액세스 토큰을 발급한다.
11. OAuth2 소셜 로그인 구현 방법
- oauth2는 구글, 카카오, 네이버와 같은 소셜 로그인 구현에 사용되며, 각각의 구현 방법은 관련 링크에서 추가 정보를 받을 수 있다.
- Gradle 또는 Maven의 의존성을 추가하고, 구글 API Console에서 프로젝트를 생성하여 OAuth 2.0 클라이언트 ID를 생성해야 한다.
- 쿠키 관리 클래스를 구현할 때는 `CookieUtil.java` 파일을 생성하고, 쿠키 추가 및 삭제 로직을 포함시켜 유틸리티로 사용 가능하게 한다.
- oauth2UserCustomService를 통해 사용자 정보를 기반으로 유저 객체를 저장하거나 업데이트하며, 카카오 및 네이버와 같은 소셜 계정에서 이메일과 사용자 이름을 얻는다.
- 이메일 정보가 없거나 비어 있는 경우는 예외를 던져 유효성을 검증하고, 기본값인 사용자로 닉네임을 설정할 수 있다.
11-1. OAuth2와 JWT 통합을 위한 Spring Security 설정
- 기존의 스프링 시큐리티설정을 대체하기 위해 `WebSecurityConfig.java` 파일을 삭제하거나 주석 처리하고, `WebOAuthSecurityConfig.java`를 새로 생성하여 코드 설정을 수행한다.
- `WebOAuthSecurityConfig` 클래스에서는 oauth2로그인 및 사용자 인증요청 관련 URL을 허용하고, 나머지 요청은 인증을 요구하는 설정을 적용한다.
- oauth2 인증에 필요한 정보를 세션 대신 쿠키에 저장하기 위해 ` oauth2AuthorizationRequestBasedOnCookieRepository.java` 파일에서 인증요청을 저장 및 로드하는 로직을 구현한다.
- 인증성공 후 처리하는 핸들러인 ` oauth2SuccessHandler.java` 클래스에서 사용자의 이메일을 추출하고, 접근과 리프레시 토큰을 생성 및 쿠키에 저장하는 로직을 작성한다.
- 리프레시 토큰의 유효 기간은 14일, 접근 토큰은 1일로 설정되며, 인증성공 후 지정된 URL로 리다이렉트된다.
11-2. ️ 방명록 앱의 글 작성 API 수정
- `AddArticleRequest` 클래스에 저자 정보를 저장하기 위한 `author` 필드를 추가하고, dto를 엔티티로 변환하는 메소드에서 저자를 설정하도록 구현된다.
- `GuestBookService` 클래스의 `save()` 메소드가 유저 이름을 입력받고, 이를 `toEntity()` 메소드에 전달하여 방명록 글을 저장하는 방식으로 변경된다.
- `GuestBookApiController`에서 현재 인증 정보인 `principal` 객체를 사용하여 유저 이름을 받아오고, 이 정보를 `save()` 메소드에 넘겨주는 방식으로 요청을 처리한다.
- 사용자가 인증되지 않았을 경우, 적절한 HTTP 상태 코드인 401 (UNAUTHORIZED)을 반환하도록 설계된다.
- 방명록 글의 수정과 삭제 기능이 각 버튼 클릭 이벤트와 연계되어 구현되며, 성공 여부에 따라 알림 창이 표시되고 특정 경로로 리다이렉트된다.
최종. 방명록 기능 구현 확인
- 로그인 페이지는 localhost:포트번호를 접속하면 확인할 수 있으며, 소셜 로그인이 잘 작동되는지 확인한다.
- 방명록의 기본 기능으로는 등록, 조회, 수정, 삭제 기능이 있으며, 모두 성공적으로 구현되는지 확인한다..
프로젝트 관련 핵심 용어 및 파일
[Spring Boot]
스프링 부트는 Java 기반의 웹 애플리케이션을 아주 쉽고 빠르게 만들 수 있게 도와주는 도구 상자다. 마치 레고 블록처럼, 필요한 기능들을 미리 만들어진 부품처럼 가져다 조립해서 웹사이트나 앱을 만들 수 있게 해준다. 복잡한 설정 없이 간단하게 시작할 수 있다는 장점이 있다.
[스프링 데이터 JPA]
스프링 데이터 JPA는 데이터베이스를 좀 더 쉽게 다룰 수 있게 해주는 도구다. JPA는 'Java Persistence API'의 약자로, Java에서 데이터를 저장하고 관리하는 방법을 정의한 것이다. 스프링 데이터 JPA를 사용하면, 복잡한 데이터베이스 코드를 직접 작성하지 않아도 간단한 명령어로 데이터를 저장, 조회, 수정, 삭제할 수 있다.
[롬복(Lombok)]
롬복은 Java 코드를 더 짧고 간결하게 만들어주는 마법사 같은 도구다. @Getter, @Setter 같은 특별한 주문(Annotation)을 코드에 추가하면, 롬복이 자동으로 getter, setter 메소드와 같은 반복적인 코드를 만들어준다. 마치 요술 지팡이처럼 코드를 깔끔하게 정리해 준다.
[H2 데이터베이스]
H2 데이터베이스는 Java로 만들어진 아주 가벼운 데이터베이스다. '파일' 형태로 저장되기 때문에, 별도의 설치 없이 바로 사용할 수 있어서 개발할 때 아주 편리하다. 마치 주머니 속의 작은 데이터베이스처럼, 필요할 때 언제든지 꺼내 쓸 수 있다.
[CRUD]
CRUD는 데이터베이스에서 가장 기본적인 4가지 작업(Create, Read, Update, Delete)을 합쳐서 부르는 말이다. Create는 '생성', Read는 '읽기', Update는 '수정', Delete는 '삭제'를 의미한다. 마치 데이터 관리의 기본 4가지 동작 버튼과 같다.
[REST API]
REST API는 서버와 클라이언트가 서로 데이터를 주고받기 위한 약속이다. API는 'Application Programming Interface'의 약자로, 프로그램들이 서로 대화하는 방식을 정의한다. REST는 'Representational State Transfer'의 약자로, 웹의 장점을 활용한 특정한 스타일을 의미한다. 마치 식당에서 주문하는 방식처럼, 정해진 방식으로 요청하고 응답을 받는다.
[엔티티]
엔티티는 데이터베이스 테이블과 Java 객체를 연결해주는 다리 역할을 한다. 데이터베이스의 테이블 구조를 Java 클래스 형태로 표현한 것이라고 생각하면 된다. 마치 건물의 설계도처럼, 데이터가 어떻게 구성되어 있는지 정의한다.
[리포지토리]
리포지토리는 데이터베이스에 데이터를 저장하고 가져오는 역할을 하는 창고 관리자와 같다. JPA 리포지토리를 사용하면, 데이터베이스와 직접 소통하는 코드를 직접 작성하지 않아도 된다. '저장해줘', '가져와줘' 와 같은 간단한 명령만으로 데이터를 관리할 수 있다.
[DTO]
DTO는 데이터를 담아서 다른 계층으로 전달하는 상자다. DTO는 'Data Transfer Object'의 약자로, 데이터베이스에서 가져온 데이터를 필요한 형태로 포장해서 서비스나 컨트롤러로 전달하는 데 사용된다. 마치 택배 상자처럼, 필요한 정보만 담아서 안전하게 전달한다.
[타임리프(Thymeleaf)]
타임리프는 웹 페이지를 만들 때 사용하는 아주 편리한 도구다. HTML 파일 안에 데이터를 쉽게 넣을 수 있게 해주는 '템플릿 엔진' 중 하나다. 마치 그림 위에 덧칠하듯이, HTML 코드에 데이터를 자연스럽게 결합할 수 있다.
[템플릿 엔진]
템플릿 엔진은 웹 페이지를 만들 때, HTML 코드와 데이터를 합쳐서 최종적인 웹 페이지를 만들어주는 도구다. HTML 뼈대 안에 데이터를 넣어서 웹 페이지를 동적으로 생성할 수 있다. 마치 빵틀처럼, 정해진 모양에 내용물을 채워 빵을 만드는 것과 같다.
[스프링 시큐리티]
스프링 시큐리티는 웹 애플리케이션의 보안을 책임지는 든든한 경비원이다. '인증'(누가 접속했는지 확인)과 '인가'(접속한 사람이 어떤 권한을 가지고 있는지 확인)를 통해 웹 사이트를 안전하게 지켜준다. 마치 웹 사이트의 문지기처럼, 허락된 사람만 들여보내 준다.
[OAuth2]
OAuth2는 다른 웹사이트나 앱의 계정을 사용해서 로그인할 수 있게 해주는 편리한 기능이다. '구글', '카카오', '네이버' 같은 서비스의 계정으로 다른 웹사이트에 간편하게 로그인할 수 있다. 마치 여러 개의 열쇠를 하나로 관리하는 것과 같다.
[JWT]
JWT는 웹에서 정보를 안전하게 주고받기 위한 특별한 '토큰'이다. JWT는 'JSON Web Token'의 약자로, 정보를 암호화해서 안전하게 전달한다. 마치 디지털 도장처럼, 정보를 위조하거나 변조하는 것을 막아준다.
[UserDetails]
UserDetails는 스프링 시큐리티에서 사용자 정보를 담는 특별한 '상자'다. 사용자의 아이디, 비밀번호, 권한 등의 정보를 가지고 있다. 마치 회원의 신분증과 같은 역할을 한다.
[BCryptPasswordEncoder]
BCryptPasswordEncoder는 비밀번호를 아주 안전하게 암호화해주는 도구다. 비밀번호를 저장할 때, 해독하기 어렵게 만들어서 해커가 비밀번호를 알아내더라도 사용할 수 없도록 보호한다. 마치 금고처럼, 소중한 정보를 안전하게 보관한다.
[AuthenticationManager]
AuthenticationManager는 로그인 과정을 관리하고 인증을 처리하는 핵심 부품이다. 사용자가 입력한 아이디와 비밀번호를 확인하고, 인증이 성공했는지 실패했는지 결정한다. 마치 회사의 출입 관리 시스템처럼, 출입 권한을 확인한다.
[CSRF]
CSRF는 웹 사이트를 공격하는 방법 중 하나로, 사용자가 자신도 모르게 원치 않는 행동을 하도록 만드는 것이다. 스프링 시큐리티는 CSRF 공격을 막기 위한 기능을 제공한다. 마치 웹 사이트의 방패와 같다.
[빌더 패턴]
빌더 패턴은 객체를 만들 때, 필요한 정보를 하나씩 쌓아서 완성하는 방법이다. 객체를 만드는 과정을 더 쉽고 유연하게 만들어준다. 마치 레고 블록을 하나씩 조립해서 원하는 모양을 만드는 것과 같다.
[JpaRepository]
JpaRepository는 데이터베이스를 아주 쉽게 다룰 수 있게 해주는 특별한 '인터페이스'다. 데이터를 저장, 조회, 수정, 삭제하는 기본적인 기능을 미리 만들어져 있어서, 개발자가 직접 코드를 작성할 필요가 없다. 마치 데이터베이스 관리의 만능 리모컨과 같다.
[data.sql]
data.sql은 데이터베이스에 초기 데이터를 넣어주는 파일이다. 웹 애플리케이션을 처음 실행할 때, 필요한 기본 데이터를 자동으로 데이터베이스에 추가해준다. 마치 새 집들이 선물처럼, 처음 시작할 때 필요한 물건들을 미리 준비해주는 것과 같다.
[@EnableJpaAuditing]
@EnableJpaAuditing은 JPA에서 데이터가 생성되거나 수정될 때, 자동으로 시간을 기록해주는 기능이다. 데이터가 언제 만들어졌고, 언제 수정되었는지 추적할 수 있다. 마치 CCTV처럼, 데이터의 역사를 기록한다.
[ArticleListViewResponse]
ArticleListViewResponse는 게시글 목록을 보여주기 위해 필요한 데이터만 담아서 보내는 특별한 '상자'다. 게시글의 제목, 내용 등을 담아서 웹 페이지에 전달한다. 마치 선물 포장처럼, 필요한 정보만 깔끔하게 포장해서 전달한다.
[ArticleViewResponse]
ArticleViewResponse는 특정 게시글의 자세한 정보를 보여주기 위해 필요한 데이터만 담아서 보내는 특별한 '상자'다. 게시글의 제목, 내용, 작성자, 작성 시간 등을 담아서 웹 페이지에 전달한다. 마치 상세 설명서처럼, 게시글에 대한 모든 정보를 담아서 전달한다.
[token.js]
token.js는 웹 페이지에서 '토큰'을 관리하는 JavaScript 파일이다. '토큰'은 사용자를 인증하고 권한을 확인하는 데 사용되는 중요한 정보다. 마치 웹 페이지의 신분증과 같다.
[인증]
인증은 '누가' 웹 사이트에 접속했는지 확인하는 과정이다. 아이디와 비밀번호를 입력해서 본인임을 증명하는 것이 인증이다. 마치 문지기가 신분증을 확인하는 것처럼, 접속자를 확인한다.
[인가]
인가는 '허락'된 사람만 특정 기능이나 데이터에 접근할 수 있도록 권한을 부여하는 과정이다. 인증된 사용자가 어떤 권한을 가지고 있는지 확인하고, 권한에 따라 접근을 허용하거나 거부한다. 마치 회사에서 직급에 따라 접근할 수 있는 정보가 다른 것처럼, 권한을 관리한다.
다음 내용
'[Java] > Spring Boot' 카테고리의 다른 글
[Java] Spring Boot: Swagger 적용하기 (0) | 2025.04.23 |
---|---|
[Java] Spring Boot: 깃허브 대용량 (인텔리제이 깃허브 연동) (0) | 2025.04.22 |
[Java] Spring Boot: 외부 파일 열기 (0) | 2025.04.22 |
[Java] Spring Boot: 블로그 앱 만들기 (0) | 2025.04.22 |
[Java] Spring Boot: 스프링 시큐리티, OAuth2, JWT (0) | 2025.04.21 |