반응형

전체 글 423

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

(java) transient volatile 키워드는 무엇인가

Java transient volatile Keyword Querydsl에서 Expression이 적용되는 방식을 찾아보다가 transient, volatile 키워드를 발견하게 되었는데요. 해당 키워드는 Expression 외에도 Hashtable, ConcurrentHashMap, PredicateOperation, PredicateTemplate 등 여러 곳에서 사용되고 있었으며, 지난번에도 한번 스쳐간 기억이 있어 이번 기회를 통해 정리해 보게 되었습니다. 우선 'transient'와 'volatile' keyword는 전혀 다른 역할을 하는데요. transient는 객체의 직렬화 과정에서 사용되는 키워드이며, volatile은 멀티 스레드 환경에서 여러 스레드에 의해 동시에 접근될 수 있는 변수..

Programming/Java 2023.08.02

java 임시 비밀번호 생성(SecureRandom 사용하는 이유)

java 특수문자를 포함한 비밀번호 생성 방법(SecureRandom 사용 이유) 해당 포스팅에서는 'java 임시 비밀번호 생성 방법'에 대한 내용을 다루고 있으며, 임시 비밀번호 생성 과정에서 Random 클래스가 아닌 'SecureRandom 클래스를 사용하는 이유'도 함께 살펴봅니다. 임시 비밀번호 생성 기본 예시 private static final char[] rndAllCharacters = new char[]{ //number '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', //uppercase 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R..

Programming/Java 2023.07.30

@AutoConfiguration을 사용하여 라이브러리 만들어보기

자동 구성 @AutoConfiguration을 사용한 라이브러리 만들어보기 spring boot에서는 AutoConfiguration 기능을 통해 web, data, aop, cache, jdbc 등 여러 라이브러리에 대한 자동 구성을 제공하는데요. 아래 내용은 '@AutoConfiguration을 적용하여 자동 구성이 실행되는 방식을 활용한 라이브러리를 만드는 방법과 만들어진 라이브러리를 사용하는 방법'에 대한 내용입니다. (예시에서는 gradle build tool을 사용하였습니다.) * 추가로 spring boot 자동 구성 auto configuration이 동작하는 원리가 궁금하시다면 포스팅 맨 하단에 관련 자료에 대한 링크가 있으니 참고하시면 좋을 것 같습니다. build.gradle plug..

Java Map 반복시키는 가장 효율적인 방법

Java Map Interface 반복시키는 가장 효율적인 방법 Map Interface Map 인터페이스는 Key와 Value를 하나의 쌍으로 저장하는 방식의 자료형이며, 리스트나 배열과 같이 순차적으로(sequential) 해당 요소 값을 구하는 것이 아니라 'key를 통해 value를 가져오는 방식'이 가장 큰 특징입니다. 구현체 중 가장 많이 사용되는 클래스는 HashMap이며, 순서가 필요한 경우 입력된 순서대로 데이터가 출력되는 LinkedHashMap, 입력된 key의 sort 순서로 데이터가 정렬되는 TreeMap 등이 있습니다. 아래는 java에서 map을 반복시키는 몇 가지 방법들에 대해 어떤 방법이 더 효율적인지 궁금하여 비교하며 정리해 본 내용입니다. Map 반복 방법 Map map..

Programming/Java 2023.07.26

Spring Boot 자동 구성 AutoConfiguration 동작 원리 파헤치기

Spring Boot 자동 구성 AutoConfiguration 동작하는 원리 파헤치기 Spring Boot AutoConfiguration 자동 환경 설정(AutoConfiguration)은 Spring Boot의 가장 대표적인 기능이라고 할 수 있는데요. 스프링 부트는 spring-boot-project의 하위 모듈인 'spring-boot-autoconfigure'라는 프로젝트를 통해 web, aop, jdbc, jpa, redis 등, 수많은 자동 환경 설정(자동 구성)을 제공합니다. (spring-boot-starter 안에 spring-boot-autoconfigure가 포함되어 있습니다.) 개발자의 입장에서는 사용할 라이브러리의 의존성만 추가하게 되면 autoconfigure를 통해서 해당 ..

java stream BigDecimal add 합계 구하는 방법

java stream을 통해 BigDecimal 합계 또는 연산하는 방법 부동소수점의 부정확성으로 인해 java에서는 소수점에 대한 정확한 계산이 요구되거나 화폐 단위를 사용할 때 BigDecimal 타입을 사용하는데요. 해당 포스팅은 'java에서 stream을 활용하여 BigDecimal을 연산하는 방법'에 대해 정리한 내용입니다. 코드 예시 List bigDecimalList = Arrays.asList( BigDecimal.valueOf(1.123), BigDecimal.valueOf(0.335), BigDecimal.valueOf(2.10101), BigDecimal.valueOf(0.54321) ); //stream을 사용하지 않는 경우 연산 BigDecimal sum = BigDecimal...

Programming/Java 2023.07.19

@Conditional 어노테이션의 기능과 확장(@ConditionalOnXxx)

@Conditional 어노테이션의 기능과 확장 '@Conditional' 어노테이션은 Spring 4.0(released on 2013)부터 제공되기 시작했는데요. @Configuration, @Component, @Bean 어노테이션과 함께 사용되며, 이름 그대로 특정 조건을 만족하는지를 구별하는 기능입니다. 직접 사용할 일이 많을 것 같지는 않았지만 spring boot 자동 구성에 중요한 역할을 하는 당, 흥미 있는 기능이라고 생각되어 정리해 보았습니다. 아래 내용에서는 @Conditional 어노테이션을 직접 구현 및 적용하여 조건에 따라 동작하는지 여부를 살펴보고, 스프링 부트에서 확장된 @ConditionalOnXxx 어노테이션 기능을 통해 자동 구성이 실행되는 부분에 대해 간단하게 살펴보겠..

java image resize library 이미지 리사이즈 라이브러리 비교해보기

Compare java image resizing libraries 해당 포스팅에서는 썸네일 생성 등, 이미지의 사이즈를 조절하는 기능을 java에서 구현하기 위해 사용할 수 있는 몇 가지 라이브러리와 해당 라이브러리들의 사용 방법에 대해 살펴봅니다. + 마지막에는 각 라이브러리들을 사용한 image resizing 결과를 비교해 보는 내용도 포함되어 있습니다. java.awt.Graphics2D Image.getScaledInstance() thumbnailator Imgscalr 1. java.awt.Graphics2D 'Graphics2D Class'는 graphics contexts에 대한 추상화를 제공하는 기본 클래스인 Graphics Class를 확장한 것으로 java 플랫폼에서 2차원 텍스트..

Programming/Java 2023.07.15
반응형