본문 바로가기

MySQL 트랜잭션과 락 - InnoDB 락, 이렇게 동작한다! 트랜잭션과 락(Transaction, Lock) 트랜잭션과 락 트랜잭션 : 논리적인 작업 단위로 전부 처리되거나 처리되지 않는 (commit/rollback) 원자성을 보장하기 위한 기능이다. 락 : 서로 다른 작업에서 같은 자원을 동시에 필요로 할 때 자원 경쟁이 일어나는데, 이때 순서대로 사용되는 동시성을 보장하기 위한 기능이다. MySQL에서 사용되는 락(LocK)은 크게 MySQL 엔진 레벨의 락과 스토리지 엔진 레벨의 락으로 나눠볼 수 있다. 스토리지 엔진 레벨의 락 스토리지 엔진(InnoDB)에서 제공하는 락(Lock, 잠금)이 있다. 기본적으로 비관적 락(Pessimistic locking)을 사용한다. 비관적 락 : 트랜잭션에서 변경하려는 레코드에 대해 락을 획득하고 쿼리를 수행하는 방식 ..
자바 백엔드 4년차 N사 경력 면접 후기(부제 : 면접을 이끄는 건 누구인가?) 쓸데없는 서론 지금 다니는 회사 동료분들 중 몇 분이 내 블로그를 알고 있기 때문에 면접 봤다는 이야기가 알려지면 좋을 것이 하나도 없지만, 면접이 주는 영감? 동기부여?가 있기도 하고 공유하는 것을 즐기는 성향 때문인지 공유 욕구가 더 강해 위험(?)을 무릅쓰고 포스팅을 하려고 한다. 4년 차 백엔드 개발자 면접 후기 우연한 기회로 N사 계열사 면접(1차 기술 면접)을 보게 되었다. 결과부터 말하면 탈락이다. 그렇기에 이 후기는 패착을 분석하는 후기다. 시간 아까운 사람을 위한 결론 코딩 테스트는 경력 채용이라 어렵지 않았음 (공부 하나도 안 하고도 주어진 테스트 케이스는 솔(solve)하는 수준? 절대 온전한 정답은 아니겠지만?) 컴퓨터 사이언스나 주니어 수준에 어울리는 기술 질문보다는 경력 즉, 어..
MySQL 아키텍처 (MySQL 엔진 구조, 스토리지 엔진 구조, 스레드 구조, 메모리 구조, 쿼리 실행 구조, Replication 구조) MySQL 서버 = MySQL 엔진 + 스토리지 엔진 MySQL 서버는 크게 MySQL 엔진과 스토리지 엔진으로 나눠볼 수 있다. MySQL 엔진은 클라이언트로부터 오는 요청 처리(요청된 SQL 문장을 분석, 최적화, ...)를 담당하고, 스토리지 엔진은 실제 데이터를 디스크 스토리지에 저장하거나 조회하는 부분을 담당한다. MySQL 엔진 Connection Handler : 커넥션 및 쿼리 요청을 처리 담당 SQL 인터페이스 : DML, DDL, Procedure, View 등 SQL 인터페이스 제공 담당 SQL 파서(parser) : SQL문법 오류 탐지 및 SQL 쿼리 문장을 MySQL이 처리하기 좋은 토큰 단위로 나눠서 트리 형태로 파싱 하는 작업 담당 SQL 옵티마이저(optimizer) : 쿼..
Spring ApplicationEvent 비동기로 처리될 것만 같지? ApplicationEventListener는 비동기가 아니다 스프링(Spring) 프레임워크를 공부하면서 왠지 모르게 가끔씩 이벤트 드리븐(Event Driven)이라는 단어도 듣게 됐다. 뿐만 아니라 스프링 5 이후로는 WebFlux가 등장하면서 논블록킹(NonBlocking), 리액티브(Reactive)라는 단어도 듣게 됐다. 그 둘이 무슨 연관성이냐 할 수 있지만, 개념에 대해서 정리가 안되어서 그런지 나는 이벤트 = 비동기 같은 생각을 은연중에 하게되었다. 이런 상황이다 보니 ApplicationContext를 이용하여 ApplicationEvent를 Publish하고 Listen하는 기능을 알았을 때, '아 이렇게 하는 거구나' 하고 넘겼고, 아무 생각 없이 "비동기"로 처리되겠거니 했다. 그..
나는 어떤 응답을 만들었는가(부제 : 그놈의 '기초', '기본'은 무엇인가) 어떤 Http Response를 줄 것 인가? 글에서 다룰 주제 이번 글에서 다룰 내용은 기술적인 내용이나 경험(?)이 아닌 개발자라면 한 번쯤 생각해볼만 한 것? 정도 된다. 최근 들어 개발자 연봉 상승 소식도 많이 들리고, 개발자 수요도 많다하고, 비교적 진입 장벽이 높지 않다는 희망적인 소식 덕분에 많은 사람들이 소프트웨어 업계로 많이 오고 있다. 전직 또는 진로 변경을 하려는 사람들은 이미 현업에 있는 사람들에게 업계 질문을 많이 할 것이다. 그리고 현업에 있는 사람들의 조언을 잘 들어보면 거기에는 "기초만 잘 다지면..." , "기본적인 것만 할줄 알면..." 이런 말이 있을 것이다. 주의해야한다. 필자도 만 3년정도 경력이 있지만 그 기초가 뭔지 기본적인 것은 뭔지 명쾌하게 말할 수 없었다. ..
대규모 서비스를 지탱하는 기술 6~15장 (서버와 인프라 구축) 6~10장은 생략!! 과제라 정리하기 애매한 부분 6~10장까지는 데이터 압축, 알고리즘, 전문 검색 엔진 작성 등의 내용을 과제를 통해 보여준다. 그러나 읽어봤을 때 현시점에 정말 필요한 일인가? 하는 의문이 들어서 내용을 생략하려고 한다. 예를 들어 데이터 저장할 때 사이즈를 줄이기 위해서 데이터 압축을 애플리케이션 레이어에서 진행해야 하는지는 의문이다. 책에서는 과제로 정수 데이터를 압축하는 과제를 통해서 perl로 뭔가 하는거 같은데 실질적으로 그렇게까지 하는 회사가 몇 안 되는 것 같다는 생각이 들었다. 지인에게 물어봐도 압축까지 하지 않고 DBMS에서 자체적으로 최적화 해주기를 기대하는 것 같았다. 인코딩 디코딩하는데에 비용 즉, 오버 헤드도 생각하는 것 같다. (대용량 이미지 업로드, 썸네일..
대규모 서비스를 지탱하는 기술 1~5장 (문제 해결을 위한 근본 접근법) 대규모 서비스를 지탱하는 기술 서론 '대규모 서비스를 지탱하는 기술'라는 책을 공부하고 정리해보는 포스트입니다. 1~5장, 6~15장을 묶어서 2개의 포스트로 나눠 작성할 예정입니다. 2011년에 나온 책이고 절판되었지만, 개발자들 사이에서 현재까지도 회자되는 책이어서 읽어보았습니다. (중고 도서로 가격이 아주 비싸고, 국회도서관 우편 복사 비용도 비쌉니다... 😦) 웹을 지탱하는 기술 + 대규모 서비스를 지탱하는 기술 책 2권을 우편복사 요청했는데 비용이 너무 비싸더군요... ✔️ 주의사항 → 앞서 언급한대로 2011년 즉, 10년이 넘은 책이라 다소 변경된 내용이 많아 틀린 내용이 있을 수 있습니다. 이 책의 목적을 제 마음대로 해석했을 때, 대규모 서비스로 성장하면서 경험했던 내용을 간접 경험하며 ..
아무 관심 없던 @Retention 어노테이션 정리(RetentionPolicy SOURCE vs CLASS vs RUNTIME) @Retention annotation 관심 갖게 된 이유 자바에서 지향하는 방법은 아니지만 필요에 의해서 커스텀 애노테이션(Annotation)을 만들어야 할 때가 있습니다. 보통 예제 샘플 코드를 보면 메타 애노테이션으로 항상 붙어있고 RetentionPolicy=RUNTIME으로 되어습니다. 그렇기 때문에 그럴 때나 보게되는 애노테이션이라 @Retention 은 무시하고 @Target 정도만 확인하고 써왔습니다. 명확히는 @Retention 이라는 애노테이션이 있는지도 모르고 있었습니다. 그러던 중 회사 코드에서 JPA 엔티티(Entity) 클래스의 필드에 롬복(lombok)의 @NonNull 이 쓰인 것을 확인하고 이게 동작하는지가 궁금해지면서 찾아보게 되었습니다. 설명을 읽어보면 @Retenti..