스프링 프레임워크에서 Redirect, Request, Response 처리 및 서비스 계층 구현

2024. 11. 9. 23:47·🗄️ Backend/Spring

Spring Framework는 다양한 웹 애플리케이션 개발을 지원하는 강력한 도구입니다.

특히, @Controller, @Service, @Repository 등의 어노테이션을 사용하여 웹 애플리케이션의 각 계층을 명확하게 구분할 수 있습니다.

이 글에서는 Spring의 Redirect, Request, Response 처리 방법과 서비스 계층 구현에 대해 깊이 있게 다뤄보고, 이를 실제 예시와 함께 설명합니다.

 


 

1. Spring에서 Controller 및 요청 처리

Spring MVC에서는 @Controller 어노테이션을 사용하여 웹 애플리케이션의 요청을 처리하는 컨트롤러 클래스를 정의합니다. 이 클래스는 클라이언트의 요청을 받고, 적절한 서비스 로직을 처리한 후 뷰(View)로 데이터를 전달하는 역할을 합니다.

예시: ScoreController 클래스

@Controller
@RequestMapping("/service")
public class ScoreController {

    @Autowired
    @Qualifier("x")
    private ScoreService scoreService;

    @RequestMapping("/scoreList")
    public String scoreList(Model model) {
        model.addAttribute("list", scoreService.getScore());
        return "service/scoreList";
    }

    @RequestMapping("/scoreRegist")
    public String scoreRegist() {
        return "service/scoreRegist";
    }

    @RequestMapping("/scoreResult")
    public String scoreResult() {
        return "service/scoreResult";
    }

    @RequestMapping("/scoreForm")
    public String scoreForm(ScoreVO vo) {
        scoreService.regist(vo);
        return "redirect:/service/scoreList";
    }
}

설명:

  • @Controller: 이 클래스가 Spring MVC에서 HTTP 요청을 처리하는 컨트롤러임을 나타냅니다.
  • @RequestMapping("/service"): 클래스 레벨에서 /service로 시작하는 요청을 처리합니다.
  • @Autowired와 @Qualifier("x"): ScoreService를 주입받습니다. @Qualifier는 빈 이름을 지정하는데 사용됩니다.
  • 각 메서드는 Model 객체를 통해 데이터를 전달하거나, 리다이렉트(redirect:)를 통해 다른 URL로 이동하는 기능을 제공합니다.

핵심 포인트:

  • @RequestMapping 어노테이션으로 경로와 메서드를 매핑하여 URL을 처리합니다.
  • redirect:는 요청 후 다른 경로로 리다이렉트할 때 사용됩니다.

 


 

2. 서비스 계층과 의존성 주입

Spring에서는 서비스 계층을 @Service 어노테이션으로 정의하고, 해당 서비스가 필요한 DAO(Data Access Object)나 다른 컴포넌트를 @Autowired 및 @Qualifier를 사용하여 주입받습니다.

예시: ScoreServiceImpl 클래스

@Service("x")
public class ScoreServiceImpl implements ScoreService {

    @Autowired
    @Qualifier("y")
    private ScoreDAO scoreDAO;

    @Override
    public void regist(ScoreVO vo) {
        System.out.println("Service layer: " + vo);
        scoreDAO.regist(vo);
    }

    @Override
    public ArrayList<ScoreVO> getScore() {
        return scoreDAO.getScore();
    }
}

설명:

  • @Service("x"): ScoreServiceImpl은 서비스 빈으로 등록되며, 빈 이름을 "x"로 지정합니다.
  • @Autowired와 @Qualifier("y"): ScoreDAO의 빈을 주입받을 때, "y"라는 이름을 가진 빈을 선택합니다.

핵심 포인트:

  • @Autowired: Spring의 의존성 주입 기능을 통해 다른 빈을 자동으로 주입받습니다.
  • @Qualifier: 여러 개의 빈이 존재할 경우, 특정 빈을 지정하여 주입할 수 있습니다.

 


 

3. DAO 계층: 데이터 접근 로직

DAO 계층은 데이터베이스와 상호작용하여 데이터를 저장하거나 조회하는 역할을 합니다. Spring에서는 @Repository 어노테이션을 사용하여 DAO 클래스를 정의하고, 이를 Spring 컨텍스트에 빈으로 등록합니다.

예시: ScoreDAOImpl 클래스

@Repository("y")
public class ScoreDAOImpl implements ScoreDAO {

    private List<ScoreVO> list = new ArrayList<>();

    @Override
    public void regist(ScoreVO vo) {
        list.add(vo);
    }

    @Override
    public ArrayList<ScoreVO> getScore() {
        return new ArrayList<>(list);
    }
}

설명:

  • @Repository("y"): ScoreDAOImpl은 ScoreDAO 인터페이스를 구현한 DAO 클래스로, 빈 이름을 "y"로 지정합니다.
  • regist 메서드: ScoreVO 객체를 리스트에 저장합니다.
  • getScore 메서드: 저장된 점수 목록을 반환합니다.

핵심 포인트:

  • @Repository: 데이터베이스와의 상호작용을 담당하는 빈을 정의합니다.
  • Spring은 @Repository 어노테이션을 통해 데이터베이스 관련 예외를 자동으로 변환해줍니다.

4. Spring에서 요청과 응답 처리: @RequestParam, HttpServletRequest

Spring에서는 HTTP 요청 파라미터를 다양한 방식으로 처리할 수 있습니다. @RequestParam, @ModelAttribute, HttpServletRequest 등을 사용하여 파라미터를 매핑하고, 데이터를 처리합니다.

예시: RequestController 클래스

@Controller
@RequestMapping("/request")
public class RequestController {

    @RequestMapping("/req_ex01")
    public String ex01() {
        return "request/req_ex01";
    }

    @RequestMapping("/param")
    public void param(HttpServletRequest request) {
        String id = request.getParameter("id");
        String pw = request.getParameter("pw");
        System.out.println("id: " + id + ", pw: " + pw);
    }

    @RequestMapping("/param2")
    public String param2(@RequestParam("id") String id, 
                         @RequestParam("pw") String pw) {
        System.out.println("id: " + id + ", pw: " + pw);
        return "request/req_ex02";
    }
}

설명:

  • HttpServletRequest: 요청 파라미터를 직접 가져와 처리하는 방법입니다.
  • @RequestParam: 특정 파라미터를 메서드 인자로 매핑하여 처리하는 방법입니다.

핵심 포인트:

  • @RequestParam을 사용하면 요청 파라미터를 메서드 인자로 직접 매핑할 수 있습니다.
  • HttpServletRequest를 사용하면 더 세밀하게 요청 파라미터를 제어할 수 있습니다.

5. 리다이렉트와 RedirectAttributes

Spring에서는 요청을 처리한 후 다른 경로로 리다이렉트할 수 있습니다. 리다이렉트를 할 때는 RedirectAttributes를 사용하여 데이터를 전달할 수 있습니다.

예시: RedirectController 클래스

@Controller
@RequestMapping("/response")
public class ResponseController {

    @RequestMapping("/loginForm")
    public String loginForm() {
        return "response/loginForm";
    }

    @RequestMapping("/loginFormSubmit")
    public String loginFormSubmit(MemberVO vo, RedirectAttributes ra) {
        if (vo.getId().equals("admin") && vo.getPassword().equals("1234")) {
            return "redirect:/home";
        } else {
            ra.addFlashAttribute("error", "Invalid credentials");
            return "redirect:/response/loginForm";
        }
    }
}

설명:

  • RedirectAttributes: 리다이렉트 후 데이터를 전달하는데 사용됩니다.
  • addFlashAttribute: 데이터를 일시적으로 저장하여 리다이렉트 후 뷰에서 접근할 수 있도록 합니다.

핵심 포인트:

  • RedirectAttributes는 리다이렉트 후, 메시지나 데이터를 전달할 수 있게 도와줍니다.
  • addFlashAttribute: 리다이렉트가 일어난 후에도 데이터를 일시적으로 유지할 수 있습니다.

 


 

Spring Framework는 Request, Response, Redirect 처리를 효율적으로 지원하며, 서비스 계층과 DAO 계층을 명확하게 분리하여 개발할 수 있도록 돕습니다. 이 포스팅에서 다룬 @Controller, @Service, @Repository 등의 어노테이션은 각 계층의 역할을 명확하게 정의하고, 의존성 주입을 통해 서로 다른 계층 간의 연동을 원활하게 처리할 수 있게 합니다.

'🗄️ Backend > Spring' 카테고리의 다른 글

Spring Boot 아키텍처 : Entity, DTO, Repository, Service, Controller 흐름과 활용  (1) 2025.01.28
SpringBoot 비동기(Async) 처리  (6) 2025.01.17
Spring Boot 기초: 웹 애플리케이션 설정  (0) 2024.11.10
HikariCP, MyBatis를 활용한 데이터베이스 연결 풀 설정 및 최적화  (1) 2024.11.10
스프링 프레임워크(Spring Framework) 기본 개념과 활용  (3) 2024.11.09
'🗄️ Backend/Spring' 카테고리의 다른 글
  • SpringBoot 비동기(Async) 처리
  • Spring Boot 기초: 웹 애플리케이션 설정
  • HikariCP, MyBatis를 활용한 데이터베이스 연결 풀 설정 및 최적화
  • 스프링 프레임워크(Spring Framework) 기본 개념과 활용
hjwjo
hjwjo
백엔드 및 풀스택 개발에 관심 있는 초보 개발자의 개발 블로그입니다.
  • hjwjo
    Jeongwoo's Devlog
    hjwjo
  • 전체
    오늘
    어제
    • Devlog
      • 🗄️ Backend
        • Java
        • Spring
        • JPA
        • SQL
        • JSP
        • AWS
        • GCP
        • Linux
        • GitHub
        • ML
        • Security
      • 🖥️ Frontend
        • React
        • CSS
      • 🏅 Project
        • Hackathon
        • Team Project
      • 📊 Algorithm
        • BOJ
      • 📜 Certs
        • ADsP
        • SQLD
        • 정보처리기사
      • 📖
        • JavaScript
      • 일상
        • 면접후기
  • 블로그 메뉴

    • 홈
    • Devlog
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    http
    Spring
    java기초
    AWS
    스프링
    정보처리기사
    GCP
    데이터베이스
    ADsP
    백엔드
    springboot
    SQL
    jsp
    java
    DML
    자바
    백준
    정처기
    쿼리
    스프링부트
  • 최근 댓글

  • 최근 글

hjwjo
스프링 프레임워크에서 Redirect, Request, Response 처리 및 서비스 계층 구현
상단으로

티스토리툴바