inblog logo
|
Gyeongwon's blog
    Springboot

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

    도경원's avatar
    도경원
    Aug 25, 2025
    [스프링부트 #19-1] SSR에서 RestAPI로 전환
    Contents
    1. templates 폴더 내부 삭제2. 테스트 코드 삭제3. build.gradle 머스태치 삭제4. 머스태치 세팅 삭제5. app 패키지 만들기6. core 패키지 만들기7. Resp 유틸만들기8. 오류잡기9. 마지막 샘플테스트

    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
    Contents
    1. templates 폴더 내부 삭제2. 테스트 코드 삭제3. build.gradle 머스태치 삭제4. 머스태치 세팅 삭제5. app 패키지 만들기6. core 패키지 만들기7. Resp 유틸만들기8. 오류잡기9. 마지막 샘플테스트

    Gyeongwon's blog

    RSS·Powered by Inblog