반응형

분류 전체보기 406

MySQL Workbench, ERD 생성 방법(+ zero or one 설정 방법)

MySQL Workbench, ERD 생성 방법 ERD란, Entity Relationship Diagram의 약자로 Entity 개체의 관계를 표시하는 다이어그램을 말합니다. (ER 다이어그램이라고도 부릅니다.) ERD는 데이터베이스의 구조를 한눈에 알아보기 위해 사용되는데요. 'Draw.io', 'DBDiagram.io' 등 웹 또는 프로그램을 통해 사용할 수 있는 ERD 툴이 존재하지만, RDBMS로 MySQL을 사용하는 경우 Workbench 자체적으로 ER 다이어그램 툴이 내장되어 있습니다. 해당 포스팅에서는 'MySQL의 Workbench를 통해 ERD를 생성하는 방법'에 대해 정리하였습니다. (작업 환경은 MySQL Workbench 8.0.30 Version입니다.) Workbench를 통..

Programming/MySQL 2023.08.27

JPA save, saveAll 성능 차이가 발생하는 이유

JPA save(), saveAll() 성능 차이가 발생하는 이유(Feat. @Transactional) Spring Data Jpa에서 데이터를 insert 할 때 'save()' 메서드 또는 'saveAll()' 메서드를 사용할 수 있는데요. 구현된 코드를 살펴보면 saveAll() 메서드는 내부적으로 save() 메서드를 반복하는 구조로 되어 있습니다. 그러면 단순하게 생각해서 여러 건의 데이터를 반복문을 통해 각각 save() 하는 것과 한 번에 saveAll() 하는 것에는 차이가 없을 것 같은데요. 결론을 먼저 말씀드리면, 여러 건의 데이터를 insert 할 때는 saveAll() 메서드를 사용하는 것이 성능상 더 좋으며, 해당 포스팅은 'saveAll()을 사용하였을 때 성능 차이가 발생하는..

x-www-form-urlencoded 타입이란 (multipart/form-data와의 차이점)

x-www-form-urlencoded와 multipart/form-data 차이점 //기존에 설정된 springdoc consumes default-consumes-media-type: multipart/form-data //변경된 설정 default-consumes-media-type: application/x-www-form-urlencoded 프로젝트 작업 중 동료분으로부터 'multipart/form-data'로 설정된 springdoc default-consumes-media-type을 'application/x-www-form-urlencoded'로 바꾸는 게 어떻겠냐는 제안을 받았습니다. (consumes: 클라이언트가 서버에 보내는 데이터 타입, produces: 서버가 클라이언트에게 반..

Programming/Web 2023.08.23

GCP 방화벽 허용하는 방법(외부 접속 port 허용)

GCP 방화벽 설정 방법, 외부 접속 port 허용 방법 해당 포스팅은 GCP(Google Cloud Platform) VM 인스턴스에 대한 방화벽을 허용하는 방법에 대해 정리한 내용입니다. 방화벽이란? 방화벽이란, 쉽게 원치 않는 트래픽으로부터 네트워크를 보호하는 네트워크 보안 시스템을 의미하며, 방화멱을 통해 신뢰할 수 있는 네트워크와 신뢰할 수 없는 네트워크 사이의 장벽을 설정할 수 있습니다. 만약 방화벽이 없으면 해당 네트워크는 시스템을 손상시키려는 바이러스나 멀웨어, 해커의 공격 등 많은 악성 트래픽에 무방비로 노출되게 됩니다. GCP 방화벽 기본 설정 GCP 서버를 구축한 뒤에 해당 서버에 설정된 방화벽 정보를 확인해 보면 다음과 같은데요. 인스턴스 생성 시 HTTP, HTTPS에 대한 트래픽..

Programming/Web 2023.08.21

spring boot 로그 파일 남기는 방법 (logback-spring.xml 설정)

스프링 부트 logback-spring.xml 파일을 통한 로깅 설정 해당 포스팅은 '스프링 부트 환경에서 로그를 콘솔 또는 파일 등으로 기록하는 방법'에 대해 정리한 내용입니다. .properties(또는 .yml) 파일을 통해서도 로깅 관련 설정을 할 수 있지만 logback-spring.xml 파일을 통해 조금 더 세부적인 설정을 할 수 있기 때문에 logback-spring.xml에 대해 더 중점을 두고 정리되었다는 점 참고 부탁드립니다. (작업 환경은 'org.springframework.boot' version '3.1.2'에서 진행되었습니다.) 로그와 로깅이란? '로그(Log)'의 사전적 의미는 시스템에서 발생되는 모든 행위와 이벤트 정보를 시간에 따라 남겨둔 데이터를 뜻하며, '로깅(Log..

SOLID 객체 지향 프로그래밍의 5가지 원칙

객체 지향 프로그래밍의 5가지 원칙 SOLID와 각각에 대한 예시 최근에 객체 지향 프로그래밍을 개발하는 것에 있어 스스로 근본적인 원칙에 대해서 잘 알고 있는지, 또 잘 적용하고 있는지에 대한 의문이 들었는데요. 결론적으로 유지 보수와 확장성이라는 궁극적인 목적을 고려하지 않은 채, 잘 못된 방향으로의 습관적 코딩을 하고 있었다는 반성을 하게 되었습니다. '객체 지향 프로그래밍의 5가지 원칙인 SOLID'에 대해서는 이미 잘 정리되어 있는 글들이 많지만 내용을 다시 한번 정리하며 스스로 앞으로의 방향성을 잡아가기 위해 기록한 내용입니다. SOLID 객체 지향 프로그래밍에서 코드의 유연성, 확장성 및 유지보수성을 높이기 위한 가이드라인이라고 할 수 있는데요. SRP(단일 책임 원칙), OCP(개방 폐쇄 ..

Programming/Java 2023.08.14

(spring boot) XSS 공격 개념과 대응 방법 정리

XSS 공격이란 무엇인지, Spring Boot에서 대응할 수 있는 방법은 해당 포스팅은 'xss(cross-site scripting) 공격의 개념과 해당 공격에 대해 spring boot 내부적으로 처리할 수 있는 대응 방법'을 정리한 내용입니다. 예전에 면접에서 스프링 부트에서 처리할 수 있는 보안 문제에 대해 아는 것이 있냐고 질문을 받았던 적이 있는데요. 당시에는 생각나는 것이 없어 대답을 하지 못했었는데 xss 공격도 처리해야 할 보안 문제 중 하나로 볼 수 있습니다. XSS(Cross-site Scripting) 공격이란? SQL Injection과 함께 웹 상에서의 취약점을 공격하는 기본적인 방법 중 하나인데요. 쉽게 공격자가 서버로 전달하는 데이터에 악의적인 스크립트 문을 삽입하여 개발자..

(spring boot) Redis Key Event Notification 처리 방법

스프링 부트 Redis Key Event Notification 처리 방법 'redis keyspace notification'은 redis 2.8.0부터 지원된 기능인데요. 해당 포스팅은 스프링 부트에서 redis key expired event를 수신하는 방법에 대해 정리한 내용입니다. 우선 redis.conf 설정 파일을 살펴보면 notify-keyspace-events 옵션을 통해 redis에서 발생하는 이벤트에 대한 알림 설정을 할 수 있는데요. redis 이벤트 알림 기능의 경우 성능적 오버헤드가 발생할 수 있기 때문에 기본적으로 사용되지 않으며, 사용하지 않을 때 다음과 같이 ""으로 설정되어 있습니다. 기본적으로 K 또는 E 중 하나를 설정해야 알림이 발송되며, 해당 부분에 대해 조금 더 ..

java @Builder 기능 더 활용하기(toBuilder, @Singular 등)

java @Builder 기능 더 활용하기 toBuilder(), @Singular, @Builder.Default java에서는 클래스를 객체화하기 위해 '점층적 생성자 패턴(Telescoping Constructor Pattern)'의 안전성과 '자바 빈즈 패턴(Java Beans Pattern)'의 가독성을 더한 '빌더 패턴(Builder Pattern)'을 주로 사용하는데요. @Builder // 외 생략 public class Order { ... } 위 코드와 같이 Lombok을 사용하면 직접 빌더 관련 코드를 구현할 필요 없이 @Builder 어노테이션만 적용하여 빌더 패턴을 사용할 수 있으며, 대부분 이러한 방식으로 빌더를 자주 사용하고 계실 거라고 생각됩니다. 해당 포스팅에서는 기본적인 ..

Programming/Java 2023.08.05

JWT 인증 단점과 중복 로그인 관련 해결 방안

JWT 인증 기능의 단점과 문제점 그리고 중복 로그인 문제 해당 포스팅은 'jwt 인증 기능을 사용하면서 느꼈던 단점과 발생했던 문제점, 그리고 중복 로그인에 대한 나름의 해결 방안'을 정리한 것입니다. 사실 '해결'이라기보다는 '타협'에 더 가까운 것 같으며, 실제 코드보다 이론적으로 풀어서 쓴 내용이 많다는 점 참고 부탁드리겠습니다. 1. JWT 인증 사용 이유 클라우드 기반의 MSA 환경과 RESTful API가 증가하는 등의 영향으로 인해 기존에 사용되던 '세션(Session)' 기반 인증 대신 Stateless라는 특징을 가진 'JWT(JSON Web Token)' 인증 방식이 많이 활용되고 있는데요. 세션 기반 인증의 경우 서버에서 세션에 대한 인증 정보를 가지고 있어야 하지만, JWT는 토큰..

Programming/Web 2023.08.04
반응형