본문 바로가기

카테고리 없음

TIL

용어정리

1. Spring mvc

Spring MVC는 Model-View-Controller 패턴을 기반으로 한 웹 애플리케이션 개발 프레임워크입니다.

Spring MVC에서는 웹 애플리케이션 개발을 위한 여러가지 기능을 제공합니다. 이를 이용하여 웹 요청을 처리하고, 데이터베이스와의 연동, 로그인 인증 등을 구현할 수 있습니다. Spring MVC는 Servlet API와 JSP를 기반으로 하며, 각 요청에 대해 DispatcherServlet이라는 중앙 컨트롤러가 요청을 분석하고, 적절한 Controller에게 요청을 전달합니다.

Spring MVC는 매우 유연하게 구성할 수 있으며, 다양한 View Template를 지원합니다. 또한, 여러가지 인터셉터(Interceptor)를 이용하여 요청 처리 과정에서 중간에 필요한 처리를 삽입할 수 있습니다. 이를 이용하여 로그인 인증, 권한 체크 등의 처리를 구현할 수 있습니다.

Spring MVC는 다양한 기능과 높은 확장성을 제공하며, 많은 개발자들이 사용하는 대표적인 웹 애플리케이션 개발 프레임워크 중 하나입니다.

2. controller를 만드는 이유

controller를 만드는 이유는 Spring MVC 패턴에서 웹 애플리케이션에서 클라이언트로부터 요청을 받아 해당 요청에 대한 처리를 담당하는 역할을 한다.

Controller는 요청을 처리한 결과를 Model 객체에 담아서 View에 전달한다. View는 Model 객체를 이용하여 사용자에게 응답을 보내는 역할을 수행한다. 따라서, Controller는 사용자 요청을 처리하여 그 결과를 View에 전달하는 역할을 담당하며, 이를 통해 웹 애플리케이션의 비즈니스 로직을 처리할 수 있다.

3. @GetMapping, @PostMapping

@GetMapping은 HTTP GET 요청을 처리하는 핸들러 메소드를 정의하는 어노테이션이다.

@GetMapping 어노테이션을 사용하면 해당 메소드는 지정된 URL 경로와 HTTP GET 요청 메소드에 대해서만 호출.

@PostMapping은 HTTP POST 요청을 처리하는 핸들러 메소드를 정의하는 어노테이션입니다. @PostMapping 어노테이션을 사용하면 해당 메소드는 지정된 URL 경로와 HTTP POST 요청 메소드에 대해서만 호출됩니다.

@GetMapping과 @PostMapping 어노테이션은 각각 HTTP GET과 HTTP POST 요청을 처리하는 핸들러 메소드를 정의하기 위해 사용되며, Spring MVC에서 웹 어플리케이션의 요청 처리를 담당하는 핵심적인 역할을 합니다.

4. HTTP GET과 HTTP POST

HTTP GET과 HTTP POST는 HTTP 프로토콜에서 사용되는 두 가지 메소드입니다.

HTTP GET은 서버로부터 리소스를 요청할 때 사용되며, 요청 파라미터를 URL 쿼리 스트링에 포함시켜 전송.

HTTP POST는 서버에 데이터를 제출할 때 사용되며, 요청 파라미터를 HTTP 요청의 Body에 포함시켜 전송.

5. Handler Method

spring MVC에서 Controller 클래스가 처리하는 요청을 처리하기 위해 구현하는 메소드이다.

핸들러 메소드는 요청을 처리하고, 요청 결과를 반환하는 역할을 수행.이 때, 요청을 처리하는 방식은 핸들러 메소드에 사용되는 어노테이션에 따라 달라진다.예를 들어, @GetMapping 어노테이션이 붙은 핸들러 메소드는 HTTP GET 요청을 처리하고, @PostMapping 어노테이션이 붙은 핸들러 메소드는 HTTP POST 요청을 처리합니다.

따라서, Spring MVC에서 핸들러 메소드는 Controller 클래스에서 요청을 처리하기 위해 구현하는 메소드이며, 핸들러 메소드에 붙는 어노테이션에 따라 처리하는 요청의 방식이 결정.

6. Query String

쿼리 스트링(Query String)은 웹 브라우저가 서버에게 요청할 때 전달하는 데이터입니다. 일반적으로 URL의 끝 부분에 "?"와 함께 키(key)와 값(value)의 쌍으로 이루어진 문자열 형태로 포함됩니다. 여러 개의 파라미터를 전달할 경우 "&" 기호를 사용하여 구분합니다.

쿼리 스트링은 웹 서버에서 클라이언트로 전달하는 데이터가 아니라, 클라이언트가 서버로 요청할 때 서버에게 전달하는 데이터입니다. 이 데이터를 서버에서 사용하여 클라이언트에게 보여줄 데이터를 필터링하거나 검색 조건 등을 전달할 수 있습니다.

예를 들어, "https://www.example.com/search?q=spring+framework&sort=popular"와 같은 URL에서 "q=spring+framework&sort=popular"이 쿼리 스트링에 해당합니다. 이 URL은 검색어가 "spring framework"이고, 검색 결과를 "인기순"으로 정렬하여 보여줄 것을 요청하는 것입니다. 서버는 이 요청을 받아 적절한 검색 결과를 클라이언트에게 응답합니다.

7. @RestController

@Controller와 @ResponseBody 어노테이션을 합쳐 놓은 것.

@Controller는 Spring MVC에서 Controller 역할을 하며, @ResponseBody는 Controller가 반환하는 값을 HTTP 응답 본문에 쓰기 위해 사용됩니다. @RestController는 이러한 Controller의 역할과 HTTP 응답 본문에 값을 쓰기 위한 어노테이션을 모두 포함하고 있으므로, RESTful 웹 서비스를 개발할 때 매우 편리하게 사용할 수 있습니다.

@RestController를 사용하면 메소드의 반환 값이 HTTP 응답 본문으로 바로 전송됩니다. 예를 들어, @RestController 어노테이션이 적용된 클래스에서 아래와 같은 메소드를 만들면,

javaCopy code
@RestController
public class MyRestController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, world!";
    }
}

"/hello" 요청이 들어오면 "Hello, world!"가 HTTP 응답 본문으로 바로 전송됩니다. 따라서, 별도의 View를 만들 필요 없이 간단한 RESTful 웹 서비스를 개발할 때 사용할 수 있습니다.

8. @WebMvcTest(WelcomeController.class

@WebMvcTest 어노테이션은 Spring MVC 어플리케이션의 컨트롤러(Controller) 테스트를 위한 어노테이션입니다.

@WebMvcTest 어노테이션을 사용할 때, 테스트 대상이 되는 Controller 클래스를 선택적으로 지정할 수 있습니다. 이를 위해서 @WebMvcTest 어노테이션 뒤에 대상 Controller 클래스를 명시적으로 지정해 주어야 합니다.

예를 들어, WelcomeController 클래스가 @WebMvcTest 대상 Controller라면, @WebMvcTest(WelcomeController.class) 어노테이션을 사용하여 테스트를 수행합니다. 이렇게 하면 WelcomeController 클래스가 필요로 하는 빈(Bean)들을 자동으로 생성하고, 컨트롤러 테스트를 수행할 수 있습니다.

만약, @WebMvcTest 어노테이션 뒤에 어떠한 Controller 클래스도 지정하지 않으면, 모든 Controller 클래스를 대상으로 테스트를 수행합니다. 하지만, 이렇게 하면 불필요한 빈(Bean)들이 생성되어 테스트 성능이 저하될 수 있습니다. 따라서, 가능하면 테스트 대상이 되는 Controller 클래스를 명시적으로 지정하여 사용하는 것이 좋습니다.

9. XML

XML(Extensible Markup Language)은 마크업 언어(Markup Language) 중 하나로, 데이터를 저장하고 전달하기 위한 형식을 정의하는 언어입니다.

XML은 데이터와 마크업(태그)을 분리하여 데이터의 의미와 구조를 명확하게 표현할 수 있습니다. 또한, 다양한 용도에 따라 태그를 정의할 수 있는 확장성을 가지고 있습니다. 이러한 특징으로 인해, XML은 데이터를 공유하고 전송하기 위한 표준 형식으로 널리 사용되고 있습니다.

예를 들어, 웹 애플리케이션에서 데이터를 전송할 때 JSON 대신 XML을 사용할 수 있습니다. XML은 태그를 사용하여 데이터를 구조화하고, 이를 해석하여 원하는 형태로 사용할 수 있습니다. 이를 통해 데이터의 유효성 검사, 처리 및 저장 등 다양한 용도로 활용할 수 있습니다.

10. MockMvc

MockMvc는 Spring MVC 테스트를 위한 테스트 프레임워크입니다. 실제 서버를 실행하지 않고도 DispatcherServlet을 초기화하고, 특정 컨트롤러를 테스트할 수 있도록 가상의 HTTP 요청을 생성하여 테스트를 수행할 수 있습니다.

MockMvc는 HTTP 요청을 생성하고, 요청에 대한 응답을 검증할 수 있는 다양한 메소드들을 제공합니다. 예를 들어, GET, POST, PUT, DELETE 등의 HTTP 요청 메소드를 지원하며, 요청 파라미터, 헤더, 쿠키 등을 설정할 수 있습니다. 또한, 응답 본문에 대한 검증 메소드들도 제공하며, 예외 처리 및 리다이렉션 검증 등 다양한 테스트 시나리오를 수행할 수 있습니다.

MockMvc를 사용하면 Spring MVC 애플리케이션의 테스트를 보다 쉽고 효율적으로 수행할 수 있으며, 서버 환경에 영향을 주지 않고 테스트할 수 있다는 장점이 있습니다.

11. REST API

REST API는 Representational State Transfer(표현 상태 전이)의 약자로, 웹 상에서 클라이언트와 서버 간의 통신 방식 중 하나입니다. REST API를 사용하여 클라이언트는 URI(Uniform Resource Identifier)를 통해 서버에 요청을 보내고, 서버는 HTTP 프로토콜에 따라 응답을 보내는 방식으로 동작합니다.

REST API의 핵심적인 개념은 자원(Resource), HTTP Method, Representations입니다. 자원은 URI로 표현되며, 클라이언트는 URI를 이용하여 서버에 요청을 보냅니다. HTTP Method는 클라이언트가 서버의 자원에 대해 수행하길 원하는 작업을 나타내며, 주로 GET, POST, PUT, DELETE와 같은 메소드가 사용됩니다. Representations는 클라이언트와 서버 간의 자원을 주고받을 때 사용되는 데이터 형식을 의미합니다. 주로 JSON, XML 등의 형식이 사용됩니다.

REST API는 다양한 클라이언트(웹, 모바일, IoT 등)에서 사용할 수 있으며, 확장성과 유연성이 높아서 대규모 분산 시스템에서도 사용됩니다. REST API는 특정 언어나 프레임워크에 종속되지 않으며, 다양한 프로그래밍 언어와 프레임워크에서 사용할 수 있습니다.

REST API 설계 시 가장 중요한 항목은 다음의 2가지로 요약할 수 있습니다.

첫 번째,

URI는 정보의 자원을 표현해야 한다.

두 번째,

자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다.

12. RESTful

즉, RESTful 웹 서비스는 웹에서 데이터를 주고 받기 위한 규약 중 하나로, HTTP를 이용하여 데이터를 요청하고 응답하는 방식을 정해 놓은 것입니다. 이를 통해 서로 다른 플랫폼 간의 상호 운용성(interoperability)을 높이고, 확장성과 유지보수성을 개선할 수 있습니다.

13. mockMvc.perform(MockMvcRequestBuilders.get("/"))

**MockMvc**는 Spring MVC 테스트를 작성할 때 사용되는 클래스로, 컨트롤러 테스트 시에 HTTP 요청을 보내고 응답을 검증하는 기능을 제공합니다.

perform() 메소드는 요청을 보내기 위한 메소드로, 이를 통해 HTTP 요청을 설정할 수 있습니다. MockMvcRequestBuilders HTTP 요청을 생성하고 빌드하는 데 사용되는 빌더 클래스입니다

**("/"))**는 요청 URL을 의미하며, 이 코드에서는 "/" 경로에 GET 요청을 보냅니다.

14. DTO

DTO는 Data Transfer Object의 약자로, 데이터 전송을 위한 객체입니다. 로그인에서 DTO는 사용자가 입력한 아이디와 비밀번호를 담아서 서버로 전달하는 역할을 합니다.

로그인 과정에서 사용자가 입력한 아이디와 비밀번호는 보안상의 이유로 암호화되어 전달되어야 합니다. 이때, DTO 객체에 담아서 전달하면 암호화 처리된 데이터를 안전하게 전송할 수 있습니다.

DTO 객체는 서버와 클라이언트 사이에서 데이터를 주고받을 때도 유용합니다. 클라이언트는 DTO 객체를 서버에 전달하여 데이터를 저장하거나 수정할 수 있고, 서버는 DTO 객체를 클라이언트에 반환하여 데이터를 제공할 수 있습니다. 이렇게 DTO 객체를 사용하면 데이터 전송 시 데이터를 보호하고, 데이터 구조를 일관성 있게 유지할 수 있습니다.

15. throwable, RuntimeException, checked,unchecked

**Throwable**은 자바에서 모든 예외와 오류의 슈퍼 클래스입니다. 이 클래스의 하위 클래스로 **Exception**과 **Error**가 있습니다. **Exception**은 일반적으로 애플리케이션 코드에서 처리되거나 전달되는 예외를 나타내며, **Error**는 시스템 수준의 심각한 예외를 나타냅니다.

**RuntimeException**은 실행 시 발생할 수 있는 예외를 나타내는 unchecked 예외의 하나입니다. unchecked 예외는 컴파일러가 체크하지 않으므로, 예외를 발생시키는 코드에서 throws 절을 작성하지 않아도 됩니다. 그래서 예외가 발생하면 예외 처리를 명시적으로 해줄 필요가 있습니다.

반면 checked 예외는 컴파일러가 체크하는 예외로, 예외를 발생시키는 코드에서 throws 절을 작성해야 합니다. 따라서 checked 예외는 예외 처리를 강제하며, 예외 처리를 하지 않으면 컴파일 오류가 발생합니다.

따라서 RuntimeException은 예외 처리가 강제되지 않으므로 예외 처리를 신경쓰지 않아도 되는 경우에 사용되며, checked 예외는 예외 처리를 강제하므로 예외 처리를 꼭 해주어야 하는 경우에 사용됩니다.

16. JWT

JWT(Jason Web Token)는 웹 표준으로 정의된 JSON 기반의 토큰입니다. JWT는 사용자 인증 및 인가를 구현하는 데 사용됩니다. JWT는 페이로드(payload), 서명(signature), 헤더(header)로 구성됩니다.

  • Payload: JWT에 저장되는 정보를 담고 있으며, 클레임(Claims)이라는 단위로 구성됩니다. 클레임은 JWT에 담긴 정보의 조각으로, 예를 들어 사용자 ID, 권한 등을 담을 수 있습니다.
  • Signature: JWT의 서명(signature)은 비밀키로 생성되며, 토큰의 무결성을 보장합니다. 이를 통해 서버는 클라이언트에서 받은 JWT의 서명을 검증하여 위조 여부를 판단할 수 있습니다.
  • Header: JWT의 헤더(header)는 토큰의 유형(type)과 서명 알고리즘(algorithm) 등의 메타데이터를 포함합니다.

JWT는 클라이언트와 서버 간의 정보를 안전하게 전송하기 위해 사용됩니다. 예를 들어, 사용자가 로그인하면 서버는 JWT를 생성하여 클라이언트에게 전송합니다. 이후 클라이언트는 서버에 요청할 때마다 JWT를 함께 전송하여 인증 및 인가를 수행합니다.

 

헤더.페이로드.서명