• [커널아카데미] 백엔드 개발 부트캠프 12기 9주차 - 스프링 수업 시작

    2025. 6. 7.

    by. 고구마달랭이

     

    이번 주 부터 스프링이 시작됐다.
    STS를 설치하고 수업 시간에 DiceController를 만들어봤다.

    랜덤으로 주사위 두 개 굴려서 화면에 이미지 띄워주는 거였는데 정말 다행히 따라갈 수 있었다.

     

    ✅ 컨트롤러

    @Controller    // 1. 원격 프로그램 등록
    public class DiceController {
    
        @RequestMapping("/dice")    // 2. 요청 URL 연결
    
        public String home(Model model) throws IOException {
            int idx1 = (int)(Math.random() * 6) + 1;
            int idx2 = (int)(Math.random() * 6) + 1;
    
            model.addAttribute("idx1", idx1);
            model.addAttribute("idx2", idx2);
    
            return "dice"; // → /WEB-INF/views/dice.jsp로 연결됨
        }
    }
    

    아직 입문이니 만큼 로직은 진짜 간단하다.

    랜덤 숫자 1~6 두 개 뽑아서 model에 담고 dice.jsp한테 넘겨준다.

    요청은 @RequestMapping으로 받고, 화면에 보여줄 jsp는 return으로 지정해주는 구조.

     

    ✅ jsp

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ page session="false" %>
    
    <html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
      <img src='${pageContext.request.contextPath}/resources/dice/dice${idx1}.jpg'>
      <img src='${pageContext.request.contextPath}/resources/dice/dice${idx2}.jpg'>
    </body>
    </html>

    근데 이미지 출력하는 부분에서 막혔었다.

    경로 문제였는데 contextPath 설정을 제대로 안해줘서 이미지가 안나왔었다.

    ${}는 값 가져오는 문법

     

    ✅ 흔히 하는 오류

    1. 이미지 경로 문제
      • 이미지 파일은 반드시 webapp/resources/dice/ 폴더 안에 넣어야 한다.
      • src/main/resources에 넣으면 이미지가 나오지 않는다 ❌
      • 파일명도 규칙에 맞게 (dice1.jpg ~ dice6.jpg) 저장해야 한다.
    2. contextPath를 안 써줌
      • JSP에서 이미지 경로 쓸 때 ${pageContext.request.contextPath}를 꼭 붙여야 한다.
      • 안 붙이면 경로가 꼬여서 이미지가 안 나온다.
    3. JSP 파일 위치 잘못 넣음
      • JSP 파일은 반드시 WEB-INF/views 폴더 안에 넣어야 한다.
      • 다른 위치에 넣으면 return "dice"; 했을 때 JSP를 못 찾는다.
    4. 컨트롤러 메서드 반환값을 안 씀
      • 메서드 반환 타입을 void로 하면 뷰를 못 찾아서 404 오류가 난다.
      • 반드시 return "dice";처럼 JSP 경로를 문자열로 반환해야 한다.
    5. 리턴값에 확장자 .jsp 붙임
      • return "dice.jsp"; 이렇게 쓰면 안 된다 ❌
      • 스프링 설정에 따라 접두사(prefix)와 접미사(suffix)가 붙기 때문에 확장자는 생략해야 한다.
    6. Model 객체에 값 안 넣음
      • 컨트롤러에서 model.addAttribute()를 안 하면 JSP에서 idx1, idx2를 사용할 수 없다.
      • 변수만 만들고 넘겨주는 걸 깜빡하기 쉽다.
    7. @RequestMapping 빠뜨림
      • 메서드에 @RequestMapping("/dice")를 안 붙이면 URL 요청이 메서드와 연결되지 않는다.
      • 스프링은 이 어노테이션으로 URL과 메서드를 매핑한다.

    댓글