목록[백엔드]/[spring+JPA | 이슈해결] (10)
개발자로 후회없는 삶 살기
🚨 서론 (문제상황)@Beanpublic RedisTemplate redisTemplate( RedisConnectionFactory redisConnectionFactory, ObjectMapper objectMapper) { Jackson2JsonRedisSerializer jsonRedisSerializer = new Jackson2JsonRedisSerializer(AccessTokenSaveResponseDto.class); jsonRedisSerializer.setObjectMapper(objectMapper); // 여기 ✅Redis의 Serializer는 내부적으로 ObjectMapper를 사용하여, 객체 ↔ JSON 직렬화, 역직렬..
🚨 서론 (문제 상황)Redis는 단순 데이터 저장뿐만 아니라, 캐싱, 메세지 콜백 등 다양한 기능으로 활용도가 매우 높다. 그 중 정밀한 이벤트 핸들러를 제공하는 Redis Stream을 사용하고자 했고, 일반 (키-벨류, 해시맵) 형태가 아닌 특수한 자료구조라서, 사용하기 전에 자세히 알아보고자 한다. 본론- 자바의 직렬화 & 역직렬화직렬화 : 자바의 Object를 다른 컴퓨터의 자바 시스템에서 사용할 수 있도록 저장하는 것을 의미한다. Object를 연속된(Serial) 바이트 스트림 형태로 포맷 변환하는 기술이다.역직렬화 : 바이트 스트림을 원래대로 자바 시스템의 Object로 변환하여 로드하는 기술이다. JVM 클래스 로더 시스템을 보면 클래스 정보가 메서드 영역에 저장되고 Object가 힙,..
서론 개인적으로 공부하고 있는 우아한 테크코스 로또 문제에서 발생한 소수점 계산 문제를 해결합니다. 본론 - float과 double의 문제점 float와 double은 정확한 값이 아닌 근삿값을 담고 있는 문제가 있습니다. -> 고정 소수점과 부동 소수점 1) 고정 실수를 부포비트, 정수부, 소수부로 나누고 자릿수를 고정하여 실수를 표현하는 방식입니다. ex) 7.75 = 111.11(2) 7.75는 실수를 2진수로 변환하면 111.11이 되는데 이를 정수부와 소수부로 나눠서 담아 표현합니다. 구현법이 간단하지만, 자릿수 제한이라는 단점이 있습니다. 2) 부동 실수를 부호부, 가수부, 지수부로 나누는 방식입니다. ex) 12.3456 = 0.123456 * 10^2 12.3456를 0.123456 * ..
서론 포스트맨 요청 헤더에 토큰을 자동으로 넣는 방법을 다룹니다. 본론 스프링과 포스트맨으로 프로젝트를 진행하다보면 로그인 이후 받아온 토큰을 계속 사용해서 이후 요청을 해야할 때가 있습니다. @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { final String token = AuthorizationExtractor.extract(request); Long id = Long.valueOf(jwtTokenProvider.getPayload(token)); Student findStudent = studentRepository...
서론 초기 엔터티 구축 과정에서 발생한 중복 검증을 개선한 방법에 대해 설명합니다. 본론 - 초기 엔터티 구축 첫 번째 기능에 필요한 초기 엔터티를 구축합니다. @Entity @Getter @Table(name = "student") @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Student extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "student_id") private Long id; @Column(name = "login_id", length = 255, nullable = false) private Strin..
서론자바에서는 데이터에 변경이나 추가를 하지 못하도록 불변을 설정할 수 있는 메서드를 제공합니다. 이번 시간에는 자바의 불변에 대해 알아봅니다. 본론- 복제본에 변화를 준 경우먼저 복제본에 변화를 줄 수 있는지 없는지 살펴보겠습니다. -> 배열을 입력받아 배열을 반환하는 메서드1. Arrays.copyOf이것은 배열을 복제하여 배열을 반환하는 메서드입니다. 복제본에 변화를 주어도 변경이 가능합니다. -> 배열을 입력받아 List를 반환하는 메서드1. List.of변경 불가를 보장합니다. 2. Arrays.asList변경은 가능하고 추가는 불가합니다. -> List를 입력 받아 List를 반환하는 메서드1. Collections.unmodifiableList복제본에 변경이 불가합니다. 2. List.cop..
서론 현재 진행하고 있는 백엔드 프로젝트에서 spring으로 작성된 어플리케이션 서버와 flask로 작성된 AI 서버를 통신하는 과정을 기록합니다. 본론 - spring to spring 문자열 주고 받기 로컬 호스트에서 서버 간 통신은 처음해보기도 하고 spring과 flask는 이미지를 주고 받을 것이라서 그 전에 spring와 spring을 먼저 연결해 봅니다. 1. 요청과 응답 DTO 객체 // 요청 객체 @Data public class RequestDTO { private String body; public RequestDTO(String body) { this.body = body; } public RequestDTO() { } } // 응답 객체 @Data public class Respo..
서론 DB에 데이터를 저장하기 위해서는 DB 컬럼 타입과 엔터티 필드 타입을 맞춰줘야 합니다. String을 varchar로 int를 integer로 맞추는 것을 의미합니다. @Enumerated(value = EnumType.STRING) 자바에서는 enum 타입이 있고 enum 타입의 데이터를 DB에 저장해야 할 필요가 있습니다. JPA에서는 이것을 어노테이션으로 해결할 수 있습니다. 그러면 JPA가 없으면 어떻게 해야 할까요? 이에 대해 알아봅니다. 본론 - 엔터티 필드 @Setter @Getter @ToString public class Item { private Long id; private String itemName; private int price; private int quantity; ..