분류 전체보기 174

[Java] 객체 지향 설계(Object-Oriented Design, OOD)

소프트웨어 개발에서 객체 지향 설계는 매우 중요한 원칙입니다.👀 객체 지향 설계는 코드의 재사용성, 확장성, 유지보수성을 높여주며, 복잡한 시스템을 쉽게 이해하고 관리할 수 있게 합니다. 객체지향 설계의 주요 개념클래스(class)와 객체(object)클래스는 객체를 생성하기 위한 템플릿입니다. 클래스는 객체의 속성(필드)과 행동(메서드)을 정의합니다. 예를 들어, Car 클래스는 color, model 등의 속성과 drive(), stop() 등의 메서드를 가질 수 있습니다.public class Car { private String color; private String model; public Car(String color, String model) { this.color = color; this...

Backend/Java 2024.07.28

[Java] ConcurrentHashMap 멀티스레드 환경에서 안전한 해시맵

HashMap은 여러 스레드가 동시에 접근할 때 문제를 일으킬 수 있다는 사실 알고 계시나요??🤔멀티스레드 환경에서 안전하게 사용할 수 있는 해시맵 구현체 ConcurrentHashMap에 대해 알아보겠습니다.  ConcurrentHashMap 이란?ConcurrentHashMap은 자바 컬렉션 중 하나로, 여러 스레드가 동시에 안전하게 데이터를 읽고 쓸 수 있도록 설계된 해시맵입니다.일반적인 HashMap과 달리 멀티스레드 환경에서 동기화 문제를 해결해 줍니다.멀티스레드 환경에서 여러 스레드가 동시에 데이터를 수정하려고 하면, 데이터가 엉키거나 손실될 수 있습니다.이를 해결하기 위해 HashMap 대신 ConcurrentHashMap을 사용합니다. 기본 동작 방식ConcurrentHashMap은 내부..

Backend/Java 2024.07.28

[Spring] @Scheduled 주기적인 작업 처리하기

Spring Framework는 다양한 기능을 제공하지만, 그중에서도 주기적인 작업을 관리하는 기능인 @Scheduled 어노테이션에 대해 알아보겠습니다. 🤓이 어노테이션을 사용하면 정해진 주기마다 특정 작업을 자동으로 실행할 수 있습니다. @Scheduled 란?@Scheduled를 Spring 스케줄링 기능을 제공하는 어노테이션입니다.메서드에 붙여서 주기적으로 실행될 작업을 정의할 수 있게 해 줍니다.예를 들어, 매일 자정에 특정 작업을 실행하거나 매주 월요일에 백업을 자동으로 수행할 수 있습니다. @Scheduled 어노테이션 기본 사용법@Sheduled를 사용하려면 Spring의 스케줄링 기능을 활성화해야 합니다.이를 위해 @EnableScheduling 어노테이션을 사용하여 스케줄링 기능을 활..

Backend/Spring 2024.07.27

[Java] computeIfAbsent 효율적인 데이터 캐싱과 값 처리

computeIfAbsent를 아시나요?🫥저는 자료구조를 좀 더 효율적으로 사용하려고 찾아보다가 발견한 메서드입니다!Java의 Map 인터페이스에 있는 메서드로 키가 없을 때만 값을 계산하여 맵을 추가하고, 키가 이미 존재하는 경우에는 기존의 값을 반환합니다. 이러한 기능은 데이터 캐싱, 복잡한 객체 생성, 그리고 데이터 동기화에 매우 유용하게 사용될 수 있습니다. computeIfAbsent의 사용법computeIfAbsent 메서드는 다음과 같은 시그니처를 가지고 있습니다.key : 맵에서 찾으려는 키입니다.mappingFuction: 값이 존재하지 않을 때 키를 기반으로 값을 생성하는 함수입니다.메서드는 키가 맵에 존재하지 않는 경우에만 mappringFunction을 호출하여 값을 생성하고, 생..

Backend/Java 2024.07.27

[Spring] ArgumentResolver 사용하기

ArgumentResolver는 Spring MVC에서 컨트롤러 메서드의 매개변수를 해석하고 주입하는 기능입니다.컨트롤러에서 @RequestParam, @PathVariable를 사용하여 쿼리 파라미터나 경로 변수를 바인딩할 수 있고, 요청 본문을 바인딩하려면 @RequestBody를 사용합니다.하지만 Header, Session, Cookie 등의 방식의 데이터를 바인딩해야 할 때는 어떻게 해야 할까요? 🧐이때, ArgumentResolver를 사용하면 이러한 직접적이지 않은 방식의 데이터도 간편하게 가져올 수 있습니다.  ArgumentResolver 구현하기Custom ArgumentResolver를 구현해 보며 개념을 살펴보겠습니다.예를 들어, 클라이언트 요청에서 특정 헤더 값을 읽어와서 컨트롤..

Backend/Spring 2024.07.20

[Spring] Path Variable과 Query Parameter

Spring Framework는 RESTful 웹 서비스 개발에 매우 적합합니다.URL 경로를 통해 클라이언트와 서버 간의 데이터를 교환할 수 있습니다.그중에서도 자주 사용되는 Path Variable과 Query Parameter의 차이점과 사용 방법에 대해 정리해 보겠습니다.🙂 Path Variablepath variable은 URL 경로의 일부로 사용되어 특정 리소스를 식별하는데 사용됩니다.예를 들어, 특정 사용자의 정보를 가져오거나 특정 상품의 상세 정보를 조회할때 유용합니다.URL 형식/resource/{id}사용 예시 (사용자 id가 123인 사용자 정보 조회)/users/123 @RestController@RequestMapping("/users")public class UserContro..

Backend/Spring 2024.07.18

[Java] abstract class 와 interface class의 차이

추상 클래스와 인터페이스는 객체지향 프로그래밍에서 중요한 개념으로, 클래스의 다형성을 지원하고 코드의 재사용성을 높이는데 큰 역할을 합니다. 이 두 가지의 차이점을 명확히 이해하는 것은 효율적인 설계와 구현을 위해 필수적이라고 생각합니다!이번글에서는 두 클래스의 개념과 차이점에 대해 알아보도록 하겠습니다.🤓 추상 클래스(abstract class)추상클래스는 공통된 속성이나 동작을 정의하는 데 사용되는 클래스입니다. (다른 클래스들이 상속받아 사용할 수 있는 기본 틀 🧐)인스턴스를 직접 생성할 수 있으며, 상속을 통해 하위 클래스에서 구현되어야 하는 메서드를 포함할 수 있습니다.인스턴스 생성 불가추상 클래스 자체로는 객체를 생성할 수 없습니다.추상 메서드하나 이상의 추상 메서드를 포함할 수 있으며, ..

Backend/Java 2024.07.17

[MySQL] binlog(바이너리 로그)란?

회사에서 레거시에서 DeadLock 발생으로 오류가 발생하였는데 select for update문을 쓰는 부분도 아니었다...😥정확한 원인 파악을 위해(lock이 있었는지 확인하기 위해) binlog를 확인하려 하였으나 기간이 지나 purge 되어버렸습니다😱아쉬운 대로 MySQL binlog에 대해 공부해 보도록 하겠습니다.  MySQL Binlog?MySQL Binlog(바이너리 로그)는 데이터베이스의 변경 사항을 기록하는 로그 파일입니다.Binlog는 MySQL 서버에서 수행된 모든 DDL 및 DML 명령을 순차적으로 저장합니다.이를 통해 데이터 복구와 복제를 효과적으로 관리할 수 있습니다. Binlog의 중요성데이터 복구데이터 손실 시, Binlog를 사용하여 특정 시점으로 복구할 수 있습니다...

Data/MySQL 2024.07.16

[Spring] JPA에서 쿼리 사용하는 방법

JPA에서 당연한 듯 사용하고 있었던 쿼리 메서드를 사용하면서 쿼리를 표현할 수 있는 방법들이 뭐가 있었지?라는 생각으로 오늘은 쿼리를 표현할 수 있는 방법과 각 방법의 장단점에 대해 정리해 보겠습니다.😎 Spring Data JPA 쿼리 메서드Spring Data JPA는 메서드 이름을 기반으로 쿼리를 자동 생성할 수 있는 기능을 제공합니다.간단한 쿼리에서는 매우 유용합니다. 장점간편하다!메서드의 이름만으로 쿼리를 자동 생성할 수 있습니다.빠른 개발간단한 쿼리의 경우 매우 빠르게 개발할 수 있습니다.단점복잡한 쿼리 한계매우 복잡한 쿼리는 작성하기 어렵습니다.메서드 이름 길이복잡한 쿼리를 작성하려면 메서드 이름이 매우 길어질 수 있습니다.예시는 아래와 같습니다.List findByTitleContain..

Backend/Spring 2024.07.11

[MySQL] 문자열 결합하기: CONCAT, GROUP_CONCAT

CONCAT과 GROUP_CONCAT 언제 어떻게 사용하는 게 적절할까요? 🤔CONCAT과 GROUP_CONCAT는 MySQL에서 문자열을 결합하는 데 사용되는 함수입니다.CONCAT은 여러 문자열을 하나의 문자열로 결합하고, GROUP_CONCAT은 그룹화된 결과에서 여러 값을 단일 문자열로 결합합니다. CONCATCONCAT 함수는 두 개 이상의 문자열을 결합하여 하나의 문자열을 만듭니다.SELECT CONCAT('Hello', ' ', 'World') AS greeting;위와 같은 예시는 아래와 같이 출력됩니다. CONCAT 함수는 인수로 전달된 문자열들을 순서대로 합쳐서 하나의 문자열로 만들어줍니다. 테이블에서도 사용할 수 있습니다.SELECT CONCAT(user_name, ' ', age)..

Data/MySQL 2024.07.08