본문 바로가기

Java28

[Mockito] ArgumentMatchers 및 any,eq ArgumentMatchers ArgumentMatchers는 메소드 호출 시 특정 인자값과 일치하는지, 혹은 특정 조건을 만족하는지를 확인하는 데 사용되는 도구입니다. Mockito는 여러 가지 Argument Matchers를 제공하며, 사용자는 이를 활용하여 원하는 조건에 맞는 인자를 검증할 수 있습니다.🏷️ ArgumentMatchers.any() Mocking 된 메소드를 설정하기 위한 방법은 여러 가지가 있는데, 첫 번째는 메소드에 "고정된 값"을 사용합니다.doReturn("...").when(userAccountService).getUserInfo("...");위와 같이 doReturn()이나 do()에 사용된 문자열처럼 고정된 값을 사용할 수 있습니다. 하지만 모든 테스트가 고정된 값만.. 2024. 10. 21.
[JPA] @PrePersist와 @PreUpdate @PrePersist@Column(name = "created_at")private LocalDateTime createdAt;@PrePersistvoid createdAt() { this.createdAt = LocalDateTime.now();} 엔티티가 생성될 때마다 실행되어야 하는 로직을 구현하는 데 사용되며, 엔티티가 생성될 때마다 현재 날짜를 값으로 설정하는 로직 등을 구현할 수 있습니다. 또한, 위의 이미지같이 JPA 엔티티(entity)가 비영속 상태에서 영속 상태가 되는 시점 이전에 실행이 되게 됩니다.@PreUpdate@Column(name = "modified_at")private LocalDateTime modifiedAt;@PreUpdatevoid modifiedAt() { .. 2024. 10. 18.
[Java / TDD] 테스트 케이스 작성시 발생한 영속성 관련 오류 ✔️ 사용된 엔티티1. QuestionBoard@Getter@Setter@Table(name = "question_board")@ToString(callSuper = true)@Entitypublic class QuestionBoard extends AuditingFields { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // UsreAccount와 연결 -> JoinColumn을 통해 user_id와 연결 @JoinColumn(name = "user_id") @ManyToOne private UserAccount userAccount; // 유저 정보 @Column(null.. 2024. 8. 28.
[JWT] JWT 0.12.5 최신화 문제 해결 예전 공부할 때, 사용했던 JWT 및 Key 생성을 직접 사용해 보고 그때보다 좀 더 최신 버전을 사용하고 싶었습니다.public class JwtTokenUtils { // 토큰에서 username 가져옴 public static String getUserName(String token, String key) { return extractClaims(token, key).get("userName", String.class); } // 종료 시간 public static boolean isExpired(String token, String key) { Date expiredDate = extractClaims(token, key).getExpir.. 2024. 7. 20.
[Java] 팩토리 메소드 팩토리 메소드팩토리(Factory)는 '공장'이라는 뜻을 가지고 있습니다. 일반적으로 클래스의 객체를 생성할 때, 생성자를 통해서 객체를 생성하지만 팩토리 메소드 라는 공장을 통해서 객체를 만들 수도 있습니다.public class User{ private String username; public Person(String username){ this.username = username; }}위에 코드는 Java로 객체를 작성할 때, 많이 사용하던 코드입니다.User user = new User("유저 이름");그리고 우리는 객체를 생성할 때, 위와 같이 생성자 호출을 통해서 객체를 생성했습니다. 그런데 우리는 생성자의 인자만 봐서는 이것이 유저 이름을 나타내는 것인지.. 2024. 7. 13.
[Java] DTO를 Record로 만드는 이유 Record // 레코드 선언법 public record 레코드명(컴포넌트1, 컴포넌트2, ...) { } 값의 집합으로 이루어진 간단한 객체를 심플하게 개발하기위해 고안되었으며, immutable data(불변데이터)를 다룰 class 구현에 최적화되어있습니다. 따라서 웹서비스 구현에서 많이 사용되는 DTO 개념에 적용하면 유용합니다. 생성자, accessors(getter), equals(), hashCode(), toString() 등 DTO 특성의 클래스를 개발할때 매번 개발자가 직접 구현해주어야 했던 반복적인 작업이 줄어듭니다. 또한, "이 클래스는 data carrier 용도이다"를 명시적으로 나타낼 수 있으므로 코드에 대한 이해를 돕고 해당 클래스의 목적에 맞지 않는 구현을 하지 않도록 방지.. 2024. 4. 17.