본문 바로가기

공부27

[알고리즘] 문제 분석 이직을 위해 필수적인 코딩테스트 준비...나는 사고속도와 손이 느린 편이어서... 이런 빠르게 해결해야하는 문제에 상당히 약한 편이다.특히 문제를 풀 때, 초기에 조건을 하나 놓치는 경우 치명적이다. 내가 알고리즘 공부를 위해 선택한 책에서는 문제 분석에 10-15분 투입하는 것을 아까워하지 말라고 가장 처음부터 조언한다.문제를 잘 읽고, 초기에 구상한 해결방안의 시간/공간 복잡도를 계산해서 이렇게 코드를 진행할 것인지 결정한다. 정말 맞는 말인데, 지키기가 가장 어렵다.나는 이런 얘기할 일이 없을 줄 알았는데, 문제를 잘 읽는 것이 무엇보다도 어렵다.나이를 먹을수록 자기 얘기만 하는 경향이 생긴다고 하는데, 내가 벌써 그렇게 되는건가 걱정이 마구마구 샘솟는다. 내가 생각하는 나의 문제풀이 중 가장 큰.. 2025. 6. 3.
[FE] Lazy Loading & Code Splitting & Tree Shaking 프론트엔드 성능 최적화와 관련된 이야기가 나올 때, 자주 언급되는 개념들이다. 1. Lazy Loading필요한 js 파일은 필요할 때 불러오자는 개념이다.스크립트 로드 위의 html에서 스크립트 로드라는 버튼을 클릭했을 때, js파일을 html에 삽입한다.삽입된 js파일은 브라우저에 의해 다운로드되고, 브라우저에서 해당 스크립트 태그가 로드되면 특정 함수를 시작할 수 있다.이처럼 무거운 js나 css 파일, 그 외 무거운 리소스들을 필요할 때 불러오는 개념이 지연 로딩이다. 2. Code Splitting코드 스플리팅은 코드를 기능별, 모듈별로 잘 나눠서 필요할 때 필요한 파일만 불러와서 쓸 수 있게 만드는 기법이다.위의 lazy-script.js 파일처럼 사용자가 필요한 시점에 불러올 수 있는 js .. 2025. 6. 3.
[웹] Server Sent Event 포트폴리오를 만들던 도중 다음과 같은 상황을 만나게 되었다. 사용자가 동영상을 업로드 한다.업로드된 동영상은 플랫폼이 제공하는 기능들을 위한 후처리 작업을 수행해야 한다. (포맷 통일, 자막 생성, 썸네일 생성, 메타데이터 추출)사용자의 동영상이 후처리가 완료된 이후, 서버에선 사용자에게 업로드가 성공되었다는 알람을 보내줘야 한다. 위의 작업들 중 특히 자막 생성은 Whisper AI를 사용해서 구현되어 있는데, 내 개발 PC에선 단일 작업만 허용된다. (vRAM 제한)또한 15분짜리 동영상 기준 2-3분 정도의 작업 시간을 필요로 한다.일단 사용자가 업로드 로직으로 오랜 시간 쓰레드를 붙잡고 있게 하면 안되기 때문에 업로드 로직과 후처리 로직을 분리했다. 사용자의 파일 업로드 -> 서버의 파일 수신 및.. 2025. 6. 2.
[포트폴리오] 동영상 플랫폼 그래서 내가 강조하고 싶은 과거의 기능들을 모아서 포트폴리오로 만들고 있다. 바이브 코딩의 시대라고 한다.회사에서는 쓰기 어려웠던 LLM을 이용해서 코드를 생성하고, 수정하며 2주정도 만들었다. 대부분의 디자인은 LLM에 맡기고, 나는 기능 구현과 아키텍처 설계에만 집중했다. [개발 목표]동영상 파일을 업로드하면, 자동으로 자막 파일을 생성해주고 해당 동영상을 웹에서 자막과 함께 스트리밍하는 플랫폼 [주요 기술]FE: React, Typescript, Axios, React-Query, EmotionBE: Java, SpringBoot, SpringSecurity, Jwt, Spring-Data-JPA, Lombok, AssertJ, MySQL [기능 시나리오]1. 사용자가 사이트에 접속한다. - 로그.. 2025. 5. 29.
[Spring-Data-JPA] N + 1 문제 N+1 문제에 대해 알게되었다.일단 이 용어가 뭔지 몰라서 기억차 남겨둔다. JPA는 자식 엔티티에선 @ManyToOne 어노테이션을 통해 연관 관계를 기억한다.이 때, 기본 전은 EagerLoading인데, 해당 데이터가 조회되는 순간 연관된 부모의 데이터를 가져오게 된다.만약 부모 테이블에 접근할 필요가 없는 경우에 해당 데이터를 가져오게 되면 불필요한 조인으로 성능 문제가 발생한다.이때, LazyLoading 전략을 선택한다.LazyLoading이 되어 있는 변수의 경우, 직접적인 호출이 없는 경우 조회되지 않는다. @Transactional로 한 트랜잭션 안에서 필요한 변수를 명시적으로 호출하면 불러올 수 있다. https://www.youtube.com/watch?v=CghP7yW21Nw 2025. 5. 26.