본문 바로가기

분류 전체보기55

Blocking과 Synchronous Synchronous의 뜻은 "동기적인" 이다. 동기적이라는 말의 뜻은 다음과 같다. 두 작업 A, B를 생각해보자. A는 B의 실행이 다 끝나야 그 실행의 결과를 가지고 하던 일을 계속 할 수 있다. 이 경우 A와 B는 동기적이라고 한다. Blocking은 기다리는 동안 다른 일을 못하고 중지된다는 뜻이다. 이 경우 기존에 하던 일을 못하고 다른 일을 하다가 초록색 화살표에서 실행한 작업이 끝나야 기존의 작업을 다시 실행할 수 있다. 헷갈리니 예시를 보자. 출처 :musma.github.io/2019/04/17/blocking-and-synchronous.html 동기와 비동기, 그리고 블럭과 넌블럭 무릇 모든 개발자들, 아니 비단 개발자가 아니라 할지라도 컴퓨터 관련 산업계 종사자들이라면 오다 가다 .. 2021. 3. 22.
Field Injection 대신 Constructor Injection을 사용해야 하는 이유 이 글을 작성하기 위해 주입받은 포스트는 다음과 같다. yaboong.github.io/spring/2019/08/29/why-field-injection-is-bad/ 이번 공부용 프로젝트를 만들면서 test code를 제외한 모든 코드에 @Autowired를 사용하지 않았다. github.com/kh0712/dailysup 필드 주입 대신 생생자 주입을 사용하는 이유는 순환 의존을 방지해서 안전하다 등 어렴풋이만 알고 있었는데 확실하게 정리해보자. 필드 주입을 사용하면 생기는 문제는 다음과 같다. 첫 번째로 의존 관계를 final로 설정할 수 없다. 런타임에 객체의 의존성이 바뀌는 경우는 흔치 않다. 필드를 final로 선언한다면 런타임시 의존성이 바뀌어 원하지 않는 결과가 나오는 일을 방지할 수 있.. 2021. 3. 21.
Join 쿼리를 어떻게 최적화할까 다음과 같이 사용자 엔티티로 엮여있는 아이템과 디바이스 엔티티를 생각해보자. 특정 조건을 만족한 아이템들의 리스트를 가져와서 그 아이템의 사용자의 디바이스로 알림을 보내고 싶다. 사용자의 아이템이 여러개더라도 각 디바이스에는 알림이 한번만 가게끔 해보자. 먼저 One to Many 관계인 사용자와 아이템을 조인해보자. 아이템이 가지고 있는 fk(사용자의 pk이다)로 조인이 된다. 아이템 하나당 사용자 하나를 가지고 있기 때문에 엔티티 수가 늘어나진 않는다. 여기서 디바이스를 가져오기 위해 사용자-디바이스, One to Many 조인을 해보자. 디바이스 1의 fk는 사용자A의 pk 이다. join은 카티전 곱과 셀렉션 연산의 합이므로 레코드가 뻥튀기 된다. 한 사용자가 아이템을 세개, 디바이스를 네개 가지.. 2021. 3. 10.
로그인 아이디는 왜 pk로 적절하지 않을까? JPA로 엔티티를 설계하던 중 의문이 들었다. 보통 PK는 @GeneratedValue 어노테이션으로 artificial key를 사용한다. 계정 정보를 나타내는 엔티티는 로그인 아이디를 컬럼으로 가지고 있고, 그 컬럼은 Updatable = false, unique = true, nullable = false를 제약조건을 가지고 있다. 그렇다면 변경이 불가능하고, 유일하고, 값이 있어야 하는 로그인 아이디는 PK와 비슷해보인다. 그렇다면 로그인 아이디를 PK로 사용하면 되지 않을까? 인프런에서 JPA 수업을 들었던 김영한 팀장님께 물어봤다. 언제나 친절하게 답변해주신다. 대부분의 사이트들이 고객 id를 PK로 잡지않는다고 한다. 로그인 아이디는 비지니스 로직과는 무관해보이지만 그렇지 않다. login .. 2021. 3. 4.
Base64는 왜 쓰는 것일까? Base64를 처음 들어본다면 이 글을 보길 바란다. https://effectivesquid.tistory.com/m/entry/Base64-인코딩이란 Base64 인코딩이란?인코딩이란? Base64 인코딩에 대해 알아보기전에 먼저 인코딩이란게 무엇인지 간략하게 알아보자. 인코딩(encoding)은 정보의 형태나 형식을 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 위effectivesquid.tistory.com Jwt를 보다보면 JwtProvider에서 jwt.secret을 base64로 인코딩한다. 왜 base64로 인코딩하는지 이해가 안가서 여러 글들을 찾아봤는데 명쾌하지가 않다. 왜 base64 인코딩을 쓰는지 곰곰히 생각하면서 정리한 결론을 소개한다. 밑에 세줄요약도 있다. 먼저 b.. 2021. 2. 12.
HTTP API - PATCH는 멱등한가? 출처 : www.inflearn.com/questions/110644 2021. 1. 11.
AssertJ - isEqaulTo와 isSameAs의 차이 isSameAs : 메모리상 같은 객체를 가리키는지 비교 (주소 비교) isEqualTo : 객체가 같은 값을 가지고 있는지 비교한다. 사소해보이지만 이런거 정리 안해놓으면 이거 때문에 헤멜 수 있다. 그리고 이렇게 되새겨 놓으면 무심코 쓰다가 무의식적으로 “아 이거 아닌데” 하고 알아차릴 수 있다! 2020. 12. 29.