2024/07 5

[Test] DIP 적용시켜서 테스트 코드 시간 단축시키기 - 실전편

이번에는 UserService, AuthService에 DIP를 적용시켜, 기존에 작성했던 AuthServiceTest, RestoreAuthTest, UserServiceTest의 시간을 단축시켜보고자 한다 https://kdh0518.tistory.com/entry/Architecture-Layered-Architecture-%ED%83%88%EC%B6%9C%EA%B8%B0-feat-SOLID-Hexagonal-DDD-Test-Code [Architecture] Layered Architecture 탈출기 (feat. Hexagonal, Test Code)개발을 시작하며 기본적인 MVC 패턴과 Layered 아키텍처를 공부한 이후 줄곧 Layered로 백엔드 패키지 구조를 설계했었다. 내가 지금까지 ..

[백준 1967 / Python] 트리의 지름

난이도: 골드4분류: 그래프 이론, 그래프 탐색, 트리, 깊이 우선 탐색 key pointleaf node - leaf node는 불가능. leaf가 하나인 경우도 존재하고, parent - child의 거리가 더 먼 경우도 충분히 존재한다트리의 지름 안에 모든 다른 점들이 위치해있다. 따라서 어떤 점에서 탐색하든 상관없이 가장 멀리있는 정점을 고른다면, 그 점은 트리 지름 노드 중 하나이다그리고 트리 지름 노드에서 가장 먼 정점은, 또 다른 트리 지름 노드가 된다 fst approach (x)우선순위 큐를 사용cost가 높은 순서대로 차례대로 꺼냈을 때, 가장 먼저 나오는 두 개의 leaf node를 연결한 비용이 트리의 지름이다>>> fail, cost가 가장 높더라도 정답이 아닌 경우가 충분히 존재..

[Architecture] Layered Architecture 탈출기 (feat. Hexagonal, Test Code)

개발을 시작하며 기본적인 MVC 패턴과 Layered 아키텍처를 공부한 이후 줄곧 Layered로 백엔드 패키지 구조를 설계했었다. 내가 지금까지 진행했던 프로젝트들은 대부분 데드라인이 있어서 일정 기간 안에 빠르게 끝내야 했고, 내 실력도 많이 부족했기에 테스트코드나 패키지 구조, 고도화 등은 생각조차 하지 못했다. 그러다 최근에 여유가 좀 생기면서 실제로 서비스를 운영해보고 싶다는 생각이 들었고, 좀 더 견고한 서버를 운영하기 위해 테스트코드 작성에 관심이 생겼다. 열심히 여기저기 구글링을 해보고 깃허브도 뒤져가며 테스트 코드를 작성하려 했지만, 내가 진행하던 프로젝트에서는 테스트 코드가 볼륨이 너무 크고 코드 작성 자체가 너무 어려웠다. 아주 작은 기능 하나를 테스트하려면, 서비스 하나에 묶여있는 ..

[OS] 프로세스 (Process)

프로세스(Process)  프로세스란 "실행"중인 프로그램 또는 작업으로, 관리의 단위를 의미한다. 즉 PC에 설치된 프로그램이 실행중이라면 그것이 곧 프로세스다. 프로세스에서의 연산은 CPU와 RAM을 사용하여 이루어진다. 프로세스의 구조, PCB, 동작과정을 통해 더 자세히 알아보자   프로세스의 구조 프로세스는 크게 stack, heap, data, code 영역으로 구성되어 있다.stack임시 데이터가 저장되는 영역으로, 함수 및 지역변수 등이 선언되면 stack 영역에 저장된다함수 호출 시 생성되며, 함수가 끝나면 반환된다프로세스가 메모리에 로드될 때 stack 사이즈가 고정되므로, 동적으로 사이즈를 변경할 수 없다명령 실행 시 자동으로 증가/감소 하기 때문에, 보통 메모리의 마지막 번지를 지정..

Operating System 2024.07.09

[JPA] 연관된 테이블 삭제에 대한 고민(feat. cascade)

현재 회원탈퇴 플로우는 다음과 같다유저 회원탈퇴시 특정 기간(7일)동안 계정을 비활성화user 관련된 shorts, comment, follow 등 모든 엔티티를 soft delete처리비활성화된 계정에 유저가 접근시, id와 pw 확인해서 계정을 다시 활성화(모든 soft delete 처리된 엔티티를 복구)매일 자정 batch를 돌려서 deletedAt이 LocalDataTime.now()와 7일 이상 차이난다면 물리 삭제 진행 이제 물리적 삭제를 진행하는 방법을 선택해야한다. 처음에는 CascadeType.ALL 밖에 몰랐는데, 현재 테이블끼리 양방향 매핑이 되어있지 않은 상태이고, 양방향 매핑을 걸어주더라도 성능저하와 순환 참조 문제를 마주할 수 있다는 문제점이 존재한다.따라서 단방향 매핑에서 해결..