📝 아키텍쳐 구조

📝 학습 내용
- Spring Boot로 회원가입/로그인/수정/삭제 CRUD 기능 구현
- MVC 패턴과 Controller-Service-Repository 계층 구조 실습
- Thymeleaf 템플릿 엔진과 AJAX 비동기 통신 구현
- HttpSession 기반 로그인 상태 관리
- 백엔드: Spring Boot 3.5.3, Java 17, JPA/Hibernate
- 프론트엔드: Thymeleaf, jQuery, HTML/JavaScript
- DB: MySQL
- 빌드: Gradle
📝 작동 결과
회원가입, 로그인, 목록조회, 상세조회, 수정, 삭제, 로그아웃, 이메일 중복검사가 모두 작동하는 완전한 CRUD 시스템
📝 코드
package com.codingrecipe.member.controller;
import com.codingrecipe.member.dto.MemberDTO;
import com.codingrecipe.member.service.MemberService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpSession;
import java.util.List;
@Controller
@RequiredArgsConstructor
public class MemberController {
private final MemberService memberService;
@GetMapping("/member/save") //회원가입페이지요청
public String saveForm() {
return "save"; //회원가입페이지이동
}
@PostMapping("/member/save") //회원가입정보입력
public String save(@ModelAttribute MemberDTO memberDTO) { //입력값자동DTO매핑
System.out.println("MemberController.save"); //로그출력
System.out.println("memberDTO = " + memberDTO); //입력값확인
memberService.save(memberDTO);
return "login";
}
@GetMapping("/member/login") //로그인페이지요청
public String loginForm() {
return "login";
}
@PostMapping("/member/login") //로그인정보입력
public String login(@ModelAttribute MemberDTO memberDTO, HttpSession session) { //DTO매핑(회원정보), null 세션(로그인유지용임시정보)
MemberDTO loginResult = memberService.login(memberDTO); //로그인처리
if (loginResult != null) { //로그인성공
session.setAttribute("loginEmail", loginResult.getMemberEmail()); //세션저장
return "main";
} else { //실패
return "login";
}
}
@GetMapping("/member/") //전체회원목록요청
public String findAll(Model model) { //데이터전달용Model주입
List<MemberDTO> memberDTOList = memberService.findAll(); //전체회원조회처리
model.addAttribute("memberList", memberDTOList); //목록데이터전달
return "list";
}
@GetMapping("/member/{id}") //회원상세정보요청
public String findById(@PathVariable Long id, Model model) { //경로변수추출 데이터전달용Model주입
MemberDTO memberDTO = memberService.findById(id); //회원정보조회처리
model.addAttribute("member", memberDTO); //상세정보전달
return "detail";
}
@GetMapping("/member/update") //회원정보수정페이지요청 (∴ 기존 정보 제공)
public String updateForm(HttpSession session, Model model) {
String myEmail = (String) session.getAttribute("loginEmail"); //이메일추출
MemberDTO memberDTO = memberService.updateForm(myEmail); //db정보에 있는지 확인 및 회원정보 추출
model.addAttribute("updateMember", memberDTO); //회원정보제공
return "update";
}
@PostMapping("/member/update") //회원정보수정입력
public String update(@ModelAttribute MemberDTO memberDTO) {
memberService.update(memberDTO); //회원정보수정처리
return "redirect:/member/" + memberDTO.getId();
}
@GetMapping("/member/delete/{id}") //회원삭제요청
public String deleteById(@PathVariable Long id) {
memberService.deleteById(id);
return "redirect:/member/";
}
@GetMapping("/member/logout") //로그아웃요청
public String logout(HttpSession session) {
session.invalidate(); //세션삭제
return "index"; //메인페이지이동
}
@PostMapping("/member/email-check") //이메일중복검사요청
public @ResponseBody String emailCheck(@RequestParam("memberEmail") String memberEmail) { //JSON응답반환 파라미터추출
System.out.println("memberEmail = " + memberEmail); //입력값확인
String checkResult = memberService.emailCheck(memberEmail); //중복검사처리
return checkResult;
}
}
🏷️ 기술 스택
Spring Boot, Spring MVC, Thymeleaf, Lombok, HttpSession, Ajax
🔍 핵심 포인트 정리
- @Controller: Spring MVC에서 웹 요청을 처리하는 컨트롤러 클래스로 지정하는 어노테이션
- @RequiredArgsConstructor: Lombok에서 final 필드들의 생성자를 자동으로 생성해주는 어노테이션
- @GetMapping/@PostMapping: HTTP GET/POST 요청을 특정 URL과 매핑하는 Spring 어노테이션
- @ModelAttribute: HTML 폼 데이터를 자동으로 객체에 바인딩해주는 Spring 어노테이션
- @PathVariable: URL 경로의 변수 값을 메서드 파라미터로 바인딩하는 Spring 어노테이션
- @ResponseBody: 메서드 반환값을 HTTP 응답 본문으로 직접 전송하는 Spring 어노테이션
- HttpSession: 사용자 로그인 상태를 유지하기 위한 세션 관리 객체
- Model: 컨트롤러에서 뷰로 데이터를 전달하기 위한 Spring MVC 객체
📅 Weekly Goals (8/1 - 8/7)
🎯 Member Management Project
ㆍ 진행률 : 14/14 파일 완료 ████████████ 100%
🧮 알고리즘
ㆍ BFS 문제 : 백준 1926번 그림 문제 코드 완전 암기
"작은 진전이라도 매일 쌓이면 큰 변화가 된다"
'취준 > 일기' 카테고리의 다른 글
| 📝 Dev Log | 2025.08.06~13 - 개발자 커리어 정보 사이트 만들기 : (2) | 2025.08.06 |
|---|---|
| 📝 Dev Log | 2025.08.01 - 회원관리 프로젝트 분석 - save.html (2) | 2025.08.01 |
| 25.7.31 리뷰 (4) | 2025.08.01 |
| 25.7.30 리뷰 (5) | 2025.07.30 |
| 25.7.29 리뷰 (10) | 2025.07.30 |