728x90
반응형
- RDB에서 페이징 쿼리의 필요성을 설명해 주세요.2025-05-19 12:23:56페이징 쿼리(Paging Query) 는 전체 데이터를 부분적으로 나누어 데이터를 조회하거나 처리할 때 사용됩니다.데이터를 상대적으로 작은 단위로 나누어 처리하기 때문에 데이터베이스나 애플리케이션의 리소스 사용 효율이 증가하며, 로직 처리 시간을 단축 시킬 수 있습니다.MySQL에서 페이징 쿼리는 일반적으로 LIMIT, OFFSET 구문을 사용하여 작성합니다.select *from subscribelimit 500offset 0;LIMIT, OFFSET 방식 페이징 쿼리의 단점은 무엇이고, 어떻게 해결할 수 있나요?LIMIT, OFFSET 방식의 페이징 쿼리는 뒤에 있는 데이터를 읽을 수록 점점 응답 시간이 길어질 수 있는데요.왜냐하면, DBMS는 지정된 OFFSET 수만큼 모든 레코드를 읽은 이후에 데..
- 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..
- Spring에서 객체를 Bean으로 관리하는 이유를 설명해주세요.2025-05-16 23:37:32Bean으로 객체를 관리하는 이유는 애플리케이션의 설계, 확장성, 유지보수 측면에서 많은 이점을 제공하기 때문입니다.1. 의존성 관리 자동화빈으로 등록된 객체들은 Spring 컨테이너(BeanFactory, ApplicationContext)가 자동으로 의존성을 주입해줍니다.개발자가 직접 객체를 생성하고 의존성을 연결할 필요가 없어집니다. 또 컨테이너가 빌드 시점에 순환 의존성을 감지하여 설계 오류를 조기에 발견할 수 있습니다.@Serviceclass OrderService( private val productRepository: ProductRepository, // 자동 주입 private val paymentGateway: PaymentGateway // 자동 주입)2. 싱..
- 🛠 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..
- NOT IN 쿼리를 사용할 때 발생할 수 있는 문제와 최적화 방법에 대해 설명해 주세요.2025-05-12 14:14:06아래와 같이 NOT IN을 사용한 쿼리는 직관적이고 사용하기 쉽지만, 대규모 데이터셋에서 심각한 성능 저하를 일으킬 수 있습니다.SELECT p FROM Post pWHERE p.id NOT IN :postIds문제점NOT IN은 부정 조건으로, 대부분의 DBMS에서 전체 테이블 스캔이나 인덱스 풀 스캔을 유발합니다. 전체 데이터나 테이블을 스캔한 후 조건에 맞지 않는 레코드를 필터링 해야하기 때문에 데이터베이스 옵티마이저가 효율적인 실행 계획을 세우기 어렵습니다.인덱스를 효과적으로 활용하지 못합니다. IN 절은 인덱스 Range Scan을 통해 빠르게 처리할 수 있지만, NOT IN은 인덱스 활용도가 현저히 떨어집니다.대량의 값을 IN 절에 넣으면 실행 계획 생성이 늘어나고, 파싱 및 최적화 단계에서 ..
- 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..
- 테스트 격리란 무엇인가요?2025-05-07 14:00:07테스트 격리(Test Isolation) 는 각 테스트가 서로 독립적으로 실행되도록 보장하는 것을 말합니다. 즉, 어떤 테스트가 실행되더라도 다른 테스트의 결과나 상태에 영향을 주거나 받지 않아야 한다는 의미입니다.테스트 격리가 중요한 이유는 격리가 제대로 이루어지지 않으면 비결정적 테스트가 발생할 수 있기 때문입니다. 비결정적(Non-deterministic) 테스트는 같은 테스트를 여러 번 실행했을 때 항상 같은 결과를 내지 않는 테스트를 말합니다. 예를 들어, 테스트가 데이터베이스와 같은 공유 자원에 의존할 경우 실행 순서나 다른 테스트의 실행 여부에 따라 성공 또는 실패 결과가 달라질 수 있습니다. 비결정적 테스트는 실패했을 때 실제 코드의 문제인지, 비결정적 요인 때문인지 판단하기 어려워집니다..
728x90
반응형