- 작업 예시 )
develop 브랜치에서 Pull 받는다.
[명령어] git pull origin develop
[명령어] git checkout -b [브랜치 이름]
작업한다.
내 작업물 상태 확인해보기
[명령어] git status
[명령어] git add * (-> 전체 파일 추가) git
[명령어] git add [파일명] (-> 파일 개별로 하나씩 추가)
전체 추가일지 파일 개개별 추가는 자기 마음대로
[명령어] git commit -m”커밋 메세지 (무슨 작업했는지 메세지 남김)”
[명령어] git push origin [브랜치이름]
깃헙 홈페이지로 와서 pull request 탭으로 온다. create Pull Request 눌러서 PR 생성
팀원 확인 완료 되면 머지 버튼 누르면됨
확인 완료 후 머지 되면 다시 디벨롭 브랜치로 간다.
[명령어] git checkout develop
[명령어] git pull origin develop
다시 첫번째 부터 시작
User
Id(PK) / username / password / email / userRole / createdAt / modifiedAt
Post
Id(PK) / USER_ID(FK) / title / contents / comments / createdAt / modifiedAt
Comment
Id(PK) / USER_ID(FK) / Post_id(FK) / contents / createdAt / modifiedAt
PostLike
Id(PK) / USER_ID(FK) / Post_id(FK) / createdAt / modifiedAt
CommentLike
Id(PK) / USER_ID(FK) / Comment_id(FK) / createdAt / modifiedAt
User
Id(PK) / username / password / email / userRole
Post
Id(PK) / username / password / email / userRole
Comment
Id(PK) / user / post / contents
PostLike
Id(PK) / USER_ID(FK) / Post_id(FK)
CommentLike
Id(PK) / USER_ID(FK) / Comment_id(FK)
Timestamped
createdAt / modifiedAt
1 . 메서드 간 엔터 한 줄
2 . 탭은 띄어쓰기 4칸이 한칸
💡
더 나아가기: 과제가 일찍 마무리 되었다면 아래의 내용도 진행해보세요.
01/03 포스트맨 에서 토큰 자동 생성하는 방법 알게 됨, 적용 및 다른 팀에 전파
01/04 각자 필수 요구사항과 추가적인 요구사항 코드 합치기
01/05 발표 자료 준비
🎈시연 영상
https://www.youtube.com/watch?v=KqO2IG3SAvs&feature=youtu.be
@Slf4j
@RequiredArgsConstructor
public class JwtAuthFilter extends GenericFilter {
private final JwtUtil jwtUtil;
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
try {
String token = jwtUtil.resolveToken((HttpServletRequest) request);
if (token != null && jwtUtil.validateTokenExceptExpiration(token)) {
Claims info = jwtUtil.getUserInfoFromToken(token);
Authentication authentication = jwtUtil.createAuthentication(info.getSubject());
SecurityContextHolder.getContext().setAuthentication(authentication);
}
chain.doFilter(request, response);
} catch (UsernameNotFoundException exception) {
// 해결 부분
HttpServletResponse realResponse = (HttpServletResponse) response;
log.error("e = {}", exception.getMessage());
realResponse.setContentType("application/json;charset=UTF-8");
realResponse.setStatus(HttpServletResponse.SC_BAD_REQUEST);
JSONObject responseJson = new JSONObject();
responseJson.put("message", exception.getMessage());
responseJson.put("code", 400);
realResponse.getWriter().print(responseJson);
}
}
}
@Transactional
public MsgResponseDto savePostLike(Long postId, User user) {
Post post = postRepository.findById(postId).orElseThrow(
() -> new IllegalArgumentException("찾는 게시글이 없습니다.")
);
if (!checkPostLike(postId, user)) {
postLikeRepository.saveAndFlush(new PostLike(post, user));
return new MsgResponseDto("좋아요 완료", HttpStatus.OK.value());
} else {
postLikeRepository.deleteByPostIdAndUserId(postId, Long.valueOf(user.getId()));
return new MsgResponseDto("좋아요 취소", HttpStatus.OK.value());
}
}
등록된 유저가 게시글에 좋아요 완료 / 취소를 구현하는 코드입니다.
고른 이유는 등록된 유저가 좋아요 완료 / 취소가 되는 부분에서 saveAndFlush(완료)와deleteByPostIdAndUserId(취소)를 사용하면 실행이 되는 부분이 인상 깊어서 고르게 되었습니다.
혜원
User파트로 크게 어려웠던 부분이 없어서 가장 인상 깊은 코드를 가지고 왔습니다.
태이님이 작성하신 코드 중에
accessToken과 RefreshToken을 담는 TokenRequestDto 로 User를 찾는 부분입니다.
RefreshToken에는 사용자 정보가 없지만 accessToken에 있는 사용자 정보를 사용하여 User를 가지고 오는 부분이 인상 깊었습니다.
승엽
대댓글 구현
대댓글을 구현하기 위해 댓글 사이에서도 연관 관계가 필요하여 부모와 자식 관계로 설정하였습니다.
문제: 대댓글이 부모 댓글 아래에만 나와야 하는데 중복되어 게시되는 문제 발생
시도1: 대댓글의 경우 게시글과의 연관 관계를 끊어 부모 댓글과만 연관되도록 수정
결과: 중복 조회 문제는 해결 but post를 null로 받는 것 때문에 부모 댓글과 자식 댓글이 동일한 게시글 아래 포함되어 있는지 확인하는 로직이 작동하지 않음
시도2: 부모 자식의 게시글의 동일한 게시글로 묶여있는지 확인하기 위해 mainPostId라는 인스턴스를 부모 자식 댓글에 각각 추가
결과: 대댓글에 post를 입력하지 않고도 부모 댓글과 자식 댓글이 동일한 게시글에 연관되어 있는지 확인이 가능
위 방법이 정답이라고 할 수는 없지만 위 기능을 구현하는 과정을 통해서 연관 관계를 앞으로 어떻게 활용하면 좋을지에 대해서 생각해보고 익숙해질 수 있는 과정이었습니다. 다만 과제를 마치고 생각해보니 처음부터 댓글과 대댓글의 API를 분리하여 작성하면 더 객체지향적으로 좋았을 것 같습니다.
학윤
승엽님이 작성하신 코드 중 대댓글 기능을 구현한 코드를 선택하였습니다.
여러 부분을 건드리지 않고 Service 부분과 다른 일부분을 수정 하여 대댓글을 구현한 코드라서 인상
깊었습니다.
태이 : 사실 시큐리티에 대해 이해하지 못했지만 프로젝트를 위해 공부하며 조금 깨닫게 되었습니다. 어려운 부분이라도 공부하면 이해할 수 있다고 생각하게 되었습니다.
혜원 : 시큐리티가 어려웠지만 몰입하고 싶은 매력적인 파트였고 , 같은 것을 공부 하면서 의견을 공유 하면서 성장할 수 있었던 시간이라 너무 좋았습니다.
승엽 : 시간이 된다면 모든 코드를 스스로 다 짜보는 것이 가장 좋겠지만 정해진 기간 내에 제가 모르는 부분을 해결해주시고 설명해주신 팀원 분들께 진심으로 감사의 말씀을 전합니다.
학윤 : 이해 하지 못 한 부분이 상당 수이지만, 많은 도움을 받아 해결할 수 있는 좋은 시간이었습니다.
준혁 : 처음에는 프로젝트가 어렵게 느껴졌지만 좋은 팀원들을 만나서 쉽고 즐겁게 했습니다.
https://github.com/2h5i/blog-project.git