목록[백엔드]/[spring | 이슈] (8)
개발자로 후회없는 삶 살기
서론 개인적으로 공부하고 있는 우아한 테크코스 로또 문제에서 발생한 소수점 계산 문제를 해결합니다. 본론 - 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 복제본에 변경이 불가합니다. ..
서론 현재 진행하고 있는 백엔드 프로젝트에서 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; ..
서론 웹 어플리케이션을 개발하면 롬복을 사용하게 됩니다. 이번에는 롬복이 @equalsAndHashcode를 제공하는 이유와 자바의 동일성, 동등성을 알아보겠습니다. 본론 - 동일성과 동등성 package hello.jdbc.domain; import lombok.Data; import lombok.Getter; import lombok.Setter; public class Member { private String memberId; private int money; public Member(String memberId, int money) { this.memberId = memberId; this.money = money; } public Member(String memberId) { this.memb..
서론 빈 검증 시 사용되는 3가지 어노테이션의 차이를 알아보겠습니다. 본론 1. @NotNull @Data public class MemberSaveForm { @NotNull private String userName; @NotNull private String loginId; @NotNull private String password; } NotNull의 경우 필드에 null이 들어오면 바인딩 에러가 발생합니다. null이 아닌 ""(공백), " "(띄어쓰기)은 허가합니다. 1) 필드가 String 타입 필드가 String 타입인 경우 input 태그에 아무 값도 입력하지 않으면 ""(공백)이 들어가서 회원 가입에 성공하고 bindingResult 로그에도 아무런 로그가 남지 않습니다. 따라서 Str..