반응형 분류 전체보기337 [Java] 동시성 이슈 해결하기 (1) 같은 계좌를 이용하는 A와 B라는 이용자가 있다고 가정한다. 동일한 시간에 A는 카드를 이용해 상품을 결제했고, B는 은행 어플을 통해 계좌이체를 했다. 대략의 플로우를 상상해보면 아래와 같다. A와 B는 같은 시간에 잔액을 조회했다. A는 40,000원을 결제하여 계좌에 남은 잔액인 60,000원을 반영하였다. 같은 시각, B는 20,000원을 계좌 이체하였다. B의 처리 속도가 약간 늦어져 A가 계산된 금액 반영을 한 뒤에야 B의 계산된 금액을 반영했다. 한 계좌에서 각각 40,000원과 20,000원이 결제되었으니 잔액은 40,000원이 남아야한다. 하지만 현재 80,000원이 남은 상태임을 확인할 수 있다. 이는 계좌라는 같은 자원에 여러 사람이 동시에 접근하기 때문에 발생하는 문제이다. 다양한 .. 2022. 12. 9. [우테코] 우아한테크코스 4기 수료 후기 11월 25일 금요일, 우아한테크코스 4기가 마무리되었다. 이 글을 취직 후 나름의 성공(?)을 한 뒤에 쓸까 지금 쓸까 많이 고민했지만, 마무리를 지어야 수료했다는 실감이 날 것 같았다. 그리고 마무리를 지어야 과거에서 헤엄치지 않고 앞으로 나아갈 수 있을 것 같다는 생각이 들었다. 🥰 뿌듯한 일 🥰 📚 학습과 기록 미션과 학습을 열심히 따라가려고 했다는 점. 그리고 기록을 꾸준히, 잘해놨다는 점. 우테코 기간 동안 포스팅한 글이 103개로 약 3일에 한 번꼴로 작성했다. 역대 미션이나 학습에 대한 건 블로그 포스팅과 깃허브에 잘 정리해놓았으니 생략한다. Blog: https://yeonyeon.tistory.com/category/Memo/우테코 4기 GitHub: https://github.com/.. 2022. 11. 27. [Spring/AOP] JDK Dynamic Proxy vs CGLIB Proxy 목차 JDK Dynamic Proxy vs CGLIB Proxy JDK Dynamic Proxy CGLIB Proxy JDK Dynamic Proxy vs CGLIB Proxy Spring AOP와 proxy Spring에서 사용하는 proxy Spring Boot에서 사용하는 proxy 왜 진작 CGLIB을 이용하지 않았을까? 1. JDK Dynamic Proxy vs CGLIB Proxy 💣 Spring에서는 프록시를 이용해 AOP를 지원한다. (AOP를 모른다면 이 링크를 참고하자. Spring의 대표적인 AOP인 @Transactional과 AOP에 대한 간략한 설명을 담았다.) JDK Dynamic Proxy, CGLIB 두 가지 방식을 사용하는데 왜 프록시 종류가 2가지나 있는지, 언제 어떤 .. 2022. 11. 23. [JPA] @Query와 @Transactional을 꼭 같이 써야하나요?🤔 😄 서론 지난 번에 deleteAll과 관련해 N+1 문제가 발생했었다. 그 과정에 @Query를 이용해 직접 JPQL을 작성하여 해결했는데 (🔗관련 글 링크) 한가지 의문이 생겼다. 해당 문제를 해결하기 위해 다양한 문서들을 찾아보았는데 많은 예제에서 JPQL을 사용할 때 @Transactional 어노테이션을 붙이고 있었다. 안 붙여도 잘 동작하는데 왜 그랬을까? 원인을 찾아보기 시작했다. 😏 Repository 구현체와 트랜잭션 우리가 JPA를 사용해서 ***Repository 클래스를 만들 때 일반적으로 Repository나 JpaRepository를 확장한다. public interface ReminderRepository extends Repository { // ... } Custom Rep.. 2022. 11. 17. [우테코] JDBC 라이브러리 구현 미션 학습 로그 포스팅을 깜빡하고 있다가 여태까지 한 미션들을 복습하며 이제야 정리하게 되었다. 1. 요구사항 ✨ 자세한 미션 요구사항 및 수행 내역은 깃허브 레포지토리에 branch 별로 분류해두었습니다. 학습 목표: JdbcTemplate을 직접 구현해보자. GitHub - yeon-06/jwp-dashboard-jdbc: [우아한테크코스 4기] JDBC 라이브러리 구현하기 [우아한테크코스 4기] JDBC 라이브러리 구현하기. Contribute to yeon-06/jwp-dashboard-jdbc development by creating an account on GitHub. github.com 2. 학습 내역 🔮 💜 Local Transaction vs Global Transaction 👉 https://yeo.. 2022. 11. 13. [JPA] delete문이 N개가 발생한다고요?😱 💥 원인 발생 현재 진행중인 프로젝트에서 deleteAllByXXX를 호출하자 delete가 N개 나가는 현상이 발생했다. 왜 여러개가 나갈까? 왜 한번에 삭제되지 않는걸까?를 찾아보게 되었다. 📝 원인 분석 deleteAll이 어떤 식으로 동작하는지 확인하기 위해 아래와 같은 과정을 거쳤다. 일단 저희 Repository에서는 Repository를 extends하고 있기 때문에 해당 클래스로 살펴보았다. 구현체를 찾아 따라가다보니 SimpleJpaRepository 다다르게 되었다. 내부 구현을 확인해보니 delete를 for문을 돌면서 호출했다.😱 반면에 deleteAllInBatch는 여러번 호출하는 것이 아닌 한번에 호출하고 있었다. @Repository @Transactional(readOnly.. 2022. 11. 13. [Java] volatile 키워드 (feat. Atomic & Concurrent) 😵 서론 멀티 스레드로 인한 동시성 문제를 해결하기 위해 Java는 synchronized 키워드와 Atomic 타입이 있다고 알려져있다. 그런데 Atomic 타입은 왜 Thread-safe하다고 할까? 이 이유에 대해서 찾다가 volatile이라는 키워드에 대해 알게 되었다. 이번 포스팅에서는 해당 키워드에 대해 파헤쳐보려고 한다. 😎 Atomic & Concurrent & volatile 예제를 살펴보기 위해 AtomicInteger의 내부 코드를 가져왔다. 특별할 것 없어 보이지만 value에 volatile이라는 키워드가 붙는다는 점이 눈에 띈다. AtomicBoolean, AtomicLong도 살펴봤는데 모두 volatile 키워드가 붙었다. public class AtomicInteger ex.. 2022. 11. 9. OpenSSL 취약점 발견되다? 😄 서론 OpenSSL에서 'CRITICAL'한 취약점이 발견되었다는 소식을 들었다. OpenSSL이 등장한 이래 두 번째 CRITICAL 취약점이라고 한다. (첫 번째 취약점은 2016년) 나에게도 영향이 미칠지에 대해 궁금해서 찾아보게 되었다. 😏 OpenSSL이란? 컴퓨터 네트워크를 통한 통신을 보호하거나 상대방을 식별해야 하는 응용 프로그램용 소프트웨어 라이브러리이다. 대부분의 HTTPS 웹사이트를 포함해 인터넷에서 널리 사용되고 있다. SSL, TLS 프로토콜의 구현이 포함된 오픈 소스로써 기본적인 암호화 기능이나 다양한 유틸리티 기능을 제공하고 있다. 😮 무엇이 문제인가? OpenSSL의 개발자인 Mark Cox가 아래와 같은 트윗을 남겼다. OpenSSL 공식 사이트가 분류한 CRITICAL.. 2022. 10. 30. [Spring] @Transactional이 동작하지 않는다?😨 부제: 동일한 bean에서는 @Transactional 적용이 되지 않는다. 핵심 내용 바로가기 😎 문제 상황 줍줍은 자꾸만 사라지는 슬랙 메시지를 백업해주는 서비스입니다. 최근 줍줍에서는 신규 이용자들의 유입을 위해 '워크스페이스 등록'이라는 기능을 추가했습니다. 해당 기능의 확장으로 기존에는 특정 워크스페이스에 초대된 사용자들만 서비스를 이용할 수 있었지만 이제는 누구든지 워크스페이스를 등록하고 이용할 수 있게 되었습니다. 해당 기능을 추가하며 팀 내에서 워크스페이스 등록하면 바로 로그인이 되게 만들 것이냐, 로그인 과정을 따로 거치게 만들 것이냐에 대한 논의가 있었는데요. 기존에는 첫 회원가입 시 위 사진과 같은 절차로 로그인을 진행하고 있었습니다. 사실상 사용자는 같은 슬랙 인증을 2번 진행하고 .. 2022. 10. 27. 이전 1 ··· 4 5 6 7 8 9 10 ··· 38 다음 반응형