inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

checkDuplicateEmail 메서드와 동시 요청에 관한 질문

미해결

토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1

안녕하세요 토비님! 좋은 강의 만들어주셔서 잘 듣고 있습니다. 작은 질문이 하나 있는데요. checkDuplicateEmail 메서드와 동시 요청에 관한 질문이 있습니다. 섹션 5. 28강 회원 애플리케이션 서비스 테스트(2) 20:47초 경에 email 중복 체크를 위하여 checkDuplicateEmail 메서드 코드를 작성하였고, 같은 email로 가입하려고 하면 DuplicateEmailException이 발생하는 것을 확인하였습니다. 그런데 여기서 다른 가정을 해보고 그런 상황에서 토비님이라면 어떻게 하셨을지 궁금합니다. 만약 email이 아닌 id로 회원가입을 하는 상황을 가정한다면, email과 다르게 id는 여러 사람이 같은 id로 회원가입하려고 시도할 수 있습니다. 따라서 동시에 2개의 요청이 들어오게 된다면 checkDuplicateEmail는 둘 다 통과하고 DataIntegrityViolationException이 발생하게 될 것입니다. (DB에서 유니크 제한을 걸었기 때문에) 규칙인 id는 중복되지 않는다는 지켜지겠지만, 사용자가 보게 될 예외는 우리가 의도했던 DuplicateEmailException가 아니게 되겠죠. 여기서 궁금한 점은 이런 상황까지 고려하여 코드를 작성하여야 하는 것인지 아니면 그냥 넘어갈 것인지 궁금합니다. 저라면, 드물게 발생할 것이라고 예상을 했다면 로깅만 잘 해놓고, 해당 예외가 많이 발생했거나 관련 cs문의가 많이 들어온다면 추가로 코드를 작성할 것 같습니다. 처음부터 만약 많이 발생할 것이라고 예상했다면 try-catch를 통해 예외를 변경해줬을 것 같습니다. 아마 다음과 같은 코드가 될 것 같습니다. @Override public Member register(MemberRegisterRequest registerRequest) { try { checkDuplicateEmail(registerRequest); Member member = Member.register(registerRequest, passwordEncoder); memberRepository.save(member); emailSender.send(member.getEmail(), "등록을 완료해주세요", "아래 링크를 클릭해서 등록을 완료해주세요"); return member; } catch (DataIntegrityViolationException e) { if (/*e를 통해 유니크 키 예외를 확인했다면*/) { throw new DuplicateEmailException(); } throw e; } } 서비스의 코드가 현재보다는 보기 지저분해진다고 생각했습니다. (아니면 이 방법이 아닌 다른 방법이 있을까요?) 토비님은 어떻게 생각하시는지 궁금합니다.

  • java
  • spring
  • spring-boot
  • jpa
  • 리팩터링
  • ddd
yunsoo0510 댓글 1 좋아요 1 조회수 98

자바가 아닌 다른 언어에서도

미해결

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

동작원리자체는 동일할까요? 닷넷에서 테스트코드 작성해도 동일할지 궁금합니다.

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
박살 댓글 1 좋아요 0 조회수 142

JSON 타입 질문

미해결

JPA (ORM) 개발자를 위한 고성능 SQL (High-Performance SQL)

안녕하세요, 강의 잘 듣고 있습니다. 좋은 강의 만들어주셔서 감사합니다! 강의에서 JSON 타입을 활용하는 부분이 인상 깊어서, 이를 실무 API 배치 작업에도 적용할 수 있겠다고 생각했습니다. 현재는 API 호출 비용 절감을 위해 응답 데이터를 저장하고 있습니다. 그런데 외부 API는 언제든 스펙이 변경될 수 있어서, '원본 응답을 그냥 JSON 형태 그대로 저장하는 게 낫지 않을까'라는 생각이 들었습니다. 다만 저희는 MySQL을 사용하고 있어서, PostgreSQL의 Materialized View 같은 기능을 직접 활용할 수 없습니다. 대신 MySQL에서 JSON 컬럼을 효율적으로 활용하면서도 백오피스 조회 성능을 보장할 수 있는 방법이 궁금합니다. 예를 들어, JSON 컬럼에 데이터를 저장하면서, 자주 조회하는 필드는 생성 컬럼을 두고 인덱스를 적용하는 방식이 일반적인지, 아니면 JSON은 단순 보존용으로만 두고, 정규화된 별도 테이블을 함께 운영하는 것이 나은지, 또는 다른 고성능 패턴이 있는지 궁금합니다.

  • sql
  • dbms/rdbms
댓글 1 좋아요 0 조회수 80

실무에서도 외래 키를 쓸수 있지만 쓰지 않는 경우?

미해결

김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복

실무에서도 외래 키(Foreign Key)를 쓸수 있는 상황이지만 특별히 쓰지않고 처리하는 경우가 있을까요? 예를 들어 시스템 초기에 보다 유연한 설계를 위해? 데이터 보전을 위해? 아니면 쓸수 있으면 최대한 쓰는게 맞을까요?

  • sql
  • mysql
  • dbms/rdbms
  • 소프트웨어-설계
  • SQLD
구름쟁이 댓글 1 좋아요 0 조회수 170

조건 제약 처리 부분 질의

해결됨

김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복

안녕하세요. 섹션 8에서 장바구니에 주문을 생성할 때 같은 상품이 중복으로 생성되게 하지 않게 제약 조건을 걸었는데 실무에서는 쿼리에서 제약 조건을 거는 지 아니면 애플리케이션에서 - 없을 때 추가 - 있을 경우 수량 증가 와 같이 아니면 비즈니스 로직에서만 처리 하는 지 어떤 케이스나 어느 비율로 적용하는 사례가 궁금합니다.

  • sql
  • mysql
  • dbms/rdbms
  • 소프트웨어-설계
  • SQLD
asdf 댓글 2 좋아요 0 조회수 76

템플릿과 콜백의 역할 경계를 구분하는 기준

해결됨

토비의 스프링 6 - 이해와 원리

안녕하세요! 토비님ㅎㅎ 강의를 잘 듣고있는데, 궁금한게 있어 여쭤봅니다! 템플릿/콜백 구조에서 '고정된 틀(템플릿)'과 변하는 로직(콜백)의 경계를 어디까지 두는 게 좋을지 궁금합니다. 예를 들어 강의에서는 ApiTemplate 안에서 URI 생성, 응답 처리, 예외 변환까지 모두 포함되어 있는데, 이런 부분들도 콜백으로 분리하는게 맞을까요 아니면 템플릿 내부에 두는 게 더 적절할까요?

  • java
  • spring
이시현 댓글 1 좋아요 0 조회수 131

테스트를 작성하지않아도 되는 경우

미해결

토비의 스프링 6 - 이해와 원리

안녕하세요 토비님 명료한 설명, 가르침받고 있습니다! 테스트 관련해서 모든 클래스마다 테스트가 있어야하나 생각해보다가 크게 두 가지 질문이 있어 이렇게 남겨봅니다~ 1. 작성하는 모든 클래스에 대해 테스트를 해야하는지, 테스트를 만들지 않아도 괜찮은 경우가 있을까요? 예를 들면 아래 경우에 테스트 의미가 있을까라고 생각이 들었네요 테스트 대상 클래스가 협력자(?)를 추가 로직없이 wrapping하는 경우, 즉 대상 클래스가 단순 wrapper인 경우 2. 강의 중에서 PaymentService에 있던 valid 체크로직을 Payment로 이동하였고, 이에 따라 PaymentTest에 도메인 오브젝트에 대한 테스트를 작성하였습니다. 헌데 PaymentServiceTest에서 valid에 대한 test suite가 있는 상황입니다. 이 경우 PaymentServiceTest만으로 PaymentTest는 커버가 되는 상황이기에 PaymentTest의 valid 테스트는 하지않아도 되는거 아닐까요? 혹은 Payment에서 테스트하는게 더 적절하다면 PaymentService에서 valid 테스트는 하지않고 단순 Payment가 생성되었는지만 체크하도록 테스트를 수정해야할까요? 감사합니다!

  • java
  • spring
구룩 댓글 2 좋아요 0 조회수 119

array 등

해결됨

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

안녕하세요 데이터분석가로 근무하고 있는 수강생입니다. array 등과 같은 기능이 저는 다소 생소한데 자주 쓰는 문법인지 궁금합니다ㅣ

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
  • 카카오공채-서비스
데붕싸 댓글 2 좋아요 0 조회수 84

Advice 패턴을 다시 분리할 수 있나요

해결됨

멀티 모듈 아키텍처로 구현하는 은행 서버 핵심 기능 [ Kotlin & Spring ]

aop의 단점을 보완하기 위해 advice 패턴을 사용하셨는데, 매번 코드에 advice가 들어가는게 좀 번거로울 수도 있을거 같다는 생각이 들어서 질문드립니다..! aop의 단점을 극복하기 위해 사용한거지만,, 혹시 Advice를 aop처럼 분리시켜서 적용시키는 방법이 따로 또 있을까요

  • java
  • spring
  • kotlin
  • mysql
  • spring-boot
홈런 댓글 3 좋아요 0 조회수 123

[58. 인덱스와 정렬]을 듣다가 질문입니다.

미해결

김영한의 실전 데이터베이스 - 기본편

database mysql을 사용하다가 질문드립니다 create index idx_items_stock_quantity on items(stock_quantity); 이렇게 인덱스를 생성하고 order by를 다음과 같이 stock_quantity를 기준으로 한다면, explain select * from items order by stock_quantity; 이렇게 실행계획을 보면 이 쿼리의 type이 적어도 ALL로 나오진 않을거라고 생각했습니다. 그냥 인덱스를 stock_quantity를 기준으로 생성하면 알아서 정렬이 되어 있을 거니까요. 그런데, 실제로 확인해보니까 type이 ALL로 나옵니다. 왜 그런걸까요? (by Claude Sonnet 4.5) select * 의 경우 1. stock_quantity 인덱스를 활용한 랜덤 I/O를 하는 경우 2. 테이블을 순차적으로 쭉 읽는 순차 I/O를 하는 경우 이 두 경우 중 옵티마이저가 2번째 방법을 활용해서 그렇다고 합니다. 그냥 이렇게 알고 있으면 될까요?

  • sql
  • mysql
  • dbms/rdbms
  • SQLD
뎅뚠 댓글 2 좋아요 0 조회수 123

실무에서 배치 메타데이터 관리

미해결

죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.

$ kill-9.. 킬구형 추석 연휴는 잘 보냈는가.. 처음에 텍스트로만 구성된 강의인 걸 결제한 후 알게되어 당황했지만.. 걱정 마라.. 금방 킬며들었다.. 눈으로 읽고 생각하는 즐거움을 알게되었다.. 무엇보다 그동안 피로했을 내 귀를 지켜줘서 고맙다.. 아직 강의 초반이지만 궁금한 부분이 있어서 질문 올린다.. 대용량 트래픽을 다루는 회사에서는 배치 메타데이터의 양도 어마어마할 것 같은데 실무에서는 배치 메타데이터를 어떻게 관리하는 지가 궁금하다.. 혹시 배치 메타데이터를 활용할 일이 없을 것 같으면 안쌓는 것도 권장하는 방법인가..

  • java
  • spring
  • spring-boot
  • spring-batch
  • backend
retry 댓글 4 좋아요 1 조회수 92

컬럼 분리관련

미해결

김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복

강의중 로직이 복잡해지면, 테이블에서 관련 컬럼들을 다시 분리해야 하는날이 올 수 있다고하셨는데 컬럼을 다시 분리해야 할 때, 실무에서는 어떤 절차로 나누는지와 생길 수 있는 문제점에는 어떤 게 있나요?

  • sql
  • mysql
  • dbms/rdbms
  • 소프트웨어-설계
  • SQLD
최승현 댓글 1 좋아요 0 조회수 62

외래키를 실무에서 거는게 좋을까요?

미해결

김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복

외래키 제약조건을 통해 보다 정확한 데이터 무결성을 보장할 수 있을 것 같습니다. 하지만 실무에서는 외래키로 인해서 데드락이 발생하는 케이스가 있을 것 같습니다. 또한 외래키로 인해 운영 상에서 제약조건을 잠시 해제해야된다던가 하는 경우가 발생할 것 같은데, 실무에서도 외래키를 주로 걸고 운영할까요??

  • sql
  • mysql
  • dbms/rdbms
  • 소프트웨어-설계
  • SQLD
hgh1472 댓글 1 좋아요 0 조회수 142

트랜잭션 격리성 설계도 어필포인트로 가져갈 수 있을까요?

해결됨

6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법

기존에는 @Transactional 만으로 데이터 일관성이 보장된다고 생각했습니다. 하지만 강의를 들으며 동시에 재고를 조회·갱신하는 상황에서 격리성이 보장되지 않는 문제가 발생할 수 있다는 점을 뒤늦게 인식했습니다. 이런 흐름을 이력서에서 “단순 구현 → 시스템 안정성 중심의 설계로 성장한 과정”으로 기술적 사고 확장으로 어필해도 괜찮을까요? 아니면 너무 이론적으로 보일까요? (항상 서비스 내 로직만 고려해서 롤백 여부로 트랜잭션을 생각했는데, 큰일이네요ㅜㅜ )

  • java
  • spring
  • mysql
  • 이력서
bang2451 댓글 2 좋아요 1 조회수 83

두개 이상의 테이블을 조인할때 인덱스 질문이 있습니다.

해결됨

김영한의 실전 데이터베이스 - 기본편

두개 이상의 테이블을 조인 할 때 서로 다른 테이블에 있는 데이터로 ORDER BY 정렬을 하게 되는 경우가 있을 것 같은데 이런 경우에는 인덱스를 어떻게 생성해야 하는지 궁금합니다

  • sql
  • mysql
  • dbms/rdbms
  • SQLD
hb j 댓글 1 좋아요 0 조회수 85

낙관적락vs. 레디스락

미해결

재고시스템으로 알아보는 동시성이슈 해결방법

충돌 빈도가 낮지만 피크 타임에 스파이크가 있는 서비스라면, “낙관적 락+재시도”와 “레디스 락” 중 어떤 구성이 유지보수/비용/성능 면에서 유리한지 궁금합니다

  • java
  • spring
  • 동시성
최수연 댓글 2 좋아요 0 조회수 138

파일을 만드는 단위가 궁금해요

미해결

김영한의 실전 데이터베이스 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요! 강의를 듣다보니 db 파일들은 히스토리가 어떻게 관리되고 어떤 단위로 파일을 나누는지 궁금합니다!

  • sql
  • mysql
  • dbms/rdbms
  • SQLD
tomato_do 댓글 1 좋아요 0 조회수 89

실무에서 SQLP 자격증의 유효성에 대한 질문.

미해결

김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복

안녕하세요, 김영한 지식공유자님. 현재 자바개발 2년차 개발자입니다. 자바와 DB공부를 병행하고 있습니다. 자바와 스프링 공부 vs SQLP 공부로 고민을 한다면, 자바와 스프링 공부보다 SQLP를 따기위한 노력에 가중치 높이는게 좋은 선택일까요?

  • sql
  • mysql
  • dbms/rdbms
  • 소프트웨어-설계
  • SQLD
jaehyeok Choi 댓글 1 좋아요 0 조회수 219

UPDATE, DELETE 시 대리키, 자연키 활용 여부가 궁금합니다.

미해결

김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복

안녕하세요. 강사님의 강의를 2회독하며 궁금한 것들이 어느정도 정리가 되어 질문 드립니다. 제가 SI에 있어서 그런건지 혹은 프로젝트? 운이 없어서인지 차세대를 하더라도 돌이켜보면 경험했던 실무에서는 늘 자연키를 PK로 사용 했었습니다. 그러다보니 UPDATE, DELETE등 데이터를 핸들링 할 때에도 늘 PK(자연키)를 전부 들고다니며 사용 했었는데 대리키를 PK로 사용할 경우에는 PK도 항상 같이 다른 데이터 들과 함께 객체등에 담는지.. 혹은 데이터를 갱신 할 때에만 자연키들로 따로 pk를 조회 한 후 사용하는지 아니면 unique 조건이 걸린 자연키들로만 갱신을 하는지 궁금해서요 ㅜㅜ

  • sql
  • mysql
  • dbms/rdbms
  • 소프트웨어-설계
  • SQLD
sangmin 댓글 2 좋아요 0 조회수 102

인기 태그

인프런 TOP Writers

주간 인기글