우리가 흔히 사용하는 인터넷 웹에 대해서 공부한것을 기록해봅니다.

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

우리가 많이 들어보았던 HTTP 란 여기서 request와 response를 일컫는 말이다.
즉, 클라이언트와 서버는 HTTP 를 이용해 소통한다고 말할 수 있다.
HTTP Request 메시지는 크게 3부분으로 구성된다.

실제 Request를 보낼때 사용하는 코드 예시여서 복잡해 보이지만 그렇게 생각 안해도 됩니다.
간단히 요약하면 회원가입 페이지에서 서버로 요청이 들어온 상태이고 가입하려는 사람의 name, email, password를 입력받아 중복되는 회원이 없는지 알아보고 회원가입 서비스를 실행하는 코드입니다.
여기서 우리가 보아야할 부분이 바로 @RequestBody 어노테이션이 있는 부분입니다. 바로 저 부분이 클라이언트가 서버로 보내온 파일의 양식인 셈이죠.


위 2개의 사진은 Postman이라는 어플을 통해 위의 주소값으로 받은 request를 확인한 것입니다.
Postman은 이렇게 클라이언트와 서버 사이의 요청들을 눈으로 쉽게 확인할 수 있게 하는 어플입니다.



Request 받은 내용을 Response로 다시 클라이언트에게 보내진 결과물이다.
서버가 클라이언트의 상태를 보존하지 않는것을 의미한다.
스프링 부트의 특징
스프링은 개발에 필요한 각 모듈의 의존성을 직접 설정해야 했다.
호환되는 버전을 명시해야 정상 작동 했기에 스프링 프레임워크의 버전과 다른 라이브러리의 버전까지 고려한다.
Springboot는 Spring-boot-starter라는 의존성을 제공한다.
spring-boot-starter-web : Spring MVC를 사용하여 웹 어플리케이션을 개발할 때 가장 많이 사용하는 스타터입니다. Undertow, Tomcat 또는 Jetty와 같은 내장 서버와 함께 사용할 수 있습니다.
spring-boot-starter-data-jpa : 스프링 데이터 JPA 유저를 위한 스타터입니다. Hibernate 와 같은 JPA 구현체를 사용하여 데이터베이스를 조작할 수 있습니다.
spring-boot-starter-security : 웹 어플리케이션을 보호하기 위해 스프링 시큐리티를 사용할 때 쓰입니다. 사용자 인증, URL 보호 등 다양한 보안 기능을 제공합니다.
spring-boot-starter-test : JUnit, Mockito, Hamcrest 등 테스트 프레임워크를 포함하는 스타터입니다. 테스트에 필요한 클래스 및 메소드를 깔끔하게 관리할 수 있습니다.
스프링 부트는 스프링 프레임워크의 기능을 사용하기 위한 자동 설정을 지원합니다.
자동 설정은 어플리케이션에 추가된 라이브러리르 실행하는데 필요한 환경 설정을 알아서 찾아줍니다.
즉, 어플리케이션을 개발하는데 필요한 의존성을 추가하면 프레임워크가 자동으로 관리해줍니다.


@SpringBootApplication
스프링(Spring) 컨테이너가 관리하는 자바 객체를 빈(Bean)이라 한다.
우리가 알던 기존의 자바에서는 클래스를 생성하고 new를 입력하여 원하는 객체를 직접 생성하였습니다.
하지만 스프링에서는 스프링에 의해 관리당하는 자바 객체를 생성하고 사용합니다.
스프링 컨테이너가 필요에 따라 개발자 대신 Bean들을 관리 해주는 행위이다.

어떤 객체에 스프링 컨테이너가 또 다른 객체와 의존성을 맺어주는 행위
<Gun.java>
public class Gun {
...
...
}
<Soldier.java>
public class Soldier {
private Gun gun;
public Soldier() {
gun = new Gun();
}
}
<Gun.java>
@Component // 스프링 컨테이너에 Bean으로 등록
public class Gun {
...
...
}
<Soldier.java>
public class Soldier {
@Autowired // 스프링 컨테이너에 있는 Gun 타입의 Bean을 주입
private Gun gun;
}
WAS란 DB 조회 혹은 다양한 로직 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application 서버이다.
스프링 부트는 기본적으로 Tomcat이라는 WAS 를 내장한다.
@SpringBootApplication 을 실행하면 자동으로 웹 서버가 실행됩니다.
이때 Tomcat의 기본 포트틑 8080입니다. (*localhost:8080)
롬복은 자바 개발자들이 반복적이고 지루한 코드 작성 작업을 줄이기 위한 프로젝트이다.
@Getter, @Setter, @NoArgsConstructor, @AllArgsConstructor 등 다양한 어노테이션을 제공한다.
기본적으로 클래스 필드의 접근제어자는 Private입니다.
Private 는 동일한 클래스가 아니면 접근을 제어하기 때문에 필드에 접근하기 위해서 사용합니다.
즉, 보안적인 측면으로 유리하다고 말할 수 있겠네요.
@NoArgsConstructor 는 매개변수가 없는 기본 생성자를 자동으로 생성해주는 어노테이션입니다.
일반적으로 클래스에 명시적으로 생성자를 작성하지 않았을 때 사용합니다.
이 어노테이션을 사용하면 기본 생성자를 별도로 작성하지 않아도 되므로 코드를 간결하게 유지할 수 있습니다.
@AllArgsConstructor 는 모든 필드를 매개변수로 받는 생성자를 자동으로 생성해주는 어노테이션입니다.
클래스의 모든 필드에 대한 매개변수를 포함하는 생성자를 생성해줍니다.
이 어노테이션을 사용하면 필드마다 별도의 생성자 매개변수를 작성하지 않아도 되모르, 코드가 간결해지며 시간절약이 됩니다.