[Spring/입문] 네트워크부터 Spring Boot 설정까지

JM·5일 전

1. 네트워크란?

여러 대의 컴퓨터 또는 장비가 서로 연결되어 정보를 주고받을 수 있도록 하는 기술이다.

2. Client와 Server

Client

서버에 요청을 보내는 프로그램

예: 웹 브라우저

Server

클라이언트의 요청을 받아 처리하는 주체

우리가 웹 브라우저에 주소를 입력하는 것은 새로운 화면을 그리기 위한 데이터를 요청하는 것에 해당한다.

3. 인터넷상의 주소

IP

컴퓨터를 식별하기 위한 위치 주소

예: 서울시 00구

포트 번호

하나의 서버에서 실행되고 있는 여러 서비스를 구분하기 위한 번호

예: 홍길동의 집에서 특정 방을 찾아가는 것처럼, 서버 내에서 어떤 서비스로 요청을 전달할지 구분

4. 웹 서버란?

인터넷을 통해 HTTP를 이용하여 클라이언트의 요청을 받고 응답하는 통신을 수행하는 서버

웹 서버의 기본 동작 원리

  1. 브라우저에서 HTTP Request 요청
  2. 웹 서버에서 요청 처리
  3. HTTP Response를 통해 웹사이트 데이터 전달
  4. 브라우저에서 전달받은 데이터를 이용해 화면 출력

5. API와 RESTful API

API

다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙

쉽게 말하면 서로 다른 프로그램이 통신하기 위한 약속이다.

RESTful API

자원을 이름으로 구분하고 해당 자원의 상태를 주고받는 방식

API가 HTTP의 규칙을 적절하게 사용하고, 자원을 중심으로 잘 설계되어 있다면 RESTful하게 설계되었다고 볼 수 있다.

HTTP 메서드

Method역할
GET데이터 조회
POST데이터 생성
PUT데이터 수정
DELETE데이터 삭제

6. 웹 서버와 WAS

Web Server

브라우저에서 URL을 입력하여 페이지를 요청했을 때 HTTP 요청을 받아 HTML과 같은 정적인 콘텐츠를 사용자에게 전달하는 역할을 한다.

주요 역할

  1. 정적 콘텐츠 처리

    • 이미 완성된 HTML과 같은 문서를 전달
  2. 동적 콘텐츠 요청 전달

    • 자체적으로 처리하기 어려운 동적 요청을 WAS에 전달

WAS

웹 애플리케이션의 실제 기능이 동작하는 서버

동적인 콘텐츠를 처리할 수 있다는 점에서 Web Server와 구별된다.

예: Apache, Nginx

7. Spring과 Spring Boot

Spring Framework는 초기 설정을 위해 많은 XML 설정이 필요했다.

이러한 설정을 보다 편리하게 할 수 있도록 Spring Boot가 등장했다.

Spring Boot의 특징

  • Java의 @ 애너테이션 기반 설정
  • 외부 라이브러리 및 하위 프레임워크의 의존성 관리 편리
  • 내장 Apache Tomcat 제공

8. HTTP

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

HTTP 상태 코드

상태 코드의미
2xxSuccessful
3xxRedirection
4xxClient Error
5xxServer Error

HTTP 구성 요소

요청이나 응답에 대한 추가 데이터 및 메타데이터

예:

GET naver.com HTTP/1.1

Payload

HTTP 요청 또는 응답에서 전달되는 실제 데이터

GET을 제외한 HTTP Method에서는 Payload를 사용할 수 있음

9. 테스트 코드

JUnit

Java 프로그래밍 언어를 위한 단위 테스트 프레임워크

테스트 파일 생성 단축키

  • Windows: Ctrl + Shift + T
  • Mac: ⌘ + Shift + T

10. Lombok과 application.properties

Lombok

Java 프로젝트에서 반복적으로 작성해야 하는 메서드나 생성자 등을 자동으로 생성해 코드 작성량을 줄여주는 라이브러리

@Getter, @Setter

Getter와 Setter를 자동으로 생성한다.

@Getter
@Setter
public class Memo {
    private String username;
    private String contents;
}

위 코드는 아래와 같은 Getter와 Setter를 직접 작성하는 것과 같은 역할을 한다.

public String getUsername() {
    return this.username;
}

public String getContents() {
    return this.contents;
}

public void setUsername(String username) {
    this.username = username;
}

public void setContents(String contents) {
    this.contents = contents;
}

@AllArgsConstructor, @NoArgsConstructor

모든 필드를 사용하는 생성자와 기본 생성자를 자동으로 생성한다.

@NoArgsConstructor
@AllArgsConstructor
public class Memo {
    private String username;
    private String contents;
}

@NoArgsConstructor는 기본 생성자를 생성한다.

public Memo() {
}

@AllArgsConstructor는 모든 필드를 매개변수로 받는 생성자를 생성한다.

public Memo(String username, String contents) {
    this.username = username;
    this.contents = contents;
}

@RequiredArgsConstructor

final 또는 @NonNull이 붙은 필드를 매개변수로 받는 생성자를 자동으로 생성한다.

@RequiredArgsConstructor
public class Memo {
    private final Calculator calculator;
    private final String username;
    private String contents;
}

위 코드는 다음과 같은 생성자를 자동으로 생성한다.

public Memo(Calculator calculator, String username) {
    this.calculator = calculator;
    this.username = username;
}

application.properties

Spring Boot와 관련된 설정을 작성하는 파일이다.

server.port=8081

위와 같이 설정하면 서버의 포트 번호가 8081로 변경된다.

0개의 댓글