콘텐츠로 이동

2021 06 10

2021-06-10

java-chess 복습하기

  • 복습 - SparkJava를 통한 개발 - Gson을 통한 JSON 통신 - 어라 이건 디폴트 생성자가 필요없나보네? 리플렉션을 안쓰...나? - 그럴수도 있겠다 익명클래스로 모든 경우에 대해 코드를 작성해뒀네 - JdbcDriver 클래스를 직접 가져와서 Connection을 하드코딩
  • 회고 - 생각보다 Java보다 JS에 더 공을 들였던 기억이... - DB를 몰라서 그냥 코드를 복붙해왔던 기억이...
  • 피드백 공유 - 관계형 DB를 만들자 - 데이터에 대한 쿼리가 가능해짐 - DB 마이그레이션에 용이함 - DB 자원 반환 잘 할 것
  • 개선 방향 - Controller에서 try-catch를 통한 예외처리 - 컨트롤러를 호출하는 쪽에서 ControllerAdvice 처럼 모두 잡아줄 수 있지 않을까? - 아 SparkJava는 그냥 Route라는 익명클래스를 애초에 등록한 다음에 Router에 등록을 Http 메서드와 처리 방법들을 저장해두네? - 익명클래스 안에 그러면 예외 처리에 대한 코드도 넣어주는게 맞겠구만...
    public class Routes {
        private List<RouteEntry> routes;
    }
    
    class RouteEntry {
        HttpMethod httpMethod;
        String path;
        String acceptedType;
        Object target;
    
        RouteEntry() {
        }
    }
    
      - 어허 이것봐라 나름 스파크도 싱글톤이네?
      ```java
      public class Spark {
    
          // Hide constructor
          protected Spark() {
          }
    
          /**
    
           * Initializes singleton.
           */
          private static class SingletonHolder {
              private static final Service INSTANCE = ignite();
          }
    
          private static Service getInstance() {
              return SingletonHolder.INSTANCE;
          }
      }
      ```
    

    - ChessService에서 transactional이 안 먹힐 것 같네? - Dao에 접근은 자주하는데 이게 한 큐에 안 돌아갈 듯 - ChessGameDao에서 하나하나 다 써줬구나... - 커넥션을 만들어 주는 코드, 패스워드, 유저네임, 자원반환 전부 다 직접해줬네 - 흐음... Dao에서 비즈니스 로직이 꽤 많이 보이네? - Service에서 생성해서 주도록 하자

jwp-chess 복습하기

  • 복습 - SparkJava -> Spring 전환 - Spring Web MVC를 접해보면서 필요한 지식들 공부 - Spring 의 JdbcTemplate을 사용해봄
  • 회고 - Mocking을 아무것도 모르고 따라침 - 테스트 코드 작성에 더 많은 시간을 쓴 듯? - 배럴과의 페어프로그래밍이 매우 스무스하고 좋았음
  • 피드백 공유 - REST API에 대해 공부해보기 - HTTP method로 행위를 표현, URL로 자원을 표현! - @Get/PostMapping()에 필요한 것만 쓸 것 - produces, consumes 제외 - @RestController붙어 있으면 알아서 JSON 반환 - @ControllerAdvice + @ExceptionHandler를 통해 예외 처리 가능 - final, 공백의 적절한 활용 - Map에서 entrySet을 활용하여 key-value를 동시에 사용할 수 있음 (key로 value 접근할 코드 작성 안써도됨) - 생성 로직은 Dao에서 하지 말 것 - Dao 얇게 유지하자! 최소한의 DB Access만! - Why....? 왜 그래야할까?! - DB 기술에 의존적으로 Data Access를 해오게 되는데, 여기서 발생하는 예외는 개발자가 어떻게 할 수 없음 - 최소한의 DB 처리만 하는 코드만 작성하여 예외 발생하면 바로 예외 핸들링하도록 - Dao는 도메인 레이어가 아님, Persistence 레이어라서 비즈니스 로직은 상위 레이어에서 해줄것 - 비즈니스 로직이 수정 되었을 때, Dao를 수정하면 안대! - Jackson의 ObjectMapper를 사용하여 JSON으로 변환하여 테스트 작성해볼 것
  • 개선 방향 - 도메인 객체, Dto를 생성하는 과정을 모두 서비스에서 해줬네? - 해당 과정을 각각 도메인/Dto 내부에서 해주는 것이 좋아보임 - Spring 의 JdbcTemplate을 사용해봄 - SpringBoot에서 주입시켜주는 것인데 당시에는 몰랐음? - 지금은 아니? - application.properties 이런 설정들이 JDBC 설정들을 적어놓은 것이자나? - 이게 어떻게 JdbcTemplate 빈 객체를 만드는지 조금 알아보자 - 디버깅 찍어보는 것도 괜찮지 않을까? - Service에서 Transactional 처리를 조금 해주는 게 좋겠다 - 왜 Transactional 처리 해주는게 이득인지 아니? - 원자성 보장? - 그러면 그냥 synchronized로 하는게 좋지 않을까? - 내부적으로 어떻게 돌아가는 걸까? - 세션 만드는 과정을 interceptor로 하는 것이 좋아보임 - MockMvc와 RestAssured의 차이?