본문 바로가기

전체 글192

47일차: Spring MVC(데이터 액세스 계층) ❯ DDD(Domain Driven Design) 도메인 주도 설계 Domain이란 하나의 비즈니스 업무 영역과 관계된 개념이다. 식당을 예로 들어보자. 주문을 하는 것 / 음식을 만드는 것 / 조리된 음식을 전달하는 것 등 각각의 기능이 하나의 도메인 지식이 되며 이를 구현한 것을 비즈니스 로직이라고 한다. 도메인 주도 설계는 이러한 도메인들을 위주로 진행되는 설계 기법을 의미하는데 여기에서 다음 두 가지 개념이 필요하다. Aggregate(애그리거트): 비슷한 업무 도메인의 묶음을 의미한다. 비즈니스 로직을 캡슐화하는것과 관련이 있다. 식당 예시를 활용해서 설명하면 고객 / 주문 / 메뉴(음식) / 결제 각각이 애그리거트가 될 수 있다. 애그리거트간의 관계는 1 : 1, 1 : N, N : N이 될.. 2023. 4. 19.
[Java] 이진검색(BinarySearch) 이진 검색은 데이터가 키 값으로 이미 정렬되어 있을 때 적용할 수 있는 알고리즘이다. 이진검색의 시간복잡도는 O(log N) 이다. 전체 범위를 탐색하는 선형 검색과 달리 검색 범위를 1/2로 줄여가면서 찾아가는 방법이다. 아래와 같이 7개의 요소를 가지는 배열에서 값이 23인 요소의 인덱스를 찾는 과정을 살펴보자. 1. 먼저 중앙값을 검색한다. 2. 중앙값과 타겟값을 비교한다. 중앙값인 15가 타겟인 23보다 작으므로 값이 작은 왼쪽 부분은 탐색하지 않고 오른쪽 부분만 탐색한다. 만약 타겟이 15였다면 더 이상 검색을 하지 않고 종료되었을 것이다. 이처럼 크기 비교 결과에 따라 검색 범위가 달라지므로 이미 정렬되어 있는 대상에만 적용할 수 있다. 3. 타겟을 찾을때까지 1과 2의 과정을 반복한다. 위 .. 2023. 4. 19.
46일차: Spring MVC(JDBC, Spring Data JDBC) ❯ JDBC(Java Database Connectivity) JDBC란 자바에서 데이터베이스와 연결하여 데이터를 다루기 위한 API 를 의미한다. 자바에서 제공하는 표준 사양이다. JDBC를 이용해 자바 애플리케이션에서 다양한 DB시스템(Oracle, MySQL, PostgreSQL 등)과 연결할 수 있다. JDBC API는 데이터베이스 연결, 쿼리 실행, 결과 처리 등을 담당한다. 일반적으로 JDBC를 직접 사용하지는 않는다고 한다. Spring Data JDBC, Spring Data JPA 와 같은 데이터 액세스 프레임워크를 사용한다. JDBC 동작 흐름 Java 애플리케이션에서 JDBC API를 이용해 적절한 JDBC 드라이버*를 로딩하고 데이터베이스를 사용하게 된다. *JDBC 드라이버란 데이.. 2023. 4. 18.
[MAC] 사용중인 포트 종료하기 애플리케이션 코드를 작성하고 8080 포트를 이용해 실행하다보면 이미 해당 포트로 실행중인 코드가 있어 실행되지 않는 오류가 발생할때가 있다. 이 때 실행중인 코드를 종료하기 위해 다음과 같은 방법을 사용할 수 있다. 1. 현재 실행중인 포트 PID 찾기 터미널에서 아래 코드를 입력하여 해당 포트의 PID(프로세스 번호)를 알아낸다. lsof는 list open files 의 약자로 열려있는 파일에 대한 정보를 출력해준다. lsof -i :검색하려는 포트번호 2. 해당 프로세스 종료하기 아래 코드를 입력하여 해당 포트의 프로세스를 종료한다. kill은 프로세스를 종료할 때 사용하는 명령어이다. kill -9 PID번호 아래 그림과 같이 다시 lsof로 검색했을때 아무것도 나오지 않으면 정상적으로 종료된 .. 2023. 4. 17.
45일차: Spring MVC(비즈니스적인 예외 던지기, throw) 애플리케이션을 실행할 때 발생할 수 있는 예외는 크게 두가지로 나눌 수 있다. Checked Exception : 발생한 예외를 Catch 하여 체크한 뒤 해당 예외에 대한 구체적인 처리를 해주어야하는 예외 ex. ClassNotFoundException Unchecked Exception : 해당 예외에 대한 처리를 할 필요가 없는 예외 ex. NullPointerException, ArrayIndexOutOfBoundsException 보통 개발자가 코드를 잘못 작성해서 발생하는 예외는 unchecked Exception가 많으며 RuntimeException을 상속받은 예외이다. ❯ 예외 던지기(throw) 개발자가 필요에 의해 예외를 던져야(발생시켜야)하는 경우가 있다. 예를들어 특정 정보를 DB.. 2023. 4. 17.
[JAVA] 버블정렬(Bubble Sort) 개념과 코드 구현 버블정렬(Bubble Sort)이란 이웃한 두 요소의 대소관계를 비교해서 교환을 반복하는 정렬 알고리즘이다. 시간 복잡도가 느리지만 코드가 단순하다. 구분 최악 시간복잡도 최선 시간복잡도 평균 시간복잡도 공간복잡도(메모리) 안정성 버블정렬 O(n^2) O(n^2) O(n^2) O(1) Y 알고리즘 1. 배열의 첫번째 원소부터 비교를 시작한다. 2. 현재 원소와 다음 요소의 크기를 비교한다. 3. 현재 요소가 다음 원소보다 크다면 두 원소를 교환한다. 4. 이 과정을 배열의 끝까지 반복한다. 5. 배열의 첫번째 자리에서 부터 [마지막 원소 - (반복횟수)] 자리까지 반복한다. 6. 정렬하는 과정을 배열의 길이 -1 번 반복하면 모든 원소가 정렬된다. 소스코드(Ver 1) public static int[].. 2023. 4. 17.