묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
비로그인 유저도 어뷰징 방지 정책
안녕하세요 강의 잘보고있어서 감사의 말씀 전하며 질문이 있어 글 남깁니다. 만약 비로그인도 어뷰징 방지 정책을 적용 한다했을때 실무에선 어떻게 처리하나요?IP나 쿠키, User-Agent 등을 활용한다고 하셨는데,IP 주소로 처리하기에는 공유망이나 VPN 같은 다양한 접근 방식도 있을 것 같고 User-Agent 나 브라우저쿠기같은경우는 브라우저에서 조작이 가능하기도하고 Pomsman 같은걸로 요청해서 User-Agent 값을 임의로 설정하는등과 같은 방법으로 집계될수도 있을것같은데 1. 그냥 일반적인 조회수만 집계만 하면되는 서비스에선 어떤식으로 처리하는지 궁금하고 만약 정말 빡세게 어뷰징을 처리한다고했을때 서버쪽에서 고유키값을 만들어서 로그인안한유저면 그 키값을 httponly 쿠키로 설정해서 고유키값이 있을때만 조회수가 집계되는 방법도 있을것 같은데 이런방식은 어떤지도 또 다른 괜찮은 방법이 있는지 궁금합니다.
-
해결됨Spring Boot, AWS로 백엔드 서비스 한 사이클 완성하기
배포 후 Entity 수정 관련
ddl을 validate로 하고 개발을 진행하다가 Entity가 추가되거나 수정될 경우에는 어떤 식으로 개발서버와 운영서버의 database table 싱크를 맞출 수 있나요 ?? 실무에서는 어떤 방식으로 마이그레이션을 진행하는지 궁금합니다!!
-
미해결김영한의 실전 데이터베이스 - 기본편
섹션 3 퀴즈 3번 문제
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]섹션 3 퀴즈 中3. 자식 테이블을 부모 테이블에 조인할 때, 결과 행의 수는 일반적으로 어떻게 변할까요?제가 이해한 걸 쿼리로 나타내면,SELECT * FROM [부모 테이블]JOIN [자식 테이블]이라고 생각했는데, 문제에서 말하는건SELECT * FROM [자식 테이블]JOIN [부모 테이블]인건가요?
-
해결됨Spring Boot, AWS로 백엔드 서비스 한 사이클 완성하기
EC2 HTTPS에 관련하여 질문 드립니다!
해당 프로젝트에 도멘인을 연결해서 HTTPS 설정으로 변경해보고 싶어서 여쭤봅니다!!nginx로 할 수 있지만 실무 프로젝트에도 적용시켜보고 싶어서요! nginx 말고 실무에서는 어떤 방식으로 HTTPS 설정을 하는지 궁금합니다!!
-
해결됨Spring Boot, AWS로 백엔드 서비스 한 사이클 완성하기
EC2 <-> RDS 연동 후 로컬에서의 Docker에 대해 궁금한 점이 있습니다.
services: springboot-twitter: container_name: springboot-twitter image: springboot-twitter:latest ports: - "8080:8080" environment: - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-twitter:3306/twitterdb - SPRING_DATASOURCE_USERNAME=dev - SPRING_DATASOURCE_PASSWORD=dev123 networks: - twitter-network depends_on: mysql-twitter: condition: service_healthy mysql-twitter: container_name: mysql-twitter image: mysql:9.3 environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: twitterdb MYSQL_USER: dev MYSQL_PASSWORD: dev123 healthcheck: test: [ "CMD", "mysqladmin", "ping", "-h", "localhost" ] interval: 10s timeout: 5s retries: 5 ports: - "3307:3306" networks: - twitter-network networks: twitter-network: driver: bridge 로컬 환경에서 mysql에 대한 이미지가 떠있어야 spring boot application을 실행해야 DB connection도 잘 이루어진다고 이해했습니다. 여기서 궁금한 점이 있습니다.로컬 환경에서 docker compose up -d를 한 경우 compose 파일에서 spring boot 이미지도 함께 띄워놔서 application을 실행할 때 8080 already in use 오류가 발생합니다. 이렇게 될 경우에는 docker-compose.yaml을 수정하거나 docker compose up -d mysql-twitter 커맨드를 실행해서 mysql만 띄워야 하는지 궁금합니다.
-
해결됨Spring Boot, AWS로 백엔드 서비스 한 사이클 완성하기
Docker에 관하여 궁금한 점이 있습니다!
docker buildx build --platform linux/amd64 -t {이미지 이름} .해당 명령어를 통해서 Dockerfile 기반으로 Docker Hub에 컨테이너를 생성하고, Docker Compose를 통해서 생성된 컨테이너 안에 이미지들을 다운받아와서 실행되는 구조가 맞는걸까요 ??
-
미해결김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복
실무적인 설계로 접근했을 때 제 2정규형 항상 만족?
안녕하세요. 질문이 있습니다!! 제2정규화는 제 1 정규형을 만족하고, 테이블의 기본키가 복합키일 때 부분 함수 종속이 있으면 적용할 수 있잖아요 근데 이전 강의 영상에서 말씀하셨듯이 유연하고 확장성 있는 설계를 하기 위해 자연키가 아닌 대리키를 사용하고, 연관 엔티티(매핑 테이블)을 두어 사용하려면 비즈니스 로직에 따라 유니크 제약조건을 걸어 해결하라고 하셨습니다 그럼 여기서 궁금한 것이 이렇게 실무적인 접근으로 설계를 한다면(대리키) 항상 키는 단일컬럼 키니까 복합키가 아니라서 항상 제 2정규형을 만족하는 것인가요??
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
CommentServiceTest의 테스트 로직 질문
@Test @DisplayName("하위 댓글이 삭제되고, 삭제되지 않은 부모면, 하위 댓글만 삭제한다.") void deleteShouldDeleteChildrenOnlyIfNotDeletedParent() { // given Long articleId = 1L; Long commentId = 2L; Long parentCommentId = 1L; Comment comment = createComment(articleId, commentId, parentCommentId); given(comment.isRoot()).willReturn(false); Comment parentComment = mock(Comment.class); given(parentComment.getDeleted()).willReturn(false); given(commentRepository.findById(commentId)) .willReturn(Optional.of(comment)); given(commentRepository.countBy(articleId, commentId, 2L)).willReturn(1L); // 이 부분 given(commentRepository.findById(parentCommentId)) .willReturn(Optional.of(parentComment)); // ...위 테스트에서given(commentRepository.countBy(articleId, commentId, 2L)).willReturn(1L);이 부분 때문에 질문을 드렸습니다. commentRepository.countBy() 에서 commentId = 2L을 부모로 갖는 comment는 아무도 없으므로, 0L을 반환하는 것이 옳다고 이해했는데, 강의에선 1L을 반환하셨습니다!(물론 서비스 계층의 메서드에서 hasChildren()의 판정 로직상 0L과 1L 은 동일한 결과를 반환하므로 테스트 결과에는 영향을 주지 않는 것 같습니다.)카운트 쿼리의 동작 부분을 제가 잘못 이해한 것인지 질문드립니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
ec2 서버에서 스프링 실행도 되고 인바운드 설정까지 했는데 index.html 안됨
로컬에서 실행할 때 문제없이 잘 작동했고, ec2 서버에서 스프링부트 실행되는 것도 확인했습니다. 그리고 인바운드 규칙도 설정하고 public IP 주소로 입력했는데도 index.html 화면이 계속 로딩만 되고 안 나옵니다ㅜㅜ 해결 방법 있을까요?
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
13강 강의 뒷부분의 과제 안내부분은 어디있나요?
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 13강 Redis 캐싱 시 발생하는 대표 문제 사례와 해결책3 2. 어려움을 겪는 부분어느 부분에서 막히셨나요?이력서에 써갈수 있는 이력 제시한다음에 다음강의에 실제 할수있는 과제가 있다고 써져있는데요. 왜 다음에 바로 강의 마무리가 되나요?? 뒷부분이 없어요
-
미해결김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복
슈퍼/서브 타입 joined 전략
db의 슈퍼/서브 타입으로 설계된 부분을 보면 joined 전략으로 했을 경우 어쩔 수 없이 식별 관계로 해야하는 경우가 있던데 이럴 경우 sigle table 전략으로 푸는 게 나은 것 같으세요? 아니면 어쩔 수 없이 식별 관계로 풀려고 하는 게 나은 것 같으신가요?
-
미해결비전공자도 이해할 수 있는 DB 설계 입문/실전
설문 후속강의 쿠폰 제공 이벤트에 대해서
받고서 새로 강의를 구매할 생각이였는데 지금도 진행되는건가요?만약 안되는거면 다음 강의 구매를 지금이라도 할 생각이라서
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점 의문
안녕하세요, 무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점을 설명한 부분에 질문이 있습니다. 페이지 방식을 무한 스크롤 방식에 적용 시 문제점으로 아래 2가지를 제시하셨는데요,1) 페이지가 추가된 경우, 데이터 중복 조회 문제2) 페이지가 삭제된 경우, 데이터 누락 문제 궁금한 점은, 이러한 문제는 무한 스크롤에서 사용했을 때 뿐 아니라, 페이지 번호 방식을 사용할 때도 마찬가지로 문제가 있는 것 아닌가 싶다는 것입니다.페이지 번호 방식 자체의 한계라고 생각하는데, 페이지 번호 방식에서는 발생하지 않는 문제인가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
15강. updateUser() 질문
@PutMapping("/user") public void updateUser(@RequestBody UserUpdateRequest request){ String readSql = "select * from user where id=?"; String sql = "update user set name=? where id=?"; jdbcTemplate.update(sql, request.getName(), request.getId()); }웹페이지에서 update를 발생시켜서 put 요청이 올라 왔을때 UserUpdateRequest dto에 id와 name이 들어 간다는건 웹에서 요청이 올라왔을때 json에 이미 해당 name에 대한 id 정보가 있다는 거죠?id는 db에서 자동적으로 생성해 준다고 했었는데, 이 id를 웹에서는 어떻게 알고 있나요?
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
이벤트 참가자 수 증가 후, save 메서드 호출 코드 질문
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 4-8강 2. 어려움을 겪는 부분어느 부분에서 막히셨나요?chapter4/_2_event_with_participant 폴더의 EventJoinService 객체의 메서드 코드에 대한 질문입니다.코드의 어떤 로직이 이해가 안 되시나요?@Transactional public void joinEvent(Long eventId, Long memberId) { Event event = eventRepository.findById(eventId) .orElseThrow(() -> new EntityNotFoundException("이벤트를 찾을 수 없습니다.")); Member member = memberRepository.findById(memberId) .orElseThrow(() -> new EntityNotFoundException("회원을 찾을 수 없습니다.")); // save()를 호출하지 않아도 Dirty Checking에 의해 Update 쿼리가 나가지 않나요? event.increaseParticipants(); eventRepository.save(event); EventParticipant participant = EventParticipant.builder() .event(event) .member(member) .build(); participantRepository.save(participant); } } 코드 블럭의 주석 란에 질문을 적어놓았습니다. 저 상황에서 save() 를 호출하는 이유가 궁금합니다.JPA 엔티티의 상태 변경분에 대한 쿼리는 트랜잭션 커밋 후, 자동으로 나가는 것으로 알고 있습니다. 혹시, 제가 잘못 알고 있는건지 궁금합니다.
-
미해결비전공자도 이해할 수 있는 DB 설계 입문/실전
FK 값 중복과 규칙 3 질의
안녕하세요, 강사님덕분에 많이 배웁니다.공부하면서 궁금한 내용이 있어 질문드립니다. FK 값 중복은 괜찮은거지? - 예시 규칙 1의 products(판매 상품) 가게 id(FK) 값규칙 3 내용 중, 서비스를 중심으로 동사(팔다)를 골라 엔티티간 관계를 설정할 때예시 2 내용입니다.가게(stores), 판매상품(products)- 하나의 가계는 여러 개의 상품을 판다(팔수있다)여기까지 이해를 했는데, 판매상품과 가게 관계에서 왜 '하나의 상품' 이라는 표현을 하는건가요? 여러개의 상품을 판다. 라고 벌써 정의 했으면서, 왜 하나의 상품이라고 하지? 여러개의 상품은 하나의 가게에 의해 팔린다. 라고 해야 하지 않나? 그래서 1:N 관계가 되는거 아니야? 그런 생각에 질의 드렸습니다.감사합니다ㅡ
-
미해결김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복
created_at 관련 구현과 DB ENUM에 대해
안녕하세요, 강사님. 이번 강의를 듣고 2가지 궁금증이 생겨 질문을 올리게 되었습니다.created_at과 updated_at 구현 DB 레벨에서 ON UPDATE와 DEFAULT CURRENT_TIMESTAMP를 활용할 수 있다고 말씀해 주셨는데요, JPA에서는 @CreatedDate와 @LastModifiedDate로 애플리케이션 단에서 이를 구현할 수도 있습니다. 실무에서는 각각을 언제 사용할까요? 그리고 권장하는 구현이 따로 있으실까요?DB ENUM 타입을 잘 사용하지 않는 이유실무에서 DB ENUM 데이터 타입 사용을 권장하지 않는다는 말씀으로 이해했습니다. 단순히 해당 ENUM 값의 범위가 변경되었을 때 이를 바꿔주는 것 이상으로 성능 이슈가 있어서라고 생각했습니다만, 정확히 알기가 어렵습니다. 자세한 설명을 부탁드려도 될까요? 감사합니다.
-
미해결김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복
M:N 관계의 연관 엔티티 설계 순서
이런 식으로 실무적으로 접근했을 때 이 강의에서 예시를 들어주셨던 것처럼 (학생, 과목, 수강), (사용자, 영화, 평가) 엔티티를 개념적 모델링 단계에서 먼저 설계를 할텐데, 이때 설계 순서가 궁금합니다. (학생, 과목), (사용자, 영화) 와 같은 기본 엔티티를 먼저 만든 다음에 M:N 다대다 관계인 것을 확인하고 이것을 풀어내면서 동시에 비즈니스적 의미를 넣기 위해 중심(연관) 엔티티를 만드는 게 일반적인가요? 아니면 처음부터 학생 -> 수강 -> 과목 or 사용자 -> 평가 -> 영화 로 이어지도록 설계하는 게 일반적인가요?
-
미해결김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복
데이터 역사성 훼손 문제
자연키를 기본키로 설정했을 때 발생할 수 있는 문제점에서 데이터의 역사성 훼손을 예로 들었는데 이 문제는 대리키를 기본키로 등록했어도 발생할 수 있는 문제 아닌가요?이 문제를 해결하기 위해서는 어쩔 수 없이 주문 테이블에도 email 등을 중복으로 저장해야 해결할 수 있는 거 아닌가요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
path 쿼리 관련 질문드립니다!
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요!20:15 경 작성해주신 findByPath 의 함수에서article_id 의 경우 함께 조회할 필요가 없나요?이전에 생성했던 unique index 구조를 생각해보면 article_id 와 path 2개로 복합 인덱스를 생성하였기 때문에 게시글마다 path 에 대한 unique 함을 보장하는 것이기 때문에 조회 시에 findByArticleIdAndPath 과 같은 식으로 해야 할 것 같은데, 제가 잘못 이해한 부분이 있는지 궁금합니다!