2023.02.17 TIL

SUADI·2023년 2월 17일
0

수료하고 한 달 이내로 취업하리라 다짐했지만 건강이 회복이 안돼서 취업은 커녕 공부도 제대로 못하고 있어서 걱정이다. 할 수 있는데까지 해보자..

저번 TIL에 스프링의 특징에 대해 간략히 알아본 것에 이어서 이번에는 JPA에 대해 되짚어보는 시간을 가지려고 한다. 공부를 했었는데도 머릿속에 정리가 안되다보니 말로 내뱉기가 힘들어서 머리 나쁜 나에겐 반복숙달만이 답이다.

[1] JPA

JPA는 Java Persistence API의 약자이다. JPA를 알기 위해서는 persistence라는 단어에 대해 알고 있어야만 한다. persistence는 고집, 없어지지 않고 오랫동안 지속됨이라는 사전적 의미를 가지고 있다. JPA에서는 이를 영속성이라고 번역해서 사용하는데 영속성이란 여러 의미들에서 유추할 수 있듯이 '데이터를 생성한 프로그램이 종료되더라도 데이터가 사라지지 않는 특징'이다. 영속성은 관계형 대이터베이스 등을 활용하여 구현한다. 영속성을 갖지 않은 데이터는 단지 메모리 내에만 존재하기 때문에 프로그램이 종료됨과 동시에 사라진다.

JPA는 자바 ORM에 대한 API 표준명세이고, 인터페이스의 모음이다. 따라서 구현체가 없고, 사용하기 위해서는 ORM 프레임워크를 선택해야 한다. 프레임워크 중 가장 대중적인 것이 하이버네이트이다.

그렇다면 ORM은 무슨 의미일까? Object Relational Mapping의 약자로 자바의 객체(Object)와 관계형 데이터베이스(RDBMS)의 데이터를 매핑한다는 의미이다. OOP는 클래스를 이용하고, RDBMS는 테이블을 이용하기 때문에 객체 모델과 관계형 모델의 패러다임 불일치가 존재한다. 예를 들면 테이블 내에는 객체 타입의 데이터를 저장할 수가 없다. 이를 해결하기 위해 나온 것이 ORM이다. 과거에는 기준을 RDBMS에 두고 객체를 만들어야 했기 때문에 객체지향적인 코드를 짜기 어려웠지만 지금은 ORM을 통해 프로그래밍 언어의 관점에서 데이터베이스에 접근할 수 있다. 또한 ORM을 통해 객체간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결할 수 있다. 과거에는 일일히 SQL문을 작성해야만 했기 때문에 비즈니스 로직에 집중하기 힘든 구조였다.

[2] HTTP VS Socket

{1} HTTP

HyperText Transfer Protocol의 약자로 말그대로 HTML 파일을 전달해주는 프로토콜이다. 웹브라우저와 웹서버간의 통신을 위해 설계되었다. HTML 파일을 전송하기 위한 목적으로 만들어졌으나 현재는 JSON, Image 파일도 전송 가능하다.

통신 방식은 클라이언트의 요청이 있을 경우에만 서버가 응답하고 바로 연결이 끊어지는 방식으로 즉, 단방향 통신이다. 계속 연결을 유지할 필요가 없으므로 부하가 적지만 클라이언트의 요청이 있을 때마다 연결을 해주어야하기 때문에 성능이 떨어질 수 있다.

{2} Socket

소켓이란 두 프로그램이 서로 데이터를 주고 받을 수 있도록 양쪽에 생성되는 통신 단자이다. 즉, 웹소켓은 웹서버, 웹브라우저 양쪽에서 양방향 통신이 이루어져 서로 요청을 보낼 수 있는 통신 방법이다. 항상 통신을 유지하고 있어야 하기 때문에 HTTP 통신에 비해 리소스가 많이 소모되는 반면 통신을 유지해야만 하는 실시간 채팅, 스트리밍 등의 프로그램에서는 소켓통신을 이용하는 것이 적합하다.

{3} 정리

따지고 보면 HTTP 통신도 결국 Socket 통신이다. 소켓은 IP와 Port Number을 사용해 만들어진 양 끝단을 의미하는데 IP와 Port Number을 활용하는 TCP 레이어 위에 올라간 HTTP 또한 같은 방식을 사용한다. HTTP 통신은 소켓통신을 활용한 통신의 일종이기 때문이다. 하지만 이 둘을 굳이 구분한 이유는 한쪽에서만 요청에 대한 응답을 하는 웹통신의 특성상 HTTP가 하나의 중요한 프로토콜로 구분되었기 때문이다.

0개의 댓글

관련 채용 정보