오늘의 학습 키워드

▸ 코드 카타
▸ HTTP
▸ 테스트 코드
▸ Lombok 과 application.properties
▸ Spring MVC


▸ 코드 카타

2024년 1월 18일 - [프로그래머스] 8: 직사각형 별찍기, 최대공약수와 최대공배수, 3진법 뒤집기, 이상한 문자 만들기, 겹치는 선분의 길이


▸ HTTP

📍HTTP란?

  • 데이터를 주고 받는 양식을 정의한 통신 규약
  • 통신규약: 컴퓨터끼리 데이터를 주고 받을 때 정해둔 약속
  • HTTP는 언어 같은 느낌

📍HTTP로 데이터 주고 받기

  • HTTP에서는 언제나 Request, Response 개념 존재
    1. 브라우저는 서버에게 자신이 원하는 페이지를 요구(request)
    2. 서버는 브라우저가 원하는 페이지가 있는지 확인하고 있다면 해당 페이지에 대한 데이터를 실어 응답(response), 없다면 없는 페이지에 대한 데이터를 반환
    3. 브라우저는 서버에게 전달 받은 데이터를 기반으로 브라우저에 그려줌

📍HTTP 구성 요소

  • Method(호출/요청 방식) - 가장 대표적 요청 방식 Get, Post
    • Get: 이름 그대로 어떤 리소스를 얻을 때 사용, 브라우저의 주소창에 URL을 입력하면 GET 메소드를 사용해서 서버에 요청을 보냄
    • Post: 웹 서버에 데이터를 게시할 때 사용하는게 일반적 (회원가입, 게시글 작성, 댓글 작성)
    • 그 외 Delete
  • Header(추가 데이터, 메타 데이터)
    • 브라우저가 어떤 페이지를 원하는지
    • 요청 받은 페이지를 찾았는지
    • 요청 받은 데이터를 성공적으로 찾았는지
    • 어떤 형식으로 데이터를 보낼지
    • 다양한 의사 표현을 위한 데이터를 모두 Header 필드에 넣고 주고 받음
    • 메소드도 헤어데 포함되어 서버로 보내짐
  • Payload(데이터, 실제 데이터)
    • 서버가 응답을 보낼 때에는 항상 Payload를 보낼 수 있음
    • 클라이언트(브라우저)가 요청을 할 떄에도 Payload를 보낼 수 있음
    • Get 메소드를 제외하고 모두 Payload를 보낼 수 있는 것이 HTTP 약속
      💡Get 메소드는 http body가 존재하지 않음

▸ 테스트 코드

📍테스트 파일 생성

package com.sparta.springprepare.calculator;

public class Calculator {
    public Double operate(double num1, String op, double num2) {
        switch (op) {
            case "*":
                return num1 * num2;
            case "/":
                if (num2 != 0) {
                    return num1 / num2;
                } else {
                    return null;
                }
            case "+":
                return num1 + num2;
            case "-":
                return num1 - num2;
            default:
                throw new IllegalArgumentException("잘못된 연산자입니다.");
        }
    }
}
  1. 만약 위와 같은 코드를 작성했다면 이 java 파일 내에서 우클릭하고 Generate... 클릭
  2. Test... 클릭
  3. 그대로 OK 클릭
[테스트 코드]
package com.sparta.springprepare.calculator;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

class CalculatorTest {
    @Test💡
    @DisplayName("더하기 테스트")
    void test1() {
        Calculator calculator = new Calculator();
        Double result = calculator.operate(8, "+", 2);
        System.out.println("result = " + result);

        Assertions.assertEquals(10, result);
    }

    @Test
    @DisplayName("나누기 테스트")
    void test2() {
        Calculator calculator = new Calculator();
        Double result = calculator.operate(8, "/", 2);
        System.out.println("result = " + result);

        Assertions.assertEquals(4, result);
    }
}

💡@Test -> 테스트 환경에서 실행시킬 코드라는 표시


▸ Lombok 과 application.properties

📍Lombok

  • 클래스 위에 @Getter를 입력하면 import lombok.Getter;가 만들어짐
  • Getter 메소드를 만들어줌
[예시]
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Memo {
    private String username;
    private String contents;
}
  • @AllArgsConstructor, NoArgsConstructor
    • 기본 생성자와 모든 필드를 파라미터로 가진 오버로딩된 생성자를 만들어 줌
    • 아래 생성자를 만들어줌
      public Memo(String username, String contents){
      this.username = username;
      this.contents = contents;
      }

📍application.properties

  • application.properties : Spring과 관련된 설정을 할 때 사용되는 파일
  • Apache Tomcat을 사용하여 서버를 실행하면 기본 port 설정이 8080으로 되어있음
  • 이 8080을 8081로 바꾸고 싶을 때
  1. resources 폴더에 application.properties 선택
  2. server.port=8081 입력

▸ Spring MVC

📍MVC 디자인 패턴이란?

  • MVC란 소프트웨어 디자인 패턴 중 하나
  • MVC 구성요소 - Model, View, Controller
  • Model
    • 데이터와 비즈니스 로직 담당
    • 데이터베이스와 연동하여 데이터를 저장하고 불러오는 등의 작업 수행
  • View
    • 사용자 인터페이스 담당
    • 사용자가 보는 화면과 버튼, 폼 등을 디자인하고 구현
  • Controller
    • Model과 View 사이의 상호작용을 조정하고 제어
    • 사용자의 입력을 받아 Model에 전달하고 Model의 결과를 바탕으로 View 업데이트

📍Spring MVC란?

  • Spring Web MVC: Servlet API를 기반으로 구축된 독창적인 웹 프레임워크
  • Servlet: 자바를 사용하여 웹페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양
  • 사용자가 (HTTP) API 요청했을 때 서버의 서블릿이 어떻게 동작되는지
    1. 사용자가 Client(브라우저)를 통해 서버에 HTTP Request 즉, API 요청을 함
    2. 요청을 받은 Servlet 컨테이너는 HttpServletRequest, HttpServletResponse 객체 생성
      • Servlet이 개발자를 대신해서 HTTP를 분석해서 안에 들어있는 사용해야할 데이터들을 HttpServletRequest 객체에 넣어줌
    3. 설정된 정보를 통해 어떤한 Servlet에 대한 요청인지 찾음
    4. 해당 Servlet에서 service 메소드를 호출한 뒤 브라우저의 요청 Method에 따라 doGet 혹은 doPost 등의 메소드 호출
    5. 호출한 메소드들의 결과를 그대로 반환하거나 동적 페이지를 생성한 뒤 HttpServletResponse 객체에 응답을 담아 Client(브라우저)에 반환
    6. 응답이 완료되면 생성한 두 객체를 소멸
profile
안녕하세요

0개의 댓글