목록전체 글 (75)
ballqs 님의 블로그
JpaRepository 쿼리 사용 방법리턴타입 {접두어}{도입부}By{프로퍼티 표현식}(조건식)[(And|Or){프로퍼티 표현식}(조건식)](OrderBy{프로퍼티}Asc|Desc) (매개변수...)접두어Find, Count, ...도입부Distinct, First(N), Top(N)프로퍼티 표현식Person.Address.ZipCode => find(Person)ByAddress_ZipCode(...)조건식IgnoreCase, Between, LessThan, GreaterThan, Like, Contains, ...정렬 조건OrderBy{프로퍼티}Asc|Desc리턴 타입E, Optional, List, Page, Slice, Stream매개변수Pageable, Sort 쿼리 실습 코드// 기본Lis..
JPA 테이블 매핑 기능 @Entity객체 관점에서의 이름디폴트로 클래스명으로 설정됨엔티티의 이름은 JQL에서 쓰임JQL : Entity 명으로 쿼리짤때 쓰이는 언어 (ex. JPQL, QueryDsl)@TableRDB 의 테이블 이름@Entity의 이름이 테이블의 기본값주로 Entity 이름과 다르게 Table 명을 지정하고 싶을때 아래와 같이 사용@Entity@Table(name = "users")public class User () {...}테이블의 이름은 SQL에서 쓰임SQL : Table 명으로 쿼리짤때 쓰이는 언어 (ex. JDBC, SQL Mapper)@Id엔티티의 주키를 맵핑할 때 사용자바의 모든 primitive 타입과 그 랩퍼 타입을 사용할 수 있음Date랑 BigDecimal, Big..
Proxy 패턴이란?프록시 패턴은 실제 객체에 대한 접근을 제어하고, 추가적인 기능을 제공하기 위해 사용되는 디자인 패턴이다.마치 대리인처럼 실제 객체를 대신하여 동작하며, 다양한 상황에서 유용하게 활용될 수 있다.Proxy 패턴 장점접근 제어실제 객체에 대한 직접적인 접근을 제한하고, 프록시를 통해서만 접근하도록 함으로써 보안을 강화할 수 있다.특정 조건에 따라 접근을 허용하거나 거부할 수 있다. 추가 기능 제공실제 객체의 기능을 확장하여 새로운 기능을 추가할 수 있다.예를 들어, 캐싱, 로그 기록, 권한 검사 등을 프록시에서 처리할 수 있다. 지연 로딩실제 객체를 필요한 시점까지 생성하지 않고, 프록시 객체를 통해 미리 참조할 수 있다.이는 큰 객체를 로딩하는 데 드는 시간을 절약하고 시스템 성능을 ..
@TransactionalEventListener란?@TransactionalEventListener는 스프링에서 데이터베이스 트랜잭션의 경계를 따라 이벤트를 처리할 때 사용하는 특별한 어노테이션입니다. 이 어노테이션은 트랜잭션이 성공적으로 커밋된 이후에 이벤트가 처리되도록 보장합니다. 즉, 데이터베이스에 대한 작업이 확실히 완료된 후에만 이벤트가 실행되므로, 이벤트 핸들러에서 트랜잭션 내에서 발생한 변경사항을 신뢰할 수 있게 됩니다.@EventListener와의 차이점@EventListener는 트랜잭션과 관계없이 이벤트가 발생하면 즉시 처리됩니다. 반면에, @TransactionalEventListener는 트랜잭션의 상태에 따라 이벤트를 처리할 시점을 결정할 수 있습니다. 이를 통해 트랜잭션이 실패..
수 없이 공부를 했지만 세월에 인해 까먹는건 어쩔수 없나보다.그리고 기록하는 곳이 바뀌었음에 따라 여기에도 마침 다시 외우기 위해 작성해둔다.기본 테이블 설정학번 (student_id)이름 (name)이메일 (email)1홍길동hong@example.com2김철수kim@example.com3이영희lee@example.com기본 키(Primary Key)정의: 기본 키는 각 행을 고유하게 식별하며, 중복을 허용하지 않고 null 값이 허용되지 않습니다. 예시 테이블학번 (student_id)이름 (name)이메일 (email)1홍길동hong@example.com2김철수kim@example.com3이영희lee@example.com왜 기본 키인가?학번(student_id)은 각 학생을 고유하게 식별하며, 중복..
@Mock Mockito 라이브러리에서 제공하는 애노테이션입니다.Spring 컨텍스트와 무관하게, 단순히 Mock 객체를 생성하고 그 객체를 테스트 내에서 사용할 때 사용됩니다.Spring이 아닌 일반 JUnit 테스트에서 Mockito를 사용할 때 주로 사용합니다.주로 @BeforeEach나 @Test 메서드 내부에서 이 Mock 객체에 동작을 설정하거나 검증합니다. @ExtendWith(MockitoExtension.class)public class UserServiceTest { @Mock private UserRepository userRepository; @Test public void testFindUser() { // given User mock..
@Configuration 란?Spring에서 사용되는 애노테이션 중 하나로, 빈(Bean) 정의와 의존성 주입을 수동적으로 설정할 때 사용되는 클래스에 붙입니다. Spring 애플리케이션에서 사용하는 Java 기반 설정 클래스를 정의할 때 사용되며, 주로 애플리케이션의 각종 설정을 명시적으로 관리하는 데 유용합니다. 정확한 의미@Configuration 애노테이션이 붙은 클래스는 Spring IoC 컨테이너에서 하나의 설정 파일로 인식됩니다.이 클래스는 여러 개의 빈(Bean)을 생성하고 그 빈들이 서로 어떻게 의존하고 상호작용하는지를 설정할 수 있습니다.즉, 애플리케이션에서 사용할 객체(빈)를 생성하고, 그 객체들의 관계를 정의해주는 역할을 합니다.@Configurationpublic class Re..
CORS란 무엇인가?**CORS(Cross-Origin Resource Sharing)**는 다른 출처 간 리소스 요청을 허용하기 위한 웹 표준입니다. 기본적으로 브라우저는 보안상의 이유로 다른 출처에서의 리소스 접근을 차단합니다. 이를 **동일 출처 정책(Same-Origin Policy)**이라고 하는데, 동일 출처 정책에 의해 자바스크립트로 로드된 리소스가 다른 출처(서버)에 API 요청을 할 경우 브라우저가 이를 막습니다.여기서 다른 출처란 다음 세 가지 중 하나라도 다를 경우를 의미합니다:도메인 (예: example.com vs. api.example.com)포트 (예: http://localhost:3000 vs. http://localhost:8080)프로토콜 (예: http vs. http..
면접이란? 왜 하는가?공부를 하다보면 취업을 해야하고 취업을 위해서는 면접을 준비해야 한다.면접은 지원자의 기술적인 부분과 성격적인 부분을 판단하기 위한 자리이며 이를 통해 지원한 회사의 구성원과 대화가 잘통하는지 알기 위함이다.또한 지원자 또한 회사가 나랑 맞는지 판단하는 자리이기도 하다. 적혀있는 채용공고의 내용과 일치하는지? 다른 점은 없는지를 본다.1.면접은 어떤 방식으로 진행되는가?회사마다 면접 프로세스는 제각각이다. 예를 들어 아래의 프로세스들이 존재한다.실리콘밸리 초기 스타트업 1. 4시간 동안 쇼핑몰 클라이언트, 서버 개발하기 2. 4시간이 지나면 코드를 제출하고 곧이어 바로 해당 코드에 대한 면접을 진행미국발 글로벌 IT 기업 1. 4일 안에 Golang 언어로 서비스 개발하기 2..
이번에 다룰 내용은 예전에 테스트 코드를 간단하게 다뤘던 적이 있어서 Mock를 통해 Service , Controller 를 테스트 하는 방법에 대해 작성해볼까 한다.예전에 작성한 Test 블로그 글 : https://ballqs.tistory.com/43Given-When-Then 패턴FIRST 원칙Fast : 유닛 테스트는 빨라야 함Isolated : 테스트는 각 테스트간에 독립적으로 실행해야함Repeatable : 테스트는 환경에 상관없이 실행할 때마다 같은 결과를 만들어야 함Self-validating : 테스트는 명확히 성공/실패로 구분하여 테스트 자체가 결과를 검증 할 수 있어야 함Timely : 테스트는 개발간에 즉시 작성해야 함. 대표적으로 TDD 방법론이 있음 given@Testpubl..