728x90
반응형
- 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초동안 검색을 하는 상..
- [트러블 슈팅] 개발 서버와 배포 서버 사이에 DB 불일치 해결2025-03-31 19:21:42문제의 시작은 서버 배포 후 서비스를 운영하며 새로운 기능을 만들고 있던 때 부터인 것으로 확인되었다.첫번째 상황으로는 추가 기능인 댓글&대댓글을 개발 서버에만 적용을 하고 배포 서버에는 적용을 하지 않았기 때문에 배포 DB에 comment 관련 테이블이 존재하지 않다는 것이다.이 부분은 flyway로 script.sql에 comment 테이블이 존재하지 않을 시 생성하도록 명령어를 작성해 놓았기 때문에 문제 해결 두번째 상황으로는 member 테이블에 role 컬럼 타입 불일치 문제가 발견되었다.이 또한 서버 배포 후 다른 팀원이 role 이라는 enum 클래스에 Converter 를 적용하게 되면서 발생한 것이다.이를 해결하기 위해서는 아래와 같이 수정해야한다.@Converterpublic class..
- Join 연산 무조건 피해야 하나?2025-03-24 17:04:13프로젝트 진행 중 불필요한 연관관계를 끊고, 조회 성능을 향상시키기 위해 Post 테이블에 member 정보에 대한 컬럼을 추가했었다. 컬럼을 추가할 생각을 가졌을 때에는 당장 연관관계보다의 장점만을 생각하면서 진행하였지만 막상 적용하고 나서 보니 단점도 보이기에 이 글을 적게되었다. 단점으로는 데이터 일관성이 있겠다.닉네임이 member_A 인 회원이 글을 작성하면 해당 post의 작성자 닉네임은 당연하게도 member_A 이다.하지만 이후 member_A가 닉네임을 member_B로 수정을 한 후에도 이전 post의 작성자 닉네임은 member_A 이다.여기까지는 예상을 했던 상황이고 그저 post 수정 시 새로 업데이트 해주면 되겠다 생각을 했다.하지만 또 다른 회원이 member_A로 닉네임을 수..
728x90
반응형