묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 취소시 해당 상품 재사용
주문을 취소할시 취소된 unique한 delivery값이 남아있는 상태여서 똑같은 delivery id를 재사용하게 하려할 때 에러가 뜨는데 해결방법이 따로 있을까요? cancel란에도 record가 남아있으면서 동시에 그 unique id가 재사용될 수 있는 방법이요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 기능 테스트 부분에서 질문이 있습니다!
상품 주문을 테스트할 땐 Book 객체로 받아서 테스트를 실행했는데, 상품주문 재고수량초과 테스트에선 . 왜 Item 객체로 받아서 테스트를 실행하는건가요? 차이점은 따로 없지 않나요?
-
해결됨실전! 스프링 데이터 JPA
연관관계 편의 메서드에서 mappedBy 필드에 대한 수정 로직 추가여부
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예https://www.inflearn.com/questions/25417/changeteam-%EA%B4%80%EB%A0%A8%ED%95%98%EC%97%AC-%EC%A7%88%EB%AC%B8-%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4 연관관계 편의 메서드 관련 질문인 위 링크의 글과 연관이 있습니다. 질문을 먼저 작성해놓고 질문 끝에 다시 언급해놓겠습니다.1) 어쩌면 필요없는 구현일 수 있는데, 이런 습관?을 들여도 괜찮은지2) 아니면 강의처럼 DB에 반영되지 않고 거의 문제가 발생할 가능성이 없는 부분은 간단하게 구현하고 넘어갈지 mappedBy로 read-only상태인 조회 전용 필드인 members는 변경 상태가 DB에 반영되지 않지만,인스턴스 입장에서는(객체지향적으로는?) 어플리케이션 런타임 시점에 변경을 해주어야한다고 생각했습니다.위 링크의 영한님 말씀처럼 데이터 변경 후 이를 즉시 재활용하는 일은 극히 드물지만 말이죠. Member 엔티티// 연관관계 편의 메서드 public void changeTeam(Team team) { // 기존에 팀이 있다면 탈퇴 if (this.team != null) { // 탈퇴를 위한 비즈니스 로직을 Team에 구현함 this.team.removeMember(this); } this.team = team; team.getMembers().add(this); }그래서 위와 같이 if 분기를 두고 소속 팀이 있는 회원은 해당 팀에서 회원 자신을 지우는 로직을 추가했습니다. this.team.removeMember(this)위 로직은this.team.getMembers().remove(this)와 같지만 의미있는 메서드를 만들어보고 싶어서 아래처럼 removeMember 를 구현했습니다.Team 엔티티// 비즈니스 로직 -> read-only 필드라서 DB에는 반영 안됨 public void removeMember(Member member) { this.members.remove(member); } null 확인 로직이 changeTeam() 내부에 있으므로 Member 엔티티 생성자는 다음과 같이 작성했습니다.public Member(String username, int age, Team team) { this.username = username; this.age = age; changeTeam(team); } 결론적으로 물어보고 싶은 질문은1) 어쩌면 필요없는 구현일 수 있는데, 이런 습관?을 들여도 괜찮은지2) 아니면 강의처럼 DB에 반영되지 않고 거의 문제가 발생할 가능성이 없는 부분은 아래처럼 간단하게 구현하고 넘어갈지// 연관관계 편의 메서드 public void changeTeam(Team team) { this.team = team; team.getMembers().add(this); } 이렇게 두 가지 질문이 있습니다.늘 좋은 강의 해주셔서 감사합니다.
-
해결됨실전! 스프링 데이터 JPA
findAll() 여러개 정의하기
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]만약 어떤 경우엔 @EntityGraph를 쓰고 어떤 경우엔 안쓰고 싶어서 원본 findAll()를 그대로 두고 새로운 findAll()과 같은 동작을 하는 메소드를 정의한다고 하면 어떻게 만들수 있나요?
-
해결됨실전! 스프링 데이터 JPA
게시판에서 삭제된 댓글을 보여주기 위해 Spring Data JPA에서는 어떻게 접근해야 할까요?
상황 설명기본적인 게시판을 만들고 있어요.해당 게시판에는 게시물를 달 수 있고 해당 게시물에는 댓글을 달 수 있어요.댓글과 관련한 요구사항들은 다음과 같습니다.댓글 Create, Update, Delete각 게시물은 몇 개의 댓글이 달렸는지 확인이 가능하다.게시판에서는 전체 댓글이 몇 개가 달렸는지 확인이 가능하다.게시물에 달려 있는 모든 댓글들을 확인할 수 있다. 다만, 삭제된 댓글의 경우 "삭제된 댓글입니다" 라는 메세지로 보여준다. 내 접근 방법(Where 어노테이션을 사용)우선은 4번 조건 때문에, 그리고 실무에서 관리를 위해 데이터를 잘 삭제하지 않는다는 걸 근거로 Soft-Delete를 적용했습니다.그리고 Comment 엔티티를 아래와 같이 작성했습니다.@Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @SQLDelete(sql = "UPDATE Comment SET deleted = true where comment_id = ?") @Where(clause = "deleted = false") public class Comment extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "comment_id") private Long id; private boolean deleted; ... 생략 ... } Comment 엔티티를 조회하는 대부분의 요청(1개 제외)은 deleted 필드가 false인걸 찾아와야 합니다. 그래서 디폴트 속성으로 deleted=false를 적용하면 편하겠다고 생각하여 Where 어노테이션을 사용했는데요. 문제점이 방식의 문제는 4번 요구사항을 구현할 수 없다는 것입니다.Spring Data JPA의 기본 메서드는 물론이고, JPQL, QueryDsl 을 사용한 모든 Comment 조회 쿼리에도 "deleted=false" 속성이 기본으로 달라붙어 deleted가 true인 Comment를 가져올 수 없습니다.(확실하지는 않지만, Native Query를 사용하면 하이버네이트 구현체의 영향을 안받고 제가 원하는 기능을 구현할 수 있을 거 같습니다. 그런데 Native Query를 쓰는게 최선일까 자꾸 꺼려지더라구요.) 임시 방안저는 어쩔 수 없이 Where 어노테이션을 제거하고, Comment에 관련한 모든 조회 쿼리를 JPQL로 만들어줬습니다.하지만 고작 한 개의 메서드에서 삭제된 메서드를 보여주기 위해 전체 Comment 조회 메서드를 변경하는 게 마음에 들지 않습니다. 관리를 어렵게 만든다는 생각이 들어요.실제로 저는 "게시판에서는 전체 댓글이 몇 개가 달렸는지 확인이 가능하다." 요구사항을 구현할 때, where deleted=false 조건을 붙이는 걸 깜빡해서 삭제된 댓글들의 개수까지 전부 보여줬습니다. 이러한 상황에서는 코드를 어떻게 작성하는 게 좋을까 계속 고민을 하고 있는데요,,, 함께 고민해주실 수 있을까 하여 이렇게 질문을 남깁니다. 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
stockQuantity 와 author, isbn 값이 저장 되지 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 서브밋 할 시에 컨트롤러 디버깅을 해보면 item에 잘 담기고 있습니다. 하지만 레퍼지토리에서 em.persist를 할 때에 로그를 보면 값을 포함하지 stockquantity는 0이고 author, isbn은 null값으로 찍혀 저장 되는 상태입니다 ㅠㅠㅠ 어떤 설정을 빼먹은 것인지 감이 잡히지 않습니다..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 편의 메소드 작성 기준 질문이요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.public void setMember(Member member) { this.member = member; member.getOrders().add(this); } public void addOrderItem(OrderItem orderItem) { orderItems.add(orderItem); orderItem.setOrder(this); } public void setDelivery(Delivery delivery) { this.delivery = delivery; delivery.setOrder(this); }Order 클래스 내의 연관관계 편의 메소드 코드인데요영한님께서 연관관계 편의 메소드는 컨트롤 하는 쪽에서작성하는것이 좋다고 하셨는데 Order는 Member와 OrderItem을 mappedBy로 참조하고 DB에서 조회만 할수 있는데 Order 클래스 내에 작성하신 이유가 궁금해요컨트롤은 연관관계의 주인인 엔티티객체에서 하는것이 아닌가요?아니면 컨트롤이라고 말씀하신게 객체 관점에서 말씀하신건가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
method patch 설정시 404에러
- id: user-service uri: lb://USER-SERVICE predicates: - Path=/user-service/** - Method=PATCH filters: - RemoveRequestHeader=Cookie - RewritePath=/user-service/(?<segment>.*), /$\{segment} - AuthorizationHeaderFilter 이렇게 작성했는데요@postmapping("/user/test")@patchmapping("/user/test")포스트는 잘동작하는데 패치는 404가 납니다뭐가 문제일까요?
-
해결됨Practical Testing: 실용적인 테스트 가이드
MailService 구조에 대해 생각을 여쭙고 싶습니다.
안녕하세요 강사님, 먼저 좋은 강의와 강의가 나온지 일년이 가까지 되어가는데도 답변해주셔서 감사합니다. public boolean sendOrderStatisticsMail(LocalDate orderDate, String email) { // 찾아오기 //통계 합산하기. boolean result = mailService.sendMail(); return true; } public Boolean sendMail(String fromEmail, String toEmail, String subject, String content) { // mailSendClient는 메일을 전송하는 역할을 합니다. boolean result = mailSendClient.sendEmail(fromEmail,toEmail,subject,content); // 메일이 전송되었다면 메일 전송 내역을 저장합니다. - 기록용 엔티티 입니다. if (result) { mailSendHistoryRepository.save(..); return true; } return false; }이렇게 역할을 나누어 메일 전송을 메일 서비스에게 위임했습니다. 조회한다메일을 전송한다메일 히스토리에 저장한다.비즈니스 로직을 그대로 작성하다보면 아래와 같이 작성하게 되는 경우가 많습니다.public boolean sendOrderStatisticsMail(LocalDate orderDate, String email) { // 찾아오기 //통계 합산하기. // mailSendClient는 메일을 전송하는 역할을 합니다. boolean result = mailSendClient.sendEmail(fromEmail,toEmail,subject,content); // 메일이 전송되었다면 메일 전송 내역을 저장합니다. - 기록용 엔티티 입니다. if (result) { mailSendHistoryRepository.save(..); return true; } return false; }mailSendClient를 Subbing해서 테스트를 한다면위에 코드나 아래 코드나 테스트 방식은 동일하게 작성이 됩니다. 강사님께서 작성하는 방법은 메일 후처리를 해주는 클래스를 추가가 됩니다.테스트 코드를 작성하면 동일하게 동작하는데 클래스가 하나가 추가됩니다. 그럼에도 장점이 있기 때문에 사용한다고 생각되어지는데제가 생각한 후처리기 클래스의 장점은외부 네트워크를 직접 의존하지 않아도 된다.메일 전송과 히스토리 저장을 하나의 서비스로 사용할 수 있다. 그리고 이렇게 후처리기 클래스 적용하는 기준이 있으실까요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
Unable to locate persister
이런 에러가 발생하는데 어떻게 해결해야할지 구글에 검색해도 잘 나오지 않습니다.. 틀린지 맞는지 몇번 확인했는데 틀린건 없었던것 같습니다 그리고 어제까진 실행이 됐는데 Transactional어노테이션 주석처리 하고서 실행을 해보니 안되네요 혹여나 다시 원복해서 실행해도 안되고 틀린 코드가 없는거 같은데 다른게 뭔가 문제가 있는것 같습니다 도와주세요~
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Assertions 사용 질문
package jpabook.jpashop; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; @RunWith(SpringRunner.class) @SpringBootTest public class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional @Rollback(false) public void testMember() throws Exception { //given Member member = new Member(); member.setUsername("memberA"); //when Long savedId = memberRepository.save(member); //then Member findMember = memberRepository.find(savedId); Assertions.assertThat(findMember.getId()).isEqualTo(member.getId()); Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); Assertions.assertThat(findMember).isEqualTo(member); } }plugins { id 'java' id 'org.springframework.boot' version '3.2.1' id 'io.spring.dependency-management' version '1.1.4' } group = 'jpabook' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '21' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' developmentOnly 'org.springframework.boot:spring-boot-devtools' testImplementation 'junit:junit:4.13' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //JUnit4 추가 testImplementation("org.junit.vintage:junit-vintage-engine") { exclude group: "org.hamcrest", module: "hamcrest-core" } } tasks.named('test') { useJUnitPlatform() } 이렇게 junit4 사용 하였는데 Assertions 이 구문만 쓰면 에러가 생기는데 왜 그런거죠?
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
컬렉션 fetch join
안녕하세요 강사님프로젝트 중 궁금한 점이 있어 질문드립니다..!6개의 엔티티를 조인해야 하는 상황인데 현업에서도 이렇게 조인을 하기도 하나요? 물론 성능에 따라 다르겠지만 몇개 정도의 테이블을 조인하는 것이 적당할까요?컬렉션 패치 조인은 1개까지만 하라고 하셨는데 현재 상황은 3개나 컬렉션이 존재합니다. 이런경우는 어떤식으로 해결하는게 좋을까요?? 강사님께서는 어떤식으로 해결하시는지 궁금합니다 ㅎㅎ감사합니다!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@Lob과 @Column(columnDefinition = "TEXT")
현재 강의를 보고 스스로 게시판 서비스를 만들어 보고 있는데요!게시물 본문(content) 컬럼에 @Lob과 @Column(columnDefinition = "TEXT") 중 어떤 것을 써야 좋은지 궁금해서 질문 드립니다! 찾아봐도 자료가 많이 없더라고요..@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Post extends BaseEntity { @Column(name = "post_id") @GeneratedValue(strategy = GenerationType.IDENTITY) @Id private Long id; @Column(length = 100, nullable = false) private String title; // @Column(columnDefinition = "TEXT", nullable = false) // @Lob private String content; }
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원서비스와 회워리포지토리가 빈으로 등록이 되지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]@Service와 @Repository를 붙였음에도 불구하고 빈으로 등록되지 않습니다.그래서 회원 서비스를 테스트 할 때 @Autowired로 자동 주입을 받지 못하고 있습니다. 어디가 문제인지 봐주실 수 있나요? 아래는 프로젝트 전체 압축파일 링크입니다https://drive.google.com/file/d/15aBoeMbIf_z0BXL8zpERp_2J5upJGesC/view?usp=drive_link
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
트랜잭션 롤백에 관한 질문
tx.begin() Member member = new Member(); member.setName("start"); em.persist(member); tx.commit(); 안녕하세요 트랜잭션 공부를 하다가 질문이 생겨 이렇게 글 남기게 되었습니다! 위처럼 작성하면, Member 테이블에 잘 생성됨을 확인했는데요,트랜잭션 롤백의 작동에 대해 이것저것 해보다가 tx.begin(); Member findMember = em.find(Member.class, 저장된member아이디); try { findMember.setName("newName"); throw new Exception(); } catch (Exception e) { tx.rollback(); } System.out.println(findMember.getName()); // 이 줄에서 원래의 start가 나오길 기대했으나, newName이 나옵니다 findMember 객체가 영속성 컨텍스트에 의해 관리되고 있으므로, 트랜잭션이 롤백된다면 마지막 프린트 문에서 findMember의 name 속성이 원래의 상태인 'start' 로 돌아가길 기대했는데요.질문: 실제로 프린트를 해보니, 'start'가 아닌 'newName'으로 인식되어 이렇게 프린트되는 이유가 궁금합니다!제가 이해하려고 시도한 것.. 조금 이해가 안되어서 em.contains(findMember) 를 해보니, 정확히 tx.rollback() 이전에는 true, 이후에는 false로 출력이 되더라고요. 위의 결과로 추정해본 바로는 tx가 엔티티 객체를 직접 인식하는 것이 아니라, em안의 1차 캐시의 변경된 내역을 인식하고 있고, 엔티티 객체는 그와 별개로 자바 코드에서 활용할 수 있는 용도인가..? 라고 이해를 해봤고,트랜잭션 롤백시, 엔티티 객체는 em과 연관없는 순수 자바 객체가 되며 때문에 객체가 있는 메모리 상의 바뀐 필드의 값이 다시 변경될 필요가 없는건가? (어짜피 트랜잭션으로 em안의 1차 캐시 변경부를 원상태로 바꿔주면 DB에는 아무런 변화가 없을 것이기 때문에) 라고 이해를 했습니다. 아무래도 혼자서 생각해본 이유이기에 정확하지 않을 것 같습니다.위와 같은 질문과 제 뇌피셜인,, 이해한 바에 대해 피드백 주시면 감사하겠습니다!! 감사합니다!!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 매핑 후 getMemberList() 했을 때 빈 list 가 반환되는 이유에 대하여
transaction.begin(); try { Team teamA = new Team(); teamA.setName("teamA"); entityManager.persist(teamA); Member member1 = new Member(); member1.setUsername("Ken"); entityManager.persist(member1); Member member2 = new Member(); member2.setUsername("Jen"); entityManager.persist(member2); Member member3 = new Member(); member3.setUsername("Den"); entityManager.persist(member3); member1.setTeam(teamA); member2.setTeam(teamA); member3.setTeam(teamA); List<Member> memberList = teamA.getMemberList(); System.out.println("========"); System.out.println("memberList = " + memberList); // for (Member member : memberList) { // System.out.println("member = " + member.getUsername()); // } System.out.println("========"); transaction.commit(); 양방향 매핑 예제 관련하여 제 개인적인 예제를 실행하던 중 궁금한 점이 생겼습니다. teamA 객체 생성 + persist, 3명의 멤버 객체를 생성 + persist, 그러고 나서 전부 teamA 라는 데에 소속시켰습니다.persistentContext 에 추가된 상태이므로 team.getMemberList() 하면 세 명의 멤버가 담긴 리스트가 출력될 것이라고 생각한 것과 달리, 빈 리스트로 리턴됩니다. (마지막에 trx.commit() 까지 해서 H2 디비에는 잘 들어가있습니다) 왜 빈 리스트로 리턴되는 것일까요?
-
해결됨실전! 스프링 데이터 JPA
mappedBy로 지정된 필드가 조회하는 시점
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]mappedBy로 지정된 필드는 어느 시점에 변경되는지 궁금하여 질문드립니다.예를들어 Member 클래스에서 @ManyToOne private Team team;이렇게 Team 객체를 가지고 Team 클래스에서 @OneToMany(mappedBy="team")List<Member> members = new ArrayList<>(); 이렇게 members 리스트를 읽기전용으로 가진다고 할때 이 리스트가 바라보는 시점은 언제인가요?제생각엔1. 영속성 컨텍스트상에서 연관관계의 주인 객체가 변경됨db에 변경사항이 반영됨db에 변경사항이 커밋됨셋중 하나인거같은데 어떤것인가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
repository 관련 질문입니다.
[질문 내용]안녕하세요 김영한님 강의를 듣다 의문점이 생겨서 질문을 드립니다. 무료 강의 수강 후 해당 강의를 JPA 기본서와 함께 공부 중인 학생입니다. repository관련해서 어떤 방식이 맞는지 헷갈려서 질문드렸습니다. 무료 강의 기준에선 repositry안에 있는 interface를 상속받아서 엔티티이름Repository형식으로 구현하셨는데 해당 JPA활용1 강의에선 상속 없이 class파일로 만들어서 어떤 방식이 맞는지 모르겠습니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
enum
짧은 지식이지만 db에서 enum을 사용을 줄이라고 알고 있는데 엔티티에서 enum타입으로 필드를 구성해도 크게 영향이 없나요?? 프로젝트 중인데 엔티티의 상태코드 타입을 String으로 할지 eunm으로 할지 고민입니다.엔티티에서 언제 enum타입을 사용할지 String타입을 사용할지 기준이 무엇인지 여쭤봅니다. 감사합니다 ㅠㅠ
-
해결됨실전! 스프링 데이터 JPA
글로벌 서비스의 경우 시간 데이터 저장 및 뷰 관련 질문
강의에서는 시간 데이터를 넣는 방법을 가르쳐주셨는데 글로벌 서비스에서는 시간 데이터를 어떻게 관리하는지 궁금합니다. 예를 들어, 블로그 플랫폼의 유저들이 미국과 한국에 위치할때, 같은 시간에 작성된 글이라도 위치에 따라 다른 시간 데이터를 표시하도록 해야할것 같습니다. 이때 게시글을 작성한 시간은 DB에서 UTC로 가지고 있는게 좋을까요? 만약 그렇다면 DB의 데이터를 로컬로 가져올때 실무에서는 백엔드에서 변환을 하는지 아니면 프론트까지 UTC를 가져와서 프론트에서 변환을 하는지 궁금합니다.