게시판 서비스

Seung jun Cha·2022년 7월 13일

1. 개발목적 이해하기

1-1 문서 작성

  • 문서를 통해 개발할 프로젝트의 목적, 내용, 진행상황을 공유
  • 무엇을, 어떻게, 왜 : 업무의 가이드 제공, 동료가 더 나은 방법을 제안하거나 나의 생각의 오류를 잡아줌
  • 내용이 구체적일수록 프로젝트 개발 내용이 잘 동기화 되고 진행이 막히지 않음 (깔끔하게 쓰기 위해 내용을 너무 생략하지 말 것)
  • 업무기록을 남김으로써 진척상황과 성과가 잘 드러남

1-2 고객의 문제해결

  • 고객의 원하는 기능과 문제를 정리
  • 문제 -> 요구사항 -> 기능 도출 -> 구현 방안의 기획 -> 개발 계획수립 -> 실행

1-3 필요한 기술 정리하기

  • 게시판, 댓글 도메인 설계 및 DB에 저장
  • JSON API로 데이터 제공 (Rest Repositories, Rest Repositories HAL Explorer)
  • 웹 화면 설계
  • 입출력 데이터의 검증
  • 인증 기능

1-4 깃 브랜치 전략

  • gotflow : master, develop, feature, release, hotfix 브랜치를 설정하고 운영하는 방식
  • github flow : master, feature 브랜치만으로 운영하는 방식
  • 하나의 프로젝트 소스코드를 여러 개발자가 다루면서 발생하는 각종 부작용을 해결하기 위해
    고려할 수 있는 요소
  1. 이 브랜치는 제품으로 내보낼 수 있는가?
  2. 이 브랜치는 빌드 실패를 허용하는가?
  3. 이 브랜치는 빌드 실패를 허용하는가?
  4. 이 브랜치는 테스트 실패를 허용하는가?
  5. 이 브랜치는 임시로 운영하는가 수시로 삭제하는가?
  • 깃 크라켄은 github flow를 지원하지 않으므로 master는 dummy로 만들고 Develop의 이름을 Main으로 두고 사용하면 github flow처럼 사용가능

2. 유즈 케이스 작성

2-1 draw io

  • 깃허브와 연동해서 다이어그램을 만들 수 있음
  • 포함관계 : 점선 화살표
  • 확장관계 : 점선 화살표, 해당 기능을 수행할 때 일어나는 분기
  • 깃허브에서 merged되어 feature 브랜치의 개발이 끝났으면 바로 지워줄 것(자동설정도 가능)

3. 스프링부트 시작

3-1 gitIgnore.io

  • 프로젝트를 생성했을 때 만들어지는 gitIgnore는 운영체제가 들어가있지않으므로 더 자세한 gitIgnore 생성을 위해 이용

3-2 Mockaroo

  • 테스트를 위한 임의의 데이터를 원하는만큼 생성하는데 도와주는 사이트

4. 도메인 설계

  1. @NoArgsConstructor(access = AccessLevel.PROTECTED)
    을 하면 외부에서 엔티티를 생성하지 못함
    따라서 엔티티 생성 메서드를 따로 만들어줌
 public static Article of(String title, String content, String hashtag){
        return new Article(title, content, hashtag); // Entity 생성 메서드
    }
  1. @Table(indexes =
    데이터베이스는 조건문으로 검색할 때, 원래는 테이블 전체를 검색한다.
    테이블에 대한 데이터 검색 작업의 속도를 향상시키는 데이터 구조로, 컬럼별로 색인을 한다. 사용 시 메모리 공간을 차지한다.
@Table(indexes = {
        @Index(columnList = "title"),
        @Index(columnList = "hashtag"),
        @Index(columnList = "createdAt"),
        @Index(columnList = "createdBy")
})
  1. 동등성 검사를 위한 메서드
    @Override
    public boolean equals(Object o) { // 동등성 검사
        if (this == o) return true;
        if (!(o instanceof Article)) return false;
        Article article = (Article) o;
        return id != null && id.equals(article.id); // Entity가 영속화 되지 않아서 id 값이 null이 될 수 있음
    }

5. 로그인 페이지 만들기

    implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'

springsecurity5는 타임리프와 스프링 시큐리티를 동시에 가지고 와야 나온다. 무슨 기능을 제공하는 지는 아직 모름

  • 테스트 클래스에 @Import(class)를 사용해 설정파일을 적용할 수 있다

  • SecurityConfig를 구현할 때, WebSecurityConfigurerAdapter를 상속받아 구현하는 것은 deprecated 되었고 securityfilterchain를 사용하여 구현

      @Bean
       public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
           return http
                   .authorizeHttpRequests(auth -> auth.anyRequest().permitAll())
                   .formLogin().and()
                   .build();
       }

    6. 뷰 디자인

  • 부트스트랩

  • https://www.bootdey.com/

    7. 게시판 페이지 기능

0개의 댓글