[Spring] 스프링 입문 (1)

이병수·2024년 1월 17일
0

스프링 정리

목록 보기
1/24

스프링 입문(1)


Gradle 이란?

그루비(Groovy)를 기반으로 한 빌드 도구이며, 빌드 자동화 시스템이라고 보면 된다.

  • Java 코드를 설정에 맞게 빌드해준다.

  • Gradle을 사용하면 Java 소스코드를 실행 가능한 jar 파일로 만들어준다.


build.gradle

Gradle 기반의 빌드 스크립트이다.

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.1'
    id 'io.spring.dependency-management' version '1.1.4'
}

group = 'org.sparta'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = '17'
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
    useJUnitPlatform()
}
  • 소스 코드를 빌드하고 라이브러리들의 의존성을 쉽게 관리할 수 있다.

  • 즉, 개발에 필요한 외부 라이브러리들을 dependencies 부분에 작성만 하면 자동으로 관리해주어서 라이브러리들 간의 충돌 없이 개발에 집중할 수 있게 된다.

    • dependencies에 작성된 외부 라이브러리들은 Maven Repository 같은 외부 저장소에서 자동으로 다운로드가 된다.

서버


네트워크란?

Net과 Work의 합성어로 컴퓨터와 같은 노드들이 통신 기술을 통해 그물망처럼 연결되어 통신을 하는 형태

  • 데이터 및 리소스를 송신, 교환 또는 공유하기 위한 목적으로 케이블(유선) 또는 WiFi(무선)로 연결된 2개 이상의 컴퓨터로 구성

  • 서로 정보를 주고 받기 위해서 IP 주소, 서브넷 마스크, 게이트웨이 등의 정보를 설정 후 네트워크 프로토콜을 이용하여 통신을 한다.


네트워크 용어

  • IP 주소 : 통신을 위한 인터넷 프로토콜을 사용하는 네트워크에 연결된 모든 디바이스에 할당된 고유 번호

    • 즉, 쉽게 말해서 주소라고 생각하면 된다.
  • 프로토콜 : 컴퓨터가 다른 컴퓨터와 통신하는데 필요한 장비가 서로 통신을 위해 정해놓은 통신 규약

    • 이러한 프로토콜이 있기 때문에 사전에 발생할 수 있는 여러가지 문제(통신 순서, 오류 제어 및 수정 등)을 해결할 수 있다.
  • 포트 : 네트워크 디바이스 간의 특정 연결 식별

    • IP 주소가 주소라고 생각을 한다면 포트번호는 받는 사람 이라고 생각하면 된다.

웹 서버

웹 브라우저와 같은 클라이언트에서 HTTP 프로토콜로 요청을 받아 HTML 문서 등과 웹 페이지를 응답해주는 소프트웨어

웹 서버의 기본 동작 원리

  1. 브라우저를 통해 HTTP Request 요청을 웹 서버에 보낸다.

  2. 웹 서버는 그에 대한 요청을 내부적으로 처리한 뒤에 처리한 데이터의 결과를 HTTP Response 응답을 통해 브라우저에 보낸다.

  3. 브라우저는 응답 받은 데이터를 가지고 브라우저에 그려낸다.


API란?

API(Application Programming Interface)의 약자로 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 의미한다.

  • 통신 하기 위한 규칙이므로 "약속" 이라고 생각하면 된다.

  • Interface : 컴퓨터 시스템끼리 정보를 교환하는 공유 경계를 의미한다.

  • API를 통해 해당 프로그램을 활용할 때, 도움을 주는 매개체 역할이라고 생각하면 된다.


RESTful API란?

Representational State Transfer(REST)는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍쳐이다.

  • 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것이 목적이다.

  • 일관적인 컨벤션을 통한 API의 이해도와 호환성을 높이는 것이 주 목적이다.


Web Server 와 Web Application Server (WAS)


Web Server

브라우저에서 URL을 입력하여 어떤 페이지를 요청했을 때, HTTP의 요청을 받아서 HTML문서와 같은 정적 컨텐츠를 전달해주는 역할이 Web Server이다.

  • 이미 완성되어 있는 HTML과 같은 문서를 브라우저에 전달한다.

  • 동적인 요청에 대해 서버 자체적으로 처리하기 어렵다.


Web Application Server (WAS)

Web Server가 처리하지 못하는 기능 대부분을 해준다.


Apache Tomcat이란?

  • Tomcat은 동적인 처리를 할 수 있는 웹 서버를 만들기 위한 웹 컨테이너이다.

  • Apcahe Tomcat이란 Apache와 Tomcat이 합쳐진 형태로 정적, 동적 데이터를 효율적으로 처리해줄 수 있다.


HTTP


HTTP(HyperText Transfer Protocol)?

데이터를 주고 받는 양식을 정의한 통신 규약 중 하나

  • 모든 브라우저는 HTTP 프로토콜을 기본으로 지원한다.

  • 웹 브라우저 (클라이언트)가 서버에게 Request 요청을 보내면 서버는 그에 대한 정보를 처리하여 Response에 응답 결과 데이터를 담고 브라우저에 보낸다.

  • Request 요청 메세지에는 GET Method를 통해 호출 / 요청 방식을 사용한다.

  • Method 호출 방식

    • GET : 이름 그대로 어떤 리소스를 얻을 때 사용, URL을 입력하면 GET 메서드를 사용해서 서버로 요청을 보낸다.
    • POST : 웹 서버에 데이터를 게시할 때가 가장 일반적임 ( 그 외에도 많긴 함)
    • DELETE : 제거
    • PUT : 대체
    • PATCH : 변경
  • 서버가 응답을 보낼 때, Payload (실제 데이터)를 항상 보낸다.

  • 클라이언트는 요청할 때도 Payload를 보낼 수 있긴 하다.

  • GET 메서드를 제외하곤 모드 Payload를 보낼 수 있는 것이 HTTP에서의 약속이다.


Lombok 와 application.properties

Lombok이란?

Lombok은 메서드/생성자 등을 자동으로 생성해줌으로 코드를 절약할 수 있도록 도와주는 라이브러리이다.

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@RequiredArgsConstructor
public class Test {
	private String username;
    private final String testName;
}
  • 클래스 이름 위에 어노테이션을 부여하여 사용한다.

  • @Getter

    • 자동으로 get메서드를 추가한다.
  • @Setter

    • 자동으로 set메서드를 추가한다.

@AllArgsConstructor
public class Test {
    private String username;
    private String contents;
}

public Test(String username, String contents) {
    this.username = username;
    this.contents = contents;
}
  • @AllArgsConstructor

    • 멤버변수를 외부에서 초기화하여 설정하는 생성자를 만들어준다.
@NoArgsConstructor
public class Test {
    private String username;
    private String contents;
}

public Test() {
}
  • @NoArgsConstructor

    • 기본 생성자를 만들어준다.
@RequiredArgsConstructor
public class Test {
    private final Calculator calculator;
    private final String username;
    private String contents;
}

public Test(Calculator calculator, String username) {
    this.calculator = calculator;
    this.username = username;
}
  • @RequiredArgsConstructor

    • final이 붙은 멤버변수의 파라미터로 가진 생성자를 만들어준다.

application.properties

  • Spring과 관련된 설정을 할 때 사용되는 파일이다.

  • 스프링부트를 사용하면 개발에 필요한 설정 정보들이 기본 설정으로 자동으로 되어있는데, application.properties를 통해 설정값을 쉽게 변경할 수 있다.

  • 또한 DB 연결 시 DB의 정보를 제공할 때, 이 파일을 이용하여 쉽게 값을 전달할 수 있다.

profile
백엔드 개발자가 되고 싶어요

0개의 댓글