inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

후반부 MemberServiceIntegrationTest에서 회원가입 실행 시 수많은 오류들이 나와서 질문드립니다!

해결됨

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

패키지와 심볼 클래스를 찾을 수 없다고 나오는데 제가 라이브러리 다운로드를 잘못한건가 싶은데 정확하게 원인을 찾을 수 없어 질문 드립니다. 사진 첨부합니다!

  • spring-boot
  • spring
  • MVC
  • java
송지훈 댓글 2 좋아요 0 조회수 281

Bear(베어) 강의 자료

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요. 영한님 좋은 강의 제공해주셔서 감사합니다. 다름이 아니라, Bear(베어)에서 강의 자료를 보고 싶은데 pdf 파일은 볼 수 없는 거 같습니다. 혹시 베어에서 볼 수 있게 .md파일로도 강의자료 부탁드려도 되겠습니까? 감사합니다.

  • spring-boot
  • java
  • spring
  • 웹앱
  • JPA
댓글 1 좋아요 0 조회수 576

프로젝트 세팅 중 maven compile시 에러발생합니다

미해결

스프링과 JPA 기반 웹 애플리케이션 개발

프로젝트 실행하기 강의중에 maven compile시에 아래와 같은 에러가 발생합니다. 해결 방법이 있을까요? Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.8.0:npm (npm install) on project studyolle: Failed to run task

  • maven
  • plugin
  • thymeleaf
  • JPA
  • spring-boot
  • java
  • spring
오홓 댓글 3 좋아요 0 조회수 909

JPQL 관련 질문 드립니다!

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

14분 쯤에 SELECT m, t FROM MEMBER m LEFT JOIN TEAM t on m.username=t.name 은 SELECT m, t FROM MEMBER m LEFT JOIN TEAM t where m.username=t.name 과 다른 건가요?? 다르다면 어떤 차이가 있는지 궁금합니다!

  • JPA
  • java
김태형 댓글 2 좋아요 0 조회수 292

이동 동기화들을 보면서 생각한게 있는데요.

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

만약에 애니메이션 이나 따로 동기화 하는 부분이라면 애니메이션 동기화를 예를들면, 파라미터 데이터를 하나씩 보내는거 보다는 한 캐릭터에 모든 파라미터 데이터를 모았다가 한번에 서버로 보내는게 최고에 방법인가요?

  • network
  • C#
  • unity
따뜻한눈빛 댓글 1 좋아요 0 조회수 347

테이블 아이디 설계 및 hidden 태그 관련 질문 드립니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

항상 명강의 감사합니다. 강의를 들을때마다, 강사님에 노고가 느껴지니, 매번 소름이 돋네요. ㅎㅎ 오늘도 강의 잘 듣고 있습니다. 2가지 질문을 드립니다. 1. 테이블 아이디 설계 저는 회원 테이블을 설계할때, 기본키를 '아이디' 로 설정했었습니다. 아이디가 유니크 하기 때문에 기본키로 잡았었는데, 강의에서는 엔티티에서 기본키를 따로 잡으시고(기본키는 자동으로 값을 셋팅) 진행을 하시던데 실무에서도 회원 테이블을 설계하신다면 '회원 아이디' 와는 별개로 기본키 필드를 설계하고 @GereratedValue 로 자동으로 값을 할당하도록 진행하시나요.? 2. hidden 태그(다소 부족한 질문일수도 있습니다.) 강의 내 코드를 보면, 회원에 대한 아이디를 hidden 태그에 노출하는데, 이게 보안상에 문제가 될 여지는 없을 까요.? 물론 서버단에서 회원에 권한을 체크한다면 문제가 되지 않는다고는 생각하지만, 노출된다는게 꺼림칙해서요.....(단순히 제생각입니다.) 아니면 hidden 태그를 사용하지 않고, 구현하는 방법이 따로 있을까요.?

  • JPA
  • 웹앱
  • spring
  • java
  • spring-boot
햇병아리 댓글 1 좋아요 0 조회수 233

엔티티에서 @GeneratedValue에 관한 질문입니다!

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요 항상 좋은 강의에 항상 감사하고 있습니다! 다름이 아니라 JPA를 통해서 디비를 생성하지 않고 이미 따로 MySQL로 만든 디비를 객체에 매핑만 하여 사용하려고 하는데요! 1. 보통 이렇게 하는게 일반적인가요? 2. 이미 pk로 순서대로 1, 2, 3 ... 을 맥인 상황에서 엔티티와 매핑하고 그 다음 jpa 를 통해 insert를 하게 되면 가장 마지막 id값을 읽고 그다음 자동으로 이어서 +1 을 하게 되주나요? 질문이 너무 두서가 없네요 ㅠㅠ 예를 들어 이미 기존 member라는 테이블에 (pk로 id 컬럼) 1 memberA 20 서울 2 memberB 19 울산 이런 상황에 엔티티로 매핑하고 증가시키면 자동으로 id는 3부터 이어서 시작이 되는걸까요?

  • java
  • spring
  • spring-boot
  • 웹앱
  • JPA
이상진 댓글 3 좋아요 0 조회수 297

운영 db 와 테스트 db

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

운영중인 db 가 중요하기 때문에, 로컬에서 테스트 db 를 h2 로 설정해서 엔터티 정의후 테이블 생성하고, 생성한 테스트 db 에 대해 dao 를 작성하고, 엔터티 코드 및 dao 코드의 올바른 작성 확인 후 운영 반영을 하고 싶습니다. 실제 h2 를 테스트 db 로 해서 상기방식으로 개발하시나요? 개발서버 환경이어도 임의로 테이블은 만드는건 안되기 때문에 로컬 개발환경에서 개발하는 방식에 대해 궁금해서 여쭤봅니다.

  • java
  • JPA
보나마나 댓글 1 좋아요 0 조회수 419

캐시가 삭제되는 시점

미해결

모든 개발자를 위한 HTTP 웹 기본 지식

아래 기존 질문에 대한 답글을 읽었습니다. 304를 위해서 바로 삭제하지는 않습니다. -> 캐시가 계속 쌓일 수는 없으니까 어느순간 삭제는 되어야 할 것이라는 생각이 듭니다. 삭제되는 시점이나 기준?! 이 언제가 되는 건가요??

  • network
knae11 댓글 2 좋아요 4 조회수 768

값 타입을 DTO에 넣는 방법?

해결됨

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

안녕하세요 강사님! 강의 잘 듣고 있습니다. MemberDTO에 Address를 넣어주려고하는데, MemberDTO에 값 타입인 Address를 넣어주는 것보다 city, street, zipcode를 각각 따로 넣어주는게 나을까요? ( 코드로 작성해놓았습니다.) #1 코드 #2 코드 그리고 값 타입인 Address를 DTO에 명시하게 되면, 이것도 결국 엔티티를 직접 외부에 노출하는 것일까요?

  • java
  • JPA
  • spring
  • spring-boot
김성일 댓글 2 좋아요 4 조회수 950

GET, POST 메서드 외 비활성화 관련

미해결

모든 개발자를 위한 HTTP 웹 기본 지식

실제 실무에서 URI 설계를 강의 내용과 같이 설계하고 진행한 경우가 있었으나, PR 서버 환경에서 PUT, DLETE, PATCH 메서드가 비활성화 되어 이슈가 있었던 적이 있습니다. 관련하여 사유를 확인해보니 보안과 관련한 사항으로 GET과 POST만을 허용하기 위함이라고 응답받았는데 이와 관련해서는 어떻게 생각하시나요?? 실제로 PUT, DELETE, PATCH가 보안에 위협이 되는 메서드인지도 잘 모르겠습니다.

  • network
zk sson 댓글 1 좋아요 0 조회수 254

안녕하세요

미해결

스프링 시큐리티

혹시 최종 완성본 말고 이 강의까지 완성된 건 없는건가요??? 어떤 클래스가 새로 생긴거고 어떤 클래스를 고쳐야 할지 완성본을 갖고 판단 할 수 가없습니다. 따라 치면서 공부 하고싶은데 도저히 다음 강의를 진행 할 수 가 없습니다..

  • java
  • Spring Security
  • spring-boot
qkrwnstns52 댓글 2 좋아요 2 조회수 730

회원 조회 로직의 응답 형식에 대해 질문이 있습니다.

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

아래처럼 회원 조회 로직이 있을때 멤버 엔티티 정보를 스트림화 한뒤 멤버 디티오 형식으로 다시 설정하고 그걸 리스트화하는것까지는 의미상으로 이해가 가는데여 응답 클래스 Result < T > 객체를 만들어서 응답하는 이유가 무엇인가여? @GetMapping ( "/api/v2/members" ) public Result memberV2 () { List < Member > findMembers = memberService .findMembers(); List < MemberDto > collect = findMembers .stream() .map(m-> new MemberDto(m.getName())) .collect( Collectors . toList ()); return new Result( collect ); } @Data @AllArgsConstructor static class Result < T > { private T data ; } @Data @AllArgsConstructor static class MemberDto { private String name ; }

  • java
  • JPA
  • spring-boot
  • spring
terecal 댓글 1 좋아요 0 조회수 231

ValidateDuplicateMember 메소드와 트랜젝션 관련해서 질문입니다.

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

@Transactional 애노테이션을 붙인 메서드는 오버라이딩 할 수 있어야 하기때문에 ValidateDuplicateMember 메서드를 private 접근지정자를 설정하면 명시적으로 @Transactional 애노테이션을 해당 메서드에 붙일 수가 없는데, 강사님께서 하신것처럼 클래스 레벨로 @Transactional(readOnly = true) 애노테이션을 붙이면 ValidateDuplicateMember 메서드는 트랜젝션이 적용이 안되는지 궁금합니다. 만약 적용이 안된다면 접근 지정자를 protected 로 변경해서 사용해도 되는지 궁금합니다. ----------------------- 전체 소스코드 입니다. ------------------------------- @Service @Transactional public class MemberService { @Autowired private MemberRepository memberRepository ; /** * 회원가입 * @param member member entity * @return memberId */ public Long join(Member member) { ValidateDuplicateMember(member); memberRepository .save(member); /* * member를 영속화 할때 key를 member의 id로 설정 (generateValue) * member 객체의 id 필드에는 값이 채워져있는 것을 보장할 수 있음 */ return member.getId(); } @Transactional (readOnly = true ) protected void ValidateDuplicateMember(Member member) { List<Member> findMembers = memberRepository .findByName(member.getName()); if (!findMembers.isEmpty()) { throw new IllegalStateException( "이미 존재하는 회원입니다." ); } } /** * 회원 전체 조회 * @return memberList */ @Transactional (readOnly = true ) // 성능 최적화 public List<Member> findMembers() { return memberRepository .findAll(); } /** * 회원 단건 조회 * @param memberId memberId * @return findMember */ @Transactional (readOnly = true ) public Member findOne(Long memberId) { return memberRepository .findOne(memberId); } }

  • java
  • spring
  • 웹앱
  • JPA
  • spring-boot
준돌 댓글 3 좋아요 2 조회수 697

멀티쓰레드와 관련해서 질문이 있습니다.

해결됨

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

멀티쓰레드를 학습하게 되면서 나름대로 정리를 해보았는데요. 멀티쓰레드 환경에서는 쓰레드가 공유하는 자원에 대한 일관성이 보장되어야 한다. 즉, 특정 쓰레드에서 공유 자원의 데이터를 변경하면 다른 쓰레드에서도 똑같이 변경된 데이터를 다뤄야한다. 이러한 문제를 해결하기 위해 쓰레드가 공유 자원에 접근하기 전 Lock을 걸고 들어가서 다른 쓰레드가 해당 자원에 접근하지 못하도록 막고, UnLock을 통해서 다른 쓰레드가 접근할 수 있게 해준다. 이 때 접근한 쓰레드는 변경된 공유 자원 데이터를 사용하게 된다. 이렇게 이해한게 맞는건가요 ? 원자성이라는 개념을 이해하기를 하나의 작업을 처리할 때 수행되는 모든 과정들을 일련의 한 묶음으로 보고 이것은 마치 더이상 나누어지지 않는 것처럼 모두 수행되거나 모두 수행되지 않아야 한다. 그런데 Lock을 통해서 원자성을 구현한다고 이해하고 있는데 이게 맞는건지 궁금합니다... 왜냐하면 Lock을 통해서 공유자원에 다른 쓰레드가 접근을 못하게 막는것은 맞지만 Unlock을 할 때까지 여러가지 작업을 할 수 있는데 그것은 원자성을 보장하지 않는 거 같다고 생각해서입니다.

  • network
  • unity
  • C#
y_y 댓글 1 좋아요 0 조회수 299

코어와 프로세스, 쓰레드간의 관계에 대해서 궁금합니다

해결됨

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

그림판 비유를 보면 컴퓨터에서 동시에 사용하는 프로그램마다 최소한 하나의 프로세스와 쓰레드를 가지고 있는데 컨텍스트 스위칭이 일어난다고 하면 코어 하나만 갈구는거 아닌가요? 그리고 아직 쓰레드를 직접 사용해본적이 없어서 잘 모르겠지만 메모리의 동기화를 보장하기 위하여 멀티스레드 프로그래밍에서 lock를 적극적으로 사용하는데 이러면 어느부분에서 성능향상이 일어나나요? lock을 사용하면 사용할수록 싱글코어와 다를것이 없다고 생각되서요 Web에서 종종 다루는 비동기적 처리를 하기 위해서 스레드를 사용하는건가요?

  • network
  • C#
  • unity
Heca 댓글 3 좋아요 1 조회수 639

동적쿼리 BooleanBuilder 질문

미해결

실전! Querydsl

안녕하세요 강사님, 강의 잘 보고 있습니다. 해당 강의 다른영상에서의 질문에서 BooleanBuilder와 자바 8을 이용해서 체이닝이 가능한 코드를 봣었습니다. 영상강의처럼 BooleanExpression을 사용한 ageBetween은 null이 반환될 수 있어서 테스트시 age를 안 넣으면 NPE가 뜨더라구요. 그래서 아래처럼 BooleanBuilder 사용한 코드로 바꾸면 null에 무조건 안전하게 되는게 맞는건가요? public List<MemberTeamDto> search (MemberSearchCondition condition) { return queryFactory .select( new QMemberTeamDto( member . id .as( "memberId" ) , member . username , member . age , team . id .as( "teamId" ) , team . name .as( "teamName" ))) .from( member ) .leftJoin( member . team , team ) .where( usernameEq(condition.getUsername()) , teamNameEq(condition.getTeamName()) , ageBetween(condition.getAgeLoe() , condition.getAgeGoe())) .fetch() ; } private BooleanBuilder usernameEq (String username) { return nullSafeBuilder(() -> member . username .eq( username )) ; } private BooleanBuilder teamNameEq (String teamName) { return nullSafeBuilder(() -> team . name .eq( teamName )) ; } private BooleanBuilder ageGoe (Integer ageGoe) { return nullSafeBuilder(() -> member . age .goe( ageGoe )) ; } private BooleanBuilder ageLoe (Integer ageLoe) { return nullSafeBuilder(() -> member . age .loe( ageLoe )) ; } private BooleanBuilder nullSafeBuilder (Supplier<BooleanExpression> f) { try { return new BooleanBuilder(f.get()) ; } catch (Exception e) { return new BooleanBuilder() ; } } private BooleanBuilder ageBetween (Integer ageLoe , Integer ageGoe) { return ageLoe(ageLoe).and(ageGoe(ageGoe)) ; } 익셉션마다 BooleanBuilder 객체를 새로 만드는데, 객체를 생성할 때 드는 비용은 null을 위해서는 크게 상관이 없는거죠? 그리고, ageBetween 부분에서 강의는 파라미터를 int 타입으로 받는데, 테스트시 NPE가 나와서 Integer로 바꾸니 되더라구요. 이유가 원래 Integer타입을 int로 자동 언박싱하는 중에 null을 int에 넣지 못해서 NPE가 뜨는건가요?

  • java
  • JPA
우럭아왜우럭 댓글 2 좋아요 0 조회수 595

Dto 사용시기에 대한 질문

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

안녕하세요. 항상 강의 잘 듣고있습니다 ! 질문이 두가지 있습니다. 첫째, "어느 레이어에서 DTO로 반환하는가?" 입니다. 현재 강의에서는 controller 에서 repository 를 바로 di 해서 사용하고 있으므로 서비스 레이어가 존재하지않는 것 같습니다. 하지만 만약 서비스레이어가 존재한다면, 지금 컨트롤러에서 작업되고있는 dto 변환 로직이 서비스에 들어가는것인가요. 아니면 서비스까지는 entity 를 유지한채 controller 에서 dto 로 변환되는 로직이 들어가는걸까요? (물론 정답이 없는 아키텍쳐링에 대한 질문입니다만, 대체적으로 어떻게 사용하고있는지 그리고 영한님의 노하우에 대해 궁금합니다. 구글링과 여러 블로그들을 보면 보통 controller 가 아닌 service 에서 dto 를 변환하는것이 낫다고 하여 혼란이옵니다.) 둘째, "Create, Update같은 것에선 언제 DTO로 반환하는가?" 입니다. 흔히 서비스쪽에서 dto 를 변환한다고 하니, 이것을 가정하고 아래와같은 코드를 작성해봤습니다. [#1] Entity class XXEntity { String id, Sting name } class YYEntity { String id, Sting title, XXEntity xx } [#2] Repository SampleRepository 는 JPA 레포지토리 XXRepository, YYRepository [#3] Service XXService 는 XXRepository를 DI 해서 비지니스로직을 돌려 나온 Entity를 Dto를 반환한다. YYService 는 YYRepository를 DI 해서 비지니스로직을 돌려 나온 Entity를 Dto를 반환한다. [#4] Controller SampleController 의 createXY DI : XXService DI : YYService xId 를 이용하여 XXService에서 찾은 A를 YYService의 create 에 넣어 YY를 만들어 리턴한다. XXDto found = XXService.findById(id) XX foundToEntity = XXDto.toEntity() // <-- 서비스레이어에서 dto 를 반환할때, 이부분이 너무 불편합니다. YYDto saved = YYService.create(new YYY("a", "b", foundToEntity)) return saved 보통 ****** 에 XX의 entitiy가 들어가는데 만약 서비스로직에서 dto 로 변환해서 내려주고있다면, 현재 XX에서는 dto를 받고있으니 이걸 다시 entitiy방식으로 변환시켜서 넣어주어야 하는데, 이것이 매우 불편하고 왠지 이런 방식으로 하는게 아닌것같아서요. 이때도 마찬가지로 service쪽까지는 entity로 유지하다가, controller 에서 변환을 시켜야되는것인지 궁금합니다. <추가> 저는 지금 혼란이 오는 것이 DTO 란 무엇인가 입니다. "외부에 entity를 노출시키면안되기 때문에 dto 로 변환해야한다" 라는 것도 있지만, 레이어간 데이터 이동을 위해서 만들어진것이 dto이기도 하니 어떤측면에서 바라보며 사용해야할지 혼란이 옵니다. 도움을 부탁드립니다 !!

  • spring
  • JPA
  • java
  • spring-boot
Jon 댓글 2 좋아요 28 조회수 8837

안녕하세요 트랜잭션 처리에 관해 질문드립니다.

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요, 팀장님! 트랜잭션을 엔티티 매니저를 직접 다루는 리포지토리에서 하는 것이랑 서비스 계층에서 하는 것이랑 어떤 차이가 있나요?@Transactional을 서비스 계층이 아니라 리포지토리에서도 걸 수 있는데 서비스 계층에서 거는 이유가 궁금합니다. 그리고 MVC 강의 출시는 언제쯤 예상하시나요?ㅎㅎ 감사합니다.

  • java
  • 웹앱
  • spring-boot
  • JPA
  • spring
댓글 1 좋아요 3 조회수 237

IDENTITY 전략 질문있습니다.

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

IDENTITY 전략을 사용하는 경우에는 PK값을 확인하려면 디비에 직접 들어가서 확인을 한다고 하셨고, JPA를 이용해 영속성 컨텍스트에서 관리할 때, persist를 호출하는 시점에 실제 쿼리를 날려준다는 것까지는 이해를 했습니다. Q1. 이때 플러시 과정이 일어나는지 궁금합니다. Q2. persist를 호출해서 쿼리를 날린 이후에 영속성 컨텍스트에서 관리하는 것처럼 쿼리들을 모아놓는 저장소에 저장이 되었다가 rollback을 하거나 commit이 되는 시점에서 이전에 persist로 인해서 생긴 변화는 더티 체크가 되는지, 된다면 어떻게 되는지 궁금합니다.

  • java
  • JPA
신홍철 댓글 5 좋아요 0 조회수 708

인기 태그

인프런 TOP Writers

주간 인기글