[스프링부트 #19-1] SSR에서 RestAPI로 전환

도경원's avatar
Aug 25, 2025
[스프링부트 #19-1] SSR에서 RestAPI로 전환

1. templates 폴더 내부 삭제

 

2. 테스트 코드 삭제

 

3. build.gradle 머스태치 삭제

 

4. 머스태치 세팅 삭제

notion image

5. app 패키지 만들기

notion image
 

6. core 패키지 만들기

notion image
 

7. Resp 유틸만들기

package com.mtcoding.springv1.core.util; import lombok.AllArgsConstructor; import lombok.Data; import org.springframework.http.HttpStatus; @AllArgsConstructor @Data public class Resp<T> { private Integer status; private String msg; private T body; // ResponseEntity 형태로 바로 리턴 (성공) public static <B> Resp<B> ok(B body) { return new Resp<>(200, "성공", body); } // ResponseEntity 형태로 바로 리턴 (실패) public static Resp<?> fail(HttpStatus status, String msg) { return new Resp<>(status.value(), msg, null); } public static Resp<?> fail(Integer status, String msg) { // 스프링 도움 안받을때!! Resp<?> resp = new Resp<>(status, msg, null); return resp; } }
 

8. 오류잡기

(import package 오류)
 

9. 마지막 샘플테스트

로그아웃 컨트롤러만 수정함
notion image
package com.mtcoding.springv1.app; import com.mtcoding.springv1.app.dto.JoinRequestDTO; import com.mtcoding.springv1.app.dto.LoginRequestDTO; import com.mtcoding.springv1.core.util.Resp; import com.mtcoding.springv1.domain.user.User; import com.mtcoding.springv1.domain.user.UserService; import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RequestMapping("/api") @RequiredArgsConstructor @RestController public class UserApiController { private final UserService userService; private final HttpSession session; // IoC에 등록되어 있음. @GetMapping("/logout") public Resp logout() { session.invalidate(); //session.removeAttribute("sessionUser"); return Resp.ok(null); // 오브젝트를 리턴하면 json으로 컨버팅해서 리턴해줌 } @GetMapping("/join-form") public String joinForm() { return "user/join-form"; } @GetMapping("/login-form") public String loginForm() { return "user/login-form"; } @PostMapping("/join") public String join(JoinRequestDTO reqDTO) { userService.회원가입(reqDTO); return "redirect:/login-form"; } @PostMapping("/login") // 조회인데, Post는 로그인 밖에 없다. 예외 (URL에 쿼리스트링으로 정보 전달을 안하려고) public String login(LoginRequestDTO reqDTO) { User sessionUser = userService.로그인(reqDTO); session.setAttribute("sessionUser", sessionUser); return "redirect:/board"; } }
 
Share article

Gyeongwon's blog