본문 바로가기

Develop Study161

(25.03.24) n개에서 k 고르기 : 재귀 백트래킹 VS 비트마스크 OO 사 코딩 테스트를 진행하면서, 기억에 남는 문제를 복기를 해서 알고리즘을 확인했다.최대한 많은 조합을 만드는 문제는 많은 알고리즘에서 발생을 했지만,만약 그 조합 중에 K개 만큼 특정 갯수가 변수로 주어진 경우에는, 불필요하게 모든 조합을 구하고, 그리고 거기서 k개의 요소를 가진 경우의 수를 모두 고르는 방식은 굉장히 비효율 적이다. 따라서 재귀 트백트래킹을 사용할 수 있지만, 이 보다 효율적인 메모리를 사용해서 재귀를 사용하지도 않고도, 순서 -> 비트로 사용하는 비트마스크 방식을 찾아 이를 적용하고 학습했다. [음료수 맛 조합 문제]여러 종류의 음료수가 주어집니다. 각 음료수는 여러 가지 맛을 가지고 있습니다. 4가지 맛이 있을 경우 음료수의 맛은 이진수(1101, 1000, etc) 로 주어.. 2025. 3. 24.
(25.03.13) Java Spring JPA @Converter & AttributeConverter Labeling Project를 진행하면서 JSON  형태의 데이터를 계속다루고 있고,좀더 유연한 자료의 저장을 위해서 MySQL 에서 활용하지만, 다양한 Entity에서 String 타입 또는 Json 타입으로 저장하기 위해서Service 단에서 같은 ObjectMapper로 변환하는 비효율적인 코드를 작성했다. 하지만,Converter를 사용하면서 좀더 효율적으로 사용할 것으로 판단했고Row Data 당 사용자가 활용한 Label 리스트 타입을 Json 타입으로 저장하는데 활용할 수 있었다. @Converter@Entity@Table(name = "samples")public class Sample extends Timestamp { ... @Column(columnDefinition = "J.. 2025. 3. 13.
(25.02.26) Git Flow 명령어와 활용 정리 실제 회사의 개발환경에서 macOS와 Linux기반으로 개발이 진행되다 보니 일반적인 깃을 사용하기 보다는 git flow를 적극적으로 활용하는 개발 규칙이 있어 급하게 git flow에 대해서 공부하고 실습하면서 중요한 내용들을 정리했다. Git FlowGit을 활용한 브랜치 전략(branching strategy), 소프트웨어 개발 프로젝트에서 효율적인 브랜치 관리를 위한 Workflow 모델기능 개발, 버그 수정, 배포 등을 체계적으로 관리하는 방법개발, 배포, 버그 픽스 등의 브랜치를 생성하고 병합하는 과정에서 규칙에 맞춰 빠르게 체계적으로 관리할 수 있도록 할 수 있음안정적인 배포병렬 개발버전 관리주요 Branch브랜치역할생성 시점main제품으로 출시되는 브랜치배포할 때develop개발 중인 최.. 2025. 2. 26.
(25.02.24) Event Sourcing 기업에서 인턴으로 업무를 지내면서 만들어야 될 POC 단계의 툴의 아키텍쳐를 기본적인 CRUD를 만드려고 했지만, 복잡한 Relation 과 구현으로 POC단계와 부합하지 않다는 의견을 받아,아카이빙하고 업데이트 하는 구조가 아닌 Event Sourcing 기반의 데이터 수정 업데이트 툴로 바꾸고자 했다.그렇게 많은 양의 데이터를 다루는 툴이 아니기 때문에 DB에 무리가 가지 않기 때문에 하나의 DB에서 업데이트를 진행하기 때문에 해당 패턴이 선정이 되었다.툴을 개발하기에 앞서 생소할 수 있는 Event Sourcing패턴의 정의와 의의를 공부하면서 기록했다.Event Sourcing데이터를 변경된 최종 상태만을 저장하는 것이 아닌 이벤트(event) 순서대로 저장 → 재구성하는 패턴기존의 CRUD 방식.. 2025. 2. 24.
(25.02.19) Java Spring Boot 에서 파일 읽어오기 & 내보내기 (CSV) 항상 데이터를 JSON 형식으로만 주고 받는 RESTful API에 익숙할 수 있지만,어플리케이션과 서비스에 따라서 인턴쉽회사에서 CSV기반의 파일로 여러 데이터를 한번에 DB에 옮기거나 읽으면서 처리를 해야하는 기능이 필요할 수도 있어, MongoDB 기반의 NoSQL기반의 DB와 연동한 상태에서Download Upload 를 실습하고자 했다.OpenCSV 라이브러리 의존성 추가 필수dependencies { implementation 'com.opencsv:opencsv:5.6' // OpenCSV 라이브러리 의존성 추가}Java Spring Boot 내에서 CSV 파일을 읽는 것 외 쓰는 작업도 유용하게 할 수 있기 때문에 사용CSVReader나 CSVWriter 클래스를 사용해서 데이터의 .. 2025. 2. 19.
(25.02.18) Spring Boot 의 MongoDB 연결 모 스타트업 회사에 인턴쉽에 참여하게 되면서 엔터티와 테이블기반의 RDMBS를 활용하는 MySQL을 사용했지만,AI 학습용 데이터 및 대용량 데이터를 다루는 NoSQL기반의 DB를 활용을 해야했기 때문에,MySQL기반과 다르게 Spring Boot 와 NoSQL인 MongoDB를 활용하는 방법을 학습하면서 기록했다.MongoDBNoSQL 기반의 데이터베이스 관계형 데이터베이스(RDBMS)와는 다른 구조로 데이터를 저장문서 지향(Document-Oriented) 형식데이터를 문서 단위로 저장BSON(Binary JSON) 형식으로 저장MongoDB에서 지원하는 JSON (JavaScript Object Notation)을 기반 이진 형식(Binary format)으로 저장되는 형식JSON 과 똑같이 생겼지.. 2025. 2. 18.
(25.01.28) DFS 알고리즘의 시간 부족 Time Limit Exceeded 해결 : 자료구조의 활용 DFS의 다중 탐색을 여러번 사용하는 경우, 반복문 단위에서 DFS 횟수를 줄여서 Time Limit을 벗어날 수 있었다.(이분탐색) 하지만 어떤 조건에 맞춱가면서 하나의 DFS를 찾아가는 알고리즘에서 발생하는 것은 탐색해야하는 데이터에 비해, 리소스가 (메모리 등)이 한정적일 때 발생할 수도 있다.즉, 하나의 깊이 탐색 자체가 너무 많은 리로스를 사용하기 때문인데,이 때, List 나 Set 처럼 백트래킹이 있는 알고리즘에서 불필요한 사용이 있을 수 있다. 이 때,  백트래킹을 진행하지 않고 조건에 만족하는 방향만 찾아게 하면서 탐색 속도를 줄이려면 어떻게 해야할까.Questionare given a list of airline tickets where tickets[i] = [fromi, toi] r.. 2025. 1. 28.