본문 바로가기

Spring16

[Spring] EL/JSTL에서 list contains - 리스트에 값이 포함되는지 알고 싶을 때 목차 EL/JSTL 태그를 사용할 때, 리스트에 값이 포함되는지 판단해야 하는 경우가 있습니다. 자바코드로는 list.contains() 메소드를 사용하면 되는데, EL/JSTL 태그로는 어떻게 판단할까요? 몇 가지 방법이 있는데 저는 두 가지를 살펴보도록 하겠습니다. Controller에서 list와 list2를 만들어 jsp 페이지로 전달합니다. @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Model model) { List list = new ArrayList(); list.add(1); list.add(2); list.add(3); model.addAttribute("list", list); List lis.. 2022. 9. 26.
[Spring] @RequestBody, @ResponseBody로 JSON 전송하기 목차 클라이언트에서 서버로 HTTP 요청(Request) 메시지를 보내면 서버에서는 클라이언트로 HTTP 응답(Response) 메시지를 보냅니다. HTTP Request와 Response 메시지에는 body, 즉 본문이 존재하는데요, 스프링이 제공하는 @RequestBody, @ResponseBody 어노테이션을 이용하면 body에 JSON 데이터를 담아 데이터를 손쉽게 주고 받을 수 있습니다. 라이브러리 추가 자바에서 JSON 데이터에 대한 처리를 하기 위해 라이브러리를 추가합니다. 대표적으로 Jackson, Gson, SimpleJSON 등의 라이브러리가 있는데, 저는 Jackson 라이브러리를 사용하겠습니다. com.fasterxml.jackson.core jackson-databind 2.13... 2022. 9. 9.
[Spring] RedirectAttributes - 리다이렉트 데이터 전달하기 목차 redirect와 forward 스프링 컨테이너 메소드의 리턴값으로 redirect: 또는 forward: 라는 prefix를 붙여주면 UrlBasedViewResolver가 이를 해석하여 해당 URL 주소로 리다이렉트 또는 포워드 요청이 가게 됩니다. 그런데 forward와 달리 redirect의 경우, 지정된 주소로 새로운 HTTP GET 요청이 시작되기 때문에 실행 이전에 수행된 모델 데이터가 소멸합니다. 따라서 redirect를 할 때는 Request 객체나 Model 객체에 데이터를 담아도 전달되지 않습니다. 다만 기본적으로 리다이렉트시 Model 객체의 속성은 URL 주소의 쿼리 스트링으로 추가되어 전달됩니다. @RequestMapping("/main") public String main.. 2022. 9. 5.
[Spring] 컨트롤러의 리턴 타입 목차 String 뷰 페이지 이름으로서, ViewResolver에 의해 해석됩니다. 프로젝트를 생성하면 기본적으로 servlet-context.xml에 다음과 같이 ViewResolver가 등록됩니다. prefix로 폴더 경로를 지정하고 suffix로 .jps를 붙여 뷰 페이지 지정을 편리하게 합니다. 따라서 다음의 코드는 /WEB-INF/views/main.jsp 뷰 페이지를 요청하게 됩니다. @RequestMapping("/") public String main() { return "main"; } Redirecting redirect: 라는 특별한 prefix를 붙이면 UrlBasedViewResolver가 이를 redirect가 필요하다는 지시로 인식하여 해당 주소로 재요청이 가게 됩니다. 여기에.. 2022. 9. 4.
[Spring] Model, ModelAndView, @ModelAttribute - 컨트롤러에서 뷰로 데이터 전송하기 목차 컨트롤러에서 뷰 페이지로 데이터를 전달하는 몇 가지 방법을 알아보겠습니다. Model / ModelMap / Map 컨트롤러의 메소드를 작성할 때 Model이라는 타입을 파라미터로 지정할 수 있습니다. Model 객체는 컨트롤러에서 생성된 데이터를 담아서 전달하는 역할을 하는 존재입니다. 메소드의 파라미터에 Model 타입이 지정되면 스프링은 특별하게 Model 타입 객체를 만들어서 메소드에 주입하게 됩니다. ModelMap, Map도 Model과 동일한 기능을 수행합니다. Model은 Servlet에서의 request.setAttribute()와 유사한 역할을 합니다. 다음은 Servlet에서 데이터를 Request 객체에 담아 뷰 페이지로 전달하는 코드입니다. request.setAttribut.. 2022. 9. 3.
[Spring] @RequestParam - 요청 파라미터 데이터 파싱하기 목차 @RequestParam @RequestParam 어노테이션을 이용하면 Servlet 요청 파라미터(ex. 쿼리 파라미터, form 데이터)를 컨트롤러 메소드의 인자로 바인딩할 수 있습니다. 스프링 프레임워크를 사용할 때 가장 편리한 기능 중 하나가 파라미터를 자동으로 수집하는 것입니다. 매번 request.getParameter로 데이터를 파싱하던 노동에서 벗어날 수 있게 됩니다. @RequestParam(name = "name") 파라미터 name을 지정하여 파라미터로 전달된 데이터들 중 지정한 이름의 데이터를 파싱합니다. 매개변수로 지정한 변수의 타입이 String이 아닌 경우 자동으로 형변환이 이루어집니다. @RequestMapping(value = "/login1") public Strin.. 2022. 9. 2.
[Spring] @RequestMapping - 요청 주소 매핑하기 목차 @RequestMapping @Controller 또는 @RestController 어노테이션으로 등록된 클래스는 자동으로 스프링 빈으로 등록이 되어 매핑됩니다. 하지만 사용자가 요청한 URL에 매핑하기 위해서는 빈의 매핑 정보를 정의해야 합니다. 이때 사용하는 것이 @RequestMapping 어노테이션입니다. @RequestMapping 어노테이션은 Spring MVC Framework의 RequestHandlerMappingHandler 인터페이스를 어노테이션화한 것으로서, 사용자의 요청을 스프링 Controller 메소드 또는 클래스에 매핑하기 위해 사용됩니다. 클래스 레벨에 사용하면 클래스 내 모든 메소드에 공유되는 매핑 주소로 설정할 수 있으며, 메소드 레벨에 사용하면 특정한 매핑으로 범.. 2022. 9. 1.
[Spring] 스프링 MVC의 기본 구조 목차 MVC 패턴이란? MVC 패턴은 어플리케이션을 세 가지 영역, 즉 모델(Model), 뷰(View), 컨트롤러(Controller)로 구분하여 작업을 분리하는 웹 어플리케이션 개발 방법론으로서, 서로 간의 결합도를 최소화하고 유지보수성을 높이며 개발의 효율성을 향상시킵니다. 사용자가 입력을 담당하는 View를 통해 요청을 보내면 해당 요청을 Controller가 받고, Controller는 Model을 통해 데이터를 가져온 후, 해당 데이터를 바탕으로 출력을 담당하는 View를 제어해서 사용자에게 전달합니다. Model : 어플리케이션이 무엇을 할 것인지 정의합니다. 내부 Business Login을 처리하기 위한 역할을 합니다. 즉, 데이터 저장소와 연동하여 사용자가 입력한 데이터나 사용자에게 출.. 2022. 8. 31.
[Spring] @Transactional 기본 사용법 목차 트랜잭션 (Transaction) 트랜잭션(Transaction)은 더 이상 쪼개질 수 없는 하나의 작업 단위을 의미합니다. 예를 들어 '계좌 이체'라는 행위를 따져보면, '출금'과 '입금'이라는 각각의 작업이 하나의 단위를 이루고 있습니다. 이때 출금은 정상적으로 처리되었는데 입금하는 과정에서 예외가 발생하는 경우를 생각해 볼 수 있습니다. 이미 계좌에서 돈이 빠져나갔는데 상대방의 계좌에 돈이 입금되지 않는다면 큰 문제가 될 것입니다. 이 때문에 출금과 입금을 하나의 트랜잭션으로 관리하여 문제가 발생한 경우 모든 작업을 rollback하는 것이 필요합니다. 이처럼 여러 작업을 진행하다가 문제가 생기면 모든 작업을 이전 상태로 rollback하기 위해 사용되는 것이 트랜잭션입니다. ACID 원칙 원.. 2022. 8. 27.
[Spring] DB 연동 - MyBatis 목차 MyBatis 란? MyBatis(마이바티스)는 SQL 매핑(mapping) 프레임워크입니다. MyBatis는 JDBC로 처리하는 상당 부분의 코드와 파라미터 설정 및 결과 매핑을 대신해 줌으로써, 개발자가 복잡한 코드 작업을 피하고 좀 더 빠르게 SQL을 처리할 수 있도록 도와줍니다. JDBC의 기본적인 프로그래밍 구조와 비교했을 때 MyBatis의 장점은 다음과 같습니다. JDBC MyBatis Connection 직접 맺고 close() MyBatis 내부적으로 Connection 자동으로 맺고 close() PreparedStatement 직접 생성 및 처리 MyBatis 내부적으로 PreparedStatement 생성 및 처리 PreparedStatement의 setXXX() 등 작업 직접.. 2022. 8. 27.