분류 전체보기
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/bcF86L/btsIB64fph7/R8ODYmO4wy8F2ilDedWV30/img.png)
![](https://tistory1.daumcdn.net/tistory/5364105/skin/images/no-image.jpg)
사용 데이터 JOIN 관계형 데이터베이스에서 두 개 이상의 테이블 간에 데이터를 결합하는 연산이다.JOIN을 사용하면 서로 다른 테이블에 저장된 데이터를 조합하여 필요한 정보를 하나의 결과로 얻을 수 있다. NATURAL JOIN과 Cartesian Product는 여러개의 테이블들을 JOIN하여 결과를 얻어내는 방식들 중 하나이다. NATURAL JOIN두 테이블 간에 동일한 이름을 가진 열을 기준으로 조인하는 방식NATURAL JOIN은 특별한 조인 조건이 필요하지 않으며, 동일한 이름을 가진 모든 열을 기준으로 조인한다.동일한 이름의 모든 열에 대해 Join하기 때문에 의도치 않은 결과가 나올 수 있다. 이 때에는 Natural Join보다 JOIN ON을 통해 조건을 명시적으로 지정하는 것이..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/bkybDz/btsIAsgp4ZY/TQ9WaagFJxa71xjxK8EkK0/img.png)
![](https://tistory1.daumcdn.net/tistory/5364105/skin/images/no-image.jpg)
사용 데이터 Set Operations Set 연산은 두 개 이상의 쿼리 결과를 결합하는 데 사용되는 연산자이다. 집합 이론에서 영감을 받았으며, UNION, INTERSECT, EXCEPT 연산자가 각각 합집합, 교집합, 차집합을 나타낸다. 합집합 (Union) “이상미디어” 또는 “굿스포츠”에서 출판한 도서를 검색하시오 (반드시 Set Operations 사용).select * from book where publisher = '이상미디어' union select * from book where publisher = '굿스포츠'; 교집합 (Intersect) 2번 고객과 3번 고객이 동시에 구입한 도서의 id를 검색하시오 (반드시 Set Operations 사용).select booki..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/k5daR/btsDA6uLLjp/OdRKkvtKOG8DzXlQOvyua1/img.png)
![](https://tistory1.daumcdn.net/tistory/5364105/skin/images/no-image.jpg)
WebRTC(Web Real-Time Communication)는 웹 브라우저 간에 실시간으로 음성, 영상 및 데이터 통신을 가능하게 하는 오픈 소스이다. Google Meet, Zoom, Facebook Messenger 등 실시간 미디어 스트리밍이 사용되는 어플리케이션에서 많이 사용되고 있으며, 초기 연결에 성공한 이후에는 P2P Connection을 통해 데이터를 주고받는다는 특징이 있다. Web RTC의 특징 P2P (Peer to Peer) 웹 애플리케이션과 사이트가 중앙 서버 없이, 오디오나 영상 미디어 스트림을 교환하고, 임의의 데이터를 교환할 수 있다. 데이터들은 중앙 서버를 거치지 않기 때문에 빠른 속도가 보장되며, 실시간으로 상호작용 할 수 있다는 특징이다. 브라우저 호환성 Chrome..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/mAD1M/btsDonqVnuu/AiuKTqT2KhUaoviZh6weg0/img.png)
![](https://tistory1.daumcdn.net/tistory/5364105/skin/images/no-image.jpg)
작년 말, Spring 2점대 버전의 지원이 공식 중단되면서, 이제 웬만하면 Spring 3 버전대를 사용할 것을 Spring 진영에서 권장하고 있다.그 중 Spring Security의 경우 변화한 내용이 조금 있는 편이라 이 참에 Spring Security를 이용한 JWT 인증과 인가를 해당 버전대에 맞추고, 정리하여 다시 작성해보려고 한다. 아래는 Spring 2점대 버전에서의 JWT Security를 설정했던 포스팅들인데, 3점대 버전에서도 근본적인 과정들이 바뀐 것은 아니다. 만약 2점대 버전에서의 설정이 궁금하다면 아래 포스팅들의 내용을 참고하자.회원 가입 : 해당 부분은 Security에 의존하지 않아, 회원 가입 로직이 필요하다면 참고하면 될 것 같다.https://sjh9708.ti..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/QCfCq/btsDrhQo6l8/B78dC7w4kTWtK511ge2jk1/img.png)
![](https://tistory1.daumcdn.net/tistory/5364105/skin/images/no-image.jpg)
이전에 Spring Boot 프로젝트에 Swagger를 연동해 본 적이 있었다. 최근 Spring Boot의 지원 버전이 3점대로 올라감과 동시에, 2점대에서 Swagger 사용 목적으로 많이 사용되는 SpringFox가 안타깝게도 제대로 지원되지 않는다. 3점대의 Spring Boot에서는 지원과 활동이 활발한 SpringDoc을 통해 Swagger 설정을 하는 것이 유리할 것이다. 2점대의 Spring에서 Swagger를 설정했던 방법은 다음 포스팅에 있다. https://sjh9708.tistory.com/78 [SpringBoot] API 문서 생성 - Swagger 연동하기 이번 포스팅에서는 API 문서 생성을 위해서 Swagger를 연동하는 방법을 알아보도록 하겠다. API 문서의 필요성 서비..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/YhdbK/btsDuSh3nOQ/0rK3AYMdhKeoHIIVmOQzm0/img.png)
![](https://tistory1.daumcdn.net/tistory/5364105/skin/images/no-image.jpg)
이번 포스팅에서는 Spring Boot에서 예외가 발생했을 때, 이를 처리하기 위한 계층을 정의해서 만들어보려고 한다. Exception Handler 정의의 필요성 @Override @Transactional public Long addMember(MemberJoinRequestDto inputMember) { Member exist = memberJpaRepository.findMemberByEmail(inputMember.getEmail()); if(exist != null){ throw new AlreadyExistElementException("이미 존재하는 이메일입니다."); } //... } 다음과 같은 Exception이 발생했다고 가정해보자. 아래는 Handler가 있는 경우와 없는 경우..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/GAIcK/btsDpaY496Q/TusKHrYoqZs6i84LO6X1Hk/img.png)
![](https://tistory1.daumcdn.net/tistory/5364105/skin/images/no-image.jpg)
Spring Data JPA는 JPA를 기반으로 하는 데이터 액세스 계층을 쉽게 구현할 수 있게 도와주는 도구이다. 일반적인 Repository 사용에 필요한 기본적인 인터페이스와 필요에 따라 확장가능하기 때문에 개발자들이 데이터 액세스 레이어를 더 쉽게 작성하고 유지보수할 수 있도록 도와준다. Repository 인터페이스: Spring Data JPA는 Repository 인터페이스를 제공하며, 이를 통해 데이터베이스 조작을 위한 메서드를 정의할 수 있으며, 기본적인 쿼리를 제공한다. 쿼리 메서드: Repository 인터페이스에 메서드를 정의할 때, 메서드 이름만으로 자동 인식하여 쿼리를 생성할 수 있다. 개발자는 별도의 SQL 쿼리를 작성하지 않고도 간단한 메서드 호출을 통해 데이터베이스 조작을..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/bs1OMl/btsHVVoqy85/69LOHIjRkKAVSdQXjiyQQ0/img.png)
![](https://tistory1.daumcdn.net/tistory/5364105/skin/images/no-image.jpg)
클라우드 컴퓨팅은 인터넷을 통해 컴퓨터 시스템, 데이터 저장 및 처리 리소스에 대한 접근을 제공하는 기술과 모델이다. 기존의 개별적으로 소유하고 운영되는 서버 및 데이터 센터를 사용하는 방식(On-demend)에서 벗어나, 필요한 컴퓨팅 리소스를 인터넷을 통해 가상적으로 공유하고 활용하는 개념이다. 인터넷 공유의 진화네트워크 : 컴퓨터의 연결하는 Local Network네트워크 공유 : TCP/IP의 등장 → 로컬 네트워크 간의 연결정보 공유 : World Wide Web자원 공유 : Greed Computing → 원격 리소스 공유 및 협업을 위한 표준 및 소프트웨어서비스 공유 : Cloud Computing : 웹을 통한 서비스로서의 모든 것. Ubiquitous, Scalable, Availabl..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/Kn4sl/btsC6U3iIKN/0KP3BEH7QCXA5xCuc3y0EK/img.png)
![](https://tistory1.daumcdn.net/tistory/5364105/skin/images/no-image.jpg)
앞선 포스팅에 이어서 이번 포스팅에서는 JPA를 이용하여 To Many 관계의 컬렉션을 조회할 때의 최적화 방법에 대해서 다루어 보려고 한다. 컬렉션 조회 { "orderId": 4, "name": "userA", "orderItems": [ { "orderId": 4, "itemName": "JPA1 BOOK", "orderPrice": 10000, "count": 1 }, { "orderId": 4, "itemName": "JPA2 BOOK", "orderPrice": 20000, "count": 2 } ] } 컬렉션을 조회한다는 것은 다음 JSON과 같이 엔티티가 1:N 관계를 가질 때, 연관된 N (Collection) 을 함께 가져오는 것을 의미한다. 컬렉션에서의 Fetch Join public..