이전 시간에 배운 것

1. 스프링부트 동작 원리

(1) 내장 톰캣을 가진다.

(2) 서블릿 컨테이너


오늘은 (2) 서블릿 컨테이너를 배우기 전에 Tomcat에 대한 공부를 먼저 할 것이다.

http: 소켓으로 만들어짐. 
http같은 프로그램이 운영체제를 통해 소켓을 불러와서 쓰는 것이 시스템 콜이라고한다. (시스템이 들고 있는 기능을 콜함)

톰캣과 웹 서버에 대한 차이를 알아야하고, 웹 서버에 대해서 이해를 해야한다.

을이 갑에게 request(요청)하는 형식, request할때는 IP주소를 알아야하고, 어떤 Data가 필요한지 URL을 알아야한다. (자원을 요청하는 주소) URL의 L은 Location의 L이다. Request가 들어가면 갑이 Response를 해준다. 이때 갑이 웹서버이다. 갑은 을의 IP주소를 모르고 요청할때만 응답해주는 구조이다. 요청하지 않았을때 응답을 못함. 

소켓통신은 연결되어있기 때문에 언제나 데이터를 전달해 줄 수 있지만, 웹서버는 갑이 을의 IP주소를 모르기 때문에 데이터를 요청시에만 보낼 수 있다. 이때 자원들은 Static자원이라고 한다. 

 

그래서 톰캣이 뭐냐?

흔히 사용하는 웹서버 중 하나가 아파치이다. 컴퓨터에 특정 폴더인 C/Work라는 폴더를 공유한다고 하자. .JSP(자바코드)를 request을 하면, 아파치는 자바 코드를 이해하지 못해서 응답하지 못한다. 그렇기 때문에 톰캣을 달아서 이해하지 못하는 요청에 대한 제어권을 톰캣에게 넘기고, 톰캣은 JSP파일을 자바 파일로 컴파일하며, .html에 덮어씌운다. 그리고 아파치에게 돌려주고, 그 html파일을 아파치가 response하는 구조이다. 또한 웹브라우저도 JSP를 이해하지 못하기에 톰캣이 컴파일해서 돌려줘야 이해할 수 있다.

다음시간에 배울 내용

(2) 서블릿 컨테이너 (진짜)

이 블로그 포스팅은 인프런 최주호님의 스프링부트 개념정리(이론) 강의에 대한 정리 포스팅입니다. 
다음은 강사님의 강의 링크입니다. 무료 강의라서 가입만 하면 볼 수 있습니다. (강의 링크)

 

이전 시간에 배운 것

1. JPA란?

  • JPA는 Java Persistence API이다.
  • JPA는 ORM 기술이다.
  • JPA는 반복적인 CRUD 작업을 생략하게 해준다.
  • JPA는 영속성 컨텍스트를 가지고 있다.
  • JPA는 DB와 OOP의 불일치성을 해결하기 위한 방법론을 제공한다. (DB는 객체저장 불가능)

  • JPA는 OOP의 관점에서 모델링을 할 수 있게 해준다. (상속, 콤포지션, 연관관계)
Class Car {
    int id;
    String name:
    String color:
    Engine engine; // <- 컴포지션
}

Class Engine {
    int id;
    int power;
}

잘 만든 엔진을 차에 상속하고 싶지만, 엔진이 차의 부모가 되는 관계가 형성이 되면 말이 안된다. 컴포지션이라는 방법을 써야한다. (결합)  
JPA는 DB를 먼저만들고 그 테이블을 통해 Car클래스를 모델링하는게 아니라, 클래스를 먼저 만들고 이를 토대로 자동생성을 해서 DB에 테이블을 만들어주기 때문에 다음처럼 만들어진다.

모든 클래스에 날짜를 넣고 싶을때 

Class EntityDate{
    Timestamp createDate;
    Timestamp updateDate;
}

이처럼 EntityDate 클래스를 만들고 각 클래스에 상속시킨다.

Class Car extends EntityDate {
    int id;
    String name:
    String color:
    Engine engine; // <- 컴포지션
}

Class Engine extends EntityDate {
    int id;
    int power;
}
  • 방언 처리가 용이하여 Migration하기 좋음. 유지보수에도 좋음

스프링을 JPA를 이용해서 DB에 접근을 한다. 이때 JPA가 무조건 MySQL만 지원을 한다면 DB접근이 MySQL밖에 안됨. 하지만 Dialect( 오라클, 마리아, MSSQL, PostgreSQL)들이 있기때문에 JPA에 추상화객체가 붙어있어서 각 Dialect에 연결되는 구조.

  • JPA는 쉽지만 어렵다.

    개념이 조금 헷갈림. 기존에 사용하던 방식과 다르고 생소한 개념들이 많이 나오는데, 적응하면 쉬워짐. 적응하다 보면 또 무자비한 Select 때문에 해결하기 어려워짐. 
이 블로그 포스팅은 인프런 최주호님의 스프링부트 개념정리(이론) 강의에 대한 정리 포스팅입니다. 
다음은 강사님의 강의 링크입니다. 무료 강의라서 가입만 하면 볼 수 있습니다. (강의 링크)

'웹 개발 > Spring Boot' 카테고리의 다른 글

톰캣이란 무엇일까요?  (0) 2023.08.14
HTTP가 무엇일까요?  (0) 2023.08.03
영속성 컨텍스트란 무엇인가요?  (0) 2023.07.31
ORM이란 무엇인가요?  (0) 2023.07.31
JPA란 무엇인가요?  (0) 2023.07.30

이전 시간에 배운 것

1. JPA란?

  • JPA는 Java Persistence API이다.

  • JPA는 ORM 기술이다.
    ORM은 Object Relational Mapping의 약자로, 오브젝트를 데이터베이스에 연결하는 방법론 중 하나이다. 
    "ORM은 나의 하인 같은 기술"
    추상적인 개념을 현실세계로 뽑아내는 개념을 모델링이라고 한다.
    Team 테이블에 ID, Name, Year를 넣고 자바에서 사용을 할텐데, Input과 Output이 각각 DML(Delete, Update, Insert), Select라고한다. 자바는 테이블 데이터 타입을 가지지 않는다. 따라서 클래스를 통해서 데이터베이스의 테이블을 모델링해야한다.

class Team{
	int id;
    String name;
    String year;
}

DB 세상에 있는 데이터를 자바 세상에 모델링한다. 

그런데 ORM은 Class를 먼저 만들고 DB를 자동생성할 수 있는 기술이다. JPA가 가지고 있는 인터페이스 덕분에 자바 클래스를 짜면 테이블을 만들 수 있다. 

  • JPA는 반복적인 CRUD 작업을 생략하게 해준다.
    Select 1건
    Select All 전체
    Delete 1건
    Update 1건
    Insert 1건
    자바에서 DB로 연결하기위해서 신원을 확인하고 DB가 세션을 오픈하면 커넥션 시킬 수 있다. 이때 자바가 쿼리를 전송한다. DB는 해당 쿼리를 통해, 어떤 작업을 통해 데이터를 만들어내고, 자바에 응답한다. 응답시 DB 타입값과 자바 타입값이 다르기 때문에 자바 Object로 바꿔야한다. 이때 자바 Object로 바꾸는 작업은 단순한 반복노동이기에 JPA를 사용해서 전송된 쿼리에 대한 응답이 있을때 이 데이터를 받고 자바 오브젝트로 바꾸고 연결된 세션을 끊고, 연결된 커넥션을 끊고하는 이러한 모든 일련의 과정들을 함수 하나로 제공해준다. 기본적인 CRUD를 단순하게 처리하도록 도와준다. 이런 단순한 CRUD를 도와주는 것도 ORM이 해준다.

다음 시간에 배울 내용

  • JPA는 영속성 컨텍스트를 가지고 있다.
  • JPA는 DB와 OOP의 불일치성을 해결하기 위한 방법론을 제공한다. (DB는 객체저장 불가능)
  • JPA는 OOP의 관점에서 모델링을 할 수 있게 해준다. (상속, 콤포지션, 연관관계)
  • 방언 처리가 용이하여 Migration하기 좋음. 유지보수에도 좋음
  • JPA는 쉽지만 어렵다.
이 블로그 포스팅은 인프런 최주호님의 스프링부트 개념정리(이론) 강의에 대한 정리 포스팅입니다. 
다음은 강사님의 강의 링크입니다. 무료 강의라서 가입만 하면 볼 수 있습니다. (강의 링크)

+ Recent posts