반응형

Programming 375

N+1 문제를 해결하기 위한 FetchJoin, 일반 Join과의 차이점은

부끄럽지만 아직까지 'Fetch Join'을 제대로 쓸 줄 모른다는 사실을 반성하며 정리하는 내용입니다. 1. N+1 문제란? jpa 연관 관계 조회 쿼리에서 자주 만나게 되는 문제로, 연관 관계가 설정된 Entity를 조회할 경우 하위 Entity의 데이터 개수(n) 만큼 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 문제를 이야기합니다. N+1 문제가 발생하는 예시를 살펴보면 다음과 같은데요. 2. JPA 연관 관계 조회 쿼리에서 발생하는 N+1 문제 @Builder @AllArgsConstructor @NoArgsConstructor @Getter @Entity public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) ..

(querydsl) cannot find symbol: javax.annotation.processing.Generated

QueryDSL cannot find symbol: javax.annotation.processing.Generated querydsl 사용 중 Q클래스를 생성한 뒤 프로그램을 실행했을 때 'javax.annotation.processing 패키지에서 Generated class를 찾지 못한다는 오류'가 발생했습니다. 해당 오류는 지난번에도 한번 발생했었는데, 이번에도 같은 오류가 발생했고 오류의 원인이 궁금하여 내용을 찾아보게 되었습니다. 해결 방법 1. 첫 번째 시도 우선 첫 번째로 시도한 방법은 Q클래스의 import javax.annotation.processing.Generated 부분을 import javax.annotation.Generated로 수동으로 바꾸는 것입니다. import jav..

Programming/Error 2023.04.19

JPA 예약어로 인한 구문 오류 해결 방법 (check the manual that corresponds to your MariaDB server version for the right syntax to use near 'order …’)

jpa 예약어로 인한 구문 오류 발생 시 해결하는 방법 jpa를 사용한 데이터 조회 작업 중 아래와 같은 'SQLSyntaxErrorException'이 발생했습니다. 해당 구문은 원래 정상적으로 동작하던 구문으로, 프로세스상의 필요에 의해 기존에 다른 이름으로 되어 있던 테이블 명만 'order'로 바꿨기 때문에 구문 상의 문제는 아닐 것이라고 생각했는데요. java.sql.SQLSyntaxErrorException: (conn=14730) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'order order..

Programming/Error 2023.04.19

AWS Summit 참석 전, AWS란 무엇인가?

AWS Summit Seoul 2023 참석 전, 사전 지식 공부 1. AWS란? 아마존 웹 서비스(Amazon Web Services, AWS)는 아마존 닷컴에서 개발한 클라우드 컴퓨팅 플랫폼으로 전 세계 클라우드 컴퓨팅 시장에서 1위의 점유율을 차지하고 있는데요. AWS는 컴퓨팅, 스토리지, 데이터베이스와 같은 인프라 기술에서 부터 기계 학습 및 인공 지능, 데이터 레이크 및 분석, 사물 인터넷 등 200개 이상의 기능에 대한 서비스를 제공하고 있습니다. * 기계 학습(machine learning)은 인공지능의 하위 범주로, 컴퓨터 시스템이 패턴과 추론에 의존하여 명시적 지시 없이 학습하도록 지원하는 알고리즘의 연구를 말합니다. AWS에서 제공하는 모든 서비스는 API 중심으로 설계되어 있기 때문에..

Programming/AWS 2023.04.18

무료 ssl 인증서 적용하는 방법(Let's Encrypt)

certbot을 통해 Let's Encrypt에서 제공하는 무료 ssl 인증서 적용하는 방법 ssl 인증서는 클라이언트와 서버 간의 통신을 제3자가 보증해 주는 전자화된 문서인데요. ssl 인증서를 사용함으로써 통신 내용이 공격자에게 노출되는 것을 막을 수 있으며, 통신 내용의 악의적인 변경을 방지할 수 있습니다. 또한 클라이언트는 접속하려는 서버가 신뢰할 수 있는 서버인지를 해당 인증서를 통해 판단할 수 있게 됩니다. /* SSL(Secure Socket Layer)과 TLS(Transport Layer Security Protocol)는 같은 의미인데요. SSL이 표준화기구 IETF의 관리로 바뀌면서 TLS라는 이름으로 바뀌게 되었으며, 아직까지 TLS라는 이름보다 SSL이라는 명칭이 더 많이 사용되..

Programming/Web 2023.04.15

운영체제의 기초 (CPU 스케줄링, 메모리 관리, 디스크 스케줄링)

운영체제의 기초(Foundation of Operating System) 비전공자로 개발 업무를 하며 CS(Computer Science) 전공지식에 대해 공부가 필요하다는 생각을 항상 가지고 있었는데요. KOCW(kocw.net)을 통해 대학교 강좌를 무료로 접할 수 있다는 소식을 알게 되었고, 해당 포스팅은 KOCW에서 제공되는 이화여자대학교 반효경 교수님의 운영체제 강의를 참고하여 정리한 내용입니다. 운영체제란? '운영체제'는 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층으로, 모든 컴퓨터 시스템의 필수적인 부분입니다. 운영체제는 다른 소프트웨어들과는 다르게 하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행함으로써 컴퓨터 시스템을 편리하..

MySQL 날짜, 시간 더하고 빼기 및 타임존 변경(DATE_ADD, DATE_SUB, CONVERT_TZ)

MySQL 날짜, 시간 더하고 빼기 및 타임존 변경 mysql에서 날짜 또는 시간을 더하고 빼는 함수인 'DATA_ADD', 'DATA_SUB'와 타임존을 변경할 때 사용되는 'CONVERT_TZ' 함수에 대한 사용법을 정리한 내용입니다. 0. time zone 확인 SELECT @@time_zone, @@system_time_zone; 먼저 위 쿼리를 통해 mysql에 설정된 time_zone 정보를 조회하였습니다. time_zone이 SYSTEM으로 설정되어 있다는 것은 별도의 타임존이 설정되어 있지 않다는 것이며, 시스템의 타임존을 사용하겠다는 것인데요. 해당 테스트 환경에 설정된 mysql의 time zone은 KST(Korea Standard Time)이라는 것을 알 수 있습니다. 1. DATA..

Programming/MySQL 2023.04.07

Spring Security + OAuth2 + JWT 소셜 인증 구현(google, kakao, naver)

스프링 부트 security + oauth2 + jwt 소셜 인증 구현 코드 문득 security, oauth2를 사용한 소셜 인증을 제대로 구현해 본 적이 없다는 생각이 들어 구현하며 정리한 내용입니다. 소셜 인증의 경우 많은 애플리케이션에서 사용되는 기능이기 때문에 내용을 잘 파악해 두면 좋다고 생각되는데요. 기능을 구현하며 oauth에 대한 개념 및 oauth2-client의 내부적인 동작 원리에 대한 부분도 궁금하여 포스팅으로 정리해 보았으며, 하나의 포스팅에 모든 내용을 담기는 사실상 어렵기 때문에 아래 포스팅을 참고하시어 해당 코드를 보면 조금 더 이해하기 쉬울 것으로 생각됩니다. (oauth2에 대한 내용으로 대부분 구성되어 있으며 jwt에 대한 내용도 생략되었습니다. jwt에 관련 내용도 ..

스프링 부트 멀티 모듈 프로젝트 생성(gradle)

Spring Boot Multi-Module Project(Gradle) 지난번 spring boot multi-module project 생성하기(maven)에 이어 이번에는 'gradle'을 사용한 멀티 모듈 프로젝트 생성 방법에 대해서 살펴보겠습니다. multi module project를 적용하는 가장 큰 이유는 하나로 운영하던 서비스가 클라이언트 서비스와 운영 시스템 등, 여러 개로 나뉘는 경우가 발생했을 때 각각의 프로그램에 있는 domain의 동일성을 보장하기 위한 것인데요. 멀티 모듈 프로젝트는 무엇인지, 멀티 모듈 프로젝트를 적용하는 이유와 장점에 대한 내용은 아래 포스팅을 참고해 주시면 좋을 것 같습니다. (maven 빌드툴로 구성된 프로젝트에서 multi module project를 ..

Java Enum 타입 데이터베이스 저장 형식은 뭐가 좋을까? (enum, varchar, tinyint)

Java Enum Type 데이터 DB 저장 형식 (enum, varchar, tinyint) 해당 내용은 데이터베이스 설계 과정에서 Java Enum 타입의 데이터는 어떤 형식으로 저장되는 것이 좋은가에 대해 고민하며 정리한 내용입니다. 실제로는 'varchar'와 'tinyint' 사이에서 고민했으나, mysql의 경우에는 'enum' 타입도 존재하기 때문에 mysql enum 타입에 대해서도 함께 비교하였습니다. enum을 함께 비교하기는 하였지만 mysql의 enum 타입은 여러 이유로 인해 많이 쓰이지는 않는데요. 아래 내용에서는 mysql enum 타입의 특징과 쓰이지 않는 이유에 대해 간단하게 살펴보고 이어서 enum, varchar, tinyint 각각의 타입에 대해 실제 데이터를 넣고 조..

반응형