본문 바로가기

개발 프로젝트/DB&PureJava기반 웹개발

위치기반 공공와이파이 확인시스템 - 프로젝트/코드 리뷰

 

감상평 : 개발능력만큼 설계능력을 끌어 올릴 것

1.1 좋았던점 : 

- http 통신, db사용, sql문, html tag,java script 등 전반적 이해도가 꽤 올라감.

- DTO를 사용하면서 귀동냥으로 배운  프로젝트 중반부터는 GPT를 한몸처럼 사용하면서 개발생산성이 매우 높아짐.

1.2  아쉬운점 :

- 첫 프로젝트 였던만큼 head-on으로 부딪혔던 면이 많이 있었던 것같다 ; 데이터 모델링이라는 개념이 없어 순서도 조차 그리지 못하고 우선 코딩부터 시작하였고 이는 코드의 복잡성과 시행착오를 발생시킴 

-> 추후 요구사항 모델링을 충실히 하여, 순서도와 데이터모델을 통해서, 중복성을 찾아내고 이를 추상화하기 위해 깊은 고민할 것. 개발능력만큼 설계능력을 끌어올릴 것

 

코드리뷰 : OCP원칙에 따라서 중복성제거를 고민할것.

2.1 DBservice 내에서 코드 중복성에 대한 고민

-db table에 대응되도록 DTO가 4개가( DTOBookmark.java,  DTOBookmarkGroup.java, DTOWifi.java, DTOHistory.java ) 있었는데 모두 table명, 칼럼명, sql문 , crud기능정도만 차이가 있고 중복되는 코드들이 상당했음. 이 중복을 줄일 방안은 없을지?

-> SOLID원칙 중에 OCP(개방폐쇄원칙)에 따라서 한개의 dbservice내에서 4개의 DBtable을 관리하는 것이 아니라, 이를 interface로 만들어서 각 db table별 service에 상속하게 하였으면 어땠을지?

a. db table 조작방식은 db connection - statement 생성 - stament 실행 - 자원 close로 이루어져있는데 db connection이라는 공통부분은 별개의 method로 뽑아서 method 내 method호출로 대체가능

 

public class ConnectionFactory {
    private static final String URL = "jdbc:mariadb://localhost:3306/seoulwifi";
    private static final String USER = "wifiuser";
    private static final String PASSWORD = "!tkdghk6226";

    static {
        try {
            Class.forName("org.mariadb.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            throw new RuntimeException("MariaDB Driver not found", e);
        }
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }
}

 

b. 그 외에는 개별적인 sql문 및 테이블이라 하나의 메소드로 묶기는 어렵지만, 가독성과 유지보수성을 위해서 추상클래스로 format을 정형화 하는 것을 고려할 수 있음. 


public abstract class AbstractDao<T> {
protected abstract void setParameters(PreparedStatement stmt, T entity) throws SQLException;
protected abstract T readFromResultSet(ResultSet rs) throws SQLException;
protected abstract String getCreateQuery();
protected abstract String getReadQuery();
protected abstract String getUpdateQuery();
protected abstract String getDeleteQuery();