DevLog/실습코드

💻 [7주 차 실습 코드 모음 – MVC 구조 & CRUD 흐름]

ny1114 2025. 4. 10.

7주 차는 Spring Boot를 활용한 웹 애플리케이션의 기본 구조를 학습하며
Controller, Service, DAO, DTO 계층을 직접 설계하고 구현해보는 실습 중심의 한 주였다.
단순 데이터 처리에서 벗어나 전체 애플리케이션의 흐름을 이해하는 데 초점을 맞췄다.


📂 DTO 클래스 (데이터 전달 객체)

@Data
public class BoardDTO {
    private int id;
    private String title;
    private String content;
    private String writer;
}

📌 계층 간 데이터를 효율적으로 전달하기 위한 클래스
📌 @Data 애너테이션으로 getter, setter, toString, 생성자 자동 생성

 

🧱 Controller – 요청 처리

@Controller
public class BoardController {

    @Autowired
    private BoardService boardService;

    @GetMapping("/list")
    public String list(Model model) {
        model.addAttribute("boards", boardService.getAllBoards());
        return "list";
    }

    @GetMapping("/write")
    public String writeForm() {
        return "write";
    }

    @PostMapping("/write")
    public String write(BoardDTO dto) {
        boardService.save(dto);
        return "redirect:/list";
    }
}

📌 사용자의 요청을 받아 처리하고 View로 응답을 전달
📌 POST 방식으로 사용자 입력을 수신하고 저장 후 목록 페이지로 리다이렉트

 

🔧 Service – 비즈니스 로직 처리

@Service
public class BoardService {

    @Autowired
    private BoardDAO boardDAO;

    public List<BoardDTO> getAllBoards() {
        return boardDAO.findAll();
    }

    public void save(BoardDTO dto) {
        boardDAO.insert(dto);
    }
}

📌 Controller와 DAO 사이에서 로직을 중개
📌 데이터 가공, 조건 분기 등의 핵심 로직이 들어갈 수 있는 계층

 

🗃️ DAO – DB 접근 계층

@Repository
public class BoardDAO {

    @Autowired
    private JdbcTemplate jdbc;

    public List<BoardDTO> findAll() {
        String sql = "SELECT * FROM board";
        return jdbc.query(sql, new BeanPropertyRowMapper<>(BoardDTO.class));
    }

    public void insert(BoardDTO dto) {
        String sql = "INSERT INTO board (title, content, writer) VALUES (?, ?, ?)";
        jdbc.update(sql, dto.getTitle(), dto.getContent(), dto.getWriter());
    }
}

📌 DB 쿼리 실행을 전담하는 클래스
📌 SQL 구문과 DTO 간의 매핑을 통해 데이터 입출력을 구현


📝 마무리

7주 차 실습은 단순한 웹 개발을 넘어
“웹 서비스 구조를 이해하고 직접 설계하는 경험”으로 이어졌다.
MVC 패턴이 실제로 어떻게 동작하는지,
각 계층의 책임과 역할을 실습으로 확인할 수 있었고,
내가 만든 로직이 DB에 저장되고 화면으로 출력되는 전 과정을 경험하며
백엔드 개발자다운 감각이 점점 자라고 있음을 느꼈다.

댓글