java

· Spring
안녕하세요, 오늘은 토비의 클린 스프링 강의를 들으면서알게 된 정말 유용한 Spring Assert 기능을 공유하려고 해요.https://inf.run/3TCuG 토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1| 토비 - 인프런 강의현재 평점 5점 수강생 1380명인 강의를 만나보세요.| 요약: 가상의 스타트업 개발팀이 단계적으로 클린 코드와 스프링 개발 원칙을 따라서 빠르고, 안정적이면서 유연하고, 유지보수하기 좋게 개www.inflearn.com [본 게시물은 파트너스 활동의 일환으로 소정의 수수료를 받을 수 있습니다.] 혹시 도메인 객체에서 validation 로직 때문에 코드가 지저분해진 경험 있으신가요?if (word == null) { throw new Ille..
· Spring
이 글은 인프런 OAuth2 강의를 수강하면서 실습한 내용을 바탕으로 작성되었습니다. 실제 구현 과정에서 느꼈던 궁금증과 개선 과정을 정리해보았어요! [본 게시물은 파트너스 활동의 일환으로 소정의 수수료를 받을 수 있습니다.] 🤔 문제의 시작 Spring Security, OAuth2Client 를 활용해서 카카오 소셜 로그인을 구현하던 중,각 OAuth2 제공자마다 별도의 Response 클래스를 만들고 있었다. // 기존 방식public class NaverResponse implements OAuth2Response { private final Map attribute; // ... 구현}public class GoogleResponse implements OAuth2Response ..
· Spring
이 글은 인프런 OAuth2 강의를 수강하면서 실습한 내용을 바탕으로 작성되었습니다. 실제 구현 과정에서 느꼈던 궁금증을 정리해보았어요! [본 게시물은 파트너스 활동의 일환으로 소정의 수수료를 받을 수 있습니다.] Spring Boot에서 카카오 소셜 로그인을 구현하면서 정말 신기한 경험을 했다.단순히 http://localhost:8080/oauth2/authorization/kakao라는 URL에 접속했을 뿐인데,마법처럼 카카오 로그인 페이지로 리다이렉트되었다.도대체 Spring Security OAuth2 내부에서는 무슨 일이 일어나고 있는 걸까? 🤔 의문의 시작 처음에는 이해가 안 됐다.나는 /oauth2/authorization/kakao라는 컨트롤러를 만든 적도 없고,카카오 API를 직접 호..
· Spring
안녕하세요, 오늘은 토비의 클린 스프링 강의를 들으면서 알게 된 정말 유용한 내용을 공유하려고 해요.https://inf.run/3TCuG 토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1 강의 | 토비 - 인프런토비 | 가상의 스타트업 개발팀이 단계적으로 클린 코드와 스프링 개발 원칙을 따라서 빠르고, 안정적이면서 유연하고, 유지보수하기 좋게 개발하는 과정을 실제 업무 진행과 유사한 방식으로www.inflearn.com[본 게시물은 파트너스 활동의 일환으로 소정의 수수료를 받을 수 있습니다.] 혹시 프로덕션에서 NullPointerException 때문에 밤새 디버깅해본 경험 있으신가요?저는 정말 많았는데,이제는 JSR-305와 Spring의 Null Safety 기능으로 이런 ..
· 리팩토링
1. 들어가며 프로젝트를 운영하면서 코드 구조와 리팩토링에 대해 늘 고민하게 됩니다.이번 포스팅에서는 제가 작업 중인"Mori" 프로젝트의 Enum 클래스 변환 메서드를 점진적으로 개선한 경험을 공유하려고 합니다. 서비스에서 Enum 변환은 정말 자주 등장하는 패턴입니다."Mori" 프로젝트는 어린이를 위한 chatGPT 서비스인데, 어린이의 연령대에 맞게 답변을 내려줄 필요가 있어서 아래처럼 of() 메서드를 만들어서 쓰고 있었습니다. @Getter@AllArgsConstructorpublic enum ChildAgeGroup { TODDLER("0 ~ 3세"), KINDERGARTEN("4 ~ 6세"), LOWER_GRADES("7 ~ 9세"), UPPER_GRADES("10 ~..
1. 문제 상황 어린이용 chatGPT를 만드는 프로젝트를 진행중인데,,,문제가 생겼다.LLM이 이전 대화의 맥락을 기억하지 못하는 것이었다.보통 chatGPT를 사용하면 기본적으로 이전 대화 내역을 기억해서 적절한 응답을 내려준다.근데, API 형태로 chatGPT를 사용하면 이전 대화 내역을 기억하지 못하는 문제를 발견했다.개발 환경은 Spring AI 1.0.0-M6, Java 17, gpt-4o-mini 이다. 2. 문제 상황 확인"고양이는 왜 그루밍을 할까?"에 대한 질문을 던졌을 때 적절한 응답을 받았다. 내가 AI에게 요청한 것은 답변을 받고 꼬리 질문을 9개를 받는 것이었다. 꼬리 질문 중에 "그루밍을 하는 다른 동물은 없을까?" 를 요청하고 답변을 받아 보았다. 이전에 고양이에 대해서 이..
1. Record란? Java 16에서 정식으로 도입된 Record는 불변(immutable) 데이터 객체를 생성하기 위한 특별한 형태의 클래스다.주요 특징은 아래와 같은데, 모든 필드가 private final로 선언된다.생성자, getter, equals(), hashCode(), toString()메서드가 자동 생성된다.불변성(immutability)이 보장된다.java.lang.Record를 자동으로 상속한다.final 클래스라 상속이 불가능하다. 2. 기존 DTO vs Record 비교 동일한 데이터 객체를 일반 클래스로 작성했을 때, Record로 작성했을 때를 비교해보자 일반 DTO 클래스public class UserDTO { private final String name; pr..
· Spring
1. 문제 상황 Kafka topic에 이벤트를 발행하기 위해서는 java 객체를 JSON 으로 직렬화하는 과정이 필요하다.이 때 변환하려는 이벤트에 LocalDateTime 타입의 필드가 있었고, 직렬화하는 과정에서 문제가 발생했다. ReservationCreatedEventpublic record ReservationCreatedEvent( UUID reservationId, Long userId, UUID restaurantScheduleId, LocalDateTime createdAt, // LocalDateTime LocalDateTime expiredAt // LocalDateTime) createdAt, expiredAt 이라는..
Griotold
'java' 태그의 글 목록