- 연관관계 매핑2024-01-22 22:26:27포트폴리오 준비를 하면서 가장 헷갈렸던 내용으로 연관관계 매핑과 데이터베이스의 외래키와 똑같이 생각하다가 함정에 빠진적이 있기에 알아보겠다. 데이터베이스에서는 외래키라는 하나의 컬럼을 가지고 연관관계를 표현한다. 그러나 JPA에서는 객체를 매핑한다. 따라서 JPA에서의 연관관계 매핑은 관계의 방향 다중성(다대일? 일대다? 다대다?) 연관관계의 주인 이 세가지가 중요하다. 아래에 정리한 내용에서 위의 3가지를 알아볼 것이다. 단방향 연관관계 연관관계 중 다대일(N:1)을 먼저 알아보겠다. 다음에서 설명할 예제의 객체들은 다음의 관계이다. 게시글은 작성자가 있습니다. 게시글은 한명의 작성자에게만 소속되어 있습니다. 게시글은 작성자와 다대일 관계입니다. 위의 관계를 나타낸 객체 연관관계와 테이블 연관관계는 아..
- STOMP 란?2024-01-17 14:09:39오늘은 실시간 채팅 및 채팅방 동적 생성을 구현하기 위해 STOMP에 대해서 알아보겠다. STOMP(Simple/Streaming Text Oriented Messaging Protocol) 텍스트 기반의 메시지 프로토콜이다. 클라이언트와 서버 간 전송할 메시지의 유형, 형식, 내용들을 정의한 규칙(FRAME)으로 TCP 또는 WebSocket과 같은 양방향 네트워크 프로토콜 기반으로 동작한다. HTTP와 같은 프로토콜에서 사용되는 request-response 패턴과 다르게, 브로커와 연결된 클라이언트 간에 메시지를 교환하는 방식으로 동작한다. STOMP는 기본적으로 Publish-Subscribe 구조로 되어있으며, 이 구조는 메시지를 공급하는 주체와 소비하는 주체를 분리해 제공하는 메시징 프로토콜이..
- [실전 알고리즘] 큐2024-01-12 10:38:42정의와 성질 저번에 정리한 스택이랑 이번에 배울 큐랑 비슷한게 많다. 큐는 한쪽 끝에서 원소를 넣고 반대쪽 끝에서 원소를 뺄 수 있는 자료구조이다. 스택에서는 먼저 들어간 원소가 나중에 나왔는데 큐에서는 먼저 들어간 원소가 먼저 나오게 된다. 스택을 FILO(First In Last Out)이라고 한 것과 비슷하게 큐를 FIFO(First In First Out)이라고 하기도 한다. 큐의 성질 원소의 추가가 O(1) 원소의 제거가 O(1) 제일 앞/뒤의 원소 확인이 O(1) 제일 앞/뒤가 아닌 나머지 원소들의 확인/변경이 원칙적으로 불가능 스택에서는 보통 원소가 추가되고 제거되는 곳을 top이라고 부르고, 원소가 위 아래로 배치된 것으로 생각을 많이 하는데 큐에서 추가되는 곳을 rear, 즉 뒤 쪽이라고..
- [백엔드 로드맵] 입출력(IO / NIO)2024-01-11 21:35:32입출력 IO와 NIO Java의 입출력 관련 클래스는 너무나 많은데, 크게 Java.io 패키지와 java.nio 패키지로 구분할 수 있다. 둘의 차이를 쉽게 말하면 IO의 기능들을 개선하고 새로운 기능을 추가(대표적으로 비동기 / Non-Blocking 지원)하여 나온 것이 NIO라고 생각하면 된다. 그럼 무조건 IO보다 NIO가 좋은가? 답은 아니다. NIO가 많은 기능을 개성한 것은 사실이나 특정 상황에서는 IO보다 성능이 떨어지는 경우도 있다. [1] IO (Old IO) 대략적인 IO 패키지 구조이다. 1. File 클래스 파일의 위치 정보를 가진다. 파일의 내용이 아닌 파일 자체를 다룬다. 파일 자체에 대한 정보를 가져오고 다루는 메서드를 포함하고 있다. File 정보를 String 타입으로 ..
- [실전 알고리즘] 스택2024-01-10 13:48:071. 정의와 성질 자료구조에서의 스택은 한쪽 끝에서 원소를 넣거나 뺄 수 있는 자료 구조이다. 스택은 구조적으로 먼저 들어간 원소가 제일 마지막에 나오는데, 이런 의미로 FILO(First In Last Out) 자료구조라고 부르기도 한다. 참고로 큐나 덱도 스택처럼 특정 위치에서만 원소를 넣거나 뺄 수 있는 제한이 걸려있다. 스택의 성질 원소의 추가가 O(1) 원소의 제거가 O(1) 제일 상단의 원소 확인 O(1) 제일 상단이 아닌 나머지 원소들의 확인/변경이 원칙적으로 불가능 스택에서는 제일 상단이 아닌 나머지 원소들의 확인/변경 기능이 제공되지 않는다. STL stack에서도 이 기능은 없다. 2. 기능과 구현 const int MX = 1000005; int dat[MX]; int pos = 0;..
- Spring Data JPA란?2024-01-09 19:06:10JPA는 인터페이스로서 자바 표준 명세서이다. 인터페이스를 구현하기 위해서는 구현체가 필요한데 대표적으로 Hibernate, Eclipse, Link 등이 있다. 하지만 Spring에서 JPA를 사용할 때는 이 구현체들을 직접 다루진 않는다. 어플리케이션의 데이터 액세스 계층을 구현하는 것은 꽤 오랫동안 성가신 일이었다. 간단한 쿼리를 실행하고 pagination 및 auditing을 수행하려면 너무 많은 boilerplate코드를 작성해야 한다. Spring Data JPA는 실제로 필요한 양으로 노력을 줄여 데이터 액세스 계층의 구현을 크게 개선하는 것을 목표로 만들어졌다. 그래서 Spring에서는 구현체들을 좀 더 쉽게 사용하고자 추상화 시킨 Spring Data JPA라는 모듈을 이용하여 JPA ..
- Spring JPA란?2024-01-09 18:42:58이번 글에서는 JPA(Java Persistence API)가 무엇인지 알아보려고 한다. JPA는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다. 그 말은 즉, 실제 적으로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임 워크이다. JPA를 구현한 대표적인 오픈 소스로는 Hibernate가 있다. 우선 JPA에 앞서, 먼저 ORM에 대해 알아보도록 하자. ORM(Object-Relational Mapping) 우리가 일반적으로 알고 있는 애플리케이션 Class와 RDB(Relational DataBase)의 테이블을 매핑한다는 뜻이며, 기술적으로는 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화해주는 것이라고..
- [실전 알고리즘] 연결 리스트2024-01-08 16:41:01연결 리스트가 무엇인지 알아보고, 구현도 해볼 것이다. 1. 정의와 성질 연결 리스트 정의 연결 리스트란 원소들을 저장할 때 그 다음 원소가 있는 위치를 포함시키는 방식으로 저장하는 자료구조이다. 원소들은 배열과는 다르게 이곳 저곳 흩어져있다. 연결 리스트 성질 1. k번째 원소를 확인/변경하기 위해 O(k)가 필요 - 배열과 다르게 공간에 원소들이 연속해서 위치하고 있지 않기 때문 2. 임의의 위치에 원소를 추가/임의 위치의 원소 제거는 O(1) - 배열과 비교앴을 때 큰 차이가 있는 성질이고, 연결 리스트의 큰 장점이다. 3. 원소들이 메모리 상에 연속해있지 않아 Cache hit rate가 낮지만 할당이 다소 쉬움 - 메모리 상에 데이터들이 연속해있지 않으니까 Cache hit rate가 낮지만 할..