울음참고 개발공부
Published 2026. 5. 29. 16:41
TIL | 이것 저것,,, 그저 TIL TIL
728x90

 

배경 ) 

바이브 코딩으로 코드를 생성하다보니 내가 못보던 애들이 좀 있었음

새로운 코드인 줄 알았는데 원래 쓰고있었던거라함... ( 그냥 나만 모른거  )

그거랑 이것저것 오늘 알게된거 정리 ~~~ 

 


 

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

VM 옵션 추가하기

 

 

-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를 쓴다. 

 


 

바이브코딩이 아무리 잘해준다고 해도 개발자라면 어떻게 돌아가는지 뭐가 뭔지 정도는 알고 있어야 버그를 잡을 수 있따...!! 

스프링 공부좀 해야할 듯 ㅜㅜ 

 

 

728x90
profile

울음참고 개발공부

@메각이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!