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 브랜치만으로 운영하는 방식
- 하나의 프로젝트 소스코드를 여러 개발자가 다루면서 발생하는 각종 부작용을 해결하기 위해
고려할 수 있는 요소
- 이 브랜치는 제품으로 내보낼 수 있는가?
- 이 브랜치는 빌드 실패를 허용하는가?
- 이 브랜치는 빌드 실패를 허용하는가?
- 이 브랜치는 테스트 실패를 허용하는가?
- 이 브랜치는 임시로 운영하는가 수시로 삭제하는가?
- 깃 크라켄은 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. 도메인 설계
- @NoArgsConstructor(access = AccessLevel.PROTECTED)
을 하면 외부에서 엔티티를 생성하지 못함
따라서 엔티티 생성 메서드를 따로 만들어줌
public static Article of(String title, String content, String hashtag){
return new Article(title, content, hashtag); // Entity 생성 메서드
}
- @Table(indexes =
데이터베이스는 조건문으로 검색할 때, 원래는 테이블 전체를 검색한다.
테이블에 대한 데이터 검색 작업의 속도를 향상시키는 데이터 구조로, 컬럼별로 색인을 한다. 사용 시 메모리 공간을 차지한다.
@Table(indexes = {
@Index(columnList = "title"),
@Index(columnList = "hashtag"),
@Index(columnList = "createdAt"),
@Index(columnList = "createdBy")
})
- 동등성 검사를 위한 메서드
@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. 게시판 페이지 기능