springboot 5

[Java & SpringBoot] Spring REST API설계 방법 - ResponseEntity build하기

Spring MVC에서 REST API로 전환할 때 가장 먼저 마주치는 질문은 단순하다. "뷰 이름 대신 뭘 반환하지?" 이 글은 ResponseEntity와 REST 설계 원칙을 중심으로, 컨트롤러 코드가 어떻게 달라지는지 직접 확인한다. REST가 아닌 기존 MVC 컨트롤러전통적인 Spring MVC 컨트롤러는 서버가 화면까지 만들어서 보내주는 방식이다.// 기존 MVC 방식@Controllerpublic class ArticleController { @GetMapping("/articles") public String list(Model model) { model.addAttribute("articles", articleService.getAll()); retur..

Dev Study/Backend 2026.05.31

[Java & SpringBoot] Spring Boot + MyBatis 동작 원리 — @MapperScan과 namespace가 연결되는 방법

Spring Boot와 MyBatis를 연동할 때, DAO 인터페이스에는 구현체가 없는데도 메서드를 호출하면 SQL이 실행된다. 이 글에서는 그 연결이 언제, 어떻게 체결되는지를 설정 파일부터 요청 흐름까지 끝까지 추적한다. 구현체도 없는 인터페이스가 왜 동작하는가JDBC로 게시글 목록을 가져오는 코드를 먼저 보자.Connection conn = DriverManager.getConnection(url, user, pw);PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM post");ResultSet rs = pstmt.executeQuery();List list = new ArrayList();while (rs.next()) { Pos..

Dev Study/Backend 2026.05.25

[Java & SpringBoot] Filter vs Interceptor 요청 흐름 위치 차이와 로그인 인터셉터 실전 구현

컨트롤러마다 로그인 확인 코드를 붙이던 시절Spring Filter와 Interceptor를 이해하면 컨트롤러에서 반복되는 인증 코드를 제거할 수 있다. 요청이 컨트롤러에 닿기 전에 가로채서 처리하는 두 가지 메커니즘의 차이와 실전 활용법을 정리한다.로그인이 필요한 페이지가 늘어날수록 아래 코드가 컨트롤러마다 반복된다.@GetMapping("/mypage")public String mypage(HttpSession session) { if (session.getAttribute("loginUser") == null) { return "redirect:/login"; } return "mypage";}@GetMapping("/orders")public String orders(..

Dev Study/Backend 2026.05.24

[JAVA & Antigravity] Exception 예외 정리: Try-catch, throws, Exception 커스텀

자바 프로그래밍에서 예외(Exception)는 피해야 할 대상이 아니라, 프로그램이 맞닥뜨린 '정상적이지 않은 상황'에 대한 가장 명확한 소통 방식입니다.흔히 에러가 발생하면 무조건 피하거나 덮어두려는 경향이 있지만, 이는 오히려 시스템의 안정성을 해치는 가장 큰 폭탄을 안고 가는 것과 같습니다.이 글에서는 예외의 통제권이 어떻게 이동하는지와, 개발자가 예외를 대하는 올바른 설계적 고찰에 대해 정리합니다.1. Bad Code: 예외를 삼키는 침묵의 암살자가장 치명적인 설계 결함은 에러가 발생했음에도 불구하고, 이를 아무렇지 않게 넘겨버리는 코드입니다.이러한 패턴을 '예외 먹어버리기(Swallowing Exception)'라고 부르며, 추후 버그의 원인을 찾을 수 없게 만듭니다.// Bad Code: 예외..

Dev Study/Java 2026.03.07

[Java] 절차지향의 한계와 객체지향의 필요성

목표자바의 문법적 요소(Class, Constructor, Static)가 왜 만들어졌는지 코드를 통해 역추적한다. 불편한 코드를 먼저 작성해보고, 이를 개선하는 과정에서 자연스럽게 객체지향의 필요성을 납득하는 것이 목표다.1. 데이터가 따로 노는 문제 (Class의 필요성)쇼핑몰에서 상품 정보를 관리하는 기능을 구현한다고 가정해보자. 클래스를 배우기 전에는 보통 데이터를 배열에 담아서 관리했다.Before: 배열을 이용한 관리public class ShopMain { public static void main(String[] args) { // 상품 이름과 가격을 각각 다른 배열에 저장 String[] productNames = {"Laptop", "Mouse", "Key..

Dev Study/Java 2026.01.12