메인 페이지에서 로그인 버튼을 누르면 로그인 폼만 나오는 게 아니라 헤더나 어사이드 부분은 그대로 유지하되 메인 부분만 로그인 창으로 변경되게 하고 싶었다. 이를 위해서는 두 가지 방법을 사용할 수 있다.

 

JavaScript 및 AJAX 사용 

로그인 버튼 클릭 시 JavaScript를 사용하여 AJAX 요청을 보내고 서버에서 로그인 폼을 받아와 메인 페이지의 특정 부분에 동적으로 추가한다.

 

이러한 방식의 문제점은 html의 요소를 문자로 다루기 때문에 홑따옴표와 쌍따옴표가 너저분하게 깔려있어서 알아보기도 힘들고 코딩하기는 더더욱힘들며 그 여파로 유지보수가 굉장히 힘들다라는 단점이 있다. 이 스파게티 소스는 종지부에는 본인이 만든 것도 헷갈리게 되는 현상이 발생한다.

 

서버 측 템플릿 이용

Spring MVC 또는 Thymeleaf와 같은 서버 측 템플릿 엔진을 사용해 메인 페이지를 생성할 때, 메인 페이지와 로그인 폼을 포함한 다른 페이지를 따로 생성하고, 로그인 버튼을 누를 때만 해당 부분을 로드하여 메인 페이지에 추가할 수 있다.

 

 

참고 페이지(+템플릿 사용의 자세한 설명)

https://stir.tistory.com/316

 

 

 

Ajax(Asynchronous JavaScript and XML)란?


 

Ajax는 비동기적으로 웹 서버와 브라우저 간에 데이터를 교환하기 위한 기술이다. 이 기술은 웹 페이지를 다시 로드하지 않고도 동적으로 데이터를 가져오거나 전송할 수 있게 해준다.

 

*비동기 방식이란?

웹페이지를 리로드 하지 않고 데이터를 불러오는 방식이다. 비동기 방식을 이용하면 필요한 데이터만 불러올 수 있기 때문에 불필요한 리소스 낭비를 줄일 수 있다.

 

Ajax는 XMLHttpRequest 객체를 통해 서버에 request 한다.

JSON이나 XML 형태로 필요한 데이터만 받아 갱신하기 때문에 그만큼 자원과 시간을 아낄 수 있다.

 

장점

  • Ajax 요청은 비동기적으로 발생하기 때문에 요청이 완료될 때까지 기다리지 않고 처리가 가능하다.
  • 웹 페이지가 다시 로드되지 않고도 데이터를 비동기적으로 가져와 화면을 업데이트 할 수 있으므로 빠른 상호 작용이 가능하다.
  • 전체 페이지를 다시 로드할 필요가 없어 서버 부하를 줄일 수 있다.

단점

  • 브라우저와 서버 간 데이터를 주고받기 때문에 보안상 문제가 발생할 수 있다. 사용자 입력을 서버로 보내는 경우 데이터 유효성을 검증하고 보안을 강화해야 한다.
  • 연속으로 데이터 요청 시 서버 과부하가 발생할 수 있다.
  • 일부만 동적으로 업데이트되기 때문에 검색 엔진이 페이지의 전체 내용을 색인인하기 어려울 수 있다.

작동순서

  1. 웹 페이지에서 JavaScript를 사용하여 XMLHttpRequest 객체를 생성
  2. XMLHttpRequest 객체를 사용하여 서버에 비동기식 요청 전송
  3. 서버는 요청을 처리하고, 처리 결과를 웹페이지로 재전송
  4. 웹 페이지에서 JavaScript를 사용하여 처리 결과를 받아, 페이지의 특정 부분을 업데이트

Ajax 문법 (JQuery 사용)

        $.ajax({    
        
           url      : "/board/getBoardList",
           data     : $("#boardForm").serialize(),
           dataType : "JSON",
           cache    : false,
           async    : true,
           type     : "POST",    
           success  : function(obj) {
                getBoardListCallback(obj);                
            },           
           error    : function(xhr, status, error) {}
            
         });
    }

 

  • url : Ajax로 요청할 대상 URL 지정
  • data : 요청에 포함될 데이터 지정
  • dataType : 서버에 반환되는 데이터 타입 지정
  • cache : 요청 결과를 캐시할지 여부
  • async : 요청을 비동기적으로 처리할지 여부
  • type : Ajax 요청의 HTTP 메서드 지정. GET 또는 POST 지정
  • success : Ajax 요청 성공 시 호출될 콜백 함수 지정
  • error(xhr, status, error) : Ajax 요청 실패 시 호출될 콜백 함수 지정

 

 

 

자세한 설명 (+AJAX란, JQuery-Ajax 사용법 등)

https://mundol-colynn.tistory.com/75

MessageConverter 정의 및 종류


 

정의

Spring framework에서 HTTP 요청 본문과 응답 본문을 java 객체로 변환하고 역으로 변환하는 역할을 담당하는 컴포넌트이다.

 

Spring MVC에서는 HTTP 요청이나 응답의 본문을 객체로 변환하거나, 객체를 HTTP 메시지로 변환하는데 사용된다.

주로 RESTful 웹 서비스에서 JSON이나 XML과 같은 형식의 데이터를 주고받을 때 사용한다.

 

@ResponseBody //응답
@RequestMapping(value="/hello", method=RequestMethod.POST)
public String hello(@RequestBody String param){ //요청
	return "result";
 }

 

위와 같이 어노테이션을 하게 되면 스프링은 messageConverter를 사용해 HTTP 요청이나 응답을 메세지로 변환하게 된다. 즉, 위처럼 파라미터 부분에 @RequestBody를 입력할 경우 파라미터 타입에 맞는(String) 메세지 컨버터를 선택한 뒤 HTTP 요청 본문을 통째로 메세지로 변환하여 파라미터에 바인딩하는 것이다.

 

*바인딩이란?

사용자가 웹 페이지의 폼에 입력한 데이터를 서버로 보낼 때, Spring MVC는 이 데이터를 컨트롤러의 메서드에 매개변수로 바인딩하여 처리한다. 이렇게 폼에서 입력한 데이터를 컨트롤러의 메서드에 매개변수로 바인딩하는 과정을 데이터 바인딩이라고 한다. 이 과정을 통해 사용자가 입력한 데이터를 컨트롤러에서 쉽게 사용할 수 있게 된다.

 

GET, POST 요청의 경우

  • GET : GET 방식의 요청에는 사용되지 않는다. 메시지 컨버터는 HTTP 요청의 본문(body)에 포함된 데이터를 처리하는 데 사용되는데, GET요청의 경우 본문이 없기 때문에 메시지 컨버터를 사용할 필요가 없다.
  • POST : POST 요청의 경우 요청 본문에 데이터를 담아 전송하기 때문에 이러한 데이터를 객체로 변환하기 위해 메시지 컨버터가 사용된다.

 

유용한 메시지 컨버터의 종류

 

  • Jaxb2RootElementHttpMessageConverter :

- Spring에서 XML 형식의 데이터를 처리하는 메시지 컨버터 중 하나이다.

- 이 메시지 컨버터는 java 객체를 XML로 변환하거나, XML을 java 객체로 변환하는 데 사용된다.

- @XmlRootElement와 @XmlType이 붙은 클래스를 이용한다.

- 지원하는 미디어 타입은 application/xml, application/*+cml, text/xml이다.

 

  • MashallingHttpMessageConverter

 

- 이 컨버터를 등록할 때는 maechaller와 unmarshaller를 설정파일에 등해줘야 한다.

- 지원하는 미디어 타입은 위와 동일.

- 주어진 XML 바인딩 프레임워크를 사용하여 java 객체와 XML 문서 간의 매핑을 수행한다. 

 

  • MappingJacksonHttpMessageConverter

- Jackson 라이브러리를 기반으로 작성되었으며 JSON 데이터와 Java 객체 간의 매핑을 수행한다.
- 지원하는 미디어 타입은 application/json이다.

- 변환하는 오브젝트 타입의 제한은 없지만 프로퍼티를 가진 자바빈 스타일이나 HashMap을 이용해야 정확한 변환 결과를 얻을 수 있다.

 

*설정 파일 등록

import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 기본 메시지 컨버터 목록을 가져옴
        converters.add(new MappingJackson2HttpMessageConverter());
        // 다른 컨버터 등록하거나 기본 컨버터 삭제할 수도 있음
    }
}

 

 

 

참고 사이트/자세한 설명있음

https://joont92.github.io/spring/MessageConverter/

 

[spring] MessageConverter

앞서 우리가 HTTP 요청을 모델에 바인딩하고 클라이언트에 보낼 HTTP 응답을 만들기 위해 뷰를 사용했던 방식과는 달리, HTTP 요청 본문과 HTTP 응답 본문을 통째로 메세지로 다루는 방식이다. 주로 X

joont92.github.io

 

 

+ Recent posts