묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
비로그인 유저도 어뷰징 방지 정책
안녕하세요 강의 잘보고있어서 감사의 말씀 전하며 질문이 있어 글 남깁니다. 만약 비로그인도 어뷰징 방지 정책을 적용 한다했을때 실무에선 어떻게 처리하나요?IP나 쿠키, User-Agent 등을 활용한다고 하셨는데,IP 주소로 처리하기에는 공유망이나 VPN 같은 다양한 접근 방식도 있을 것 같고 User-Agent 나 브라우저쿠기같은경우는 브라우저에서 조작이 가능하기도하고 Pomsman 같은걸로 요청해서 User-Agent 값을 임의로 설정하는등과 같은 방법으로 집계될수도 있을것같은데 1. 그냥 일반적인 조회수만 집계만 하면되는 서비스에선 어떤식으로 처리하는지 궁금하고 만약 정말 빡세게 어뷰징을 처리한다고했을때 서버쪽에서 고유키값을 만들어서 로그인안한유저면 그 키값을 httponly 쿠키로 설정해서 고유키값이 있을때만 조회수가 집계되는 방법도 있을것 같은데 이런방식은 어떤지도 또 다른 괜찮은 방법이 있는지 궁금합니다.
-
미해결스프링 부트 - 핵심 원리와 활용
jar 추가에대한 질문드려도될까요?
안녕하세요공부를 하다보니 궁금해서 질문드립니다.일반 톰캣인 embed 의존성 추가 여부가 궁금해서 그러는데요기존의 스프링? 에서 톰캣으로 war나 jar형식으로 배포 하다가embed 의존성을 추가해서 배포로 변경하면차이가있을지 궁금합니다.이전에 다른분들께 설명을 해주셨는지 모르겠지만.강의를 듣다톰캣에서 돌아가는 코드를 내장 톰켓을 추가할경우마이그레이션을 많이 해야하는지단순히 embed 라이브러리 추가만하면 되는지궁금해서 질문드리게 되었습니다.또 Fat jar로 배포할경우 class로 변경이 된다고하셨는데 만약에 코드를 수정해야할경우서버에서실시간 그렇게되면 java파일로 변경해서수정은 불가능할까요?기존의 코드를 수정하지않는 선에서 class에서 변경된 jar파일 내에서만 수정이 가능하는지 궁금합니다.1번 jar가 8081일경우 2번 jar가 8082인경우같은 프로젝트가 아니라 별도의 프로젝트 일경우..라면 통신은 어떻게하는지 궁금합니다.
-
해결됨AI 다루는 백엔드 설계 기본 - SpringBoot SNS 편
강의를 어떻게 보면 좋을 까요?
일단 ai 에이전시를 써서 대충 틀을 만들고 살을 붙혀라라는 느낌으로 듣고 있습니다. 결과 값이 다 다르니 강의와 비슷하긴 하나 같은 느낌으로 구현을 못하는데. 전체적으로 강의를 한 번 쭉 완강하고 흐름을 익힌 이후에 구현을 해보라는 건가요? 아니면 주신 깃헙 링크 보고 따라 해보면 될까요?
-
미해결Spring AI 실전 가이드: RAG 챗봇 만들기
SPRING AI 실행을위한 환경설정이 궁금합니다.
환경설정좀 자세히좀 부탁드립니다.
-
해결됨The 10x AI-Native Developer: 회사에서 AI로 압도적 성과를 내는 법
AI 개발 도구 사용 시 보안 가이드 및 내부 기준에 대한 질문
안녕하세요.회사에서도 AI 도구(Claude Code)를 적극적으로 사용하고 계신 것 같았는데, 보안 관점에서 AI 도구 사용에 대한 내부 가이드나 기준이 있는지 궁금합니다.실제 딩코딩님 회사에서는개발자들이 AI 도구를 어떤 범위까지 사용하도록 허용하고 있는지,그리고 현업에서 보안적으로 특히 고려해야 할 부분은 무엇인지 알고 싶습니다. 예를 들어,실제 민감한 고객 데이터는 AI 도구에 질문하거나 제공하지 않도록 한다든지,또는 credential이 포함된 코드에서는 AI 도구 사용을 금지한다든지,내부 시스템 아키텍처나 인프라 구조는 AI에 제공하지 않도록 한다든지,혹은 회사 내부의 특정 핵심 로직은 민감해서 AI 사용을 제한한다든지요. 이처럼 AI 도구 사용과 관련해 내부적으로 정해진 기준이나 가이드라인이 있다면, 어떤 식으로 운영되고 있는지 공유해주실 수 있을지 궁금합니다.
-
해결됨Spring Boot, AWS로 백엔드 서비스 한 사이클 완성하기
배포 후 Entity 수정 관련
ddl을 validate로 하고 개발을 진행하다가 Entity가 추가되거나 수정될 경우에는 어떤 식으로 개발서버와 운영서버의 database table 싱크를 맞출 수 있나요 ?? 실무에서는 어떤 방식으로 마이그레이션을 진행하는지 궁금합니다!!
-
해결됨Spring Boot, AWS로 백엔드 서비스 한 사이클 완성하기
EC2 HTTPS에 관련하여 질문 드립니다!
해당 프로젝트에 도멘인을 연결해서 HTTPS 설정으로 변경해보고 싶어서 여쭤봅니다!!nginx로 할 수 있지만 실무 프로젝트에도 적용시켜보고 싶어서요! nginx 말고 실무에서는 어떤 방식으로 HTTPS 설정을 하는지 궁금합니다!!
-
미해결[4주 과정] 『부트캠프 백엔드 개발자 편 with 스프링 부트』 완독 챌린지
JDBC 학습이 필수적인가요?
우선, 제가 가려는 기업에서 원하는 것은 springboot(와 API 계약 이해), bootstrap, postman, WebSocket 사용 이해입니다.이번년도 9월까지 개인 프로젝트 2개(각 1달)와 팀프로젝트 1개(2달)를 할 생각인데,springboot 학습과 동시에 프로젝트를 진행하기 전에 jdbc를 학습하는 것이 필수적인지 궁금합니다. 제 글에 부족한 부분이 있어서, 이해하기 어려우시면 답변으로 더 필요한 정보를 말씀해주시면 감사하겠습니다.
-
해결됨AI 다루는 백엔드 설계 기본 - SpringBoot SNS 편
SKILLS.md나 agents 작성 문의
SKILLS.md 혹은 agents 작성은 반드시 영어로 작성해야 하는 것일까요? 영어로 작성하는 이유가 따로 있을까요?
-
해결됨실시간 채팅 서버 구축: 분산 처리부터 성능 최적화까지
RedisMessageBroker.kt setLocalMessageHandler 관련 문의
RedisMessageBroker 가 @Service 로 관리 되기 때문에 싱글톤으로 관리 되는걸로 알고 있는데, 아래처럼 핸들러를 할당하는 경우 여러곳에서 setLocalMessageHandler 호출 시 문제가 발생할거 같은데 맞는건지 궁금합니다. fun setLocalMessageHandler(handler: (Long, ChatMessage) -> Unit) { this.localMessageHandler = handler }
-
해결됨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를 통해서 생성된 컨테이너 안에 이미지들을 다운받아와서 실행되는 구조가 맞는걸까요 ??
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
BeanCreationException
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요 코드를 따라 치는 과정에서 아래와 같이 작성 했더니 BeanCreationException 이 발생하는 것을 확인 할 수 있었습니다.public void dbInit1(){ Member member = new Member(); member.setName("userA"); member.setAddress(new Address("서울", "1", "111")); em.persist(member); Book book = new Book(); book.setName("JPA1 BOOK"); book.setPrice(10000); book.setStockQuantity(100); em.persist(book); Book book2 = new Book(); book.setName("JPA2 BOOK"); book.setPrice(20000); book.setStockQuantity(100); // book2.setName("JPA2 BOOK"); // book2.setPrice(20000); // book2.setStockQuantity(100); em.persist(book2); OrderItem orderItem1 = OrderItem.createOrderItem(book, 10000, 1); OrderItem orderItem2 = OrderItem.createOrderItem(book2, 20000, 2); Delivery delivery = new Delivery(); delivery.setAddress(member.getAddress()); em.persist(delivery); Order order = Order.createOrder(member, delivery, orderItem1, orderItem2); em.persist(order); }이때 위의 코드에서 주석 처리된 부분처럼 고쳤더니 정상적으로 코드가 실행되는 것을 확인했습니다. 그런데 이게 어떤 문제에서 오류가 발생한건지 정확히 알 수 없어 질문드립니다.처음에는 book2의 값이 아무것도 없어서 null에 관한 엔터티 제약조건 관련해서 문제가 발생했나 생각해지만 notnull 같은 제약조건이 없었고 Book이 Item과 상속관계이고 싱글 테이블 전략을 사용해서 DTYPE 값이 book2 생성시 자동으로 생성 된다고 기억해서 특별히 값이 비었다고 생기는 오류가 아니라고 생각이 들었습니다. 결론적으로는 정확히 어떤 원인에서 발생한 문제인지 궁금해서 질문 남깁니다.
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
빈 1개 등록 시 다른 해결 방법
@Configuration public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { return http .authorizeHttpRequests(auth -> auth.anyRequest().authenticated()) .formLogin(Customizer.withDefaults()) .authenticationProvider(customAuthenticationProvider()) .authenticationProvider(new DaoAuthenticationProvider(inMemoryUserDetailsManager())) .build(); } @Bean public AuthenticationProvider customAuthenticationProvider() { return new CustomAuthenticationProvider(); } @Bean public UserDetailsService inMemoryUserDetailsManager() { UserDetails user = User.withUsername("user") .password("{noop}1111") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } } 메소드 인자로 AuthenticationManagerBuilder랑 Authenticationconfiguration을 주입 받아서 수동으로 parent Manager가 가진 Provider를 삭제하고 추가하는 작업을 하지 말고,그냥 안전하게, 대체되었던 DaoAuthenticationProvider를 authenticationProvider()로 다시 추가하면 안 되나요?
-
미해결제미니의 개발실무 - 커머스 백엔드 레거시와 AI 활용편
선생님
이전강의에 이어 이번강의도 또 듣게되네요선생님께서 늘 강의에서 느낀다 라는 표현을 많이 하시는데 이게 되게 중요한건가 보네요잘 듣겟습니다
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
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 은 동일한 결과를 반환하므로 테스트 결과에는 영향을 주지 않는 것 같습니다.)카운트 쿼리의 동작 부분을 제가 잘못 이해한 것인지 질문드립니다.
-
미해결스프링 부트 - 핵심 원리와 활용
build.gradle bom link 변경
[질문 내용]기존 링크 https://github.com/spring-projects/spring-boot/blob/main/spring-boot-project/spring-boot-dependencies/build.gradle변경된 링크https://github.com/spring-projects/spring-boot/blob/main/platform/spring-boot-dependencies/build.gradle다음 링크로 변경이 필요할 거 같습니다.
-
해결됨제미니의 개발실무 - 커머스 백엔드 기본편
어드민(Back-office)에서 예약 변경 시, '할인 조건 재검증(쿠폰 회수)' vs '기존 혜택 유지' 중 어떤 정책이 일반적인가요?
안녕하세요실무에서 '관리자(Admin) 예약 변경 기능' 정책을 두고 기획팀과 이견이 있어, 실무에서는 어떤 방식이 범용적인지 여쭙고 싶습니다.[시스템 상황]유저가 예약할 때 다양한 할인(이벤트, 타임세일, 쿠폰, 기업지원 등)이 적용되며, 이 정보는 예약 시점에 스냅샷(Snapshot)으로 저장됩니다.현재 어드민(상담원/운영팀)이 유저의 예약 시간/날짜를 변경하는 기능을 개발 중입니다.[이슈 사항]기획상으로는 어드민에서 시간을 변경할 때도 모든 할인 조건을 '실시간'으로 재검증하라고 합니다.문제는 재검증 과정에서 '쿠폰 박탈' 같은 상황이 발생한다는 점입니다.예시 상황:유저가 5만원짜리 예약에 5만원 이상 결제 시 사용 가능한 10% 쿠폰을 씀.어드민이 사정상(또는 유저 요청으로) 가격이 저렴한 타임이나 옵션으로 변경함 -> 결제액이 4만원이 됨.기획 요구사항: "최소 결제 금액(5만원) 조건을 불만족하게 되었으니, 자동으로 쿠폰 적용을 해제(원복)하고 금액을 재계산한다."[제(개발자) 의견 및 고민]저는 위 기획이 어드민 기능의 목적과 UX(고객 경험)에 맞지 않는다고 생각합니다.고객 경험 훼손: 유저는 단지 시간을 바꿨을 뿐인데, 시스템이 엄격하게 검증해서 "조건 미달이니 쿠폰 뺏어가겠습니다"라고 하면 컴플레인 요지가 다분합니다. (유저 입장에선 혜택 유지를 원하니까요.)데이터 복잡도: 이미 스냅샷으로 저장된 할인 정보를, 수정 시점에 다시 현재 기준의 마스터 데이터(쿠폰 유효기간, 최소금액 등)와 대조해서 '줬다 뺏는' 로직을 짜는 건 구현 복잡도 대비 실익이 너무 적습니다.관리자의 재량: 어드민에서의 변경은 보통 '강제성(Override)'을 띠는 경우가 많은데, 시스템이 칼같이 혜택을 잘라버리는 게 맞나 싶습니다.[질문]보통 예약 도메인에서 관리자(Admin)가 개입하여 예약을 변경할 때도, 이렇게 엄격하게 유저의 할인 자격(최소금액, 유효기간 등)을 재검증하여 박탈시키는 게 맞나요?아니면 어드민 권한 변경인 경우 "기존 스냅샷(혜택)을 최대한 유지"해주거나, 가격 변동이 불가피하면 "취소 후 재예약"을 하는 프로세스가 더 일반적인가요?개발자로서 이 복잡한 '조건부 쿠폰 회수' 로직을 방어하고 싶은데, 설득력 있는 논리가 필요합니다. 조언 부탁드립니다!
-
미해결옆집 개발자와 같이 진짜 이해하며 만들어보는 첫 Spring Boot 프로젝트
프로젝트생성이안되여..진도못나가는중..
머가문제인지도 모르겠어요....
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
섹션 19 질문드립니다
섹션 19 부분은 예전에 강의하셨을 때 쓰신 스프링부트 2점대 버전을 3점대 버전으로 업그레이드하는 강의인가요? 최신 강의 기준 업데이트 하신 3점대 버전으로 강의를 듣고 있는데 섹션 19에서 강의가 정확히 어떤 강의인지 궁금합니다. 만약 2점대 버전을 3점대 버전으로 업그레이드 하는 강의라면, 섹션 19에서 분산 트레이싱, swagger, kubernates 부분만 들어도 되는걸까요?