본문 바로가기

전체 글23

서비스 계층은 왜 필요할까? 미션을 하다가 리뷰어에게 이런 질문을 받은 적이 있습니다. 서비스가 꼭 있어야 할 이유에 대해서도 생각해 보면 좋을 것 같습니다. 컨트롤러에서 도메인과 Dao를 이용해 해결해도 되는데 서비스로 분리한 이유는 무엇일까요? 이번 미션에서 계층 구조를 분리할 때, 저는 Controller → Service → Repository → DAO → DB 의 형태로 계층 흐름을 설계해 주었는데요. 이런 식의 흐름을 만들게 된 이유는 단순히 계층화 아키텍처(Layered Architecture)에서의 Best Practice 라고 생각했기 때문이었습니다. 그러다가 막상 서비스 계층이 왜 필요한지에 대한 질문을 들었을 때, “남들 다 이렇게 만드니까요?” 라는 생각이 먼저 떠오르는 것이 스스로에게 꽤 부끄러웠습니다. 분.. 2023. 4. 23.
백준 3079번 | 입국심사 (C++ 풀이) 문제 https://www.acmicpc.net/problem/3079 3079번: 입국심사 첫째 줄에 N과 M이 주어진다. (1 ≤ N ≤ 100,000, 1 ≤ M ≤ 1,000,000,000) 다음 N개 줄에는 각 심사대에서 심사를 하는데 걸리는 시간인 Tk가 주어진다. (1 ≤ Tk ≤ 109) www.acmicpc.net 풀이 사용 알고리즘 : 파라메트릭 서치 시간 복잡도 : $O(N * log(M * min(T_{k})))$ 파라메트릭 서치로 풀 수 있는 문제였습니다. 이 문제에서의 큰 문제점은 $M$의 상한이 $10^{9}$이라는 점입니다. 완전 탐색 시 발생하는 시간은 대략 $O(N^{M})$ 정도일 테고, 당연히 터집니다. $M$의 상한이 너무 크니, 이를 로그 시간으로 최적화시킬 필요가.. 2023. 4. 16.
public VS private + getter 미션을 하다가, A 도메인이 가지고 있는 상수의 값을 B 도메인에서 필요로 하는 경우가 있었습니다. 지금까지 상수는 당연히 private static final 로 작성해왔는데, 위의 경우때문에 꽤 큰 고민에 빠졌습니다. 결론적으로 제가 생각한 선택지는 크게 3가지가 있었습니다. B 도메인에도 A 도메인이 가지고 있던 상수를 정의해서 사용한다. 이 경우는 좋은 판단이 아니라고 생각했습니다. 해당 상수가 가지는 의미가 B 도메인이 가지는 책임과는 거리감이 있다고 느꼈기 때문입니다. 상수를 도메인 필드로 바꿔서 getter를 연다. 이 경우도 썩 내키진 않았습니다. 이런 형태로 하면 블랙잭 게임 요구사항과는 다른 값(딜러의 이름이 더 이상 “딜러”로 한정되지 않는 것처럼!)들이 들어올 수 있고, 이는 요구사.. 2023. 4. 2.
취약한 기반 클래스 문제 문제의 발단 레벨 1 마지막 미션인 체스 미션을 진행하다가, 리뷰어에게 이런 피드백을 받은 적이 있습니다. 추상 메서드가 아닌 메서드를 override하는 것은 코드의 예측가능성이나 일관성의 측면에서 위험합니다. 당장은 문제가 없어보이지만, 코드 중복을 이런 식으로 처리하다보면 취약한 기반 클래스 문제를 맞이하게 될 거에요. 이 리뷰를 받게 된 발단은 이렇습니다. 체스 기물 클래스의 최상위 계층인 Piece, 그리고 그것을 상속하는 각각의 구체 기물들이 있는 상황이었죠. 그런데 도메인 로직을 작성하다보니, Piece로 업캐스팅된 구체 클래스가 Pawn인지 확인할 필요가 있었습니다. 다만, 주변의 여러 크루들로부터 “instanceof 연산자는 좋지 않다!” 라는 말을 자주 듣다 보니, 어떻게 해야 ins.. 2023. 3. 26.
JDBC, DB 접근을 위한 자바 표준 인터페이스 JDBC란? JDBC(Java Database Connectivity) 먼저 개념적인 의미부터 살펴볼까요? JDBC는 이름에서도 알 수 있듯이, 자바를 통해서 데이터베이스에 접근할 수 있도록 도와주는 자바 표준 API 입니다. 즉, JDBC API를 통해 자바 코드로 데이터베이스를 연결할 수 있고, SQL 쿼리문을 보내서 쿼리를 실행할 수도 있습니다. 여기서 주목해볼 점은 JDBC가 자바의 표준 API 라는 점입니다. 현존하는 자바 DB 관련 기술들 중, 인기 있는 SQL Mapper나 ORM 기술들 대부분 Low-Level 단에서는 JDBC API가 사용되고 있습니다. 이처럼 JDBC는 자바의 표준 인터페이스로서 정말 다양한 DB 기술들에 사용되고 있는데요, 정말 많이 사용되고 있는 JDBC, 과연 어.. 2023. 3. 12.