배경 )
바이브 코딩으로 코드를 생성하다보니 내가 못보던 애들이 좀 있었음
새로운 코드인 줄 알았는데 원래 쓰고있었던거라함... ( 그냥 나만 모른거 )
그거랑 이것저것 오늘 알게된거 정리 ~~~
VM Option으로 API Key 설정
외부에 노출되면 안되는 API KEY 같은걸 어떻게 관리해야할까?
클러드는 그냥 application.yml 에 import 한뒤에 .env파일을 생성해서 거기 넣어버렸다.
spring:
config:
import: optional:file:.env[.properties]
.env 파일을 gitignore에 넣어두면 되는거 아닌가 싶었지만 그것조차 파일에 올라가는거기는 하니깐 유출 위험이 있어서 소스가 로컬에만 있을게 아니라면 아래와 같은 방법으로 사용하는 것을 추천한다고한다(경력직의 말씀)
-> 환경변수처럼 외부에서 주입하는 방식
Spring이 JVM위에서 동작하기 때문에 VM Option 설정을 통해 값을 설정할 수 있다.
설정 경로) Run/Debug -> Modify options -> Add VM options

-DGOOGLE_GENAI_API_KEY=AIzaSy...
↑ ↑
-D = "Define(정의)" 실제 값
(시스템 프로퍼티로 등록)
물론 .env 설정으로도 하긴 하지만 이렇게 쓸수도 있다는 것을 알고있기 !!!
Java Record 클래스
record 클래스를 Java17이상 부터 쓴다고하는데 final 처럼 값을 불변하게 만들 때 쓴다고 한다.
기존에는 데이터를 담는 클래스(DTO)를 만들때 Lombok 어노테이션을 사용해서 @Getter, @Setter 등을 설정해줬었다.
값을 set할수 없게 만든다면 @Setter를 붙이지 않으면 되는 것 아닌가? 싶어서 롬복보다 장점을 물어봤다.
Record가 Lombok보다 나은 점
1. 외부 라이브러리 의존성이 없음
Lombok
→ build.gradle에 의존성 추가 필요
→ IntelliJ 플러그인 설치 필요
→ 가끔 버전 충돌 발생 😤
Record
→ Java 자체 문법
→ 아무것도 설치 안해도 됨 ✅
2. 진짜 불변(Immutable) 보장
- Lombok은 "약속으로 불변", Record는 "구조적으로 불변"
Lombok 과 Record의 사용 차이점
Lombok 쓰는 곳 → Entity, 값이 바뀌어야 하는 객체
Record 쓰는 곳 → DTO, 응답 객체, 값 전달용 (불변 데이터)
사용 예시 )
// Record로 응답 객체 정의
public record UserResponse(
String name,
int age,
String email
) {}
// Controller
@RestController
public class UserController {
private final UserService userService;
@GetMapping("/user")
public UserResponse getUser() {
return userService.getUser();
}
}
-> 핵심 : UserResponse 한 줄 선언만으로 생성자, getter, JSON 직렬화까지 전부 자동으로 됨 !!
Git Cherry-pick
브랜치 전체를 합치는 게 아니라 특정 커밋 하나만 쏙 가져오는 기능
feature 브랜치: A → B → C → D
↑
이것만 가져오고 싶다!
main 브랜치: 1 → 2 → 3
↓ cherry-pick 후
main 브랜치: 1 → 2 → 3 → C'
사용 예시
feature 브랜치에서 개발 중인데... 그 중 버그 수정 커밋 하나만 main에 급하게 반영해야 할 때!
@NotBlank vs @NotNull
@NotBlank 라는 어노테이션을 많이 사용해보지 못해 이게 뭔가 개념이 제대로 안잡혀있다능
예시를 통해 비교
String a = null; // null
String b = ""; // 빈 문자열
String c = " "; // 공백만 있는 문자열
String d = "hello"; // 정상
| 어노테이션 | null | "" | " " | "hello" |
| @NotNull | ❌ 실패 | ✅ 통과 | ✅ 통과 | ✅ 통과 |
| @NotEmpty | ❌ 실패 | ❌ 실패 | ✅ 통과 | ✅ 통과 |
| @NotBlank | ❌ 실패 | ❌ 실패 | ❌ 실패 | ✅ 통과 |
-> @NotBlank가 가장 엄격! String 검증엔 보통 @NotBlank를 쓴다.
바이브코딩이 아무리 잘해준다고 해도 개발자라면 어떻게 돌아가는지 뭐가 뭔지 정도는 알고 있어야 버그를 잡을 수 있따...!!
스프링 공부좀 해야할 듯 ㅜㅜ
'TIL' 카테고리의 다른 글
| 디스크 용량 확보 - 떨어져있는 파티션 합치는 프로그램 (0) | 2025.06.24 |
|---|---|
| Swagger Error - Fetch errorresponse status is 500 /v3/api-docs (0) | 2025.05.19 |
| TIL | 사용중인 로컬호스트 종료 명령어 ( window ) (0) | 2025.05.07 |
| TIL | 리눅스 내에서 war 파일 배포시 자바경로 문제로 발생한 500 에러 해결 과정 (1) | 2025.02.11 |
| TIL | Quartz 에서 Clustering 기능의 의미 (1) | 2025.02.05 |