이끌든지 따르든지 비키든지

전체 글 63

[Spring] Java Bean 규약과 JSON 직렬화 문제

최근 서비스에서 캐시 기능을 구현하다가, 흥미로운 문제를 마주했습니다. isTypeA()라는 단순한 메서드를 추가했을 뿐인데,캐시된 데이터를 불러오는 과정에서 typeA라는 필드를 찾을 수 없다는 오류가 발생한 것입니다.  원인 이는 Java Bean 명명 규약과 관련이 있었습니다.Java에서는 is로 시작하는 메서드를 boolean 타입 필드의 getter로 인식하는데, Jackson 라이브러리가 이 규약에 따라 JSON 변환을 수행하다 보니 발생한 문제였습니다.  Java Bean 명명 규약 Java Bean 규약에 따르면, is로 시작하는 메서드는 boolean(primitive) 타입 필드의 getter로 인식된다. · isActive() → active 필드의 getter로 해석· isEnabl..

Framework/Spring 2024.09.03

[JPA] @Converter 암호화를 사용해 데이터베이스 보안 강화하기

데이터베이스에 중요한 정보를 보관할 때, 보안은 필수적인 요소입니다.  특히, 개인정보와 같은 민감한 데이터를 저장할 때는 암호화를 통해 보안을 강화하는 것이 중요합니다.  JPA를 사용하여 데이터베이스에 저장되는 데이터를 안전하게 암호화하고 복호화하는 방법에 대해 알아보겠습니다.  @ColumnTransformer 첫 번째 방법은, @ColumnTransformer 어노테이션을 사용하는 것입니다. @Entitypublic class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "email") @ColumnTransformer( read = ..

Framework/JPA 2024.08.24

Gradle의 의존성 구성

빌드 자동화 도구인 Gradle은 의존성 관리를 위해 다양한 구성 옵션을 제공하는데, 주로 사용되는 종속성 구성 방법에 대해 자세히 알아보겠습니다. 주요 의존성 구성 옵션 implementation 프로젝트의 기본적인 종속성을 선언하는 데 사용됩니다. 이 옵션을 사용하면 선언된 의존성은 컴파일 시점과 런타임 시점에 모두 포함됩니다.  testImplementation 테스트 코드에서만 사용될 의존성을 선언할 때 사용됩니다. 이 의존성은 테스트 컴파일 및 테스트 실행 단계에서만 사용됩니다.  compileOnly 컴파일 시점에만 필요한 의존성을 선언할 때 사용됩니다. 런타임 시점에는 해당 의존성이 포함되지 않습니다.  develomentOnly 개발 환경에서만 사용되는 의존성을 선언할 때 사용됩니다.주로 ..

Framework/Spring 2024.07.21

URI와 URL의 차이

URI정의: URI는 인터넷에서 자원을 식별하는 방법을 말하며, 특정 자원을 고유하게 지칭할 수 있는 표기법범위: URL: 자원의 위치URN (Uniform Resource Name): 자원의 이름을 나타낸다.2. URL정의: URL은 URI의 하위 개념으로, 자원의 위치와 접근 방법(프로토콜)을 포함해 자원이 어디에 있는지 구체적으로 알려주는 정보입니다.구성 요소:프로토콜: 자원에 접근하는 방법을 정의합니다. 예: http, https, ftp 등.도메인 이름/IP 주소: 자원이 호스팅된 서버의 주소를 나타냅니다.경로: 서버 내에서 자원의 위치를 지정합니다.쿼리 문자열 및 프래그먼트: 자원에 대한 추가적인 정보를 제공할 수 있습니다.

[Spotless] 클릭 한 번으로 코드 정리하기

Spotless란?코드 스타일 규칙을 자동으로 적용하여 코드베이스의 일관성 유지를 도와주는 오픈 소스 도구입니다.Gradle 플러그인으로 쉽게 통합할 수 있으며, Java, Kotlin, Groovy, Scala, Python, C, C++, Markdown, JSON, XML 등을 지원합니다.  Spotless를 의존성에 추가하기// build.gradleplugins { id 'java' id 'com.diffplug.spotless' version '6.25.0'}repositories { mavenCentral() gradlePluginPortal()}  Spotless를 사용하려면, Gradle 플러그인 포털에 대한 정보를 추가해주어야 합니다.gradlePluginPorta..

[PostgreSQL] PostGIS로 쉽고 빠르게 지리적 거리 계산하기

웹 애플리케이션에서는 사용자 경험을 향상하기 위해 지리적 위치 데이터를 활용하는 경우가 많습니다.예를 들어, 지도 및 내비게이션 서비스에서 두 지점 간의 경로를 안내하거나, 주변 장소를 검색하는 기능이 필요합니다. 오픈 소스 DBMS인 PostgreSQL과 이를 확장하여 공간 데이터를 처리할 수 있게 해주는 PostGIS는 공간 참조 시스템, 공간 데이터 타입, 공간 인덱스 등을 제공하여 복잡한 공간 데이터를 효율적으로 처리할 수 있도록 지원합니다. 이를 활용해 두 지점 간의 거리 계산, 주변 반경 검색, 경로 최적화 등 다양한 공간 연산을 수행할 수 있는데, 이 중 두 지점 간의 거리 계산에 대해 알아보도록 하겠습니다. PostgreSQL & PostGIS 설치하기 저는 Docker Compose 환경..

[Linux] 프로세스에게 시그널 보내기

들어가기 앞서 - 시그널(Signal)이란?시그널은 운영 체제가 프로세스 간 통신을 위해 사용하는 중요한 메커니즘 중 하나입니다. 시그널은 프로세스에게 특정 이벤트가 발생했음을 알리고, 프로세스가 그에 맞게 행동하도록 합니다.    SIGNAL의 특징비신뢰성리눅스 시그널은 비신뢰성을 가지고 있습니다. 이는 시그널이 도착하는 순서가 보장되지 않으며, 시그널이 손실될 수 있다는 것을 의미합니다. 여러 시그널이 동시에 발생하면 일부 시그널은 무시될 수 있습니다.  대기하지 않음시그널은 비동기적으로 처리됩니다. 이는 시그널이 발생하면 즉시 프로세스에 전달되며, 프로세스는 시그널을 기다리지 않고 자신의 작업을 계속 수행할 수 있습니다. 시그널이 도착했을 때만 프로세스는 이를 처리합니다.  대표적인 SIGNAL S..

괜찮은 개발자 되기

꾸준하게어느 날 갑자기 많이 달린다고 해서 실력이 향상되는 것은 아니다. 갑작스러운 노력보다는 오랫동안 지속적으로 노력하고, 너무 서두르지 말고, 즐길 수 있도록 하면서 꾸준히 학습하고 연습하는 자세가 필요하다.  여유있게당연히 하루빨리 실력을 쌓고 싶은 마음이 크지만, 너무 서두르면 부상의 위험만 커질 뿐이다. 스스로에게도 마음이 급할 뿐, 스트레스만 받고 실력은 제자리걸음일 수 있다는 것을 잊지 말자. 처음부터 과하게 목표를 세우기보다는 차근차근 단계를 밟아가자.  재미있게의지만으로는 오래 지속하기 어렵다. 재미 있어져야 꾸준히 할 수 있게 된다.스스로에게 물어보자. 이것이 정말 재미있는가? 그렇지 않다면, 어떻게 하면 재미있게 할 수 있을지 고민해보자.  자신있게다른 사람과 비교하는 것은 정신건강에..

생각창고 2024.05.02

[Java] Java 21의 새로운 기능 톺아보기

Java 17에 이은 다음 LTS 버전인 Java 21에 추가된 기능에 대해 알아보도록 하겠습니다. 💡LTS?LTS란, 'Long-Term-Support'의 약자로, LTS 버전은 다른 버전보다 장기적인 지원과 보안 업데이트를 포함하여 상대적으로 긴 기간 동안 지원됩니다.Java의 LTS 버전은 약 3년 주기로 출시되고 있습니다.  Java 21에 추가된 기능 총 15개의 기능이 추가되었고, 이를 4가지 카테고리로 분류할 수 있습니다. Core Java LibraryJEP 431: Sequenced CollectionsJEP 442: Foreign Function & Memory API (Third Preview)JEP 444: Virtual ThreadsJEP 446: Scoped Values (Pr..

[Spring] 애플리케이션과 NCP Object Storage 연결하기

Spring 애플리케이션과 네이버 클라우드 플랫폼(NCP)의 Object Storage 간 연결을 구성하는 방법에 대해 알아보겠습니다. 💡Object Storage?데이터를 객체 단위로 저장하는 서비스로, AWS의 S3와 유사한 서비스입니다.  1. Object Storage 버킷 생성하기 NCP 콘솔에 로그인하셨다면, 왼쪽 메뉴 중 Services를 클릭 후, Object Storage를 클릭해주세요.    최초로 해당 서비스에 접근하는 경우, 이용 신청 및 약관 동의를 먼저 진행해야 합니다.동의 후, Bucket Management → 버킷 생성을 진행해 주세요.    다음으로, 생성할 버킷의 이름을 입력합니다.버킷의 이름은 리전 내에서 유일한 이름이여야 합니다!    이후, 설정 관리(잠금 여부 ..

Framework/Spring 2024.03.25