본문 바로가기

Project4

DIP를 적용하여 리팩토링 해보기 프로젝트 진행하면서 DIP를 적용하여 리팩토링을 한 이야기를 해보려고 합니다. 이야기에 앞서, DIP의 정의는 아래와 같습니다. 의존 역전 원칙(Dependency Inversion Principle, DIP)DIP는 객체지향 설계 원칙인 SOLID 원칙 중 하나로, 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 모두 추상화에 의존해야 한다는 원칙입니다.DIP의 핵심은 구체적인 구현보다 추상화된 인터페이스나 추상 클래스에 의존하도록 설계해야 한다는 것인데요.DIP를 적용한다면 객체가 구체적인 구현에 의존하지 않고 인터페이스나 추상화에 의존하여 구현의 변경이나 교체를 간편할 수 있기에 전체적인 시스템의 유연성을 높이고, 변경에 더 잘 적응할 수 있어 코드의 의존성 관리를 개선하고, 변화에 유연하게 .. 2024. 6. 21.
JdbcTemplate batchUpdate로 벌크 insert하기 여러번의 단일 insert 질의를 통해 데이터를 저장하던 부분을 벌크 insert로 변경하여 한 번의 insert문으로 성능을 개선했던 이야기를 하고자 합니다. 원티드 채용공고를 스크래핑하는 배치 어플리케이션을 구축하고 있습니다.원티드에 채용공고에는 JD의 상세내용, JD에 포함된 기술스택 목록이 존재합니다.따라서 스크래핑한 채용공고 데이터를 1:N 관계로 이루어진 wanted_jd 테이블과 skill_history 테이블에 적재하고 있습니다.JD 상세 내용을 wanted_jd 테이블에 적재, 기술스택 목록은 skill_history 테이블에 적재@StepScope@Component@RequiredArgsConstructorpublic class WantedJdItemWriter implements It.. 2024. 3. 22.
DB 정적 데이터, Enum 타입을 활용하여 SQL 질의 간소화하기 사이드 프로젝트를 진행하면서 Enum 타입을 통해 데이터베이스 질의를 줄여 성능을 최적화한 이야기를 해보자 합니다. 현재 원티드 채용 플랫폼에서 최신 Job Description(JD) 정보를 스크래핑하고, 각 JD에서 개발자에게 요구하는 기술 스택 목록을 추출 및 인기있는 기술을 분석하여 해당 기술스택에 대한 맞춤형 강의영상을 제공하는 주제의 사이드 프로젝트를 진행 중입니다. 일관된 데이터를 저장하기 위한 데이터베이스 설계데이터베이스에 각 원티드 JD의 정보, 기술 스택, 그리고 JD와 기술 스택을 연결하는 매핑 정보를 저장하기 위해 다음과 같은 ERD 설계를 수행했습니다.(기술스택 테이블에 서비스에서 사용될 기술스택을 사전에 저장했습니다.)추출한 JD의 상세정보는 원티드JD 테이블에 저장추출한 JD와.. 2024. 1. 22.
멀티 모듈에서 독립적으로 Repository 관리하기(Querydsl) 멀티모듈의 도입사이드 프로젝트를 진행하면서 독립적인 배포와 높은 유지보수성을 목표로 하여 멀티모듈 구조를 도입했습니다.각 모듈은 명확한 책임을 가지며, 필요에 따라 의존성을 설정하여 독립적으로 개발, 배포할 수 있도록 설계했습니다.각 모듈의 대한 설명과 의존성은 아래의 그림과 같습니다.module-api : 서비스 운영 서버를 독립적으로 관리하기 위한 모듈 domain 모듈에 의존module-admin : 관리자 서버를 독립적으로 관리하기 위한 모듈로 domain 모듈에 의존module-domain : 엔티티와 repository를 독립적으로 관리하기 위한 모듈 모듈간의 독립성 강화를 위한 팀 내 정책 수립멀티 모듈 도입 시, 공통 의존 모듈인 common이나 domain에 특정 모듈에서 사용하는 코드가.. 2024. 1. 17.