본문 바로가기

공부 기록

(319)
쿼리 안의 쿼리(서브쿼리) 서브쿼리(Subquery) - nested query or inner query - SELECT, INSERT, UPDATE, DELETE에 포함된 query 서브쿼리를 사용한 예시 - ID가 14인 임직원보다 생일이 빠른 임직원의 ID, 이름, 생일을 알고 싶을 때 SELECT id, name, birth_date FROM employee WHERE birth_date < ( SELECT birth_date FROM employee WHERE id = 14); - ID가 1인 임직원과 같은 부서, 같은 성별인 임직원들의 ID, 이름, 직군을 알고 싶을 때 SELECT id, name, position FROM employee WHERE (dept_id, gender) = ( SELECT dept_id,..
[Spring] Validation(2) - Custom Validation Custom Validation의 두 가지 방법 1. AssertTrue / False 어노테이션을 통해 특정 메서드를 커스텀 검증 로직으로 적용 2. 커스텀 어노테이션 생성 및 ConstraintValidator를 적용하여 재사용 가능한 커스텀 검증 로직 적용 1) @AssertTrue 어노테이션을 이용한 검증 @Getter public class member { ... private String joinDate; @AssertTrue // 값이 true일 때 검증 성공 public boolean isValidDate() { if( ... ) { // joinDate의 값이 유효하지 않은 입력값일 때 return false; } return true; } } 클래스 내에 검증 로직을 적용한 메서드를 생..
[Spring] Validation(1) - Annotation Validation - Error나 Exception을 방지하기 위해서 미리 검증하는 과정 - 개발자가 주로 챙겨야 하는 검증은 크게 두 종류로 나뉜다. => 데이터 검증, 비즈니스 검증 데이터 검증 - 필수 데이터의 존재 유무 - 문자열의 길이나 숫자형 데이터의 경우 값의 범위 - email 등 특정 형식에 맞춘 데이터 비즈니스 검증 - 서비스의 정책에 따라 데이터를 확인하여 검증 - 경우에 따라 외부 API를 호출하거나 DB의 데이터까지 조회하여 검증하는 경우도 있다. 비즈니스 로직에 검증 코드 삽입 시 주의사항 1. 여러 가지 상황에 대해 검증 시 코드의 길이가 길어질 수 있다. 2. 핵심 로직과의 분리가 필요하다. 3. 검증 로직이 흩어져 있는 경우 혼란을 초래하고 재사용하기 어렵다. 스프링이 제..
[Java] throw Exception 테스트하기 실행 환경(build.gradle) dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.2' testImplementation 'org.assertj:assertj-core:3.24.2' } spring-boot-starter-test가 있다면 바로 jUnit5를 사용할 수 있다. Exception을 throw하는 메서드 생성 public class MyArrayList implements List { ... public T get(int index) { if(index = size) {..
Updates were rejected because the tip of your current branch is behind 오류 해결 작업 후 아래와 같이 push가 되지 않았다. 데이터 유실 등과 같은 문제가 발생할 수 있어 에러가 나는 것이라고 한다. 내 경우에는 pull을 한 뒤 아주 간단한 작업을 한 이후에 이런 에러가 발생했기 때문에(데이터 유실에 대한 우려가 없기 때문에) 임시방편으로 해결을 했다. 해결법 git push origin +브랜치_이름 위와 같이 브랜치 이름 앞에 + 를 붙이면 된다.
Java file outside of source root 오류 해결 자료구조와 관련된 책으로 공부를 하던 중, 실습을 하기 위해 깃허브에서 자료를 다운로드 받았다. 그 후 필요없는 폴더들을 삭제 및 정리하고 인텔리제이로 열었더니 모든 java 파일에 Java file outside of source root 오류가 떴다. 해결법 File > Project Structure > Project Settings > Modules 에서 폴더를 직접적으로 지정해준다. Root 폴더를 클릭하고, Mark as 에 있는 Sources를 클릭한다. 필요한 경우 Test 폴더와 Resources 폴더도 같은 방법으로 지정해주면 된다.
[10분 테코톡] 오찌, 야호의 DI와 IoC https://youtu.be/8lp_nHicYd4 IoC : 제어의 역전 - 직접 객체를 생성하여 코드를 "제어"(관리) - "역전" : 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것 - 역할과 관심을 분리해 응집도를 높이고 결합도를 낮추며, 이에 따라 변경에 유연한 코드를 작성할 수 있는 구조가 될 수 있다. - 할리우드 법칙(Hollywood Principle) => "Don't call us, we'll call you." DIP(Dependency Inversion Principle) : 의존 역전 원칙 - 상위 레벨의 모듈은 절대 하위 레벨의 모듈에 의존하지 않는다. - 둘 다 추상화에 의존해야 한다. IoC & DIP => 클래스 간 결합을 느슨히 하기 위함 => 애..
CPU는 어떻게 작동할까? https://youtu.be/Fg00LN30Ezg P형 반도체 : 전자가 한 개 적은 원소를 첨가한 반도체 N형 반도체 : 전자가 한 개 많은 원소를 첨가한 반도체 트랜지스터에는 PNP 또는 NPN 반도체가 들어있다. AND 게이트, OR 게이트, NOT 게이트, XOR 게이트 CPU는 RAM과 소통하는데, CPU와 비교하면 RAM도 많이 느리기 때문에 CPU 내부나 근처에 캐시 메모리를 만들어 그 곳에 데이터를 저장한다.(L1/L2/L3 CACHE) 레지스터 : CPU 내부에서 데이터를 일시적으로 저장하는 장치 - 프로그램 카운터 : 다음에 수행할 메모리의 주소가 들어있다. - 메모리 주소 레지스터 : 프로그램 카운터에서 수행할 주소를 넘겨 받아 해당 주소의 데이터를 가져온다(인출). - 메모리 버퍼..