부스트코스 웹 백엔드과정을 수강하고 첫 프로젝트 리뷰가 끝났다.
이틀정도 걸렸고 리뷰어님이 꼼꼼하게 리뷰해주셔서 만족스러운 리뷰였다.
코드를 공개하면 안되기 때문에 프로젝트마다 내 코드에 대한 코멘트 위주로 글을 작성할 계획이다.
첫번째 프로젝트는 CLI를 사용하는 간단한 명함 관리 프로그램이다. Java, JDBC, MySQL를 사용하여 구현하였다.
Comment1
쿼리문에서 와일드 카드(%)로 시작하는 것을 지양하는 것이 좋다.
해당 컬럼의 index로 지정되어 있다면 와일드카드로 시작하는 경우 index를 사용하지 않아서 쿼리의 성능이 좋지 않다.
https://grip.news/archives/1428
Comment2
class.forName은 한번 해당 클래스가 로드되면 더이상 로드될 필요가 없기 때문에
class 내에 static에서 한번만 로드하면 된다.
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
Class.forName()은 자바 리플렉션 API의 일부이다.
자바 리플렉션 API란 간단히 말해서 구체적인 클래스의 타입을 알지 못해도
클래스의 변수 및 메서드 등에 접근하게 해주는 API이다.(동적 바인딩)
Comment3
DB 접속 정보는 바뀌지 않아야 하기 때문에 final 키워드를 붙여주어 상수로 선언하는 것이 좋다.
또한 java conventions에서 상수의 경우
카멜표기법이 아닌 대문자 스네이크 표기법으로 작성하는 것이 관례이다.
private static final String DB_URL = "jdbc:mysql://localhost:3306/projectadb?useSSL=false";
private static final String DB_USER = "user";
private static final String DB_PASSWD = "password";
Comment4
날짜의 Type은 String이 아닌 DATETIME Type으로 컬럼을 생성하는 것을 권장한다.
또한 테이블 생성시 해당 칼럼의 default 값을 현재 시간으로 정의해준다면 insert시에 생략할 수 있다.
DDL
CREATE TABLE Personal(
name VARCHAR(10) NOT NULL,
address VARCHAR(13) NOT NULL,
birthday DATETIME default now()
);
insert
INSERT INTO Personal (name, address, birthday) values (?, ?, ?)
'Record > boostcourse' 카테고리의 다른 글
[boostcourse] 3. 웹 앱 개발 예약 서비스 생각해보기 #1 (0) | 2021.07.30 |
---|---|
프로젝트B. 방명록 만들기 리뷰 (0) | 2021.07.28 |
[boostcourse] 2. 웹 백엔드 프로그래밍 기초 생각해보기 #5 (0) | 2021.07.21 |
[boostcourse] 2. 웹 백엔드 프로그래밍 기초 생각해보기 #3 ~ #4 (0) | 2021.07.21 |
[boostcourse] 2. 웹 백엔드 프로그래밍 기초 생각해보기 #2 (0) | 2021.07.20 |
댓글