본문 바로가기

Java/Spring Boot18

Getter/Setter 사용 기준 1. Getter 허용 기준 (상대적으로 자유로움)● 허용: 조회 목적의 필드조회용으로 필드 값을 외부에 제공할 필요가 있을 때 허용됩니다.public String getEmail() { return email;}● 제한 또는 금지:민감 정보 (password, token, salt, secretKey, 등)내부적으로만 사용하는 정보 (internalFlag, deleted, 등)// ❌ 이렇게 민감한 값은 외부 노출 Xpublic String getPassword() { return password;}권장:필요한 필드만 Getter 생성 (@Getter 대신 개별 작성)Lombok @Getter는 DTO나 읽기 전용 뷰 모델에만 사용2. Setter 허용 기준 (매우 신중)● 기본 원칙: 엔.. 2025. 5. 31.
ResponseEntity ResponseEntity란?ResponseEntity는 Spring Framework에서 HTTP 응답 전체를 커스터마이징할 수 있게 해주는 클래스입니다.@RestController나 @Controller에서 일반적으로 메서드 반환 타입으로 사용되며, HTTP 상태 코드, 헤더, 바디를 원하는 대로 제어해서 응답을 반환할 수 있습니다.왜 쓰는가? (주요 목적)HTTP 상태 코드 커스터마이징기본적으로 @RestController에서는 객체 반환 시 항상 200 OK로 나가지만, 상황에 맞게 404, 201, 400 등 다양한 상태 코드로 직접 제어하고 싶을 때 사용해요.헤더 직접 지정응답에 Location, Set-Cookie, Cache-Control 같은 커스텀 헤더를 추가하거나 수정할 수 있어요.응.. 2025. 5. 15.
Swagger와 API 명세 1. Swagger / OpenAPI (가장 많이 사용됨)Swagger란?API 명세를 자동 생성해주는 도구OpenAPI 스펙을 바탕으로 UI를 통해 확인하고 테스트 가능Spring Boot 연동 방법implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0'// http://localhost:8080/swagger-ui/index.html 에서 확인 가능장점자동 문서화컨트롤러, DTO에 붙인 @Operation, @Parameter 등으로 자동 생성UI 제공Swagger UI에서 API 직접 테스트 가능OpenAPI 3.0 스펙 지원다른 툴과 연동 쉬움 (Postman, Notion 등)예시@Operation(summary = "회원.. 2025. 3. 31.
Spring Boot Test 관련 (JUnit, Mockito, AssertJ,Spring Boot Test, Testcontainers ) 1. JUnit (Java Unit Test의 표준)버전JUnit 4, 5(Jupiter) 두 가지가 존재 (요즘은 5 주력)용도단위 테스트, 통합 테스트 등 Java 테스트 전반대표 어노테이션@Test, @BeforeEach, @AfterEach, @Nested, @DisplayName 등예시 (JUnit 5)@DisplayName("간단한 더하기 테스트")@Testvoid addTest() { int sum = calculator.add(2, 3); assertEquals(5, sum);}2. Mockito (Mock 객체 생성)가짜 객체(Mock) 만들어서 서비스, 컨트롤러 단위 테스트할 때 사용DB, 외부 API 없이도 테스트 가능@Mock, @InjectMocks, when().the.. 2025. 3. 31.
Optional<T> 1. Optional이란?null을 직접 다루지 않고,"값이 있을 수도, 없을 수도 있는 객체"를 감싸는 컨테이너 클래스Optional은 null-safe한 값을 표현하는 도구리턴 타입에 사용하되, 파라미터/필드에는 되도록 쓰지 말기orElseThrow, map, filter, ifPresent 잘 쓰면 코드 깔끔해짐Optional name = Optional.of("Mars");Optional empty = Optional.empty();2. 왜 쓰는가?NullPointerException 방지"null 체크"를 명시적으로 강제리턴값이 "있을 수도/없을 수도" 있는 경우 문서화 효과예전 방식User user = repository.findByEmail(email);if (user != null) { ... 2025. 3. 31.
JPQL과 QueryDSL 1. QueryDSL이란?JPA의 JPQL을 타입 안전하게 사용할 수 있게 도와주는 라이브러리IDE 자동완성, 리팩토링 용이, 동적 쿼리에 매우 강력함실무에선 JPQL보다 거의 대부분 QueryDSL을 사용2. 설치 방법 (Gradle 기준)1) 의존성 추가// build.gradle.kts (Kotlin DSL 예시)dependencies { implementation("com.querydsl:querydsl-jpa") annotationProcessor("com.querydsl:querydsl-apt:5.0.0:jpa") annotationProcessor("jakarta.annotation:jakarta.annotation-api") annotationProcessor("jak.. 2025. 3. 31.
JPA 1. @Entity, @Table → CREATE TABLE@Entity@Table(name = "users")public class User { ...}CREATE TABLE users ( ...);@Entity가 붙으면 해당 클래스는 DB 테이블로 변환@Table(name = "...") 없으면 → 클래스명이 소문자로 변환됨 (User → user)2. @Id, @GeneratedValue → PRIMARY KEY, AUTO_INCREMENT@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;id BIGINT PRIMARY KEY AUTO_INCREMENT IDENTITYAUTO_INCREMENT (MySQL), SERI.. 2025. 3. 31.
OAuth 구현 목표프론트에서 "구글 로그인"을 누르면Spring 서버가 로그인 처리 → 사용자 정보 저장 → JWT 발급 → 클라이언트 전달이 전체 흐름을 이해하는 게 목표야!1. 전체 OAuth 로그인 흐름[프론트]사용자가 구글 로그인 버튼 클릭 ↓GET /oauth2/authorization/google(Spring이 자동 제공하는 URL)[Spring 서버]→ Google 로그인 페이지로 리다이렉트 ↓→ 사용자가 로그인 후 동의 ↓Google → Spring으로 "code" 전송 (리디렉션 URL로)[Spring 서버]→ code를 access_token으로 교환→ access_token으로 사용자 정보(email, name 등) 조회→ OAuth2User 객체로 변환됨2. 이후 흐름 (커스텀 처리)[.. 2025. 3. 28.
Redis, kafka RedisRedis는 기본적으로 인메모리 키-값 저장소야. 데이터가 메모리에 있어서 정말 빠르고, 보통은 캐시로 많이 사용.그리고 pub/sub 구조를 지원해서 메시지 전달에도 사용.또한 Redis Streams 같은 기능을 통해 간단한 메시지 큐 시스템으로도 사용.특징 요약하자면:빠르다 (메모리 기반이라서)구조가 단순하고 사용하기 쉽다캐시, 세션 저장, 일시적인 메시지 처리에 적합메시지 보관 기간이 짧고, 디스크 내구성이 약해 (기본은 휘발성)언제?서버 간 간단한 pub/sub 통신이 필요할 때로그인 세션 저장이나 캐시 용도로요청을 큐에 잠깐 쌓았다가 백그라운드 처리할 때 (예: 이메일 발송 대기열)KafkaKafka는 일종의 분산 메시징 시스템 또는 이벤트 스트리밍 플랫폼으로 보면 된다.기본적으로 모.. 2025. 3. 27.