WIL 2주차

Geun Bo Kim·2023년 4월 16일
0

WIL

목록 보기
2/4

이번주에는 웹 동작방식에 대해 이해하는 시간과 SpringBoot 서버 이해,Database,SQL연습 ,JPA기초 등
스프링을 들어가기전 전체적인 흐름을 이해하는 시간을 가졌다.

1.웹이란 무엇인가?

웹(Web)이란, 인터넷 상에서 정보를 공유하기 위한 플랫폼이며, 웹 브라우저를 통해 웹 페이지를 조회하거나 웹 애플리케이션을 실행할 수 있는 환경을 제공한다.
HTTP(Hyper Text Transfer Protocol) 프로토콜을 사용하여 클라이언트와 서버 사이에서 정보를 주고받으며,
HTML(Hyper Text Markup Language) 등의 마크업 언어를 사용하여 웹 페이지를 구성하며,
CSS(Cascading Style Sheets) 등을 사용하여 디자인을 꾸밀 수 있다.

2.네트워크란 무엇인가?

네트워크(Network)란, 다수의 컴퓨터나 디바이스가 서로 연결되어 정보를 주고받을 수 있는 구조(기술)를 의미한다.
컴퓨터들은 네트워크를 통해 데이터를 주고받을 수 있으며, 이 때 데이터를 전송하기 위해서는
다양한 네트워크 프로토콜(TCP/IP, FTP, SMTP, POP 등)을 사용한다.
네트워크는 랜(Local Area Network)과 왠(Wide Area Network)으로 구분되며,
이외에도 인터넷, 이더넷, 블루투스 등 다양한 종류의 네트워크가 있다.

사용자가 브라우저등을 통해서 서버에 정보를 요청하는 과정

3.HTTP란 무엇인가?

HTTP는 Hypertext Transfer Protocol의 약자로, 인터넷에서 데이터를 주고받기 위한 프로토콜(통신규약)이다.
웹 브라우저와 웹 서버 사이에서 데이터를 전송하는 데 사용되며, 대부분의 웹 페이지에서 사용된다.
HTTP는 인터넷에서 가장 중요한 프로토콜 중 하나이다.
HTTP는 요청(Request)응답(Response)로 구성되어 있다.
요청은 클라이언트가 보내는 메시지이고, 응답은 서버가 클라이언트한테 보내는 메시지이다.
HTTP메서드가 있는데 이것은 클라이언트가 서버한테 보내는 메시지 종류를 뜻한다.
많이 쓰는 메서드는 GET, POST, PUT, DELETE가 있다.

3 - (1)리소스 메서드 종류

  • GET : 리소스 조회 (무엇을 달라)
    -서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달
    -메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음
  • POST : 요청 데이터 처리, 주로 등록에 사용 (등록, 저장 해줘!!)
    -메시지 바디를 통해 서버로 요청 데이터 전달
    -주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용
    -HTML 양식에 입력 된 필드와 같은 데이터 블록을 데이터 처리 프로세스에 제공 예) HTML FORM에 입력한 정보로 회원 가입, 주문 등에서 사용
    -게시판, 뉴스 그룹, 메일링 리스트, 블로그 또는 유사한 기사 그룹에 메시지 게시 예) 게시판 글쓰기, 댓글 달기
    -서버가 아직 식별하지 않은 새 리소스 생성 예) 신규 주문 생성
  • PUT : 리소스를 대체, 해당 리소스가 없으면 생성 (파일 저장, 덮어쓰기 와 비슷)
    -클라이언트가 리소스를 식별
    -클라이언트가 리소스 위치를 알고 URI 지정
  • PATCH : 리소스 부분 변경
  • DELETE : 리소스 삭제

3 - (2)HTTP 상태 코드

서버가 클라이언트에게 보내는 응답의 상태를 나타낸다.
상태 코드는 3자리 숫자로 구성되며, 첫 번째 자리는 상태의 종류를 나타내고, 두 번째와 세 번째 자리는 상세한 상태를 나타낸다. 대표적인 HTTP 상태 코드로는 200, 404, 500 등이 있다.

클라이어트가 보낸 요청의 처리 상태를 응답에서 아래와 같이 알려준다.

1xx (Informational): 요청이 수신되어 처리중
2xx (Successful): 요청 정상 처리
3xx (Redirection): 요청을 완료하려면 추가 행동이 필요
4xx (Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음
5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함
3xx (Redirection) - 요청을 완료하기 위해 유저 에이전트의 추가 조치 필요
리다이렉션
웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동
4xx (Client Error) - 클라이언트 오류
오류의 원인이 클라이언트에 있음
중요! 클라이언트가 이미 잘못된 요청, 데이터를 보내고 있기 때문에, 똑같은 재시도가 실패함
5xx (Server Error) - 서버 오류
서버 문제로 오류 발생
서버에 문제가 있기 때문에 재시도 하면 성공할 수도 있음(복구가 되거나 등등)

4.MVC 패턴이란?

MVC란 Model-View-Controller의 약자로, 소프트웨어에서 사용되는 아키텍처 디자인 패턴 중 하나이며,
애플리케이션을 세 가지 역할로 분리하여 개발하는 방식을 말한다.

4-(1)MVC 패턴의 사용 이유

Business logic과 Presentation logic을 분리하기 위함

Business logic : 데이터의 처리 및 응용을 수행하는 로직
Presentation logic : 화면상의 디자인 구성을 위한 로직

이렇게 구분하면, 각각의 역할이 분리되어 있기 때문에 유지보수와 코드 재사용성이 쉬워지고, 개발자들 간의 협업이 용이해지며,
코드의 가독성과 확장성이 높아지기 때문에 애플리케이션의 유지보수와 개발이 보다 효율적으로 이루어질 수 있다.

4-(2)세 가지 역할 분리(Model, View, Controller)

Model

데이터 저장소와 연동하여 사용자의 데이터를 저장하거나
데이터를 출력하는 등의 일을 수행함 여러개의 데이터 변경작업(추가, 변경 , 삭제)
여러개의 데이터 변경작업을 하나로 묶는 트랜잭션의 역할도 수행함 DAO class중 service에 해당됨

예시 코드)

public class PostService {

    private final PostRepository postRepository;

    @Transactional
    public Post createPost(PostDto postDto) {
        Post post = new Post(postDto);
        postRepository.save(post);
        return post;
    }

View

모델이 처리한 데이터나 결과를 바탕으로 사용자에게 출력할 화면을 만드는 역할
뷰 컴포넌트는 html , css , Js를 사용하여 출력할 UI를 생성해줌 생성된 UI는 웹 브라우저가 출력

Controller

Client의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는 Model을 호출
클라이언트가 보낸 데이터가 있다면 Model을 호출할 때 전달하기 쉽게 데이터의 가공
모델의 업무 수행이 완료되면 그 결과를 바탕으로 화면을 구성하도록 View에 전달

예시 코드)

    public Post createPost(@RequestBody PostDto postDto) {
        System.out.println(postDto.toString());
        return postService.createPost(postDto);
        

DTO / Entity

DTOEntity는 데이터베이스와 애플리케이션 간의 데이터 전달을 위해 사용되는 객체이다.

DTO(Data Transfer Object)
데이터를 전달하기 위한 객체. 주로 View와 Controller 사이에서 데이터를 주고받을 때 활용.
getter, setter 메소드 포함. 이 외의 비즈니스 로직은 포함하지 않음.

코드 예시)

@Getter
@ToString
public class PostDto {
    private String username;
    private String password;
    private String title;
    private String contents;
}

Entity
실제 DB 테이블과 매핑되는 핵심 클래스.
절대로 Entity를 요청이나 응답 값을 전달하는 클래스로 사용해서는 안된다.
이를 기준으로 테이블이 생성되고 스키마가 변경되기 때문.
DTO처럼 setter 메소드를 가지는 경우 가변 객체로 활용 가능. 비즈니스 로직 포함.

코드 예시)

@Getter
@Entity
@NoArgsConstructor
public class Post extends Timestamped{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(nullable = false)
    private String username;

5.Spring의 MVC

Spring MVC는 웹 애플리케이션을 개발하기 위한 MVC 패턴의 구현체이며, TomcatServlet API를 기반으로 동작한다.

Tomcat
Tomcat은 Apache Foundation에서 개발한 오픈 소스 웹 애플리케이션 서버이며, Servlet API를 지원한다.
Spring MVC는 Tomcat에서 동작하기 위해, 웹 애플리케이션을 Tomcat에 배포하고, Tomcat의 Servlet Container에서 Servlet을 실행하여 Spring MVC를 사용할 수 있다.

따라서, Servlet을 사용하는 웹 애플리케이션을 개발하려면 Tomcat과 같은 Servlet 컨테이너가 필요하다.

Servlet
Servlet은 Java 웹 애플리케이션에서 동작하는 Java 클래스로, HTTP 요청을 처리하고, HTTP 응답을 생성한다.
Spring MVC에서는 DispatcherServlet이라는 Servlet을 사용하여 요청을 처리하며, DispatcherServlet은 Servlet Container에서 HTTP 요청을 받아들이고, 해당 요청을 처리하기 위해 Spring MVC의 다른 구성요소를 호출한다.

정리

Spring MVC는 Servlet을 사용하여 웹 애플리케이션을 구현하면서도 개발자가 보다 쉽게 웹 애플리케이션을 구성하고 유지보수할 수 있도록 도와주고,
Servlet의 기능을 보완하여, 데이터베이스와의 연결, AOP(Aspect Oriented Programming), DI(Dependency Injection) 등 다양한 기능을 제공한다.
이러한 Spring MVC의 장점을 이용하여 보다 효율적인 웹 애플리케이션을 구현할 수 있다.

profile
미래는 개발이다

0개의 댓글