리소스 식별 URI 설계 시, 단수 복수
미해결
모든 개발자를 위한 HTTP 웹 기본 지식
PPT 내용에 보면 회원 목록을 조회할 때는 복수로 조회하는 게 맞지만, 단일 회원 조회, 등록, 수정 삭제는 단수를 써주는게 덜 헷갈리지 않을까요? 다 복수로 쓰는 이유가 있나요?
- network
172만명의 커뮤니티!! 함께 토론해봐요.
미해결
모든 개발자를 위한 HTTP 웹 기본 지식
PPT 내용에 보면 회원 목록을 조회할 때는 복수로 조회하는 게 맞지만, 단일 회원 조회, 등록, 수정 삭제는 단수를 써주는게 덜 헷갈리지 않을까요? 다 복수로 쓰는 이유가 있나요?
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
안녕하세요 강사님, 수강 중 궁금증이 생겨 질문을 남깁니다. 지금까지 설명해주신 연관관계 주인이 왜 존재해야 하는지, 또 어떤 식으로 주인을 설정해야 하는지는 모두 이해했습니다. 설명하신 내용 중에 아래와 같은 내용이 있었는데요. "연관관계 주인이 아닌 관계로는 읽기 기능만 사용이 가능하다. 그 외의 모든 관리는 관계의 주인이 처리한다." 이와 관련하여 팀에 새로운 멤버를 추가하고 싶을 때 team.getMembers().add(member)를 하면 DB에 반영되지 않고, member.setTeam(team)을 해야만 제대로 반영되는 부분까지 이해했습니다. 그런데, member.setTeam(team)으로 멤버가 팀을 가지도록 하고, 트랜잭션 커밋까지 완료해 해당 내용이 DB에 정상적으로 반영이 되었다면.. 그 이후에 따로 team.getMembers().add(member)를 하지 않아도 Team이 가지고있는 List<Member> members에서 방금 추가한 member를 조회할 수 있어야 하는 것이 맞지 않나요? 이를 확인하기 위해 아래와 같은 코드로 실습을 진행하였습니다. try { Team team = new Team() ; team.setName( "TeamA" ) ; em.persist(team) ; Member member = new Member() ; member.setName( "MemberA" ) ; member.setTeam(team) ; em.persist(member) ; tx.commit() ; Team findTeam = em.find(Team. class, member.getTeam().getId()) ; List<Member> members = findTeam.getMembers() ; for (Member m : members) { System. out .println( "Name : " + m.getName()) ; } } catch (Exception e) { tx.rollback() ; } finally { em.close() ; } team을 생성하고 member를 생성하여 member에 team을 할당해줬습니다. em.persist를 통해 해당 객체들을 영속상태로 만들었고 tx.commit으로 flush처리까지 해주었습니다. 하지만 Name : MemberA는 출력되지 않습니다. 물론 DB에는 정상적으로 저장되었더라도 메모리에는 저장되지 않았기 때문에 조회가 안 된다고 말씀하시기는 했지만.. 이 코드의 경우에는 Team과 Member가 정상적으로 DB에 적용된 후에 em.find()를 통해 새롭게 받아온 Team으로 조회한 것인데.. 왜 제대로 조회되지 않는 것인지 모르겠습니다. ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 추가 질문 하나만 더 드리겠습니다. 관계의 주인이 아닌 List<Member> members는 읽기 전용으로만 사용하기 때문에 members.add(member)를 아무리 해도 DB에 영향을 끼치지는 않겠지만.. 쓰기 권한이 없는 녀석에게 쓰기 메서드가(list.add()) 존재하는 것 자체만으로 어떠한 문제가 야기될 수도 있지는 않을지 궁금합니다. 이 부분에 대해서도 함께 답변해주시면 감사하겠습니다.
미해결
모든 개발자를 위한 HTTP 웹 기본 지식
최근에 결제관련 개발을 하던중에, 클라이언트사의 강력한 요청으로 POST 요청에 대해서 멱등성(Idempotency)을 보장해준 경우가 있었는데요. 클라이언트사의 특수한?(실제 사유는 설명해주지 않음) 환경으로 인해, 동일한 요청이 중복해서 발생할 수 있기 때문에, 요청 Body내용이 완전히 동일한 경우에는 두번이든 천번이든 동일하게 응답 해달라는 요구가 있었습니다. 물론 POST 요청으로 인해서 일어나는 비즈니스 로직은 수행하지 않고 동일 응답만 달라는 요구사항이었는데요. 이런 경우엔 POST에도 멱등성이 적용된 것으로 봐야할까요?
미해결
실전! 스프링 데이터 JPA
안녕하세요? 강사님. 항상 강의 잘듣고 있습니다. 다름이 아니라, 이전에 알려주신 내용에서 밑에 처럼 dto로 조회 할때는 new 오퍼레이션을 사용하셨는데, @Query ( "select new study.datajpa.repository.MemberDto(m.id, m.username, t.name) " + "from Member m join m.team t" ) List<MemberDto> findMemberDto () ; 왜 밑(네이티브 쿼리)에서는 dto 를 조회 할때 new 오퍼레이션을 사용을 안하셨나요..? @Query (value = "SELECT m.member_id as id, m.username, t.name as teamName " + "FROM member m left join team t" , countQuery = "SELECT count(*) from member" , nativeQuery = true ) Page<MemberProjection> findByNativeProjection (Pageable pageable) ; 항상 좋은 강의와 답변 감사드립니다!!^^
해결됨
자바 ORM 표준 JPA 프로그래밍 - 기본편
선생님 준영속상태의 초기화를 하실때(37분 20초에서 ) Member refMember = em.getReference(Member.class, member1.getId()); 를 해주셨는데 getReference도 find와 같이 문장이 실행되는 순간 영속성컨텍스트에프록시 객체를 올린다음에 초기화시 컨텍스트에서 엔티티를 뒤지고 없으면 db로 가서 끌고온다음에 또 영속성컨텍스트에 올려서 확인을 하는게 맞는지요? 이게맞다면 member1은 em.flush와 em.clear를 통해 영속성컨텍스트에는 존재하지 않으며 db에는 올라가있고 -> getReference코드를 실행시켜서 일단 초기화되지 않는 프록시 객체를 만들었고요 -> detach를 통해서 refmember를 준영속 상태를 만들어주었습니다. 영속성컨텍스트에는 제가 생각할땐 아무것도 없는 상태인데 detach가 왜가능한건가요? 프록시객체가 초기화되어서 엔티티를 만들어낸 것도 아니고 초기화되기전 프록시객체 자체도 영속성컨텍스트에 올라가있는건가요? em.persist(refMember)을 써준것도아니고 ... 프록시객체도 엔티티라고 치고 올린다음에 그안에 참조값을 실제 엔티티생성과 동시에 채워주는건가요? 그리고 두번째로 refmember 자체가 초기화되기전에 만약 team테이블과 연관이 있으면 refmember을 초기화하는순간 member와 team까지 다불러오는건가요? 이건 fetch 속성과 관련이 없는건가요? 이쯤오니 너무 헷갈립니다ㅜㅜ 제 질문을 이해하셨을지 모르겠습니다... 지저분한글 읽어주셔서 감사합니다 선생님 항상 감사합니다.
해결됨
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요 . 일부 field 에 대한 update를 할때, 기존 entity의 모든 field를 꼭 불러와서 update를 해야하나요? 감사합니다 !!
미해결
모든 개발자를 위한 HTTP 웹 기본 지식
안녕하세요 강사님 질문있습니다! URL 문법 장표에서 www.google.com은 호스트명이라고 하였는데 이는 도메인명하고 같다고 보면 되나요? 호스트명하고 도메인명은 엄밀하게 다르면서 같은 느낌인건가요? 구글링을 해봐도 헷갈려서 질문합니다! 감사합니다 :)
해결됨
모든 개발자를 위한 HTTP 웹 기본 지식
항상 양질의 강의 감사드립니다. patch를 사용해 부분적으로 수정을 하는 로직을 수행할 경우에 상태코드로 200, 201중 어느 것이 더 적절할지 궁금증이 생겨 질문을 남깁니다! 감사합니다.
해결됨
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원 리포지토리 코드를 복사했는데 import org.springframework.jdbc.datasource.DataSourtceUtis ; 가 안됩니다. 어떻게 해결해야 하나요? 위의 사진처럼 오류가 생깁니다!!
해결됨
모든 개발자를 위한 HTTP 웹 기본 지식
안녕하세요 좋은 강의 너무 잘 듣고 있습니다. 저는 실무에서 be 개발을 맡게된 초보 개발자입니다. api 설계를 하다보면 어려울때가 많더라구요 예를 들면 PATCH(PUT)로 넘길때 키 값을 PathVariable /aaa/{key} 형식으로 넘기게 할것인지 아님 body에 넣게 할것 인지 또는, GET으로 가져올때 PathVariable /aaa/{key} 형식으로 넘기게 할것인지 requestParam으로 넘기게 할것인지 등등 항상 명확한 기준이 없어 이게 맞나? 하는 의구심이 듭니다. 네이밍도 너무 어려워서 항상 고민이구요... rest api로 검색해서 블로그를 찾아봐도 상투적이고 일반적인 내용 뿐이라 실제 업무에 다 커버하기 힘들더라구요 혹시 관련해서 공부를 좀 하고 싶은데 추천할만한 사이트나 책이 있을까요?? 실제 현업에선 어떤 기준으로 개발하고 계신가요?
미해결
실전! Querydsl
안녕하세요. 강사님 QueryDSL 재미있게 배웠습니다. 정렬기준을 아래와 같이 받았을 때 pageable 파라미터를 이용해서 QueryDSL에 적용하는 방법에 대해서 고민입니다. 정렬기준 입력 형태: URI?sort=field1,asc&sort=field2,desc org.springframework. data .domain.Sort 방법1. pageable 값을 얻어와 직접 queryDSL에 OrderSpecifier로 지정 if (pageable != null) { query.offset(pageable.getOffset()); query.limit(pageable.getPageSize()); for (Sort.Order o : pageable.getSort()) { PathBuilder<Object> orderByExpression = new PathBuilder<Object>(Object.class, "object"); query.orderBy(new OrderSpecifier(o.isAscending() ? com.mysema.query.types.Order.ASC : com.mysema.query.types.Order.DESC, orderByExpression.get(o.getProperty()))); } } 방법2. applyPagination() 함수로 매핑 getQuerydsl().applyPagination(pageable, jPQLQuery); 결과적으로 방법2가 더 깔끔해 보이는데 원본 엔티티와 DTO객체가 달라서 org.hibernate.hql.internal.ast.QuerySyntaxException이 발생하는 이슈가 있습니다. 현재까지 결론은 방법1을 사용해야할 것으로 보이는데 더 좋은 방법을 아시는지 문의드립니다. 감사합니다.
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
PDF 파일에서 IntelliJ Gradle 대신에 자바 직접 실행 항목에 적힌 설명처럼 IntelliJ IDEA 변경하고 프로그램 실행시에 /src/main 하위에 generated 폴더가 자동으로 생기는데 왜 생기는건가요?? 안 생기게 못하나요?? 환경 스프링 부트 2.4.2 인텔리제이 얼티메이트 2020.3.1
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
해당 방법은 디버그시 알아서 배치 파일을 열어준다는 의미인가요? 그렇다면 어떻게 할 수 있을까요?
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
using System; using System.Threading; using System.Threading.Tasks; namespace ServerCore { class Program { static volatile int x = 0; static volatile int y = 0; static volatile int r1 = 0; static volatile int r2 = 0; static void Thread_1() { y = 1; //store y r1 = x; //load x } static void Thread_2() { x = 1; // store x r2 = y; //load y } static void Main(string[] args) { int count = 0; while(true) { count++; x = y = r1 = r2 = 0; Task t1 = new Task(Thread_1); Task t2 = new Task(Thread_2); t1.Start(); t2.Start(); Task.WaitAll(t1, t2); if (r1 == 0 && r2 == 0) break; } Console.WriteLine($"{count}번 만에 빠져나옴"); } } } 메모리 배리어 강의에서는 위 코드의 루프를 거의 100번 이하로 빠져나오는데 제가 했을때는 적으면 8000번 많으면 10만까지 루프를 돌더라구요. 어떤 차이점 때문에 이렇게 루프 반복 횟수가 차이나는 걸까요?
미해결
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
안녕하세요? 아직까지는 예제에서 데이터를 직접 리턴해주는 방식으로 하고있는데요, 여기서 로이 필딩이 말하는 Restful의 조건을 만족하려면 Self-Descriptive Messages와 HATEOAS를 만족해야 한다고 하는데 이 조건을들 만족하려면 결국 HttpEntity를 사용하여야 하는걸까요? RestTemplate로 작성된 코드를 보고 영한님의 HTTP 강의도 듣고나니 머릿속에서 퍼즐이 맞춰지는 느낌은 드는데 이게 맞는거다 라는 확신은 없어서 제가 제대로 이해하면서 진행하고 있는건지 궁금하여 질문드립니다. 그리고 강의 만족도가 매우 높습니다 ^^ 항상 감사하게 수강하고있습니다. 이대로 QueryDSL까지 열심히 달려서 실무에서 빨리 적용해보고 싶네요 ㅎㅎㅎ
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
안녕하세요 선생님 값 타입 컬렉션 대안으로 값 타입 컬렉션을 엔티티로 만드셔서 사용하셨는데, 엔티티로 승격했을 때의 이점이 무엇인가요? 엔티티로 승격하면 JpaMain에서 값 타입을 수정할 때 findMember.getAddressesHistory().remove( new AddressEntity( "old1" , "street1" , "10000" )) ; findMember.getAddressesHistory().add( new AddressEntity( "newCity1" , "street1" , "10000" )) ; 이렇게 수정하지 않으려고 엔티티를 사용하는 것인가요? (실제로 위의 코드가 동작하는지 확인해봤는데 동작하지 않습니다) 정리하면, 값 타입을 엔티티로 승격했을때의 이점과 수정방법이 궁금합니다!
미해결
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
안녕하세요? JPA에서 시간에 대해 매핑할때 제타위키에서는 Timestamp를 쓰라고 되어있는데 저는 자바8부터는 LocalDateTime을 사용하는걸 권장한다고 배웠거든요. 실제로 직접 매핑해보니 둘다 되긴되던데 영한님은 어떤 타입을 주로 추천하시는지 궁금합니다 !
해결됨
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
7분 즘에 MemberRepository 클래스르 만들고 @PersistenceContext 어노테이션을 private EntityManager em; 에 붙였는데 원래 정석대로라면 팩토리를 만들고 그걸로 엔티티매니저를 반환받는거였는데 이 어노테이션으로 그 과정을 스킵한다고 봐도 되나요? 팩토리 만들 때 마다 비용이 많이 소모된다고 알고있는데 이 어노테이션도 똑같이 팩토리를 한번만 만들고 그 팩토리로 엔티티매니저를 반환하나요? 그렇다면 이 과정을 알고 있다는 전제 하에 그냥 간단하게 @Autowired 같은 거라고 보면 될까요 ㅎㅎ...
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
아무리 devtools 를 적용시켜봐도 리컴파일을 하고 새로고침을 해도 페이지 변하지 않길래 구글님에게 수소문 해본 결과 https://lejewk.github.io/springboot-devtool/ 이거대로 해보니 되네요. 혹시나 devtools 동작 안하시는 분들 참고하시라고 공유차원에서 올려봤습니다~
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
private void close (Connection conn) throws SQLException{ DataSourceUtils.releaseConnection(conn , dataSource ) ; } 2.4.2 버전을 사용하고 있습니다. JdbcMemberRepository 클래스에서 DataSourceUtils에 관한 import가 되질 않아 진행이 안되는데요. Alt + Enter를 눌러도 추천하는 내용에는 import 내용이 없습니다. 어떻게 해결해야 하나요?