본문 바로가기

분류 전체보기

(57)
Security 01: 개요 및 맛보기 - 패스트캠퍼스 챌린지 42일차 다음 챕터는 Spring Data JPA 의 트러블슈팅 부분이었지만 실습 환경이 갖추어지지 않아서 차라리 다음 챕터인 Spring Security 의 개요 챕터를 보기로 했습니다. 알아야 하는 내용들 앞에서 이런저런 내용들을 이미 배우고 왔다고 가정합니다. 그 중 몇 가지 빠진 게 있는데요... SpEL (Spring Expression Language) UI 부분: thymeleaf 강의 자료는 gitlab과 github 에 올려주셨네요. https://gitlab.com/jongwons.choi/spring-boot-security-lecture https://github.com/jongwon/sp-fastcampus-spring-sec 언어가 "모던 자바" 라는 점이 좋네요. 모던 자바는 따로 시간..
JPA Ch 10 @Embeddable - 패스트캠퍼스 챌린지 41일차 이번에 학습한 내용은 @Embeddable / @Embedded 필드입니다. 아, 오늘도 환경 설정 문제로 IDE에서 코드를 검증해보지는 않았습니다. 원격으로 작업하기 너무 번거로워서; 손코드인 점 양해 바랍니다. 내일은 원격이 아니라 코드를 복붙해서 진행해봐야겠네요. macOS에서 DB 쓰기 번거로운데... docker도 그렇고... @Embeddable / @Embedded 개념은 이렇습니다. 엔티티의 여러 필드를 묶어서 하나의 클래스로 다루겠다는 거구요. 거꾸로 생각해보자면 Embeddable 인 객체의 모든 필드들을 특정 @Entity 의 필드에 포함시키는 거라고 볼 수 있습니다. 그래서 어노테이션 이름이 @Embeddable / @Embedded 인 거겠죠. 문서와 함께 각 어노테이션의 의미를 ..
JPA Ch 9 @Converter - 패스트캠퍼스 챌린지 40일차 오늘의 주제는 ORM의 "객체 매핑"을 커스텀 타입으로 내맘대로 주무를 수 있는 @Converter 와 해당 사항을 지시하는 플래그 @Convert 입니다. 다만... 오늘은 사정상 기차 안에서 작업을 하고 있어서 실습은 어려울 것 같습니다. DB 설정이나 이런 게 원체 번거로워서 노트북에 하기도 좀 그렇구요, 이번 글에서는 IDE에서 실제로 돌아가는지는 확인하지 않은 손코드들을 보여드릴 예정이니 이 점은 감안 부탁드립니다. 저는 경고했습니다. Converter란? : 엔티티의 필드 "DB의 칼럼" 변환을 커스터마이징 ORM 은 프로그래밍 언어상의 자료구조를 DB로, DB에 있는 데이터를 프로그래밍 언어상의 자료구조로 상호변환해주는 역할을 합니다. JPA는 그 표준이구요. 상호변환하는 방법이 있다면, 그..
JPA Ch 9 @Query (3), NativeQuery - 패스트캠퍼스 챌린지 39일차 다행히도 어제 배운 내용을 까먹지는 않았습니다. 아니, 적어도 다음에 배울 게 뭐였는지는 안 까먹었습니다. 그래서 오늘의 주제는 다음 두 가지입니다. @Query (3강): 생뚱맞은 객체를 만들어 반환하기 (DTO 같은 거) 등 다음 강의 NativeQuery 써보기 @Query 에서 DTO 이전편에서 @Query(value="JPQL 쿼리문") 으로 존재하지 않는 DTO인 BookNameAndCategory 를 만들어서 반환하고자 했습니다. 방법은 다음 두 가지입니다. BookNameAndCategory 를 인터페이스로 바꾸기 (getter, setter 로 바꿔야 합니다.) interface IBookNameAndCateogory 를 만들었습니다. "select b.name, b.category fr..
JPA Ch 9 @Query (1, 2) - 패스트캠퍼스 챌린지 38일차 앞서 종종 썼던 @Query 에 대해 다룹니다. 아쉬운 점은 이 지점까지 왔는데도 현업에서 쓰인다는 Query DSL 을 다룬 챕터는 보이지 않는다는 건데... 뭐 이거 C#의 LINQ / Entity Framework 에서 쓰이는 fluent API랑 비슷하게 생겼으니 (저는 그걸 공부해본 적이 있으니) 나중에 필요하면 배우면 될 거 같긴 해요. 극단적인 예시 먼저, @Query(value = "JPQL 쿼리문") 처럼 쓰는 것의 유용성 중 한 가지를 보여주기 위해 Spring Data JPA 쿼리메소드로 이름 길이가 미쳐돌아가는 메소드를 만듭니다. // 테스트는 안 해봤으니, 맞는 이름인지는 직접 IDE에서 확인해주세요. List findByCategoryIsNullAndNameEqualsAndCre..
JPA Ch 8 remove cascade / soft delete - 패스트캠퍼스 챌린지 37일차 아직 살아있는 sftblw-chan 입니다. 몸 상태가 메롱해서 체온이 38도 근처로 올라갔다 내려갔다 아슬아슬하긴 한데 아직 쓰러질 정도는 아니라서 실습은 빼고 간단히 동영상만 보고 정리나 해두려구요. REMOVE cascade 옵션 저번 강의에서 추가해놨던 cascade = Cascade.ALL 을 다시 PERSIST와 MERGE로 원상복구한 뒤에, book 만 지웁니다. 당연히 publisher 가 남아있습니다. 여기에 REMOVE를 넣으면 book을 지우면 연결된 publisher 도 같이 지워짐을 확인할 수 있습니다. REMOVE 의 cascade 대상이 다른 것과도 연결된 경우 아.. .이건 코드 열어서 강의내용을 확인을 해봐야겠네... (귀차니즘에 애도를) 좀 강의에서 확실히 짚어주셨으면 좋..
JPA Ch 8 영속성 전이 (Cascade) - 패스트캠퍼스 챌린지 36일차 오늘 내용은 Cascade 입니다. DB의 그것과 비슷하면서도 완전히 다른 의미더라구요. Cascade ("영속성 전이") Cascade 는 아마 계단이 단계적으로 떨어지는 폭포를 의미할 겁니다 (*사전을 찾아봤지롱). Cascade는 데이터베이스에도 있는 개념이지만, (cascade drop 이나 cascade set null 같은 거), JPA에서의 의미와는 확연히 다릅니다. 같은...건가? 아무튼 JPA에서의 Cascade JPA 오퍼레이션의 관점으로 언급되어 있습니다. JPA의 Cascade 는 관계를 지정하는 @OneToOne, @OneToMany, @ManyToOne 등에 필드로 존재합니다. JPA에서 Cascade가 일어나는 상황 먼저 상황을 봅시다. JPA 의 Cascade는 JPA의 개념..
JPA Ch 7 트랜젝션 매니저의 propagation - 패스트캠퍼스 챌린지 35일차 트랜젝션 매니저의 마지막 영상입니다. 앞선 영상과 이어지는 @Transactional (Spring JPA) 의 두 가지 프로퍼티 알아보기 중 두 번째인 propagation 을 살펴보는 시간입니다. 다만 propagation 은 바꾸는 일이 정말 필요할 때 외에는 잘 없는 모양이라서, 이렇게 동작한다만 이해하면 될 것 같습니다. @Transactional 의 Propagation Spring JPA의 @Transactional 의 필드인 propagation 은 enum Propagation 이며, 7가지 종류의 값이 있습니다. 기본값은 REQUIRED 입니다. 강의 흐름에서 3종류로 묶였습니다. 묶어놓는 게 이해하기도 편하잖아요? 공식 문서도 이참에 같이 읽어봅시다. https://docs.sprin..
JPA Ch 7 영속성 - 트랜젝션 매니저 (5) - 패스트캠퍼스 챌린지 34일차 저번 강의에서 놓친 것도 있고, 딱 5번영상까지가 트랜젝션의 격리수준 내용이라 (피곤하기도 해서) 오늘은 끝까지는 안 가고 다음 강의만 봤습니다. 이전 강의에서 놓친 내용 격리 수준을 저번 강의를 정리할 때 한 번 쭉 정리해서 전부 이해하기는 했는데, 강의에서는 테스트를 위해 격리수준 설명 이외의 몇 가지를 더 소개해주셨더라구요. 최초로 확인해보는 격리 수준은 MySQL의 기본값인 REPEATABLE_READ 입니다. Lv2 격리수준으로, where 절의 조건에 맞는 게 추가되면 다음 where 쿼리에 포함될 수 있는 phantom read 가 일어날 수 있습니다. READ_UNCOMMITED 가 최소 격리 수준 (Lv 0) 으로 더티 리드 부분에서 정리했던 거네요. DB 차원에서 정합성을 지켜주기 위해..
JPA Ch 7 영속성 - 트랜젝션 매니저 (3~4) - 패스트캠퍼스 챌린지 33일차 "심화학습"이 되시겠습니다. 주요 내용은... @Transactional 이 어떻게 동작하는지 (이전 강의 정리할 때 대충 봐서 이미 알죠) 잘못된 @Transactional 의 사용: private 메소드, 같은 클래스의 메소드 @Transactional 의 2가지 속성 학습: isolation, propagation 이 되시겠습니다. @Transactional 의 동작 방식: AOP 사용 이전 강의를 정리하면서 봤던 그림(강의에는 없었고 공식 문서였음)에 해당하는 내용을 소스를 까보면서 살펴봅니다. 출처야 당연히 공식문서구요. TransactionAspectSupport 라는 클래스를 찾아갑니다. 호출시에 디버그 브레이크를 잡아보면 확인할 수 있어요. 콜스택에 있습니다. invokeWithTransa..