Project

sung eon·2022년 7월 20일
1

미니프로젝트

목록 보기
15/21

영속성

|CommentService.java

//댓글 수정
@Transactional
public ResponseEntity<CommentUpdateResponseDto> updateComment(CommentUpdateRequestDto commentUpdateRequestDto, Long commentId, MemberDetails memberDetails) {
    Optional<Member> memberOptional = memberRepository.findById(memberDetails.getMember().getId());
    Member member = memberOptional.get();

    Optional<Comment> commentOptional = member.findComment(commentId);
    if (commentOptional.isEmpty()) {
        log.error("nickname={}, error={}", member.getNickname(), "해당 댓글을 찾을 수 없습니다.");
        return new ResponseEntity<>(
            CommentUpdateResponseDto.builder()
                        .status(StatusMessage.BAD_REQUEST)
                        .build(),
                HttpStatus.valueOf(StatusCode.BAD_REQUEST)
        );
    }

    if (commentUpdateRequestDto.getContent().length() > 255) {
        log.error("nickname={}, error={}", member.getNickname(), "댓글 수정 글자 255자 초과");
        return new ResponseEntity<>(
                CommentUpdateResponseDto.builder().status(StatusMessage.BAD_REQUEST).build(),
                HttpStatus.valueOf(StatusCode.BAD_REQUEST)
        );
    }

    Comment comment = commentOptional.get();

    //setter를 쓰니까 .setContent로 바로해주면 됨.
    comment.setContent(commentUpdateRequestDto.getContent());

    return new ResponseEntity<>(
            CommentUpdateResponseDto.builder()
                    .status(StatusMessage.SUCCESS)
                    .build(),
            HttpStatus.valueOf(StatusCode.SUCCESS)
    );
}
  • 영속성을 처음에 Service의 모든 CRUD 로직에 넣었다가 오류가 왕창 생겼다.
    500에러는 기본이었는데, 기능 하나하나 체크해가면서 넣었다가 뺐다가 난리를 쳤는데. 왜 여기선 빼야했고, 여기는 넣어줘야했는지 아직 잘 모르겠다.
    필히 공부해 볼 것.

Logback

  • Logback을 사용하면서 댓글 글자수가 255자를 넘어가면 log.error가 찍히게 설정해줬다.
    • Logback은 Springboot Starter에 이미 추가되어있어서 따로 의존성을 추가해줄 필요는 없다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<!--로그 파일 저장 위치-->
    <property name="LOGS_PATH" value="C:/coco_log/"/>>
    <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOGS_PATH}log-%d{yyyy-MM-dd_HH_mm}.%i.txt</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- or whenever the file size reaches 100MB -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>10</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>[%-5level] %d{HH:mm:ss.SSS} %logger{36} %M - %msg%n</pattern>
        </encoder>

    </appender>
    <root level="debug">
        <appender-ref ref="ROLLING"/>
    </root>
</configuration>

여기서 우리는 테스트로 1분마다 1개의 logfiled을 10개, 즉 10분의 로그가 잘찍히는지 테스트해보기로 했다. 설정은 아래와같다.

<fileNamePattern>${LOGS_PATH}log-%d{yyyy-MM-dd_HH_mm}.%i.txt</fileNamePattern>

이 줄에서 %d{yyyy-MM-dd_HH_mm} 에서 HH-mm 까지 해줬으므로 분마다 처리가 된다.
그리고

<maxHistory>10</maxHistory>

을 통해서 10개의 파일을 받기로 함.

1분마다 log파일이 생성되고, max로 10개의 파일.

그렇다면!

우리가 금요일 오후에 배포해서 월요일 오전 까지 열어놓는다고 생각했을 때, 약 60시간동안 피드백을 받는다고 가정하면
우리는 %d{yyyy-MM-dd_HH} + <maxHistory>60</maxHistory>이 되겠다.


프론트엔트 댓글 수정 기능

시도해봤지만 역시나 안됐다. 뭔가 알 것 같으면서도 잘..안되는...시간 날때마다 다시 시도해보자!

profile
코베베

2개의 댓글

comment-user-thumbnail
2022년 7월 20일

오! LOG 처리하는 거 덕분에 저희도 잘 해결했습니다~ 감사합니다!

답글 달기
comment-user-thumbnail
2022년 7월 21일

오 무슨 에러가 나던가요? 궁금하네요

답글 달기