
Transaction은 스프링에서 AOP로 동작하여 연결과 커밋, 롤백등을 관리한다고 한다. Transaction 내부코드를 보다보니 어떻게 AOP로 동작하는지 확인이 어려웠다. 먼저 간단한 AOP만들기를 시작으로 좀 더 내부를 파헤쳐보려고 한다. 1. AOP, 프록시 이해하기 횡단 관심사를 분리하기 위해서 AOP를 사용한다. AOP를 사용하기 위해서는 프록시 패턴을 사용한다. reflection을 사용하는 DynamicProxy 방식과 byte 코드를 조작하는 CGLIB 방식이 있다. AOP에서 사용되는 용어 Target: 어떤 대상에 부가 기능을 부여할 것인지 Advice: 어떤 부가 기능을 부여할 것인지 Join Point: 어디에 적용할 것인지 Point Cut: 실제 Advice가 적용될 시점을..

왜 findAll이 JPQL인가라는 의문점을 가지게 되었는지에 대해 설명하며 파헤쳐본 내용들을 정리해보려고 한다. N+1은 왜 발생하는가? JPQL을 실행하면 JPA는 이것을 분석해서 SQL을 생성한다. 이때는 즉시 로딩과 지연 로딩에 대해서 전혀 신경 쓰지 않고 JPQL만 사용해서 SQL을 생성한다. (...) SQL의 결과 수만큼 추가로 SQL을 실행하는 것을 N+1문제라고 한다. - 자바 ORM 표준 JPA 프로그래밍(책) N+1문제는 JPQL을 사용할 때 나타날 수 있는 문제라고 한다. JPQL은 무엇인가? 처음에 나는 개발자가 직접 repository에 쿼리 메소드로 작성하는 메소드만 JPQL이라고 생각했다. 하지만 미션을 하다보니 findAll 메소드에서도 N+1이 발생하는 것이었다. 뭔가 이..
mvc, jdbc 등을 몇 개 내부코드를 살펴보았지만 아직 스프링 내부의 코드를 보는 것이 그렇게 익숙하지는 않다. Transactional 어노테이션과 관련하여 스프링에서는 트랜잭션이 어떻게 동작하는지 내부를 조금 확인해본다. DataSourceTransactionManager 아래의 코드를 보면 커넥션 맺기부터 시작하여 Transactional 어노테이션이 가지고 있는 여러 옵션들을 셋팅해주는 메소드가 있는 것을 알 수 있다. Transaction마다 커넥션이 새로 생성되는가에 대해서 크루들과 얘기해본 적이 있는데, 학습테스트를 진행한 결과에서는 propagation 설정을 주고 여러 트랜잭션을 호출할 때에도 내부 트랜잭션이 생길 때에도 커넥션이 새로 생성되었다. 그 근거로 이 내부코드에서 Trans..
한정된 시간 속에서 어떻게 하고 싶은지 선택하는 시기였다고 생각한다. 레벨4 아마 할 일이 가장 넘쳐나는 시기였다고 생각한다. 과거보다 많이 성장했고, 내가 얼만큼 정도로 얼마나 처리할 수 있는지 스스로 판단이 되어갔던 것 같다. 그래서 할 일에 비해서 과거보다 덜 바쁘게 느껴졌을 수도 있다. 취업 준비의 시작 코딩테스트를 거의 6주 동안 매주 봤다. 처음엔 많이 떨렸고, 점차 부족한 실력이었지만 실전을 통해 알게 모르게 늘고 있는 것 같다는 느낌을 받았다. 이때 코딩테스트를 준비하면서 알고리즘 문제를 더 풀 수도 있었지만, 그건 만약에 취업이 안되서 내년까지 가게 되더라도 스스로 준비하고 그때도 준비할 수 있는 부분이라고 생각했다. 우테코에서 제작근로, 미션, 팀플과 관련한 AWS 사용 등은 지금이 아..

마지막 미션인 레거시 리팩토링 미션은 중간에 제작근로 배포, 데모데이, 취업준비 등으로 우선되는 일들을 처리하고 고민하느라 거의 1달 넘게 진행했던 것 같다. 4단계까지 마무리했다. 끝까지 마무리 된 크루들이 많이 없을만큼 집중해서 하기 쉽지 않은 환경이었는데 마무리해낸 크루 중 한명이라 뿌듯하다.✌️ 레거시 리팩터링을 진행하면서 귀찮은 점도 엄청 많았고, 느끼는 점도 많았다. 무엇보다 이 미션을 집중해서 해봐야겠다는 생각을 한 것은 JPA에 대해 좀 더 공부해보고 싶었기 때문이었다. 아직도 스프링도 마찬가지이지만 JPA의 내부과정에 대해 온전하게 이해된 느낌은 아니다. 좀 더 깊게 이해해 나가고 있는 과정이라고 생각한다. 리팩터링 미션을 진행하면서 우아한테크코스 과정을 종합하는 미션이라는 생각이 들었다..

이미 sql 미션을 진행한지는 1달도 더 지난 듯 싶지만, 내용을 떠올리며 DB에 대해 학습하는 내용 위주로 작성해본다. 원하는 결과가 나올 수 있게 쿼리를 작성하고 일정시간(ex, 100ms)안에 조회할 수 있도록 하는 미션이었다. 서브쿼리 쿼리안에 쿼리가 들어가는 것을 서브쿼리(nested query)라고 한다. select 절, from 절, where 절 등에 들어갈 수 있다. Join 조인은 두 테이블을 합쳐 보여주는 것이다. 닫힌연산이라 여러번 가능하다. 크로스조인은 상호조인이라고도 불리며, 한쪽 테이블의 모든 행과 다른쪽 테이블의 모든 행을 곱하게 된다. 10개의 행을 가진 테이블과 13개의 행을 가진 테이블을 크로스조인하면 130행의 테이블이 생성된다. (10rows X 13rows = 1..
1. DB Replication 한 서버에서 다른 서버로 데이터가 동기화 되는 것이다. 원본 데이터를 가진 서버가 source서버, 복제된 데이터를 가지는 서버를 replica서버라고 한다. DB Replication을 왜 하는가? 생각할 때, 지금의 입장에서 replication을 하는 가장 큰 목적은 데이터 백업이라고 생각한다. DB는 안정성과 영속성이 중요시 되는데 1개만 존재한다면 단일 장애점으로 DB서버에 문제가 생길 경우, 기존 데이터를 지기키 못하는 문제가 발생할 수 있다. 이 경우 기존의 데이터를 유지하기 위해서 데이터 백업이 있어야 한다. 백업은 주기적으로 백업파일(덤프파일)을 만들 수도 있지만 이것은 실제 운영하고 있는 DB 전체에 lock이 걸리기 때문에 운영시 문제가 될 수 있다. ..
공통된 부분과 아닌 부분을 분리 어떤 부분을 공통으로 사용하여 추상화 할 것인지 아닌지를 결정해야 한다. 아래와 같은 부분들은 공통으로 추상화할 수 있다. Connection 생성 Statement 준비 및 실행 ResultSet 생성 예외 처리 Connection, Statement, ResultSet 객체 close 이 미션을 하면서는 기존에 사용하던 jdbcTemplate과 미션 가이드의 도움을 많이 받았다. 실제로 추상화 할 부분과 아닌 부분을 결정하는 것은 추상화 단계의 1단계라는 생각이 들었다. 사용한 자원은 닫는다 Connection, PreparedStatement, ResultSet 등의 사용한 자원은 닫아주어야 한다. 자원이 닫히지 않고 메모리를 계속 차지한다면 메모리 누수가 발생할 수..
- Total
- Today
- Yesterday
- 코드스쿼드
- 마스터즈코스
- 글쓰기미션
- CS
- javascript
- JS
- 운영체제
- 카카오
- 인증
- React
- TCP/IP
- 객체지향
- java
- Transaction
- 네트워크
- JPA
- 모의면접준비
- OS
- Spring
- 개발공부일지
- 우테코수업
- 월간회고
- DB
- TIL
- 회고
- 알고리즘
- 내부코드
- 우아한테크코스
- python
- 학습로그
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |