티스토리 뷰

만들어보자!!

게시판 만들기 - Entity 개발

김쓰로그 2022. 9. 24. 19:24

나는 이전에도 게시판을 두번정도 만들어 보았는데 그 때는 별다른 설계나 생각도 없이 바로 코딩에 들어갔다.

그래서 그런가 다른 기능을 추가하고 싶어도 내가 어디에 어떤 코드를 수정하고 추가해야할지 바로 찾기가 어려웠다.

 

이것이 개발자분들이 말하던 유지보수가 어려운 코드인것 같다.

그래서 이전 글에서 나는 어느정도 Entity에 대한 스펙을 만들었고 이를 토대로 개발에 들어갔다.

 

Entity 구성

한명의 회원은 여러개의 댓글을 등록할 수 있으므로 1:N의 관계를 가진다. 

=> 댓글 엔티티에서 회원 엔티티에대한 외래키를 가진다.

 

한개의 글은 여러개의 댓글을 가질 수 있으므로 1:N의 관계를 가진다.

=> 댓글 엔티티에서 게시글 엔티티에대한 외래키를 가진다.

 

한명의 회원은 여러개의 글을 가질 수 있다. 1:N의 관계를 가진다. 

=> 게시글 엔티티에서 회원에 엔티티에대한 외래키를 가진다.

 

위의 관계를 기반으로 엔티티를 작성하였다. 

 

"코드는 아래의 깃허브를 가시면 확인할 수 있습니다.ㅎㅎ"

https://github.com/StartDeveloperKim/My-Board/tree/main/myBoard

 

GitHub - StartDeveloperKim/My-Board

Contribute to StartDeveloperKim/My-Board development by creating an account on GitHub.

github.com

인프런의 영한님의 강의를 보며 공부 중인데 Entity 객체에는 Setter 메서드를 쓰지 않는 것이 좋다고 하셨다.

왜냐하면 Entity 객체는 DB 테이블과 1:1로 매칭되는 객체라서 DB의 내용이 함부로 바뀔 수도 있기 때문이다.

그래서 Setter 함수보다는 생성자를 통해 바로 객체를 생성한 후 더는 데이터가 바뀔 수 없도록 관리하는 것이 옳다.

만약 게시판 수정이나 회원 수정같이 DB 내용을 바꿔야할게 있다면 이는 의미있는 함수를 생성하여 바꿀 내용만 바꿀 수 있도록 하는 것이 맞다.

 

나는 이번에 도메인 모델 패턴으로 엔티티를 개발하였다.

 

여기서 도메인 모델 패턴이 뭐냐면 도메인 객체(Entity)가 속성뿐만 아니라 비즈니스 행위를 가지고있는 것을 뜻한다.

이렇게 코드를 작성하면 서비스계층의 책임이 도메인으로 분산되기 때문에 서비스 계층의 코드가 간결해지고 유지보수가성이 좋아진다는 장점이 있다.

 

아래는 내가 코딩한 게시판 Entity 객체에 있는 비즈니스 로직들이다. 생성메서드, 게시판 업데이트 메서드, 시간생성 메서드, 동일멤버 확인 메서드, 조회수 업데이트 메서드 등 공통적으로 쓰이는 부분을 모두 메서드 형태로 작성하였다.

public static Board createBoard(Member member, BoardRegisterDto registerDto) {
        Board board = new Board(registerDto.getTitle(), registerDto.getContent(),
                registerDto.getNickname(), 0, Board.makeRecentTime());
        board.setMember(member);
        return board;
    }

    //==업데이트 메서드==//
    public void updateBoard(BoardUpdateDto updateDto) {
        this.title = updateDto.getTitle();
        this.content = updateDto.getContent();
        this.updateDate = Board.makeRecentTime(); // 수정 날짜 업데이트
    }

    public static String makeRecentTime() {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss"));
    }

    public boolean checkMemberEquals(Member member) {
        return this.member == member;
    }

    public void updateHit() {
        this.hit += 1;
    }

 

<오늘의 생각>

아직 코딩실력이 부족하여 코드가 별로 좋지 못한거 같다. 분명 틀린부분도 있을 것이다. 고수분들이 나의 코드를 보고 꼭 피드벡을 해주셨으면 좋겠다.

 

내 주위에 개발을 업으로 삼거나 나와 비슷한 길을 가는 지인이 없어 내가 공부하는 방식이나 방향이 맞는지 의문이 든다. 그래도 일단 계속 나아가보려고 한다. 느리더라도 지치지않게 꾸준하게 공부해나가자... 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함