일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 가비지 컬렉션
- Varchar
- text
- foreach
- 데이터 타입
- 자바
- 동시성 문제
- Locking Read
- Synchronized
- Di
- jpa
- MVCC
- 백엔드
- gc
- Atomic Type
- iterable
- CAS
- java
- reflection
- 가비지 컬렉터
- MySQL
- db
- 동시성
- 스프링
- iterator
- Lock
- Today
- Total
목록전체 글 (98)
과정을 즐기자
HTTP header 란 HTTP 메세지에는 start line, header, empty line, message body 4부분으로 나뉘었는데 이번 글에서는 header에 대해서 알아보겠다. HTTP header에는 HTTP 전송에 필요한 모든 부가 정보가 들어있다. message body의 크기, 내용, 압축, 인증, 클라이언트 정보, 서버 정보 ... HTTP header는 header field ":" OWS field value 형식으로 작성한다. 예를들면 Content Length: 3423으로 작성할 수 있다. HTTP header 종류 이러한 header는 4가지로 분류할 수 있다. General header : 메세지 전체에 적용되는 정보 request header : 요청 정보 res..
HTTP Status Code 클라이언트가 서버로 HTTP 요청 메세지를 보냈을 때 서버가 클라이언트에게 HTTP 응답 메세지를 보내준다. HTTP 응답 메세지의 start line에 HTTP Status Code가 있는데 요청의 처리 상태를 나타낸다. Status Code는 100번대부터 500번대까지 있다. 1xx (Information) : 요청이 수신되어 처리중 (거의 사용하지 않는다) 2xx (Successful) : 요청 정상 처리 3xx (Redirection) : 요청을 완료하려면 추가 행동이 필요 4xx (Client Error) : 클라이언트 오류 5xx (Server Error) : 서버 오류 2xx - 요청 정상 처리 200 OK 요청을 성공했을 때 보낸다. 예를들어 조회를 하려고 ..
HTTP 메소드 HTTP 메소드는 HTTP 요청 메세지에서 start line 시작 부분에 적혀있다. (응답 메세지에는 없다) 주요 메소드에는 GET, POST, PUT, PATCH, DELETE 가 있고 기타 메소드에는 HEAD, OPTIONS, CONNNECT, TRACE 가 있다. 이러한 메소드를 통해 어떠한 행위를 할 것인지를 알려줄 수 있다. 이번 글에서는 주요 메소드에 대해서 설명하겠다. GET GET은 리소스를 조회할 때 사용한다. HTTP 요청 메세지는 start-line, header, empty-line, message body로 나뉘었다. 클라이언트 -> 서버 GET의 경우 message body를 통해 전달할 수 있지만 지원하지 않는 곳이 많기 때문에 거의 사용하지 않는다. 어떤 것..
HTTP란? HTTP는 HyperText Transfer Protocol의 약자로 HTML 문서를 주고 받을 수 있는 프로토콜이다. 하지만 HTML뿐만 아니라 Text, 이미지, 음성, 파일, JSON 거의 모든 형태의 데이터를 전송할 수 있다. HTTP 특징 클라이언트 서버 구조 HTTP 메세지에는 요청 메세지, 응답 메세지가 있다. 클라이언트가 서버에 요청을 하고 서버가 클라이언트에게 응답을 하는 구조이다. 이렇게 역할을 분담을 하는 것이 중요하다. 클라이언트 문제면 클라이언트만 확인하면 되고 서버에 문제가 있으면 서버 쪽만 확인하면 된다. 무상태 프로토콜 (Stateless) 무상태 프로토콜이라는 것은 클라이언트의 상태를 서버에 저장하지 않는다는 것이다. 다시 말해 서버가 클라이언트의 상태를 몰라도..
==, equals, hashcode 비교 == (동일성 비교) 두 객체가 있을 때 == 비교는 두 객체가 완전히 같다는 것이다. 즉 단순히 값뿐만 아니라 주소 값 자체가 같아야 true를 반환한다. equals (동등성 비교), hashcode equals, hashcode는 모든 객체의 부모 클래스인 Object 클래스에 정의되어 있다. public boolean equals(Object obj) { return (this == obj); } 기본적으로 equals는 동일성 비교이다. 동일성 비교가 아니라 동등성 비교가 필요할 때 재정의해서 사용한다. 예를들어 Integer, String 처럼 값을 표현할 때 객체가 같은지 비교하는 것이 아니라 값 자체가 같은 지 비교하고 싶을 때 재정의 한다. Ha..
JPA의 데이터 타입 JPA의 데이터 타입을 가장 크게 분류하면 엔티티 타입과 값 타입으로 나눌 수 있다. 엔티티 타입의 특징 식별자(@Id)가 있어 식별자로 구분할 수 있다. 생성하고 영속화하고 소멸하는 생명주기가 있다. 어떤 한 엔티티가 다른 엔티티에서 얼마든지 참조될 수 있다. 즉 참조 값을 공유할 수 있다. 값 타입의 특징 식별자가 없다 생명 주기가 엔티티에 의존한다. 오직 하나의 주인만이 관리하게 해야하며 불변 객체로 만들고 공유하지 않는 것이 안전하다. 이제 값 타입에 대해서 더 자세히 알아보자 값 타입 값 타입은 3가지로 나눌 수 있다. 기본 값 타입 임베디드 타입 컬렉션 값 타입 기본 값 타입 기본 값 타입에는 자바 기본 타입, 래퍼 클래스, String이 있다. 이들은 위에서 말한 것 처..
프록시 엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다. Member와 Team 엔티티가 있을 때 필요한 정보는 Member인데 Member를 조회할 때 Team까지 데이터베이스에서 함께 조회하는 것은 효율적이지 않다. 따라서 Team 엔티티 값을 실제 사용하는 시점에 데이터베이스에서 조회하는 방법이 필요하다. 그 방법이 지연로딩이다. 이러한 지연 로딩 기능을 사용하려면 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요하고 이것을 프록시 객체라고 한다. Member member = em.find(Member.class, "member");위와 같이 엔티티를 직접 조회하면 조회한 엔티티를 실제 사용하든 사용하지 않든 데이터베이스를 조회하게 된다. Member member = em.get..
상속 관계 매핑 관계형 데이터베이스에는 객체지향 언어에서 다루는 상속이라는 개념이 없다. 대신 슈퍼타입 서브타입 관계라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. ORM에서 이야기하는 상속 관계 매핑은 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현하는 방법에는 3가지가 있다. 각각의 테이블로 변환하는 조인 전략 통합 테이블로 변환하는 단일 테이블 전략 서브타입 테이블로 변환하는 구현 클래스마다 테이블 전략 밑에서 설명할 예시에는 모두 Item 클래스를 부모 클래스로 만들고 Album, Movie, Book을 자식 클래스로 만들었다고 하자. 조인 전략 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모..
다대일 데이터베이스 테이블에서 일, 다 관계에서 외래 키는 항상 다쪽에 있다. 객체에서도 마찬가지로 연관관계의 주인이 다쪽으로 하면 다대일 관계이다. 예를들어 주문(order), 회원(member)가 있다고 하자. 한 회원이 여러 주문을 할 수 있다고 하면 주문과 회원은 다대일 관계이다. 이때 외래 키는 다쪽인 주문이 가지고 있다. 따라서 양방향 매핑에서 연관관계의 주인은 order이다. @ManyToOne @JoinColumn(name = "member_id") private Member member;위와 같이 단방향 매핑을 완성할 수 있다. @OneToMany(mappedBy = "member") private List orders = new ArrayList();이렇게 mappedBy를 이용하여 양..
연관관계 매핑 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다. 객체는 참조를 사용해서 연관된 객체를 찾는다. 테이블과 객체의 이런 차이를 없애기 위해 연관관계 매핑을 사용한다. 예를들어 Member와 Team이 있다고 하자. 한 team에는 여러 명의 member가 있을 수 있다. 먼저 테이블을 만들어보면 member와 team은 N:1 관계이고 member 쪽이 외래 키로 team_id를 가진다. 테이블에서는 외래 키 하나로 member에서도 team을 찾을 수 있고 team에서도 member를 찾을 수 있다. 단방향 매핑 이제 객체를 보자. Member가 참조를 사용하기 위해 teamId 대신 team을 가져야 한다. @JoinColumn은 외래 키를 매핑할 때 사용한다. 매핑할 외래 키..