분류 전체보기 63

로컬 개발에서 배포, 개발 환경 분리하기

Step 1: 프로젝트에서 하드코딩된 URL/포트 찾기@Value("${app.frontend.url}")private String FRONTEND_URL;필요한 곳에 위와 같은 형태로 변수 생성 (이후 더 좋은 방법 리팩토링 필요) Step 2: application.properties 분리하기application-dev.propertiesapplication-prod.properties두가지로 분리하여,application.properties에서는spring.application.name=boilerplatespring.profiles.active=dev#spring.profiles.active=prod주석으로 바꿔가면서 설정 적용 가능. 추가적으로, 더미데이터 삽입, 로컬 저장 서비스 등 로컬 개발..

Project/Boilerplate 2025.04.10

isDuplicate 속성을 가진 DTO가 isDuplicate, duplicate 응답하는 에러

✅ 상황 요약다음 DTO 선언:@Getter@AllArgsConstructorpublic class EmailDuplicateCheckResponse { @JsonProperty("isDuplicate") private boolean isDuplicate;}그런데 JSON 응답은 이렇게 두 개의 필드를 포함:{ "isDuplicate": false, "duplicate": false}❗ 문제의 원인@Getter를 사용하면 Lombok이 isDuplicate()라는 getter 메서드를 생성:public boolean isDuplicate() { return this.isDuplicate;}그런데 Jackson은 boolean 타입일 때 isX() 메서드로부터 자동으로 속성 이름을 추론..

Mock 테스트 중 엔티티 id 및 SecurityContextHolder 설정

@BeforeEachvoid setUp() { testUser = User.builder() .id(1L) // 오류 .email("test@example.com") .build(); User 엔티티는 id를 세팅할 수 있는 빌더가 없음. 그렇다고 AllArgsConstructor를 넣는 것은 위험함.따라서, 리플렉션을 이용해서 필드 값을 강제 설정. public class TestReflectionUtil { public static void setId(Object target, Long id) { try { Field field = target.getClass().getDeclaredField("id"); ..

Project/Boilerplate 2025.04.02

테스트에서 Entity vs DTO 이용

✅ 테스트에서 Request DTO를 사용하는 게 더 나은 경우🔹 테스트가 Controller → Service 흐름을 따를 때@WebMvcTest, MockMvc, 통합 테스트 등에서→ 실제 HTTP 요청처럼 흐름을 시뮬레이션하는 경우엔 CreatePostRequest DTO를 사용하는 게 자연스럽고, 검증이 더 현실적입니다.mockMvc.perform(post("/api/posts") .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(new CreatePostRequest("제목", "내용")))) .andExpect(status().isOk());🟡 반면, 단위 테스트 ..

WebMvcTest + Spring REST doc + Swagger 적용 ( 2 / 2 - Spring REST doc + Swagger )

plugins { id 'java' id 'org.springframework.boot' version '3.4.3' id 'io.spring.dependency-management' version '1.1.7' id 'com.epages.restdocs-api-spec' version '0.19.4' // ✅ OpenAPI spec 생성용}dependencies { // ✅ REST Docs testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc' // ✅ OpenAPI 3 스펙 변환 라이브러리 testImplementation 'com.epages:restdocs-api-spec-mo..

Project/Boilerplate 2025.03.29

WebMvcTest + Spring REST doc 적용 ( 1 / 2 - MockMvc )

WebMvcTest + Spring REST doc 을 적용 적용 이유: 테스트와 동시에 문서화를 자동화 할 수 있기에 문서 작성의 편리함 Spring REST doc을 선택한 이유: Swagger와 달리, 프로덕트 코드에 테스트 관련 코드가 포함되지 않음. 이후 Swagger UI만 가져와서, Spring REST doc과 Swagger의 장점을 합칠 예정 RestAssured가 아니라 MockMvc를 선택한 이유:RestAssured는 @SpringBootTest를 실행해야 하기 때문에 속도가 느림.  @WebMvcTest(GreetingController.class)는Spring에서 웹 계층(Controller) 만 테스트하기 위한 전용 어노테이션입니다.속도는 빠르면서도 HTTP 요청/응답 흐름을 ..

Project/Boilerplate 2025.03.28

LLM 학습 시 내부 학습 원리

LLM 학습의 본질: 확률 분포 예측주어진 입력(문맥)에서 다음 단어(토큰)가 나올 확률 분포를 예측하는 모델ex)Input: ENFP 스타일로 바꿔줘: 나도 좋아해.Output: 헐~ 나도 진짜 좋아해~!모델은 이 Input 다음에 등장할 문장으로 "헐~"이 등장할 확률이 가장 높아지도록 조정함.  학습 과정 요약Step 1. 학습 데이터 준비 "ISTP 스타일로 바꿔줘: 나도 그거 진짜 좋아하는데! "-> "나도 좋아해" Step 2. 모델 입력 형태로 인코딩 (tokenization) 텍스트는 모두 숫자 토큰으로 바뀌고, 각 토큰마다 다음 토큰의 확률을 예측하도록 함.ex) ISTP -> 1234, 스타일 ->  0812, ... input 처리: "ISTP 스타일로 변경: 나도 그거 진짜 좋아하는..

Computer Science/AI 2025.03.28

PERT와 LoRA란 무엇인가

파인튜닝의 새로운 대세: PEFT와 LoRA란?요즘 AI 모델 파인튜닝을 이야기할 때 빠지지 않는 키워드가 있습니다.바로 PEFT와 LoRA입니다.💡 "기존 대형 모델을 빠르고 가볍게, 그리고 효율적으로 파인튜닝할 수 없을까?"이 질문에 대한 해답이 바로 PEFT (Parameter-Efficient Fine-Tuning), 그리고 그 중 하나인 **LoRA (Low-Rank Adaptation)**입니다.1. PEFT란 무엇인가요?PEFT = Parameter-Efficient Fine-Tuning(파라미터 효율적 파인튜닝) PEFT는 대형 언어 모델(LLM)의 전체 파라미터를 학습하지 않고,일부 파라미터 또는 추가 모듈만 학습함으로써 훨씬 효율적으로 파인튜닝하는 기법입니다.💡 왜 PEFT가 필요한..

Computer Science/AI 2025.03.24

Spring @ModelAttribute 매핑 오류 해결 방법 (Setter, Enum 변환)

Spring Boot에서 @ModelAttribute를 사용하여 Query String을 DTO(PostSearchOptions)에 바인딩할 때, 값이 매핑되지 않는 문제가 발생했습니다.문제 상황: Query String이 PostSearchOptions에 매핑되지 않음예를 들어, 다음과 같은 컨트롤러가 있다고 가정해봅시다.@GetMapping("/list")public ResponseEntity> getAllPostsWithSearchOptionsByPage( Pageable pageable, @ModelAttribute PostSearchOptions postSearchOptions // 🔥 Query String → 객체 매핑) { return ResponseEntity.ok( ..

Spring Data JPA에서 커스텀 Repository 구현체 인식 및 작동 방식

Spring Data JPA의 Repository 시스템 이해하기Spring Data JPA를 사용하면 기본적인 CRUD 기능을 손쉽게 제공받을 수 있습니다.예를 들어, JpaRepository를 상속받으면 findById(), save(), delete() 등의 메서드를 자동으로 사용할 수 있죠.public interface PostRepository extends JpaRepository {}위 코드만으로도 Post 엔티티에 대한 기본적인 데이터 접근 기능을 사용할 수 있습니다.하지만, 복잡한 쿼리나 커스텀 로직이 필요할 때는 어떻게 해야 할까요? 이럴 때 필요한 것이 바로 커스텀 Repository 구현체입니다.Spring Data JPA의 커스텀 Repository 적용 방법Spring Data ..