본문 바로가기

TIL/2021

(13)
[TIL] 0824 JDBC (Java Database Connectivity) ✏️ 오늘의 학습 Flow of JDBC Operation 드라이버 매니저로부터 커넥션을 받아와서 커넥션으로부터 상태를 만든다. 상태를 가지고 문제가 있으면 문제를 핸들링하고, 문제가 없으면 실제 상태를 실행시킨다. 실행시킨후 resultSet을 받아서 결과를 처리한다. 여기서 주의할 점은, 요청이 다 끝나면 statement close, connection close를 해야한다. prepared statement 아래와 같은 코드가 있다고 하자. 디비에서 daisy 의 이름을 가진 customer 정보를 찾는 내용이다. daisy에 해당하는 정보를 잘 가져온다. 그런데 이 코드에는 위험한 요소가 있다. 만약 List names = new JdbcCustomerRepository().findNames("..
[TIL] 0823 테스팅에 대해 알아보자 ✏️ 오늘의 학습 JUnit4, JUnit5 JUnit4는 JUnit.jar(모듈 1개) 하나로 배포가 되어서 확장성이 많이 떨어졌다고 한다. 이를 보완하기 위해 3개의 모듈로 분리된 JUnit5가 나오게 되었다고 한다. JUnit5는 JUnit Platform / JUnit Jupitor / JUnit Vintage의 3개의 모듈이 있다. JUnit Platform : JVM 위에서 돌아가는 테스팅 프레임워크를 런칭하기위한 근간을 제공한다. 테스트를 발견, 계획, 생성하는 TestEngine 인터페이스를 가지고 있고, TestEngine을 통해 테스트를 발견, 실행, 결과를 보여준다. JUnit Jupitor - TestEngine의 실제 구현체는 별도 모듈이다. 모듈 하나가 jupitor-engine..
[TIL] 0822 Logger 배운 것 1. Log 레벨 설정 org.prgrms.kdt 에 log level 을 warn 으로 set 하면 org.prgrms.kdt 하위 class 는 전부 warn 로 set 된다. 특정 클래스에서 log level 설정을 다르게 하고싶으면 특정 클래스에서 원하는 레벨로 설정해주면 된다. 그럼 로그 레벨 설정은 어떻게 할까? resources 하위에 logback.xml 파일을 만들어주고 기본 설정으로 다음과 같이 해주었다. 기본 설정은 공식 문서를 참고했다. %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 기본 설정을 보면 root level="DEBUG" 와 같이 되어있는데, 이는 root를 디버그 레벨로 설정한다는 뜻이다. 즉 root 하..
[TIL] 0820 우선순위를 명확하게 🎊 오늘의 느낀점 2일차 과제는 금방할 수 있을거라고 생각했다. (로컬에 파일을 저장하고, 읽어오는것만 구현하면 된다고 생각했고, 맞긴 맞음) 파일을 읽는 부분을 완성하고 저장하는 부분을 작성하려는 순간! 아니? 그럼 데이터가 추가될때마다 로컬에서 파일을 읽어와야한다고? 가 뇌리에 스쳤다. 로컬디스크에서 파일을 읽어오는 작업은..비용이 꽤나 크기때문에 이건 아닌데? 라는 생각이 들었다. 음, 그럼 어떡하지? static으로 데이터를 계속 들고있어야하나? 라는 생각을 하다가 음, 디자인 패턴에서 배웠던 프록시패턴을 적용해볼까? 생각했지만 뭔가 모를 찝찝함이 있어서, 이런 상황에서는 어떻게하는지 이것저것 검색해봤다. 서칭해본 결과로 ehcache를 발견하고, 아! 이거다! 이거로해야겠다! 싶었다. 코드를 어..
[TIL] 0818 Spring 컴포넌트 배운 것 1. Component Scan 기존 코드는 아래와 같이 config에서 직접 bean을 등록해주었다. @Configuration public class AppConfiguration { @Bean public VoucherRepository voucherRepository() { return new VoucherRepositoryImpl(); } } 해당 부분을 아래와 같이 어노테이션기반으로 코드를 바꾸었는데, 빈을 찾을 수 없다는 오류를 뿜뿜..하더라.. 이유가 뭘까싶어서 이것저것 검색해보았는데, 대부분 어노테이션 설정을 빼먹어서 빈등록이 안되어있었다. 나는 제대로 해줬는데 왜 안되지? 싶었다. @Configuration public class AppConfiguration { } @Repo..
[TIL] 0813 Database 이것저것5 배운 것 1. enum에 정의되어있지 않은 값이 들어올 경우에는 레코드에 빈 값이 저장된다. 아래와 같은 테이블을 만들고, CREATE TABLE test.gender( name varchar(16) NOT NULL, gender enum('Male', 'Female') default NULL ); 다음과 같은 레코드를 INSERT 하게되면 INSERT INTO test.gender(name) VALUES('Unknown'); 레코드는 다음과 같이 저장된다. name gender Unknown 2. View 자주 사용하는 쿼리(SELECT)에 이름을 붙이고 사용을 쉽게하는 것으로, 가상테이블 이라고도 하며View로 데이터베이스단에 저장된다. CREATE OR REPLACE VIEW view_name AS..
[TIL] 0812 Database 이것저것4 배운 것 1. INSERT 아래와 같이 테이블을 만들고 INSERT 할 때 CREATE TABLE test.vital ( user_id int not null, vital_id int primary key, date timestamp not null, weight int not null ); 이렇게 필드리스트를 명시적으로 적어줘도 되고, INSERT INTO test.vital(user_id, vital_id, date, weight) VALUES(100, 1, '2021-01-23', 75); VALUES 값 순서가 테이블 만들 때 필드 순서랑 동일하다면 필드리스트 생략 가능하다. INSERT INTO test.vital VALUES(100, 1, '2021-01-23', 75); 2. DELETE v..
[TIL] 0811 Database 이것저것3 배운 것 1. WHERE Operator IN, NOT IN - WHERE book_id in (3, 4) -> WHERE book_id = 3 OR book_id = 4 와 같다. - WHERE book_id not in (3, 4) -> book_id 가 3, 4 가 아닌 그 외 아이디 LIKE, NOT LIKE(문자열 매칭할 때 사용한다.) - LIKE : 대소문자 구별 없이 문자열 매칭 기능을 제공해준다. - WHERE book LIKE 'G%' -> 'G*' (G로 시작하는 레코드를 찾아준다.) - WHERE book LIKE '%o%' -> '*o*'(o가 들어간 레코드를 찾아준다.) - WHERE book NOT LIKE 'G%' -> 'G*' (G로 시작하는 레코드를 제외하고 찾아준다.) ..