Spring

· TIL
문제 Review 엔티티에 기본형 boolean 타입의 isReported 필드가 있었는데, 이를 DTO로 변환하는 mapStruct 매퍼를 사용 중, 컴파일 시 아래와 같은 경고가 떴다. // ReviewMapper.class// ...import org.mapstruct.Mapper;import org.mapstruct.Mapping;import static org.mapstruct.MappingConstants.ComponentModel.SPRING;@Mapper(componentModel = SPRING)public interface ReviewMapper { ReviewResponseDto toReviewResponseDto(Review review);}// ReviewResponseDto..
· TIL
상황MSA 1차 과제의 답안이 공개되어 보던 중 기존의 강의와 해설 영상에서도 다루지 않았던 코드를 발견했다.// ServletInitializer.classimport org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder..
· TIL
// application.ymlspring: application: name: ymlserver: port: 8088fruit: list: - name: banana color: yellow - name: apple color: reddeveloper: name: yunjaeapplication.yml // application-dev.ymlserver: port: 8055application-dev.yml  // DeveloperName.class import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframewor..
· TIL
의존성 목록 dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher'}의존성이 web, lombok 밖에 없다.  전역 설정 import org.springframework.context.annotat..
· TIL
문제유레카 서버 설정을 위해 따로 EurekaServerConfig라고 하는 클래스를 만들어 실행했지만, 중복되는 빈객체로 실행이 되지 않았다. 상황@EnableEurekaServer@SpringBootApplicationpublic class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); }}강의 예제에는 애플리케이션 클래스 위에 붙여주었지만, 나는 애플리케이션에 덕지덕지 @Enable- 어노테이션을 붙이는 걸 좋아하지는 않아서 따로 ~Config 클래스를 만들어주기로 했다. @SpringBootApplicationpubl..
· TIL
상황 개인적으로 하는 프로젝트에서 AOP를 썼었다.  Refresh token을 쓰고 있었고, 이를 레디스에 저장하고 있었다. 토큰 속에는 닉네임을 subject 로 가지고 있었다.  문제는 닉네임을 수정하면 리프레쉬 토큰에는 변경이 되지 않아서 로그인이 안 되는 것. 그래서 레디스 속 리프레쉬 토큰을 변경해주어야 했고, 변경된 리프레쉬 토큰을 응답 쿠키에 담아주어야 했다.  또 유저 삭제 시에도 리프레쉬 토큰을 레디스에서 삭제하고, 응답 쿠키도 삭제해야했다.  이를 AOP로 구현한 코드는 아래와 같다. 간략하게 설명하면,@Pointcut 으로 각각 닉네임 수정 시점, 유저 삭제 시점 을 지정해주었고,@Around 로 수정 직후, 삭제 직후에 리프레쉬 토큰 처리를 해주었다. @Slf4j(topic = "..
· TIL
나는 질문(Question) 1 : N 답변(Answer) 로 구성을 하고, 하나의 질문을 조회할 때는 그 질문에 대한 답변을 가져오기로 했다.근데 가져온 데이터가 중복이 된 것.{ "status": "OK", "code": 0, "message": "정상 처리 되었습니다", "data": [ { "id": 1, "content": "질문01", "views": 7, "createdAt": "2024-06-20T11:59:45", "modifiedAt": "2024-06-24T18:44:59.361887" }, { "id": 1,..
· TIL
닉네임을 변경하는 API에서, 요청하는 DTO의 검증을 달고 있었다. public record UserUpdateNicknameReq( @NotBlank(message = "닉네임은 빈 값이면 안 됩니다.") @Size(min = 1, max = 35, message = "닉네임은 1자 이상, 35자 이하여야 합니다.") @Pattern(regexp = "^[a-zA-Z0-9가-힣]$", message = "닉네임은 한글 및 숫자와 영어만 가능합니다.") String nickname) {}원래 DTO는 @Pattern(regexp = "^[a-zA-Z0-9가-힣]$ 였는데, 닉넴을 monkey→1 로 바꾸는 건 됐는데, 1→monkey로 바꾸니 변경이 안 됐다. 다른 블로그를 보니 ..
· TIL
HardDelete 와 SoftDelete 가 있다. HardDelete는 삭제 요청이 오면 DB에서 바로 삭제를 한다. SoftDelete는 삭제 요청이 오면 바로 삭제 처리를 하지 않고, 삭제 플래그를 표시해두어 DB에는 남겨둔다.  많은 SoftDelete 구현 방법이 있지만, 나는 datetime을 nullable로 두어 null이 아닌, 날짜가 기입되면 삭제처리를 한 것으로 두어 삭제 시간을 알 수 있도록 했다.  나중에 배치로 일주일의 간격을 두고 실제로 삭제할 예정이다.  @Getter@MappedSuperclass@EntityListeners(AuditingEntityListener.class)public abstract class BaseEntity { @Column(name = "..
yunjae62
'Spring' 태그의 글 목록