본문 바로가기

전체 글241

[JPA] 테이블 연관관계 정리 ORM 사용 이유 객체의 참조 방식과 관계형 DB의 연관관계는 다르다. 예를 들어 Table의 외래값을 그대로 객체로 옮긴다면 **Id 형태의 필드를 선언하지만 객체의 개념에서 다른 객체를 참조하는 개념은 아니다. 물론 Id값을 이용하여 조회하는데 사용할 수는 있지만, 객체지향 프로그래밍답지 않다. 따라서 테이블의 외래키 대신 참조 값을 넣고 어노테이션을 이용하여 테이블의 연관관계를 정의하는 것이다. 프로그래밍을 할 때는 OOP처럼 코드를 작성하되, DB에 저장할 때는 외래키로 매핑해주는 것이다. 객체 A와 B가 있다면 A에서 B로의 참조, B에서 A로의 참조를 가질 수 있다. 다만 테이블의 경우에는 한쪽 테이블에 외래키가 존재하는 경우 A테이블로 B를 JOIN, B테이블로 A를 JOIN하므로 방향을 가.. 2023. 8. 6.
[JPA] 어노테이션 정리 @Entity @Entity가 붙은 클래스는 JPA가 관리하는 엔티티이다. 기본 생성자를 필수적으로 가지고 있어야 한다. final 클래스와 enum, interface, inner 클래스에는 사용되지 않는다. 저장할 필드에 final을 붙이지 말아야 한다. (너무 당연한 이야기) @Table 운영 장비에서 절대 create, create-drop, update 속성을 사용하지 마라. 초기 단계에는 create 또는 update 테스트 서버는 update 또는 validate 스테이징과 운영 서버는 validate 또는 none @Column name: 이름 insertable, updatable: 데이터 추가 여부 / 업데이트 가능 여부 Length: 길이 Column Definition: 직접 생성 .. 2023. 8. 5.
HTTP, CSR, SSR + 자바 웹 기술 역사 HTTP API 다양한 시스템 연동 1. 주로 JSON 형태로 데이터 통신 2. UI 클라이언트 접점 - 앱 클라이언트(아이폰, 안드로이드, PC) - 웹 브라우저에서 자바스크립트를 통한 HTTP API 호출 - React, Vue.js 같은 웹 클라이언트 3. 서버 to 서버 - 주문 서버 => 결제 서버 - 기업간 데이터 통신 SSR - 서버 사이드 렌더링 - HTML 최종 결과를 서버에서 만들어서 웹 브라우저 전달 - 주로 정적인 화면에 사용 - 관련 기술: JSP, 타임리프 => 백엔드 개발자 CSR - 클라이언트 사이드 렌더링 - HTML 결과를 자바 스크립트를 사용해 웹 브라우저에서 동적으로 생성해서 적용 - 주로 동적인 화면에 사용. 웹 환경을 마치 앱처럼 필요한 부분부분 변경한다. 예) 구.. 2023. 8. 1.
쓰레드 풀, 멀티 쓰레드 환경 쓰레드 1. 애플리케이션 코드를 하나하나 순차적으로 실행하는 것은 쓰레드 2. 자바 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행 3. 쓰레드가 없다면 자바 어플리케이션 실행이 불가능 4. 쓰레드는 한번에 하나의 코드 라인만 수행 5. 동시 처리가 필요하면 쓰레드를 추가로 생성 요청 마다 쓰레드 생성 장점 - 동시 요청을 처리할 수 있다. - 리소스(CPU, 메모리)가 허용될 때 까지 처리 가능 - 하나의 쓰레드가 지연 되어도 나머지 쓰레드는 정상 작동한다. 단점 - 쓰레드 생성 비용은 매우 비싸다. (고객의 요청이 올 떄마다 쓰레드를 생성하면, 응답 속도가 늦어진다) - 쓰레드는 컨텍스트 스위칭 비용이 발생한다. - 쓰레드 생성에 제한이 없다. (고객 요청이 많이와서 CPU 할당량을 .. 2023. 8. 1.
웹 서버, 웹 어플리케이션 서버, 서블릿 웹 서버(Web Server) 1. HTTP 기반으로 동작 2. 정적 리소스 제공, 기타 부가기능 3. 정적 HTML, CSS, JS, 이미지, 영상 예) NGINX, APACHE 웹 어플리케이션 서버(WAS, Web Application Server) 1. HTTP 기반으로 동작 2. 웹 서버 기능 포함 (+ 정적 리소스 제공 가능) 3. 프로그램 코드를 실행하여 어플리케이션 로직 수행 - 동적 HTML, HTTP, API(JSON) - 서블릿, JSP, 스프링 MVC 예) 톰캣(Tomcat), Jetty, Undertow 웹 서버, 웹 어플리케이션 서버(WAS 차이) 1. 웹 서버는 정적 리소스 파일, WAS는 어플리케이션 로직 2. 사실 둘의 용어도 경계도 모호함 - 웹 서버도 프로그램을 실행하는 .. 2023. 8. 1.
프록시 캐시, no-cache vs must-revalidate 프록시 캐시 Cache-Control 캐시 지시어 - 기타 1. Cache-Control: public 응답이 public 캐시에 저장되어도 된다. 2. Cache-Control: private 응답이 해당 사용자만을 위한 것이다. private 캐시에 저장해야 한다. (기본값) 3. Cache-Control: s-maxage 프록시 캐시에만 적용되는 max-age 4. Age: 60 (HTTP 헤더) 오리진 서버에서 응답 후 프록시 캐시 내에 머문 시간 캐시를 원서버에서 미리 적재를 해놓거나 누군가 자주 접근한 리소스인 경우 빠르게 접근이 가능하다. 캐시 무효화 1. Cache-Control: no-cache, no-store, must-revalidate 2. Pragma: no-cache HTTP .. 2023. 8. 1.
캐시 기본 동작, 조건부 요청 캐시 기본 동작 캐시가 없을 때 1. 데이터가 변경되지 않아도 계속 네트워크를 통해서 데이터를 다운로드 받아야 한다. 2. 인터넷 네트워크는 매우 느리고 비싸다. 3. 브라우저 로딩 속도가 느리다. 4. 느린 사용자 경험 캐시 적용 1. 캐시 덕분에 캐시 가능 시간 동안 네트워크를 사용하지 않아도 된다. 2. 비싼 네트워크 사용량을 줄일 수 있다. 3. 브라우저 로딩 속도가 매우 빠르다. 4. 빠른 사용자 경험 캐시 시간 초과 캐시 유효 시간이 초과하면, 서버를 통해 데이터를 다시 조회하고 캐시를 갱신한다. (네트워크 다운로드) 검증 헤더와 조건부 요청 캐시 유효 시간이 초과해서 서버에 다시 요청하는 상황은 다음과 같다. 1. 서버에서 기존 데이터를 변경함 2. 서버에서 기존 데이터를 변경하지 않음 검증.. 2023. 8. 1.
쿠키(Cookie) 쿠키 1. Set-Cookie: 서버에서 클라이언트로 쿠키 전달(응답) 2. Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달 쿠키 미사용시, 로그인 한 이후에도 사용자 정보가 저장이 안 되는 모습을 볼 수 있다. 모든 요청과 링크에 사용자 정보를 포함하면? 귀찮고 보안 이슈 발생, 브라우저 종료 후 다시 열면? 예) set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure 1. 사용처 - 사용자 로그인 세션 관리 - 광고 정보 트래킹 2. 쿠키 정보는 항상 서버에 전송됨 - 네트워크 트래픽 추가 유발 - 최소한의 정보만 사용(세션 i.. 2023. 8. 1.
헤더 일반 정보, 특별 정보 헤더 일반 정보 1. From: 유저 에이전트의 이메일 정보 2. Referer: 이전 웹 페이지 주소 3. User-Agent: 유저 에이전트 애플리케이션 정보 4. Server: 요청을 처리하는 오리진 서버의 소프트웨어 정보 5. Date: 메시지가 생성된 날짜 From 유저 에이전트의 이메일 정보 1. 일반적으로 사용되지 않음 2. 검색 엔진 같은 곳에서 주로 사용 3. 요청에서 사용 Referer 이전 웹 페이지 주소 1. 현재 요청된 페이지의 이전 웹 페이지 주소 2. a => b로 이동하는 경우, b를 요청할 때 Referer: a를 포함해서 요청 3. Referer 정보를 통해 유입 경로 분석 가능 4. 요청에서 사용 User-Agent 유저 에이전트 애플리케이션 정보 예시)user-agen.. 2023. 8. 1.
Content Negotiation, 전송 방식 협상(콘텐츠 네고시에이션) 클라이언트가 선호하는 표현 요청 1. Accept: 클라이언트가 선호하는 미디어 타입 전달 2. Accept-Charset: 클라이언특 선호하는 문자 인코딩 3. Accept-Encoding: 클라이언트가 선호하는 압축 인코딩 4. Accept-Language: 클라이언트가 선호하는 자연언어 *협상 헤더는 요청시에만 사용한다. 전송 방식 설명 단순 전송 압축 전송 분할 전송 범위 전송 출처: HTTP 웹 기본 지식 강의(김영한) 2023. 8. 1.
HTTP 헤더 HTTP 헤더 1. HTTP 전송에 필요한 모든 부가정보 예) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리정보 등 2. 표준 헤더가 많다. https://en.wikipedia.org/wiki/List_of_HTTP_header_fields 3. 필요시 임의의 헤더 추가 가능 예) helloworld: hihi HTTP BODY RFC7230 버전(최신) 1. 메시지 본문(message body)을 통해 표현 데이터 전달 2. 메시지 본문을 페이로드(payload)라고 한다. 3. 표현은 요청이나 응답에서 전달할 실제 데이터 4. 표현 헤더는 표현 데이터를 해석할 수 있는 정보 제공 - 데이터 유형(html, json), 데이터 길이, 압축 정보 등등.. 2023. 8. 1.
상태코드 400, 500 4xx (Client Error) 1. 클라이언트의 요청에 잘못된 문법 등으로 서버가 요청을 수행할 수 없음. 2. 오류의 원인이 클라이언트에게 있다. 3. 클라이언트가 이미 잘못된 요청, 데이터를 보내고 있기 때문에 똑같은 재시도가 실패한다. 400 Bad Request 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음 1. 요청 구문, 메시지 등등 오류 2. 클라이언트는 요청 내용을 다시 검토하고, 보내야 한다. 예) 요청 파라미터가 잘못되거나, API 스펙이 맞지 않을 때 401 Unauthorized 클라이언트가 해당 리소스에 대한 인증이 필요함 1. 인증(Authentication) 되지 않음 2. 401 오류 발생시 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설.. 2023. 8. 1.
상태 코드 200, 300 상태코드 클라이언트가 보낸 요청의 처리 상태를 response에서 알려주는 기능 - 1xx (Informational) 요청이 수신되어 처리중 - 2xx (Successful) 요청 정상 처리 - 3xx (Redirection) 요청을 완료하려면 추가 행동이 필요 - 4xx (Client Error) 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음 - 5xx (Server Error) 서버 오류, 서버가 정상 요청을 처리하지 못함 2xx (Sucessful) - 200 OK - 201 Created - 202 Accepted - 204 No Content 202 Accepted 요청이 접수 되었으나 처리가 완료되지 않았음 - 배치 처리 같은 곳에서 사용 - 요청 접수 후 1시간 뒤 배.. 2023. 8. 1.
URI 설계 예시(POST, PUT, HTML Form) 회원관리 시스템(API 설계 - POST 기반 등록) 1. 회원 목록 /members => GET 2. 회원 등록 /members => POST 3. 회원 조회 /members/{id} => GET 4. 회원 수정 /members/{id} => PATCH, PUT, POST 5. 회원 삭제 /members/{id} => DELETE POST 신규 자원 등록 특징 1. 클라이언트는 등록될 리소스의 URI를 모른다. - 회원 등록 /members => POST 2. 서버가 새로 등록한 리소스 URI를 생성해준다. - HTTP/1.1 201 Created Location: /members/100 3. 컬렉션(Collection) - 서버가 관리하는 리소스 디텍토리 - 서버가 리소스의 URI를 생성하고 관리 -.. 2023. 8. 1.
HTTP 메서드의 속성, 데이터 조회, HTML Form HTTP 메서드의 속성 1. 안전(Safe Methods) 2. 멱등(Indempotent Methods) 3. 캐시 가능(Cacheable Methods) 안전 호출해도 리소스를 변경하지 않는다. 호출을 많이 해서 서버가 터지면 abc%EA%B9%80 3. HTML form은 GET 전송도 가능 4. Content-Type: multipart/form-data 파일 업로드 같은 바이너리 데이터 전송시 사용 다른 종류의 여러 파일과 폼의 내용 함께 전송 가능(multipart) 출처: HTTP 웹 기초 강의(김영한) 2023. 7. 31.
HTTP 메서드 HTTP 메서드 종류 1. GET: 리소스 조회 2. POST: 요청 데이터 처리, 주로 등록에 사용 3. PUT: 리소스 대체, 리소스가 없으면 생성 4. PATCH: 리소스 부분 변경 5. DELETE: 리소스 삭제 GET 1. 리소스 조회 역할 2. 메시지 바디를 사용하지 않고 주로 쿼리 파라미터를 사용한다. POST 처리 예시 1. HTML FORM에 입력한 정보로 회원가입, 주문 등에 사용 2. 게시글 글쓰기, 댓글 달기 3. POST 요청은 리소스에 처리에 대한 주어진 양식은 없다. (애매하면 post) PUT 1. 기존 리소스를 대체한다. (없으면 생성, 있으면 대체) 2. 클라이언트가 리소스의 위치를 알고 있다는 점에서 POST와 다르다. PATCH 1. 리소스 부분 변경 DELETE 1... 2023. 7. 30.
비연결성, HTTP 요청과 응답 메시지 비연결성(Connectionless) 1. HTTP는 기본이 연결을 유지하지 않는 모델 2. 초 단위 이하의 빠른 속도로 응답 3. 웹 사이트 내에서 요청을 동시에 처리하는 상황은 매우 적다. (예외: 특정 시간에 할인 이벤트) 4. 서버 자원을 효율적으로 이용한다. 주로 게임, 화상 회의 등에서 socket 형태로 사용한다. 요청 - 응답 사이클 이후에 연결을 유지하지 않는다. 비연결성의 한계와 극복 1. TCP/IP를 새로 맺어야 한다. (3 way handshaking 시간 추가) 2. 웹 브라우저는 HTML뿐만 아니라 자바스크립트, css, 추가 이미지 등 많은 자원이 함께 다운로드 된다. 3. 지금은 HTTP 지속 연결(Persistent Connections)로 문제 해결 4. HTTP/2, .. 2023. 7. 30.
HTTP, Stateful과 Stateless HTTP(HyperText Transfer Protocol) HTTP로 전송하는 것들 1. HTML, Text, 이미지, 음성, 영상, 파일 2. JSON, XML 3. 서버간 데이터 HTTP 역사 HTTP/0.9 1991년: GET 메서드만 지원, HTTP 헤더X • HTTP/1.0 1996년: 메서드, 헤더 추가 • HTTP/1.1 1997년: 가장 많이 사용, 우리에게 가장 중요한 버전 • RFC2068 (1997) -> RFC2616 (1999) -> RFC7230~7235 (2014) • HTTP/2 2015년: 성능 개선 • HTTP/3 진행중: TCP 대신에 UDP 사용, 성능 개선 기반 프로토콜 TCP: HTTP/1.1, HTTP/2 UDP: HTTP/3 현재 HTTP/1.1을 주로 사용(.. 2023. 7. 30.
PORT, DNS, URL PORT 같은 IP 내에서 프로세스를 구분하는 역할을 한다. 0~65535: 할당 가능 0~1023: 잘 알려진 포트(사용하지 않는 것이 좋다) FTP: 20, 21 Telnet: 23 http: 80 https: 443 DNS(Domain Name System) IP는 기억하기 어렵다. IP는 변경될 수 있다. 전화번호부에 비유 도메인 명을 IP주소로 변환한다. URL 구조 웹브라우저 요청 흐름 1. 웹 브라우저가 HTTP 요청메시지 생성 2. TCP/IP 패킷 생성(IP, PORT 정보) 2023. 7. 29.
IP 인터넷 프로토콜, TCP/UDP IP 인터넷 프로토콜의 역할 지정한 IP주소에 데이터 전달 패킷이라는 통신 단위로 전달 패킷에는 어떤 정보가 있을까? 출발지 IP, 도착지 IP 정보 IP 프로토콜의 한계 1. 비연결성 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 2. 비신뢰성 중간에 패킷이 사라지면? 패킷이 순서대로 안 오면? 패킷은 서버를 타면서 이동하기 때문에 보내는 패킷이 항상 같은 경로로 이동한다는 보장이 없다. 3. 중복 IP 문제 같은 IP를 사용하는 서버에서 통신하는 어플리케이션이 둘 이상인 경우? 어플리케이션단 프로그램으로 메시지를 전달하면, socket 라이브러리를 통해 전달이 되고 TCP/IP 패킷을 생성한다. 이후 네트워크 장비를 통해 메시지가 전달된다. TCP 특징 연결 지향, 3 way handsh.. 2023. 7. 29.