HTTP & SpringBoot

0woy·2023년 6월 23일
0

LikeLion

목록 보기
3/6

📌 순천향대학교 멋쟁이 사자처럼 동아리 백엔드 트랙에서 배운 내용을 정리하여 올립니다.

📕 Client & Server

Client: 서비스를 사용하는 컴퓨터
Server: 서비스를 제공하는 컴퓨터
Service: 컴퓨터 네트워크에서 클라이언트와 서버 간의 상호 작용을 통해 제공되는 기능

클라이언트와 서버는 HTTP를 이용해서 소통함


📒 HTTP

HTML 문서를 교환하기 위해 만들어진 통신 규약
요청/응답(Request/Response) 구조로 되어있음
클라이언트가 HTTP Request를 서버에 보내면, 서버는 HTTP Response를 보내는 구조

HTTP는 Stateless이다.
> 상태를 저장하지 않는다는 뜻

📖 HTTP - Request

HTTP - Request 메시지는 크게 3부분으로 구성됨.

  • Start Line
    - HTTP Method(POST, GET, PUT..), Request target(목표 URL), HTTP version

  • Headers
    - Request에 대한 추가 정보를 담고 있는 부분
    - HOST, User-Agent, Accept, Connection, Content-Type, Content-Length

  • Body
    - Request의 실제 내용

📖 HTTP - Response

HTTP - Response 메시지도 크게 3부분으로 구성됨.

  • Start Line
    - HTTP version, Status Code(200, 404), Status Text("OK", "NOT Found")
  • Headers
    - Response에 대한 추가 정보를 담고 있는 부분
    - HOST,Server Header, Accept, Connection, Content-Type, Content-Length
  • Body
    - Response의 실제 내용

📖 HTTP Stateless

stateful
승객: 서울에서 전주 가는 기차는 얼마인가요
직원: 25,000원이요

승객: 2장 주쇼
직원: 50,000원이요 어떻게 결제 하실래용?
(노선 및 주문 수량 상태 유지)

stateless
승객: 서울에서 전주 가는 기차는 얼마인가요
직원: 25,000원이요

승객: 2장 주쇼
직원: 잉? 뭘 두 장 줘요??


📗 SpringBoot

스프링은 자바 언어를 이용해 엔터프라이즈급 개발을 편리하게 만들어주는 오픈소스 경량급 애플리케이션 프레임워크로 불림
스프링은 기능이 많은 만큼 설정 복잡 -> SpringBoot의 등장

엔터프라이즈급 개발?
대규모 데이터를 처리하는 환경을 대상으로 하는 개발

1. 의존성 관리

- Spring은 개발에 필요한 각 모듈의 의존성을 직접 설정 해야 했음
호환되는 버전을 명시해야 정상 작동했으므로, Spring Framework의 버전과 다른 라이브러리의 버전까지 고려.

- Springboot는 Spring-boot-starter라는 의존성 제공
Spring-boot-starter은 각 라이브러리의 기능 관련하여 자주 사용되고 호환되는 버전 자동 제공

  • Spring-boot-starter-web
    Spring MVC를 사용하여 웹 애플리케이션 개발 시 가장 많이 사용하는 스타터. Undertow, Tomcat 또는 Jetty와 같은 내장 서버와 함께 사용할 수O
  • Spring-boot-starter-data-jpa
    스프링 데이터 JPA 유저를 위한 스타터.
    Hibernate와 같은 JPA 구현체를 사용해 DB 조작O
  • Spring-boot-starter-security
    웹 애플리케이션을 보호하기 위해 스프링 시큐리티를 사용할 때 사용하는 스타터.
    사용자 인증, URL 보호 등 다양한 보안 기능 제공
  • Spring-boot-starter-test
    JUnit, Mockito, Hamcrest 등 테스트 프레임워크를 포함하는 스타터.
    테스트에 필요한 클래스 및 메소드 깔끔히 관리O

2. 자동 설정

Springboot는 Spring Framework의 기능을 사용하기 위한 자동 설정 지원
자동 설정은 애플리케이션에 추가된 라이브러리를 실행하는데 필요한 환경 설정을 알아서 찾아줌
즉, 애플리케이션을 개발하는데 필요한 의존성 추가시 프레임워크가 자동 관리

📖 SpringBootApplication

@SpringBootApplication

1. SpringBootConfiguration
해당 클래스가 애플리케이션의 구성을 정의하는 역할을 한다는 것을 나타냄.

2. EnableAutoConfiguration
사전에 정의한 라이브러리들을 Bean으로 등록해주는 Annotation
사전에 정의된 라이브러리들은 spring.factories라는 파일에 정의됨

3. ComponentScan
@componet 및 @Service, @Repository, @Controller 등의 Annotation을 스캔하여 Bean으로 등록해주는 Annotation

Bean?
Spring IoC Container가 관리하는 자바 객체 = 개발자의 코드 + 설정 정보

직접 new를 이용하여 생성한 객체가 아닌, Spring에 의하여 관리당하는 자바 객체 사용. 이렇게 Spring에 의하여 생성되고 관리되는 자바 객체를 Bean이라고 함.

📖 제어 역전 (IoC)

제어 역전: Inversion of Control

Spring 등장 이전, 일반적으로 개발이라는 행위는 라이브러리의 코드를 가져다가 사용하는 것이었음.

Spring 등장 후, Framework가 자신이 해야하는 일을 정확히 알고 있다면 개발자가 가지고 있는 Code를 Framework가 가져다가 사용함.

Spring Framework를 잘 사용한 Code는 new 키워드가 최소화 됨.

📖 의존성 주입 (DI)

의존성 주입: Dependency Injection

개발자가 비즈니스 logic 작성 시, 다른 객체를 사용해야 하는 시점 에서 IoC Contatiner에서 이미 만들어져 있는 Bean 객체를 전달해주는 것.

의존성 주입X

<Gun.java>
public class Gun{
	...
    ...
}

<Soldier.java>
public class Soldier{
	private Gun gun;
   
    public Soldier(){
    	gun = new Gun();
    }
}

의존성 주입O

@Component // Spring Container에 Bean으로 등록
<Gun.java>
public class Gun{
	...
    ...
}

<Soldier.java>
public class Soldier{
	@Autowired // Spring Container에 있는 Gun 타입의 Bean 주입
	private Gun gun;
}

3. 내장 WAS (Web Application Server)

Springboot는 기본적으로 Tomcat이라는 WAS 내장
@SpringBootApplication을 실행하면 자동으로 Web Server 실행
= localhost:8080 실행

SpringBoot != Web Server
내장된 웹 서버를 구동하는 것
Tomcat의 기본 port = 8080
localhost: 현 사용 중인 컴퓨터 자체를 가리키는 특수 Network 주소

📖 Tomcat

  • 아파치 재단에서 만든 오픈소스 WAS.

  • 아파치 HTTP와 연동, 동적인 콘텐츠 생성 및 전송하는 데 사용됨.

  • 경량화(lightweight)된 WAS로 많은 사용자를 가짐.

  • JVM(Java Virtual Machine)위에서 실행 -> 자바로 작성된 모든 애플리케이션 배포 가능.

    Tomcat은 개발자들이 자바 웹 애플리케이션 개발, 테스트 및 배포에 필수적 도구 중 하나.



📘 Lombok

- 롬복(Lombok)은 자바 개발자들이 반복적이고 지루한 코드 작성 작업을 줄이기 위한 Project

- 어노테이션(Annotation)을 사용해, 자주 사용되는 메서드 자동 생성 & 일부 작업 자동화하여 쉽게 개발할 수 있도록 도와줌

- @Getter, @Setter, @NoArgsConstructor, @AllArgsContructor 등 다양한 어노테이션 제공

Getter / Setter 사용 X

Getter / Setter 사용 O

Getter / Setter 사용 이유?
해당 Book 클래스의 필드 접근 제어자: private
해당 접근 제어자는 동일한 클래스 외에는 접근 불가

Book 클래스 필드에 접근 하기 위해 Getter/Setter 메소드를 통해야함.
Getter: 필드의 값 반환
Setter: 필드의 값 설정 & 변환

📖 @NoArgsConstructor, @AllArgsConstructor

@NoArgsConstructor: 매개변수가 없는 기본생성자를 자동 생성
@AllArgsConstructor: 모든 필드를 매개변수로 받는 생성자 자동 생성


0개의 댓글