Project8 [06.22] 카드 추천 기능 개발 ChatGPT API 사용방법 및 최적화 방법- 참고 블로그https://m.blog.naver.com/daddy-bear-life/223040571989 ChatGPT API 사용 방법 및 프롬프트 최적화 비법 - 역할(Role), 온도(temperature), 텍스트의 최대 길이(max_지난번에 ChatGPT에서 사용하는 ChatGPT API가 공개 되어 ChatGPT API 소개에 대한 내용...blog.naver.com Project/토이 프로젝트 2024. 6. 22. [0620] 회원 관련 기능 개발 JPA 지연 로딩과 Fetch Join- 참고 블로그https://loosie.tistory.com/574 [Spring] 조회 API 성능 최적화하기 1 - 지연로딩(Lazy Loading)과 페치 조인(Fetch Join) : ToOne 매핑조회 API 성능 최적화하기 1 - 지연로딩(Lazy Loading)과 페치 조인(Fetch Join) Order 테이블을 기준으로 ToOne으로 연관관계 매핑되어있는 테이블을 조회할 때 발생하는 N+1문제와 그에 대한 대책에 대해서loosie.tistory.com Project/토이 프로젝트 2024. 6. 20. [0619] 카드 주문, 보유 카드 조회 기능 개발 p6spy를 사용해서 쿼리 매개변수를 볼 수 있게 설정3.0.0이상버전을 이용하는 경우, p6spy 1.9.0버전을 이용하면, 마이그래이션이 적용되어있기 때문에설치만 해도 기본적으로 쿼리는 볼 수 있다.build.gradle에 아래왜 같이 추가한다.// https://mvnrepository.com/artifact/com.github.gavlyukovskiy/p6spy-spring-boot-starterimplementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' 그 다음, application.yml에 아래와 같은 설정을 추가하면 로그가 보인다.#p6spy log Settingdecorator: datasource: p6spy.. Project/토이 프로젝트 2024. 6. 19. [0618] 카드 주문 기능 개발 JPA - DB 컬럼과 엔티티 멤버 변수 MappingJPA를 사용할 때, Entity의 멤버 변수와 DB의 컬럼은 무조건 스네이크 케이스 표기법으로 자동 매핑된다.하지만, Java의 변수명은 카멜 케이스가 대표적인 코드 스타일이기 때문에, 카멜 케이스를 지키며 @Column 어노테이션을 사용해서 DB의 컬럼명과 매핑해주는 것이 좋다. @Entity@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)@Table(name = "cards")public class Card { @Id @GeneratedValue @Column(name = "card_id") private Long id; private String name; priv.. Project/토이 프로젝트 2024. 6. 18. [커뮤니티 게시판] 알림 기능 관련 정리 💡 알림 기능은 어떻게 구현했나요? 알림 도메인은 회원 도메인으로 1대다 단방향 관계로 설정했습니다. ApplicationEvenetPublisher와 @Async 어노테이션 기능을 사용해서 비동기 이벤트 기반으로 댓글 알림을 처리했습니다. 알림 기능이 댓글 생성과 같은 쓰레드에서 작동을 하면 알림 생성에 에러가 생기면 게시글 생성도 되지 않으므로 분리를 해야합니다. 따라서 AsyncConfigurer을 상속받는 AsyncConfig를 생성하고 AsyncExecutor 설정과 ExceptionHandler를 오버라이딩해서 알림 인프라를 세팅했습니다. AsyncExecutor 설정에서는 ThreadPoolTaskExecutor를 생성해서 CorePoolSize, MaxPoolSize, QueueCapaci.. Project/커뮤니티 게시판 2023. 8. 22. [커뮤니티 게시판] 댓글 기능 관련 정리 💡 댓글 기능은 어떻게 구현했나요? Create: 댓글 작성 후 작성 버튼을 누르면 javascript의 댓글 작성 함수를 호출해서 ajax를 통해 댓글 api에 post로 댓글 작성자, 내용, 게시글 id, 부모 댓글 id가 담긴 json 데이터를 전송합니다. 이후 Controller에서 @RequestBody를 통해 받은 댓글 dto를 JpaRepository를 상속받는 Repository에서 save() 함수를 통해 댓글을 생성했습니다. 그리고 게시글 엔티티의 댓글수 필드 값을 1 증가시키고 댓글 알림을 생성하기위해서 댓글 알림 dto를 만들고ApplicationEventPublisher의 publishEvent()함수를 호출해서 이벤트를 발생시켰습니다. Read: 계층형 댓글을 만들기 위해서 댓글.. Project/커뮤니티 게시판 2023. 8. 20. [커뮤니티 게시판] 게시판 기능 관련 정리 💡 게시글 CRUD 기능은 어떻게 구현했나요? Create: dto로 받은 게시글 데이터를 유효성 검사를 한 후 문제가 없다면 modelMapper를 사용해서 게시글 엔티티로 매핑해주고 JpaRepository를 상속받는 Repository에서 save() 함수를 호출해서 게시글을 생성하고 작성자와 작성일을 추가했습니다. Read: 게시글 상세 조회는 dto를 통해 게시글 상세 정보와 좋아요 데이터를 가져온 후 모델에 추가하고 뷰에 전달했습니다. 게시글 전체 조회는 Querydsl과 BooleanExpression을 사용해서 사용자가 선택한 게시판과 게시글 카테고리에 해당하는 게시글들의 데이터와 개수를 찾아 최신 게시글이 먼저 보이도록 고유 id를 기준으로 오름차순 정렬을 했습니다. 이 때, 회원 엔티티.. Project/커뮤니티 게시판 2023. 8. 19. [커뮤니티 게시판] 회원 기능 관련 정리 💡 회원 가입 기능은 어떻게 구현했나요? 회원 가입 폼에서 데이터를 입력하면 제약 조건에 맞는지 유효성 및 중복 검사를 한 후에 조건에 맞다면 Post 요청을 통해 컨트롤러의 함수를 호출합니다. 그리고 Service에서 새로운 계정을 만드는 함수를 호출합니다. 새로운 계정을 만들 때는 Builder 어노테이션을 통해 더 안정적으로 엔티티를 생성할 수 있게 했고, JpaRepository(Spring Data JPA)를 상속받는 AccountRepository를 통해 저장하도록 했습니다. 비밀번호는 Spring Security에 있는 PasswordEnconder 인터페이스의 기본 알고리즘인 Bcrypt로 암호화하여 저장했습니다. 💡 로그인 기능은 어떻게 구현했고 왜 그렇게 구현했나요? SpringSecu.. Project/커뮤니티 게시판 2023. 8. 16. 이전 1 다음