전체 글

취뽀완료
2024 상반기 취준 준비 코테

시작 - 2/27

목표로 하는 코딩 테스트의 공부량은 다음과 같다. 1. barking dog의 0x13 이분탐색까지의 문제집 및 강의 복습 2. 프로그래머스 lv 2까지 다 풀기 3. 프로그래머스 역량자격증 (PCCP) 한번 도전하기 파이썬으로 새로 준비하는 만큼, 풀며 정리하는 식으로 마무리 예정.

대외활동/프로그래머스 데브코스 백엔드 5기

백엔드 데브코스 3, 4개월차 회고 - 최종 프로젝트 전 마음가짐

회고를 11월 중순에 쓰고 어느 덧 시간이 꽤 흘렀다. 시간은 흐르고 흘러, 백엔드 팀원들과 한달 정도의 프로젝트를 마쳤고 최종 프로젝트에 돌입했다. 그 동안의 어떤 활동과 사고과정을 거쳤는지, 그리고 어떤 계획인지를 말해볼까 한다. 어떤 활동을 했는가 해당 기간에는 백엔드 팀원들과의 프로젝트가 주된 활동이었다. 신경쓸 요소들이 매우 많았다. 나의 경우 ci/cd 경험은 전무했기에 맛보기를 할 수 있는 좋은 기회였고, 도메인 분석도 꽤 까다로웠다. 네이버 스마트 스토어에 관한 클론 코딩이었고, 해당 주제는 확실히 여러 도메인이 깊게 얽혀있었다. 사실 나는 어쩌다보니 맡은 도메인들이 약간 독립적인 도메인들이 많다보니 다른 팀원들이 사용할 함수나 로직들을 만드는, 어찌보면 CRUD에 많이 치중되게 역할을 담..

백준 문제풀이

백준 2805번 - 나무 자르기 (python)

https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 해당 문제를 작년에 풀려고 했을 때 해당 코드를 작성했었다. (C++로 했으니 양해..) #include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); long long n, m; // n = 나무 수, m..

백준 문제풀이

백준 6593번 - 상범 빌딩(python)

https://www.acmicpc.net/problem/6593 6593번: 상범 빌딩 당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어 www.acmicpc.net 해당 문제를 본 순간 떠오른 문제가 있다. https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 바로 이 토마토 문제이다...

백준 문제풀이

백준 2146번 - 다리 만들기(python)

https://www.acmicpc.net/problem/2146 2146번: 다리 만들기 여러 섬으로 이루어진 나라가 있다. 이 나라의 대통령은 섬을 잇는 다리를 만들겠다는 공약으로 인기몰이를 해 당선될 수 있었다. 하지만 막상 대통령에 취임하자, 다리를 놓는다는 것이 아깝다 www.acmicpc.net 우선 해당 문제의 사고 과정은 다음과 같다. A라는 섬과 B라는 섬이 있을 때, 두 섬은 구분이 되어야하는가? → 그렇다. 그렇다면 구분은 어떻게 할까? → 숫자를 1, 2, 3 이런 식으로 구분시키자. 이제 섬 영역들 하나씩 BFS를 돌리자. 우선 각 섬 구분은 bfs를 돌리면서 진행했다. def divide_bfs(x, y): q = deque() q.append((x, y)) visited[x][..

책 정리/도메인 주도 개발 시작하기

Chapter 11. CQRS

단일 모델의 단점 주문 내역 조회 기능을 구현하려면 여러 애그리거트에서 데이터를 가져와야 한다. 예를 들면 Order에서 주문 정보를 가져와야 하고, Product에서 상품 이름을 가져와야 하고, Member에서 회원 이름과 ID를 가져와야 한다. 조회 시 여러 애그리거트의 데이터가 필요하면 구현 방법을 고민해야 한다. 식별자를 이용해 애그리거트를 참조하는 방식을 사용하면 즉시 로딩과 같은 JPA의 쿼리 관련 최적화 기능을 사용할 수 없다. 애그리거트 간 연관을 식별자가 아닌 직접 참조하는 방식으로 구현해도 고민이 생긴다. 같은 연관도 즉시 로딩이나 지연 로딩으로 처리해야하기 때문이다. 이런 고민이 발생하는 이유는 시스템 상태를 변경할 때와 조회할 때 단일 도메인 모델을 사용하기 때문이다. ORM 기법은..

책 정리/도메인 주도 개발 시작하기

Chapter 10. 이벤트

시스템 간 강결합 문제 쇼핑몰에서 구매를 취소하면 환불을 처리해야 한다. 이 때 환불 기능을 실행하는 주체는 주문 도메인 엔티티가 될 수 있다. 도메인 객체에서 환불 기능을 실행하려면 환불 기능을 제공하는 도메인 서비스를 인자로 받고 취소 도메인 기능에서 도메인 서비스를 실행해야 한다. public class Order { public void cancel(RefundService refundService){ // 취소 로직 // 환불 로직 // 외부 서비스에 의존하고 있음 refundService.refund(..) } } 보통 결제 시스템은 외부에 존재하므로 RefundService는 외부에 있는 결제 시스템이 제공하는 환불 서비스를 호출한다. 이 때 두 가지 문제가 발생할 수 있다. 첫 번째는 외부..

책 정리/도메인 주도 개발 시작하기

Chapter 9. 도메인 모델과 바운디드 컨텍스트

도메인 모델과 경계 처음 도메인 모델을 만들 때 빠지기 쉬운 함정이 도메인을 완벽하게 표현하는 단일 모델을 만드는 시도를 하는 것이다. 하지만 한 도메인은 다시 여러 하위 도메인으로 구분되기 때문에 한 개의 모델로 여러 하위 도메인을 모두 표현하려고 시도하면 오히려 모든 하위 도메인에 맞지 않은 모델을 만들게 된다. '상품'이라는 모델을 생각해보자. 카탈로그에서의 상품. 재고 관리에서의 상품. 주문에서의 상품. 배송에서의 상품. 이름만 같지 실제로 의미하는 것이 다르다. 이렇게 하위 도메인마다 같은 용어라도 의미가 다르기 때문에 한 개의 모델로 모든 하위 도메인을 표현하려는 시도는 올바른 방법이 아니며, 표현할 수도 없다. 하위 도메인마다 사용하는 용어가 다르기 때문에 올바른 도메인 모델을 개발하려면 하..

void_melody
성수의 프로그래밍 극복 기록