728x90
반응형
- 복합키 vs (대칭키 + UNIQUE 제약 조건) 회의록2025-06-20 15:24:57상황북마크 테이블은 TIL Bookmark 와 CodePost Bookmark로 나뉘어 있기 때문에 팀원 A는 TIL을 담당하고 나는 CodePost를 담당하였다.이 후 도메인 구조를 살펴보니 A는 post_id와 email을 통해 복합키로 구성하였고, 나는 auto_increment 대칭키와 post_id, member_id를 유니크 제약 조건으로 설정하여 구현하였다. @EqualsAndHashCodepublic class TILBookmarkId implements Serializable { private String email; private Long postId;} @IdClass(TILBookmarkId.class)@Entitypublic class TILBookmark { @I..
- saveOrUpdate 구현 시 동시성 이슈2025-06-02 01:12:19기존 코드@Tarnsactionalpublic Long saveOrUpdate(CodePostBookmarkSaveRequestDto requestDto, String email) { Member member = memberCommand.findByEmail(email); Optional existingBookmark = codePostBookmarkRepository.findById(requestDto.codePostId(), member.getId()); return existingBookmark .map(CodePostBookmark::update) .orElseGet(() -> codePostBookmarkReposito..
- Spring Boot 프로젝트에서 Github REST API로 Push 기능 구현하기2025-05-17 00:52:32이전 포스팅에서 Github과 연동하여 access token을 불러와 DB에 저장까지 마쳤다. 이제는 알고리즘 게시글의 내용을 특정 github 레포지토리에 push하는 기능을 만들어 보겠다. push 기능을 구현하는데에는 크게 두 가지 방법이 있다. 첫 번째는 이전 포스팅과 같이 Github REST API를 직접 호출하는 방식이다.GitHub REST API DOCS GitHub REST API 설명서 - GitHub DocsGitHub REST API를 사용하여 통합을 만들고, 데이터를 검색하고, 워크플로를 자동화합니다.docs.github.com 두 번째로는 Java (hub4j/github-api)를 사용하는 것이다.https://mvnrepository.com/artifact/org.kohs..
- 🛠 GitHub 연동 기능 구현기2025-05-15 01:01:011. 처음에 기획한 방향처음 의도는 이랬다:사용자가 내 블로그 플랫폼에서 글을 작성한 후, 버튼 하나로 자신의 GitHub 저장소에 자동으로 Push하는 기능을 만들고 싶었음.이미 구글 로그인으로 회원 식별이 되어 있기 때문에, GitHub은 로그인 대신 "인가(authorization)"만 하도록 구현하고자 함.사용자 GitHub에 access token을 발급받아 DB에 저장하고, 향후 글 Push 시 활용.Push 버튼을 누르면 다음 절차를 밟음:사용자에게 GitHub 인가 요청 → GitHub 로그인 및 승인code를 받은 후 백엔드에 전송백엔드에서 access token을 받아 DB에 저장이후 GitHub API를 통해 사용자의 ori 저장소에 글을 업로드2. 시행착오와 막혔던 부분2-1. Gi..
- Code Post에 북마크 기능 추가2025-05-10 02:56:09요구 사항member id를 통해 북마크된 post들을 조회할 수 있어야한다.북마크 취소 시 soft delete 방식으로 진행한다.일괄 삭제는 스케줄러를 통해 진행bookmark(n) : member(1) 관계이다.post 삭제 시에도 북마크에는 유지된다.단, 해당 포스트 페이지로 이동 시 "존재하지 않는 페이지" 오류 호출설계Entity@Getter@NoArgsConstructor@Entitypublic class CodePostBookmark extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne(fetch = FetchType.LAZY) @Joi..
- 게시글 공개 여부 기능 추가2025-05-08 09:27:08수정될 부분[BE] code post Entity 필드에 isPublic 멤버변수 추가[BE] flyway.sql 스크립트에 code_post table에 is_public 컬럼 추가하는 명령어 작성기존에 존재하던 게시글들에는 is_public 컬럼의 기본값을 true로 설정[BE] 관련된 DTO 필드에 isPublic 멤버변수 추가[BE] service Layer에서 조회 로직 변경게시물 작성자일 경우 - public다른 회원일 경우 - privateCodePostEntity@Entitypublic class CodePost { ... @Column(nullable = false) @ColumnDefault("true") private boolean isPublic; ...}Fly..
- [트러블 슈팅] Nginx 502 Bad Gateway 에러 발생2025-04-29 10:11:02문제상황개발 서버에서 새로운 기능들을 구현한 뒤 배포 서버에 적용하는 과정에서 문제가 발생했는지 서비스가 502 Bad Gateway 에러를 뱉어내고 있었다.혹시나 GitActions 가 실패했는지 다시 확인해 보았지만 문제는 없었다. CI/CD 가 제대로 적용되어 docker에 제대로 올라갔는지 확인해 보기 위해 docker ps를 통해 확인해 보았지만 정상적으로 포트가 열려있었다.NAMESTATUSPORTSori-api-serverUp 49 minutes8080 openori-frontendUp About an hour3000 openori-nginxUp 4 months80 openori-redisUp 6 months6379 open Nginx에 문제가 있나 확인하기 위해 로그를 확인해봤다.172..
- 검색 쿼리 개선 (LIKE -> Full Text Search)2025-04-23 00:02:11LIKE현재 Ori 서비스의 검색 기능은 다음과 같은 쿼리로 짜여져 있다.SELECT new CodePostResponseDto(c,m) FROM CodePost c INNER JOIN Member m ON c.writerId = m.id WHERE c.title LIKE %:keyword% ORDER BY c.id DESC기본적으로 검색 쿼리를 구현한다고 하면, 가장 먼저 생각할 수 있는게 LIKE 문이다.많은 양의 데이터가 있는 테이블이 아니고, 검색도 빈번하게 발생하는게 아니라면 별 문제없겠지만,데이터가 100만건, 1000만건 또는 억 단위가 되면 문제가 발생할 것이다.LIKE 문의 동작 방식과 Index와의 관계Like 구문을 사용한 검색 쿼리 성능 이슈100명이 동시에 1초동안 검색을 하는 상..
728x90
반응형