MainProject 3

김소희·2023년 7월 1일
1

Day4

주말아침에도 프로젝트 생각에 눈이 번쩍 떠지는걸 보면 코딩이 재미있어서, 내가 좋아하는 일을 발견해서 정말 다행이라는 생각도 든다.

토요일 오전에 거래 CRUD를 만들었고, 일요일 오후에는 고정지출 CRUD를 만들었다.
CRUD를 여러번 반복하다보니 점점 익숙해져가지만 여전히 다른 코드를 참고할 때가 있는걸 보면 아직 더 연습해야겠다는 생각이 든다. 하지만 전보다는 더 빠르게 테스트를하고, 오류를 찾아내서 고치는걸 보면 성장하고 있는 느낌도 확실히 든다.

  • 기존에는 Patch 매핑을 사용해서 update를 했었는데, 비고란에 정보가 있었다가 없게끔 수정하는 상황을 생각해보니 put 매핑이 더 RESTful한것 같아서 수정하였다.
  • 수입과 지출의 엔티티2개를 거래라는 엔티티로 하나로 변경하였다.
  • 총액부분은 거래내역 일주일치 응답시 같이 응답할 수 있게 매핑하여 2번의 요청을 1번의 요청으로 줄였다.
  • 칸반에서 다들 이슈를 하나씩 가져가서 작업을 시작했고, 프론트엔드에서는 시각화페이지와 가계부페이지와 네비게이션바를 완료했다.
  • 이번주 주말까지 프론트엔드에서 API를 사용하여 작업할 수 있게끔 로그인구현을 마치기로 했다.

Day5

8시에 잠들어서 12시간을 잤음에도 코피가 났다.
요즘 집중력이 좋아서 8시간동안 한번도 쉬지않고 작업을 하는데, 오늘부터는 하루세번 10분씩이라도 쉬는시간을 꼭 가져야겠다.

오늘부터는 로그인과 Security를 작업해야하는데 아직 부족한 부분이 많아서 많은 검색과 공부를 하면서 다뤄봐야한다. 익숙하지 않은 메소드들이 많아서 따라치기에 급급하지만 어떤 역할을 하는지 메모하면서 차근차근 시큐리티를 구현했다.

  • PasswordEncoder Bean 등록 (비밀번호를 저장하기전에 암호화하기)
    패스워드를 암호화하지 않고 User를 등록한다면 User 등록은 되지만 로그인 인증 시, 다음과 같은 에러를 만나게 되므로 User의 패스워드는 반드시 암호화해야 한다.
    java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null”
  • MemberService Bean 등록을 위한 JavaConfiguration 구성

  • Spring Security에서는 Spring Security에서 관리하는 User 정보를 UserDetails로 관리한다

  • Spring Security에서는 User의 인증 정보를 테이블에 저장하고, 테이블에 저장된 인증 정보를 이용해 인증 프로세스를 진행할 수 있는 몇 가지 방법이 존재하는데 그중 한 가지 방법이 바로 Custom UserDetailsService를 이용하는 방법이다.

  • member(자식)테이블의 컬럼을 삭제하려고 했을때 외래키의 무결성 제약조건에 위배 되어 발생한 오류를 만났었다.
    could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement

  • jwt TokenProvider 구현중 Cannot find method 'value' 에러를 마주쳤는데 import를 잘못넣어서 일어난 일이였다.
    import lombok.Value;
    import org.springframework.beans.factory.annotation.Value;

Day6

  • post로 회원가입요청을 했을때 "createdAt": Null 로 나왔는데 JPA Auditing 어노테이션들을 모두 활성화할 수 있도록 Application 클래스에 활성화 어노테이션 하나를 추가해서 해결했다.
@Getter
@Setter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class Auditable {
    @CreatedDate
    @Column(name= "createdAt", updatable = false)
    private LocalDateTime createdAt;

    @LastModifiedDate
    @Column(name= "modifiedAt")
    private LocalDateTime modifiedAt;
}
 
public class Member extends Auditable {

@EnableJpaAuditing                  // JPA Auditing 활성화
@SpringBootApplication
public class Application {
	
    public static void main(String[] args) {
    	SpringApplication.run(Application.class, args);
    }
}
  • 회원가입시 등록한 비밀번호를 암호화하여 DB에 저장되는데 이후 로그인을 하여 JWT를 받는과정을 찾아보고 구현했으나 409에러가 발생하여 해결중에 있다.
profile
백엔드 자바 개발자 소희의 노트

0개의 댓글