책 스터디를 시작하다
저번에 구매한 책이 집에 도착한 지 한참인데 며칠째 단 한 장도 넘겨보지 못했다.
이대로 가다간 저기 어디 침대 밑에 보관만 할 것 같아서 겁도 없이 스터디를 만들어버렸다!
책을 이미 구매했거나, 구매 의향이 있는 같은 반 분들에게 스터디 제안을 건넸는데
다행히 한 분도 빠짐없이 흔쾌히 수락해주셔서 재밌는 모임이 만들어졌다.
사실 지금도 해야 하는 일들이 많고, 앞으로도 넘쳐날 텐데
'나'라는 사람을 믿고 함께해 주시는 것 같아서 감개무량하고.. 너무 감사하고...😭😭
한 분 한 분의 시간이 소중하므로 중간에 흐지부지 되고 싶지는 않아서
나름 열심히 찾아보고 스터디 관련 계획을 세웠다.
1) 같은 목표
2) 간단한 규칙
3) 정해진 기간
4) 적당한 책임감과 동기부여
이런 기준들을 세우고 세부적인 사항들을 정리해서 스터디원 전부의 컨펌을 받았다.
앞으로 실전 프로젝트 전까지 책을 완독 하는 것을 목표로 서로의 의견을 나눠보는 재밌는 스터디가 될 것 같다.
📚 참고자료
오늘의 궁금증
인증과 인가는 뭐가 다른 거지?
이번 숙련 주차 개인 과제를 진행하면서 여기저기서 많이 들어본 인증과 인가의 정확한 개념과 차이가 궁금해졌다.
비슷한 듯 다른 인증과 인가는 어떤 차이점이 있는지 쉽게 비유를 들어 보았다.
- 인증(Authentication)이란?
- 해당 유저가 실제 유저인지 인증하는 개념
ex) 은행에서 신분증 확인, 비행기 티켓 구매 전 여권 확인 - 온라인에서는 신분증이나 여권을 제시하는 대신 아이디/패스워드 입력
- 인증 요소는 하나일 수도, 그 이상일 수도 있음
- 해당 유저가 실제 유저인지 인증하는 개념
- 인가(Authorization)란?
- 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념
ex) 공연장에 입장하기 위한 티켓 확인(신분증 필요 없음) - 웹에서 인가를 다루기 위해 사용하는 것이 토큰
- 인가 토큰을 이용해서 리소스 접근 요청을 허용할지 거부할지를 결정
- 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념
- 인증 vs 인가
- 사실 인증과 인가는 한 번에 쓰일 수도 있다.
ex) 은행에서 신분증 확인 후 통장에 접근 → 인증과 인가
ex) 회사에 출근하면 지문 찍고 사내 접근 → 인증과 인가 - 인증은 인가로 이어질 수 있지만 인가는 인증으로 이어지지 않는다
ex) 편의점에서 구매한 버스카드로 버스에 탑승 → 내가 누구인지에 대한 인증 x 인가 o
- 사실 인증과 인가는 한 번에 쓰일 수도 있다.
📚 참고자료
private 필드는 상속이 되는 걸까?
오늘 Java 언어 스터디의 주제는 '상속'이었다.
분명 부모 클래스에서 private 접근 제한을 갖는 필드와 메소드는 상속 대상에서 제외된다고 했는데,
지난주 개인 과제의 Timestamped는 왜 자식 클래스에서 필드 사용이 가능했는지에 대한 의문이 제기되었다.
package com.sparta.crud.entity;
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class Timestamped {
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime modifiedAt;
}
필드는 모두 private로 선언되어 있다.
이걸 보자마자 나에게도 비슷한 경험이 있던 게 떠올랐다.
package com.sparta.crud.dto;
import lombok.Getter;
@Getter
public class BaseResponse {
private Boolean success;
private int statusCode;
public BaseResponse(Boolean success, int statusCode) {
this.success = success;
this.statusCode = statusCode;
}
}
성공 여부를 반환하기 위해 사용했던 BaseResponse 클래스이다.
필드는 모두 private로 선언되어있다.
그렇지만 제대로 동작했단 말이지? 어떻게 가능했을까?
스터디원분들과 내내 토론한 결과 @Getter 때문이라는 결론이 나왔다.
눈에 보이지는 않지만 @Getter 어노테이션으로 인해 필드의 값에 접근하는 public 메소드가 생겼을 것이고,
그게 자식 클래스로 상속이 되었을 거라는 게 도출해낸 의견이었다.
화두를 던져준 스터디원분 덕분에 잊고 있던 궁금증을 해결할 수 있었다.
@Value의 사용법
properties 파일에 정의한 내용을 Spring 변수에 주입하는 역할을 한다.
application.properties 파일 내에 적어둔 JWT Secret key의 값을 가져오기 위해 사용하였다.
# application.properties
jwt.secret.key=7ZWt7ZW0OTntm...
@Value("${jwt.secret.key}")
private String secretKey;
save()와 saveAndFlush()는 어떻게 다를까?
- save() 메소드
- Entity를 DB에 저장하는 기능을 수행한다.
- Spring Data에서 정의한 CrudRepository 인터페이스의 메소드이다.
- 바로 DB에 저장하지 않고 영속성 컨텍스트에 저장되었다가 flush() 또는 commit() 수행 시 DB에 저장된다.
- saveAndFlush() 메소드
- save() 메소드와 다르게 실행중(트랜잭션)에 즉시 DB에 변경사항을 적용한다.
- Spring Data JPA에서 정의한 JpaRepository 인터페이스 메소드이다.
- 주로 같은 트랜잭션 내에서 먼저 처리된 결과를 후에 사용하고 싶을 때 사용된다.
📚 참고자료
https://www.baeldung.com/spring-data-jpa-save-saveandflush
기술 매니저님의 추천 키워드
- JPA의 특징
- 영속성 컨텍스트 (with @Transactional)
- Dirty Checking 등 알고 있어야 함
- show sql, ddl auto
- 양방향 단방향 둘 다 해보길 추천
- 연관관계 편의 메서드
- 수정 삭제할 때 연관된 애들은 어떻게 할지?
- Spring Security → 이건 어려우니
- 인증/인가의 차이 → 이거에 초점 두기
- 프론트랑 붙이면 막힐 수 있음
- 실전 전에 꼭 프론트랑 구현해보기
- 쿠키, 세션, jwt의 차이 (유튜브 관련 자료 많음)
- OAuth 소셜 로그인 꼭 구현하기(실전에서는 꼭!)
- 허들이 높으면 테스트할 유저 유입이 어려움
- 단점은 시간이 좀 걸릴 수도 있음
- access refresh
- 그렇지만 보다 중요한 건 JPA이다
- 심화 강의 JPA 부분 돌려보기
- queryDSL
- 실전 때 쓰는 경우도 많음
오늘의 나는
40시간째 눈을 뜨고 있는 상태다.
이것저것 신경 쓸게 많다 보니 그냥 어느샌가 아침이 되었다.
오늘 하루를 버틸 수 있을까 걱정했는데 오히려 쌩쌩한 것 같기도?🤣
오늘까지 주특기 숙련 주차 개인과제 Lv.1을 끝냈고, 내일부터는 Lv.2를 진행할 예정이다.
기술 매니저님께서 JPA의 중요성을 강조하셔서 JPA 심화 부분 강의도 다시 들어볼 생각이다.
요즘은 누가 나한테 24시간만 줬음 좋겠다는 생각이 간절....😵
'📝 TIL' 카테고리의 다른 글
[TIL] 4주차 주특기 숙련ㅣ권한부여, 예외처리 (0) | 2022.12.07 |
---|---|
[TIL] 4주차 주특기 숙련ㅣ댓글 CRUD API (2) | 2022.12.06 |
[TIL] 3주차 주특기 숙련ㅣ컨디션 난조 (2) | 2022.12.03 |
[TIL] 3주차 주특기 숙련ㅣ주간 시작 (0) | 2022.12.02 |
[TIL] 3주차 주특기 입문ㅣSpring 시험 (0) | 2022.12.01 |