분류 전체보기 69

LocalDateTime을 Redis Cache로 조회 시 직렬화 문제

public class UserMileageResponseDto { private UUID userId; private UUID mileageId; private Integer count; private LocalDateTime updatedAt; 위에 객체를 Redis Cache에 적용한 뒤 조회하려는 과정에서 해당 오류가 발생했다.Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling (through reference chain: com.taken_s..

Exception에 대해서 알아보자

자바에서 Exception은 Throwable의 하위 클래스로, 애플리케이션에서 처리 가능한 예외를 나타낸다. Exception을 크게 2가지로 보면 RuntimeException(Unchecked Exception) : 컴파일러가 강제로 처리하지 않음. 주로 프로그래밍 오류그 외 Exception(Checked Exception) : 컴파일러가 try-catch 또는 throws로 처리하도록 강제. 주로 외부 요인에 의한 오류 복구가 가능하다면 Checked, 개발자의 실수라면 Unchecked를 선택하면 좋다.RuntimeException 계열 : 컴파일러가 강제로 처리하지 않으므로 throws 선언이 필수는 아니다. 주로 코드 수정으로 방지 가능한 경우에 사용한다. throws 선언 없이 자유롭게 ..

🖥️ Back-end 2025.04.02

웹 소켓이란?

웹 소켓을 알기전에 간단하게 소켓에 대해 알아보면 네트워크 통신에서 컴퓨터 간 데이터를 주고받을 수 있게 해주는 인터페이스를 의미한다. 즉, 네트워크를 통해 두 프로그램이 서로 대화 할 수 있도록 연결해주는 다리 같은 역할을 한다고 볼 수 있다.소켓은 운영체제에서 제공하는 기능으로, 주로 TCP/IP 같은 네트워크 프로토콜 위에서 동작한다.예를 들어, 우리가 편지를 주고받을 때 우체통이 필요하듯이, 네트워크에서는 소켓이 그 역할을 하게된다. 소켓은 IP 주소와 포트 번호로 식별되며, 이를 통해 특정 기기와 특정 애플리케이션을 연결한다. 웹 소켓(WebSocket)은 양방향 실시간 통신을 제공하며, 주로 채팅, 알림, 실시간 업데이트 같은 기능에 사용된다. HTTP를 기반으로 초기 연결을 설정하지만, 이후..

🖥️ Back-end 2025.04.01

데이터베이스 락(Lock) 이란?

다중 사용자 환경에서 데이터의 일관성과 무결성을 유지하기 위해 사용되는 메커니즘으로, 여러 트랜잭션이 동시에 동일한 데이터에 접근할 때 발생할 수 있는 충돌을 방지하고, 데이터가 예상치 못하게 변경되거나 손상되는 것을 막는 역할을 한다.즉, 한 트랜잭션이 특정 데이터에 대해 작업을 하고 있을 때 다른 트랜잭션이 그 데이터에 접근하지 못하도록 잠그는 것 이다. 비관적 락(Pessimistic Locking) : 데이터에 대한 접근을 제어하기 위해 사용된다. 데이터베이스에서 특정 행이나 테이블에 대해 락을 걸어, 다른 트랜잭션이 동시에 동일한 데이터에 접근하거나 수정하지 못하게 한다. // 공유 락 @Lock(LockModeType.PESSIMISTIC_READ) @Query("select ..

🖥️ Back-end 2025.03.31

두 번째 프로젝트 기록하기 3

Slack 메시지 생성 및 전송 (All)Slack 메시지를 생성 및 전송하기 위한 POST /api/slack?username=..&deliveryId=.. Controller 기능 구현.응답 객체와 메시지, HttpStatus code를 같이 묶어서 응답할 수 있게 ApiResponseData 클래스 생성.배송 도메인에서 배송 담당자가 배정이 되면 RabbitMQ를 사용해서 받아온 배송 데이터로 주문 메시지를 생성.메시지에 담길 주문 정보와 배송 정보를 FeignClient로 조회한 뒤, Gemini API를 활용해서 최종 발송 시한을 추가로 발송하는 기능을 구현.팀원들이 각자 구현한 API에 FeignClient를 사용해서 응답값을 받아오는 과정에서 해당 엔트 포인트를 찾지 못하거나, null 값을..

자바의 Record 란?

Java 16에서 정식 출시된 불변 데이터 객체를 간단히 정의하기 위한 특별한 클래스 형태로, 주로 데이터를 담는 "데이터 홀더" 역할을 한다.DTO , 값 객체 (Value Objects) 등의 다양한 용도로 사용할 수 있다.기존의 클래스와 달리 모든 필드가 final 키워드로 선언되며, 객체 생성 후 변경할 수 없다는 특징이 있다.또한 필드를 선언하면 자동으로 getter, equals(), hashCode(), toString() 등 메서드를 자동으로 생성해줘서 보일러 플레이트 코드를 줄일 수 있다. 이러한 특성으로 멀티 스레드 환경에서 데이터가 의도치 않게 변경되지 않고 안전하게 전달할 수 있다.보일러 플레이트 코드 : 반복적인 코드를 줄일 수 있다. 기존에 사용하던 Classpublic clas..

🖥️ Back-end 2025.03.27

두 번째 프로젝트 기록하기 2

업체 등록 (Master, Hub)업체를 등록하기 위한 POST /api/company Controller 기능 구현.응답 객체와 메시지, HttpStatus code를 같이 묶어서 응답할 수 있게 ApiResponseData 클래스 생성.업체는 허브에 소속되어야 하므로 관리하는 Hub에서 업체를 생성할 수 있다. 특정 업체 조회 (All)특정 업체를 조회하기 위해 GET /api/company/{companyId} Controller 기능 구현.deleted 상태가 아닌 업체를 조회할 수 있도록 허브 엔티티와 매핑한 Repository에 findByIdAndDeletedAtIsNull 메서드로 간단하게 구현. 업체 전체 조회 (All)모든 업체를 조회하기 위해 GET /api/company Contro..

SQL 을 동적으로 삽입해서 NAVER Geocoding API 에 적용하기

CREATE TABLE p_hub ( id UUID NOT NULL DEFAULT uuid_generate_v4(), name VARCHAR(100) NOT NULL, address VARCHAR(100) NOT NULL, latitude DOUBLE PRECISION NOT NULL, longitude DOUBLE PRECISION NOT NULL, PRIMARY KEY (id));INSERT INTO p_hub(name, address) VALUES('서울특별시 센터', '서울특별시 송파구 송파대로 55'),('경기 북부 센터', '경기도 고양시 덕양구 권율대로 570'),('경기 남부 센터', '경기도 이천시 덕평로 257-21'),('부산광역시 센터', '부산 동구 중앙대로 ..

두 번째 프로젝트 기록하기 1

프로젝트 이름: eleven-logistics (MSA, DDD 구조 설계)본 프로젝트는 마이크로서비스 아키텍처를 기반으로 설계되었으며, 서비스 간 비동기 통신을 위해 RabbitMQ를 메시징 시스템으로 사용합니다. 개발 환경:Java: 17Spring Boot: 3.4.3데이터베이스: PostgreSQL, Redis개발 도구: Docker, Github메시징 시스템 : RabbitMQ 허브 등록 (Master)허브를 등록하기 위한 POST /api/hub Controller 기능 구현.응답 객체와 메시지, HttpStatus code를 같이 묶어서 응답할 수 있게 ApiResponseData 클래스 생성.NAVER Geocoding API를 사용해서 허브를 등록할 때 허브의 주소를 기반으로 해당 위치의..

NAVER Geocoding API 사용해서 위도, 경도 추가하기

원하는 주소에 원하는 데이터를 요청하는 과정에서 위도, 경도를 추가해야 하는 상황이 생겼다.처음에는 위도, 경도를 같이 요청 보냈지만, 추후에 확장성과 주소를 수정해야 하는 상황이 생길 때마다 위도, 경도도 바꿔줘야 하는 불편함이 생길 것 같아서 주소를 입력하면 위도, 경도가 자동으로 추가될 수 있는 시스템을 만들기로 하였다. 우선 naver map을 사용하기 위해서 정보를 등록해야 한다.  NAVER CLOUD PLATFORMcloud computing services for corporations, IaaS, PaaS, SaaS, with Global region and Security Technology Certificationwww.ncloud.com 이 사이트에 접속해서 회원가입을 진행하고 로그..