기간
2023/4/10 ~ 2023/4/14

수업
실시간 ZOOM 수업


Day 25(토이프로젝트 검증1)

setter 쓰지 말고 상태 변경 메소드는 메소드명을 명확히!

@Pattern(regexp=”정규식”)
@Email쓰면 email에 쓰이는 정규식으로 validation 됨


Day 26(토이프로젝트 검증2)

dto에서 toEntity 메소드로 entity 리턴하자

public class RequestDTO{
	@Getter
	public static class JoinDTO{
		//field...

		public User toEntity(){
			retur User.builder()
						.username(username)
						...
						.build();
		}
	}
}

HibernateLazyInitializer Exception
출력해야 할 객체가 지연로딩이 발생하면 생김
→ 출력할 때 select 쿼리가 발생하는 문제…
⇒ eager 즉시로딩하거나 fetch join…

update시에 @Transactional을 붙이면 트랜잭션 종료 후 변경감지 → flush
@Transactional을 안 쓰면 repository.save(entity); → merge 실행

flatMap
대괄호[]가 없어진다고 생각하면 될 듯…
근데 flatMap으로 Entity를 그대로 출력하기보단 ResponseDTO를 만드는 게 무조건 좋다.

DeleteMapping을 안 하면 PostMapping으로 api에 new, delete로 구분지어서
그럼 엔티티에 status를 넣어야겠네…


Day 27(Service)

Controller
1. 유효성 검사
2. 인증 검사
3. 권한 체크(DB조회 없는 것)
4. 서비스 요청
5. MessageConverter Json 응답

query 공부!

Service
1. 비즈니스 로직
2. 트랜잭션 관리
3. 권한 체크(자원에 대한)
4. DTO 변환 - Lazy Loading
5. 더티 체킹

dto
request → in
response → out

트랜잭션 ACID
@Transactional 처리를 하지 않으면 메소드 내에서 throw Exception을 날려도 아래 코드가 실행 될까?
chatGPT 대답)
→ 일반적으로, Java에서 메소드 내에서 Exception이 발생하면 해당 메소드의 나머지 코드는 실행되지 않고, 예외가 적절한 catch 블록이나 호출자로 전달됩니다. 이를 "예외 전파"라고 합니다. 따라서 해당 메소드의 후속 코드는 실행되지 않습니다.
하지만 예외가 발생한 메소드가 트랜잭션 내에서 실행되는 중이고, 트랜잭션 관리가 되지 않은 상태라면, 예외 발생 시 트랜잭션이 롤백되지 않고, 데이터베이스 등의 리소스에 대한 변경이 커밋될 수 있습니다. 이는 데이터의 일관성과 무결성을 해치는 원인이 될 수 있습니다.
따라서, 트랜잭션 처리를 하지 않고 메소드 내에서 예외가 발생한다면, 예외가 발생한 시점 이후의 코드가 실행될 수 있고, 데이터의 무결성을 보장하기 어려울 수 있습니다. 트랜잭션을 사용하여 예외 발생 시 롤백하고, 데이터의 일관성을 보장하도록 하는 것이 안전한 프로그래밍 방법입니다.

@ColumnDefault(”value”)로 기본값을 넣을 수 있음 →추천하진 않음

인증이 필요 없는 api는 앞에 엔티티 붙이지 않는다.
→ 예를들어 login, join을 /user/login, /user/join으로 하지 않는다.

OOP
상태체크(validate), 상태변경(setter), 상태확인(getter) → 해당 객체에서

dto는 동일해도 공유해서 쓰지 않는다.

profile
웹퍼블리셔의 백엔드 개발자 도전기

0개의 댓글