Spring 73

Spring Boot 31강 - DTO 설계 및 페이징 구조: TodoDTO, PageRequestDTO, PageResponseDTO

이번 강의에서는 실제 서비스에서 화면과 데이터를 주고받을 때 사용하는 DTO(Data Transfer Object) 구조와페이지네이션(페이징) 처리를 위한 DTO 설계를 살펴봅니다.1. DTO란 무엇인가?DTO(Data Transfer Object)는 엔티티와 분리하여 화면-서비스-컨트롤러 간 데이터를 전달하는 역할을 합니다.실무에서는 엔티티 직접 노출을 지양하고, DTO를 통해 필요한 정보만 주고받는 것이 표준입니다.2. DTO 폴더 구조src/main/java/com/example/mall/dto/ 폴더에 아래와 같은 파일이 있습니다.mall_d69/└── src/ └── main/ └── java/ └── com/ └── example..

Spring Boot 30강 - 도메인 설계: Todo 엔티티 클래스

이번 글에서는 Todo 관리 애플리케이션의 핵심인 도메인(Entity) 클래스를 직접 살펴봅니다.Spring 프로젝트에서 도메인 클래스는 데이터베이스 테이블과 매핑되는 "핵심 데이터 구조"입니다.1. 도메인 폴더 구조src/main/java/com/example/mall/domain/ 폴더에는 Todo.java 엔티티가 위치합니다.mall_d69/└── src/ └── main/ └── java/ └── com/ └── example/ └── mall/ └── domain/ └── Todo.java2. Todo 엔티티 ..

Spring Boot 29강 - Spring Boot Todo 프로젝트 구조와 환경설정

이번 글에서는 프론트는 React가, 백은 Spring Boot가 받는 형식으로 진행할 것이기 때문에,Spring Boot를 이용하는 글도 잠깐 이곳에 적혔습니다. 나중에 정리가 끝난다면, 이 글은 Spring Boot로 이동하고 React 쪽에 제가 글을 따로 걸어두겠습니다.1. 프로젝트 폴더 구조프로젝트를 생성하면 아래와 같은 폴더 및 파일 구조가 만들어집니다.mall_d69/├── build.gradle├── settings.gradle├── src/│ ├── main/│ │ ├── java/│ │ │ └── com/│ │ │ └── example/│ │ │ └── mall/│ │ │ ├── MallAp..

Spring Security와 PasswordEncoder에 대하여

들어가기 앞서, 간단한 한 줄 설명.Spring Security는 Spring 기반의 애플리케이션에서인증(Authentication)과 인가(Authorization)를 도와주는 프레임워크로, 보안 관련된 로직입니다.0. 인증과 인가란?✅ 인증(Authentication)사용자가 누구인지를 확인하는 과정이라고 볼 수 있습니다.일반적으로 아이디와 비밀번호를 통해 사용자를 확인하고,인증에 성공하면 스프링 시큐리티는 사용자의 정보를 Authentication객체에 저장합니다. 예를 들어, 저희가 /empl/login 에서 아이디와 비밀번호를 입력하고 로그인을 했습니다. → UsernamePasswordAuthenticationFilter가 요청을 가로채서 인증일 시도합니다. → AuthenticationMan..

Spring Boot 28강 - 게시글/댓글 수정(modify) 기능 구현 및 권한 체크

게시글(질문), 댓글(답변)을본인만 수정할 수 있도록"수정" 버튼과 기능을 제공수정 폼에서 기존 내용 자동 세팅수정 시 수정일자(modifyDate) 자동 저장수정/삭제 버튼은 오직 작성자 본인에게만 보임Spring Security + Principal로 권한 체크Thymeleaf로 동적 UI 제어JavaScript로 삭제 시 confirm 경고창📌 주요 코드 예제1) 게시글 상세 페이지 (question_detail.html) 수정    삭제 수정/삭제 버튼: 로그인 상태 && 작성자 본인에게만 표시수정일자가 있으..

4. CRUD 게시판 프로젝트 - 네비바 구현, 작성자명 출력, 게시글 작성폼 유효성 검사

이번 글에서는 아무래도 보수를 좀 해야할 것 같습니다.저번 글이 좀 하다가 끊긴 부분이 많았던 느낌이 있던 만큼 부족한 부분을 채우고 가려고 합니다.물론 저번 글 마지막에서 말씀드렸던 유효성 검사도 포함해서 진행할 생각입니다.1. Navbar (네이바) 구현!일단 저번에 로그인을 하는 것에서 끝냈잖아요?하지만 아직 로그인이 성공한건지, 실패한건지 알 수 없습니다.그래서 일단 고정적인 편의 기능을 위해서 네비바(상단바) 구현을 해보고자 합니다. 사실 저번 글을 적고 있을 때, 저는 이미 만들었었습니다.하지만 만들어도 연결을 하지 않으면 화면에 나오지 않는법! navbar.html 자유게시판 ..

3. CRUD 게시판 프로젝트 - 디자인을 불러오고, 시큐리티를 이용해 회원가입과 로그인을 만들어보기

저번 글에서 저희가 게시판의 목록을 출력하고, 상세 보기가 가능하고 글을 작성하는 것까지 만들었습니다.비록 편의 기능들이 빠져있는 허술한 웹페이지였지만, 이제 디자인을 가져오면서 편의 기능들을 하나씩 추가하려고 합니다.1. Bootstrap 적용하기 해당 사이트로 이동하게 되면 아래쪽에 Complied CSS and JS 쪽에 Download 버튼이 보이는 것을 볼 수 있습니다. 파일을 다운로드하게 되면 위 사진과 같은 압축 파일을 받으실텐데,해당 압축 파일의 압축을 풀어주세요. 그리고 css 폴더에서 bootstrap.min.css 파일을, js 폴더에서 bootstrap.min.js 파일을 위 사진처럼 드래그 해줍니다.파일은 Copy(복사)로 가져오시면 됩니다. 이렇게 파일을 가져왔으면 이제 사용..

시큐리티를 이용한 로그인의 흐름 정리

로그인 페이지는 /user/login으로 연결.로그인 후, /question/list로 이동하는 것을 확인. 실제로 로그인시 로그인의 정보는 어디서 가져오는가? UserSecurityService에서 로그인 시 입력한 username으로 DB에서 사용자를 찾음없으면 예외가 발생 (로그인 실패 처리)하고 있으면 권한을 부여하여 UserDetails객체로 반환(Spring Security가 내부적으로 이 객체를 사용) UserController에서 로그인 화면을 어떻게 띄우는가실제로 인증 처리는 Security가 담당하고 컨트롤러는 보통 로그인 폼만 보여줌/user/login을 받는 @GetMapping만 존재함.POST는 따로 없고 Spring Security에서 .formLogin().loginPage(..

2. CRUD 게시판 프로젝트 - 글 목록부터 글 상세보기까지.

저번 글에서는 게시판에서 글을 작성하는 것까지 진행했었습니다.이번 글에서는 Read를 맡고 있는 R에 대해서 제작해보려고 합니다.1. 게시판 목록을 띄워보자! 일단 저는 게시판 목록을 만들기 전, 게시판 목록을 표시할 board_list.html을 먼저 만들어뒀습니다. BoardController.java@Controller@RequiredArgsConstructor@RequestMapping("/board")public class BoardController { // 이전 내용 생략하고 // 아래 내용을 추가 @GetMapping("/list") public String getListBoard() { return "board_list"; }} 먼저 @GetMapp..

Spring Boot 27강 - UserRole(회원 역할) 관리 및 MainController(메인 페이지) 분리

회원 역할 Enum(UserRole)으로 관리:ADMIN/USER 구분, 권한에 따른 기능 분리 기반 마련UserSecurityService에서 Role 자동 부여"admin" 계정은 관리자 권한, 그 외는 일반 유저MainController로 메인(/) 페이지 따로 분리이후 홈 화면, 공지사항, 최근글 등 커스터마이즈 가능📌 예제 코드UserRole.javapackage com.mysite.sbb.user;import lombok.Getter;@Getterpublic enum UserRole { ADMIN("ROLE_ADMIN"), USER("ROLE_USER"); private String value; UserRole(String value) { this.value..

반응형