본문 바로가기
반응형

분류 전체보기714

TIL_211004 1. Facts(사실, 객관) - JPA Dirty Check 방지하기 강의 및 정리 2. Feelings(느낌, 주관) - JPA를 공부하다보면 Dirty Check를 많이 마주합니다.평소에 왜 JPA에서 update는 별다른 save()를 하지 않아도 반영이 되는가?! 고민을 해봤었는데 해당 부분을 속시원하게 알 수 있었습니다. 호기심이 있던 만큼 이전에 진작 검색했으면 더 빨리 학습하고 이유를 알 수 있었을 것입니다. 항상 원리를 알아두자라는 저의 마음속 외침을 다시한번 다짐합니다. 3. Findings (배운 점) Dirty Check는 보통 JPA에서 초기의 저장되어 있는 것에 변화가 생긴 것을 확인하고 업데이트하는 "상태변경 감지"라고 한다. JPA는 내부적으로 Dirty Check를 통해 영.. 2021. 10. 5.
TIL_211001 1. Facts(사실, 객관) - 영속성 컨텍스트로 발생하는 이슈 강의 및 정리 2. Feelings(느낌, 주관) - 스터디에서 해당 부분을 발표하였고, 동일성 문제를 다시 한번 짚어보았습니다. 아무래도 그냥 공부하고 정리하는 것보다, 발표를 하는게 훨씬 기억에 많이 남고 스스로 부족한 부분을 알 수 있어서 좋습니다. 또한, 적극적으로 다른 사람들에게 이 부분이 JPA의 중요 부분임을 알리고 궁금한 점이나, 말하고 싶은 부분은 보충해달라고 요청해서 좀 더 풍성한 교류가 있었습니다. Spring JPA를 이용하면, 무의식적으로 영속성 컨텍스트를 인지하지 못합니다. 하지만, 우리가 사용하는 JPA는 무조건 영속성 컨텍스트를 거치기 마련입니다. 따라서, 해당 부분을 쉽게 그림으로 시각화 하면서 다시 공부했습.. 2021. 10. 5.
TIL_210930 1. Facts(사실, 객관) - N + 1 강의 및 정리 2. Feelings(느낌, 주관) - N + 1에 대해 다시 공부하고 정리했습니다. 들으면 들을수록 새로우면서도 내용이 정리되고 직접 코드로 상황을 만들어보니 기억에 남습니다. N + 1 자체를 외우기보다 그 배경을 먼저 알아야하고 해결책까지 흐름에 따라 이해했습니다. 이제 JPA 성능이슈나 주요 의젠는 연관 엔티티를 어떻게 효과적으로 쿼리를 해올 것인가라는 생각이 듭니다. 연관 엔티티가 하나의 단일 엔티티인지, 혹은 리스트 엔티티인지에 따라 다릅니다. 3. Findings (배운 점) N + 1은 연관관계에서 LAZY 혹은 EAGER 어느 전략을 사용하든지 발생한다. 왜냐하면 연관관계에 있는 칼럼을 조회할 때 N개의 갯수만큼 추가조회는 시점만.. 2021. 10. 5.
TIL_210929 1. Facts(사실, 객관) - @Transactional 강의 및 정리 2. Feelings(느낌, 주관) - @Transactional이 단순히 하나의 정책을 가지고 있지 않고 다양한 설정을 할 수 있음을 배웠습니다. 하지만, 트랜잭션 튜닝은 흔히 있는 일은 아닙니다. 또한 당장 프로젝트에 적용시킬 일이 없습니다. 따라서 이번에는 그냥 어떤 종류가 있고 어떤 방식으로 동작하는지 간단히 실습을 통해 정리해봤습니다. 추후 필요한 내용이 있으면 정리내용을 통해 다시 복습하고 추가하여 완성도를 높이면 좋을 것입니다. 3. Findings (배운 점) 트랜잭션이 걸린 곳 안에서 또다른 트랜잭션이 발생하는 경우도 중요한데, REQUIRED는 기존에 사용하던 트랜잭션이 있다면 사용하고, 트랜잭션이 없다면 새로운.. 2021. 10. 5.
AWS/Docker 클라우드 패스트캠퍼스 챌린지 29일차 [Lambda 함수작성 - Layer패키지] Make Image의 람다는 SNS를 이용해서 DynamoDB를 가져온다. 또 S3에서 가져오며 이 내용을 S3에 다시 저장한다. 함수 생성을 한다. Python3.7로 설정해서 파이썬 코드로 작성한다. 기존에는 boto3를 사용했는데, 이미지를 만들기 위해서는 PIL을 이용한다. 또한 qrcode가 필요하다. 람다 계층에서 Layer를 얹어준다. PIL과 qrcode를 얹어주어야 하기 때문에 zip파일을 만든다. python에 해당 라이브러리를 깔고 zip을 만들면 된다. pip install pillow qrcode -t python/ 파이썬 pip 명령어로 qrcode을 설치한다. 계층생성에서 이름을 정하고 설명을 쓴다. 호환 런타임은 여러개를 사용할 수.. 2021. 10. 4.
AWS/Docker 클라우드 패스트캠퍼스 챌린지 28일차 [IAM 정책 및역할 만들기] Lambda(Get data, Submit, Make Image)의 3가지 정책에 IAM를 만들어준다. 처음 Get data는 Dynamo DB에 대한 작업권한을 준다. 수동작업으로 DynamoDB를 추가한다. 서비스는 DynamoDB를 허용한다. 역할을 만든다. 역할 이름에도 같이 통일된 이름을 부여하여 알아볼 수 있게 한다. 역할에는 DynamoDB라고 추가하고 정책은 방금 만든 정책을 설정한다. 또한 SNS를 만들었던 정책을 설정해서 권한을 만든다. Dynamo와 SNS 2개를 선택한다. 마지막 역할은 AmazonS3FullAccess로 이미지 관련 s3를 설정한다. 총 3개의 역할을 만든다. [Lambda 함수작성 A 데이터 읽기, 삽입] 데이터 읽기를 위해 AWS .. 2021. 10. 3.
fork 해서 저장소 관리하기 기존에 Repository를 Fork해서 열심히 pull request를 날리고 관리했는데 노트북 SSD가 맛이가서 새로 교체하느라 놋북 내용이 초기화됐다. ㅜ 그래서 이전의 내용들을 다시 노트북에 저장하면서 fork Repository를 다시 공부하게 되었다. 기존에 Repository를 fork받는 방법은 다음과 같다. git clone 대신에 수동으로 저장소를 등록하고 내용을 가져온다. (clone = fetch + merge) 1. 로컬에 원격 git 주소 등록하기 git init git remote add upstream git remote add origin 2. upstream 있는 파일들 내려받기 git fetch upstream 단순하게 upstream 파일들을 가져온 상태. 아직 파일들.. 2021. 10. 3.
AWS/Docker 클라우드 패스트캠퍼스 챌린지 27일차 [CloudFront 소개 및 구축] [Origin Domain Name]은 만든 bucket중에서 실질적으로 적용할 것을 지정한다. Client에서 CloudFront를 적용하게 된다. Origin Path는 시작점을 정할 수 있다. bucket 아래에 있는 /로 하려면 빈공간으로 두면 된다 [Oirign ID]는 내가 설정하고 싶은 이름을 쓰면 된다. PUBLIC ACCESS는 모두 접근이 열려있기 때문에 [Restrict Bucket Access]는 YES를 누른다. Origin Access identity는 Use an Existing Identity를 사용한다. (미리 있는 경우이다.) [Grant Read Permission]은 꼭 Yes를 해야한다. 만약에 새로운 권한 버킷정책이 바뀌면 해당.. 2021. 10. 2.
JPA에서 Dirty Check 방지하기 JPA에서 업데이트 방식은 dirty check로, 모든 행에 대해서 하나씩 update 쿼리를 날려서 수정한다. 성능에 악영향을 줄 수 있다. 따라서 조회 전용이면 dirty check를 사전에 방지하는 것이 좋으며 @Transactional(readOnly = true)를 사용한다. @Transactional public void update() { List comments = commentRepository.findAll(); for (Comment comment : comments) { comment.setComment("별로에요"); commentRepository.save(comment); } } commentRepository.findAll()로 모든 comment를 조회하고 "별로에요"로 .. 2021. 10. 2.
반응형