2023.05.01 ~ 2023.05.07
5월 1일 (월)
오늘 한 일
- application.properties 를 Gitignore 해도 이미 initial Commit으로 올라간 상태라 안된다 ㅠ → 깃허브에서 강제삭제
- JPA, hibernate 스터디 준비
- fetchjoin, QueryDSL, jasypt
- 기술매니저님 질문
- ORM, JPA, Hibernate, JDBC, RDB 등에 대해 알아봤다. 감은 잡히는데 Spring Data JPA랑 특강에서 JPA모양은 알지만 Hibernate, JDBC가 어떻게 생겼는지 궁금하다. mybatis는 한국에서 많이 사용하는가? 현업에서는 어떻게 사용하는가, 어디까지 알아야하나, hibernate는 xml 모양인가? xml은 뭔가…
- 요즘은 JPA랑 QueryDSL 을 많이 사용하는 추세이고 SI 같은 경우는 mybatis를 혼용해서 쓰는 경우도 있다. 하지만 그럼에도 mybatis는 String이고 실수하기 쉽기 때문에 JPA랑 QueryDSL 정도만 잘 알아두자.
- persistance는 JPA에서 다 처리되고 넘겨진다.
- 이미지업로드, swagger 해보기
- Soft Delete에서 만약 삭제된 데이터들을 들고와야되는 경우라면? native query를 공부해보자
5월 2일 (화)
오늘 한 일
- Spring Lv5 좋아요 기능 추가
- Soft Delete 처리를 했을 때 좋아요 취소시 @Where(clause = "deleted = false") 때문에 DB에서 수정이 일어나지 않고 삭제 → 새로생성, 삭제 → 새로생성이 반복되었다 @Query를 이용해서 해결했지만 다른 방법을 생각해봐야겠다.
- 좋아요 서비스를 Post 와 Reply 서비스에 각각 추가적으로 구현했는데 이번 스터디에서 객체지향 설계 에서 클래스는 하나의 기능을 맡아야 좋은 설계라고 했기 때문에 따로 생성 후 관리 해봐야 겠다.
- Entity를 그대로 반환을 해서 보안에 취약할 것 같다. 다시 Dto를 만들어서 보내고싶은데 Dto안에 Dto를 넣어 반환하는게 맞는걸까?
- @JsonBackReference 와 fetchType.LAZY의 연관성이 있는건가?
- 스터디
- ORM 발표
- 객체지향 설계 5원칙
- 트러블 슈팅 → Spring Security에서 deprecated 찾아서 수정
내일 할 일
- responseDto 재생성, 좋아요 리팩토링, 로그아웃, 이미지 업로드, refresh Token, fetchType.lazy → 해봐야겠다.
5월 3일 (수)
오늘 한 일
- Spring Lv5
- 코드리뷰 후 제출
- responseDto 재생성, 좋아요 리팩토링, 회원탈퇴
내일 할 일
- 질문하기
- responseDto 다시 만들었는데 맞는지
- 주로 이렇게 한다. entity를 그대로 반환하는게 더 안좋은 방법
- api Url 묶는법
- posts ← s를 주로 붙인다. 처음 설계할 때부터 제대로 하기
- 메서드호출도 generic으로 할 수 있는지 like service에서 T.include 같은 느낌
- 메서드호출을 generic으로 할 순 없고 factory method 패턴 공부해보기
- DB를 간소화하는게 나은지, postman Body를 간소화하는게 나은지, 서버를 간소화 하는게나은지
- ex) Post에 좋아요하면 Reply가 null
- 나누는게 맞아보인다 null을 최대한 지양하기.
- Post, Posts, Reply Replys, Like Likes 클래스명 어떻게 지어야될까
- Post 로 대신 table명을 posts likes 이렇게 하기
- transactional 환경에서 새로 db에 저장되어야 하는 애들은 save해야 되고 이미 db에 있는애들은 repository.save를 안해줘도 되는건가? → 맞다
- 스터디
- 과제 추가하기
5월 4일 (목)
오늘 한 일
- 기술매니저님 면담
- 스터디
- Stream
- 의존성 주입
- spring security → 요청이 들어오면 filter → config → controller로
- controller 어노테이션과 Responsebody 어노테이션 같이 써줘야 된다.
- 아니면 RestController 써줘야 된다.
- 기본적으로 @controller는 view를 반환하기 때문에 JSON으로 반환하는 우리 과제에서는 responsebody가 필요하다.
- queryDsl
[Spring] QueryDSL 완벽 이해하기
WebSecurity.ignoring()을 알아보자
내일 할 일
5월 5일 (금)
오늘 한 일
- hibernateLazyInitializer byteBuddy 문제해결
- @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@OneToOne 무한 참조 문제 또는 hibernateLazyInitializer 또는 byteBuddy~ 문제
- 회원탈퇴한 경우 username 을 어떻게 삭제할지? username의 중복은 피하지 못함
- 미니 프로젝트 시작
- 주제: meme nameking
- ERD, API 명세서 작성
5월 6일 (토)
오늘 한 일
-
Preflight Request
-
미니 프로젝트 시작
- 주제: meme nameking
- ERD, API 명세서 작성
- 좋아요 기능 추가
- Git Flow 적용
-
트러블 슈팅
- Problem : Timestamped createdAt, modifiedAt이 null로 저장되는 상황
- Reason : 어노테이션을 작성하지 않아 JPA에서 timestamp를 감지하지 하는 문제
- Solved : Application에 @EnableJpaAuditing 어노테이션 삽입
-
트러블 슈팅 - 비밀번호 유효성 검사
문제 상황
@Pattern(regexp = "(?=.*[0-9])(?=.*[a-zA-Z])(?=.*\\W)(?=\\S+$)"
8~15자 제한이 중복되어 Pattern에서 제거하고 나니 비밀번호 유효성 검사 로직이 제대로 동작하지 않는 문제 발생
문제 원인
정규표현식에 대한 이해 부족
해결 방법
여러 시도 후 .*$를 붙여 해결
. : 임의의 한 문자 (문자 종류와 관계 없음)
- : 앞의 문자가 없을 수도 있고, 무한정 많을 수도 있음
$ : 문자열 종료!
5월 7일 (일)
오늘 한 일
- 전체 게시글 조회 페이지 구현
- QueryDSL 적용
내일 할일
일주일 회고
- Spring의 ORM인 JPA와 Hibernate에 대해 학습하면서 서버와 데이터베이스의 상호작용에 대해 이해하는 시간을 가졌다.
- Spring 과제 5단계를 끝내고 계속해서 기능들을 추가해보는 시간을 갖고 가려고 한다. Soft Delete 처리 시 username 중복을 허용하기 위해서 QueryDSL로 수정해보고싶다.
- 이미지 업로드 구현도 해보았다. 로컬말고 db에서 불러오는 법을 더 찾아봐야겠다.
- 엔티티를 반환하는게 위험하다는걸 알았고 class가 많아지는걸 지양했었는데… 사실 어렵다. 유저와 서버와 데이터베이스 모두 고려하면서 restful 하게 설계하는 법이 아직은 너무 어렵다.
- 금요일부터 미니프로젝트가 시작되면서 팀원들과 정말 아침9시부터 새벽5시까지 함께 고민해도 시간이 부족하다… 특강에서 CORS에 대해 중요하게 언급했는데 정신이 없어서 이해를 못하고 넘어갔다. 오늘 미리 기능들을 구현해놓았으니 내일은 시간을 내서라도 잊고 넘어간게 없는지 할일 체크하는 시간을 가져야 겠다.