Skip to content

3. 문제를 이렇게 해결했어요!

HyeonKyu edited this page Jan 3, 2022 · 23 revisions

✅ CORS & Preflight

CORS 와 Preflight에 관한 삽질 TIL


✅ 환경변수 관리를 위한 AWS Secrets Manager 사용

애플리케이션 내에서 필요한 중요정보를 어떻게 관리할지 3가지의 방법을 고민했습니다.

  1. jasypt를 활용한 정보 암호화 -> Key값 관리, 다른 사람도 복호화할 가능성이 있다고 판단해서 사용하지 않았습니다.
  2. application 파일 분리 -> application 파일 관리하는데 번거로움을 느껴 사용하지 않았습니다.
  3. AWS Secrets Manger -> 정보를 손쉽게 교체, 관리 및 사용할 수 있는 AWS Secrets Manger를 사용하게 되었습니다.

✅ 순환참조

순환참조에 관한 삽질 TIL


✅ (PropertyValueException , typeMismatch Error) & @ModelAttribute는 @Setter가 필요하다..!

스프링은 예민하다 !!


✅ Field ___ doesn't have a default value !

필드와 Column이름을 잘 매핑해주자 !


✅ Scheduler cron 문법 오류 에러

스케줄러를 사용할 때 cron 범위에 맞게 적용하자 !

✅ 대댓글 도메인 설계

기존의 피드에서 댓글만 달 수 있는 기능에서 대댓글 기능을 추가하였습니다.

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class Comment extends BaseTimeEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "comment_id")
    private Long id;

    @Column(nullable = false)
    private String contents;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    private User user;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "feed_id")
    private Feed feed;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "parent_id")
    private Comment parent;

    @OneToMany(mappedBy = "parent")
    private List<Comment> child = new ArrayList<>();

    private void setParent(Comment parent) {
        this.parent = parent;
    }

    // 댓글 생성자
    public Comment(Feed feed, String contents, User user) {
        CommentValidator.validateCommentCreate(contents, user, feed);
        this.contents = contents;
        this.feed = feed;
        this.user = user;
    }

    // 대댓글 생성 함수
    public static Comment createChildComment(Feed feed, String contents, User user, Comment parent) throws ApiRequestException {
        CommentValidator.validateChildCommentCreate(contents, user, feed, parent);
        Comment comment = new Comment(feed, contents, user);
        comment.setParent(parent);
        return comment;
    }
}

✅ log4j 보안 취약점 패치

프로젝트 진행 중 자바 log4j 라이브러리에 보안 취약점이 발견되어 큰 이슈가 되었습니다.
build.gradle에서 log4j의 버전을 올려주어서 해결했습니다.

ext['log4j2.version'] = '2.15.0'