분류 전체보기
[Briefing] Facade로 계층 구조 개선하기
🔥 Controller → Service → Repository 계층 구조의 문제점 2.0.0 버전 업데이트 이슈 대응 이후, 서버 업무가 한가해진 타이밍에 기존 설계를 점검해보았습니다. Briefing 팀에서는 전형적인 Controller → Service → Repository 구조를 바탕으로 개발이 되어있었고, 기존 설계에서 여러 문제점을 찾을 수 있었습니다. 먼저, Command 요청에 대한 처리과정 중 DTO ↔ Entity간 변환을 예시로 문제점을 살펴보겠습니다. [기존] DTO ↔ Entity 변환 과정 (Command) Layer Problem-1 Problem-2 Controller Service로 부터 Entity를 반환받습니다. → Controller가 테이블의 세부 구현을 알게 됩니..
[Briefing] API 응답 캐싱을 통한 조회 속도 개선
🚀 API 응답 캐싱의 필요성 Briefing 앱에서는 홈화면에서 타입(사회, 과학, ...)별로 브리핑 목록을 조회하고 있었습니다. 스크랩을 하거나 취소하였을 때, DB에 새로운 브리핑 목록이 추가되었을 때를 제외하면 동일한 응답을 계속 내려주고 있었습니다. 그래서 서버팀에서는 해당 API응답을 캐싱하기로 했으며, 아래와 같은 요구사항을 정의했습니다. 캐시를 도입하기 전/후로 API 응답 속도를 측정해보고 개선된 지표를 확인한다. 100명의 사용자가 10번 요청하는 것을 기준으로 속도를 측정한다. 운영서버와 스펙이 동일한 개발서버(겸 스테이징 서버)에서 속도를 측정한다. 캐시 이름은 메소드명과 동일하게 정하고, 키는 브리핑 타입으로 한다. 스크랩 개수의 정합성을 보장하기 위하여 스크랩 개수 변경시, 캐..
[Briefing] Spotless로 코드 포맷 유지하기
🚀 코드 Formatter의 필요성 코드 Formatter의 필요성은 소프트웨어 개발의 여러 측면에서 중요합니다. 주요 이점은 다음과 같습니다. 일관성 유지 Formatter는 팀 내의 모든 개발자가 동일한 코딩 스타일을 유지하도록 도와줍니다. 가독성 향상 일관된 코드 포맷팅은 코드의 가독성을 크게 향상시킵니다. 이는 코드의 이해를 돕고, 디버깅 및 유지보수를 용이하게 만듭니다. 시간 절약 자동화된 포맷팅으로 수동으로 코드 스타일을 맞추는 데 소요되는 시간을 줄여줍니다. 협업 효율성 일관된 코드 스타일은 팀원들이 서로의 코드를 이해하고 협업하는 데 도움이 됩니다. 💡 Spotless란? https://github.com/diffplug/spotless GitHub - diffplug/spotless: K..
[SQL 고득점 Kit] SELECT 풀이
프로그래머스 SQL 고득점 Kit SELECT 20문항에 대한 풀이입니다. MySQL 문법 기준으로 작성했습니다! 🔥 💡 평균 일일 대여 요금 구하기 https://school.programmers.co.kr/learn/courses/30/lessons/151136 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr SELECT ROUND(AVG(DAILY_FEE)) AVERAGE_FEE FROM CAR_RENTAL_COMPANY_CAR WHERE CAR_TYPE='SUV'; 💡 조건에 맞는 도서 리스트 출력하기 https://school.programmers..
[Design Pattern] Strategy 패턴
💡 Strategy 패턴이란? 전략(Strategy) 패턴은 객체 지향 프로그래밍에서 널리 사용되는 디자인 패턴 중 하나입니다. 이 패턴의 핵심은 특정 태스크를 수행하는 알고리즘(전략)을 객체의 행동으로 캡슐화하고, 이를 동적으로 변경할 수 있게 하는 것입니다. 즉, 알고리즘의 변경이 사용자나 클라이언트 코드에 영향을 미치지 않으면서도 알고리즘을 유연하게 교체할 수 있습니다. 이는 '전략'을 정의하는 일련의 클래스들을 생성하고, 이 클래스들이 동일한 인터페이스나 추상 클래스를 구현하도록 함으로써 달성됩니다. 🌟 전략 패턴의 장점 확장성: 새로운 전략을 추가하기 위해 기존 코드를 변경할 필요가 없습니다. 재사용성: 다른 문맥에서도 같은 전략을 재사용할 수 있습니다. 유지보수 용이: 전략을 독립적으로 개발하..
[백준 - 4179] 불! [C++]
1. 문제 https://www.acmicpc.net/problem/4179 4179번: 불! 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문자 www.acmicpc.net 2. 풀이 불의 Queue와 지훈이의 Queue를 만들어서 동시에 BFS를 돌려주면 된다. 처음에는 지훈이의 Queue를 만들고 깊이가 바뀔때 2중포문으로 직접 불을 확산시켜줬더니 시간초과가 났다. q.size()를 이용하면 이전 레벨의 노드를 모두 꺼내서 쓰기때문에 while한번돌때마다 깊이가 하나 증가하는 셈이다. 3. 코드 #include #include #incl..