Spring

    DataAccessUtils

    DataAccessUtils는 유틸 클래스로서 DAO 구현을 위해 사용할 수 있으며 모든 데이터 액세스 기술에 유용하다. 총 9개의 메서드가 있는데, 각 메서드의 내부 구현은 다음과 같다. 내부 구현을 통해 메서드의 목적을 잘 드러내고 있는 것 같아 구체적인 설명 없이 내부 구현을 기록하기로 했다. 1. intResult public static int intResult(@Nullable Collection results) throws IncorrectResultSizeDataAccessException, TypeMismatchDataAccessException { return objectResult(results, Number.class).intValue(); } 2. longResult public ..

    Annotation

    About Annotation 우선 어노테이션이란 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다. 어노테이션의 용도 중 가장 큰 비중을 차지하는 것은 메타 데이터로서의 역할이다. 메타 데이터 : 데이터를 위한 데이터를 의미하며, 자신의 정보를 담고 있는 데이터를 이야기한다. 어노테이션은 어떻게 구성되어 있을까? @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface CustomAnnotation { boolean isCheck() default true; } 먼저, 어노테이션의 선언에 쓰인 어노테이션은 메타 어노테이션이라 하며 이를 이용해 커스텀 어노테이션을 작성할 수 있다. 메타 어노테이션의 종..

    Validator

    요청으로 들어오는 값의 유효성 검사를 Validator를 이용해 진행해보자. 우선, 내가 검증할 내용은 다음과 같다. public class StationRequest { private String name; public String getName(){ return name; } } StationRequest라는 객체가 존재한다. 이 객체는 이름을 받아 넘겨주는 DTO의 역할을 수행한다. 여기서 제약 사항은, name은 널이 되어서는 안되며 무조건 이름 뒤에는 "역"이 붙어야한다. (ex. 강남역) 따라서 이 검증을 Validator에게 맡겨보자. 우리가 만들 Custom Validator는 Validator를 구현한다. Validator에는 필수로 구현해야하는 메서드들이 존재하는데, supports와 ..

    Dependency Injection

    DI란? DI는 Dependency Injection의 준말로서 의존관계 주입이라고 해석할 수 있다. 먼저 의존(Dependency)에 대해서 이해해보자.의존은, 변경에 의해 영향을 받는 관계를 의미한다. 따라서 A의 변경에 따른 영향이 B에게 전파된다면 A와 B의 관계를 서로 의존한다고 이야기할 수 있다. 다음과 같은 MemberService 객체가 있다고 가정해보자.public class MemberService { private MemberDao memberDao; public void register(Member member){ // 해당 회원이 이미 존재하는지 확인 memberDao.isExist(member); } } MemberService 객체는 DB 에 접근하기 위해 MemberDao 객..

    [토비의 스프링] 1장. 오브젝트와 의존관계

    #토비의_스프링 1.1 초난감 DAO 1.2 DAO의 분리 슈퍼클래스에 기본적인 로직의 흐름을 만들고, 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 protected 메소드 등으로 만든 뒤 서브클래스에서 이런 메소드를 필요에 맞게 구현해서 사용하도록 하는 방법을 템플릿 메서드 패턴이라고 한다. UserDao의 서브클래스의 getConnection() 메소드는 어떤 커넥션 클래스의 오브젝틀르 어떻게 생성할 것인지를 결정하는 방법이라고도 볼 수 있다. 이렇게 서브클래스에서 구체적인 오브젝트 생성 방법을 결정하게 하는 것을 팩토리 메서드 패턴이라고 한다. 아무튼 결론적으로 상속구조를 통해 성격이 다른 관심사항을 분리한 코드를 만들어내고, 서로 덜 영향을 주도록 할 수 있는지!가 중요하다. 하지만 상속을..

    [Digging into] Spring Security 세션과 쿠키

    보호되어 있는 글입니다.

    Post Mapping은 왜 @RequestParam 보다 @RequestBody를 이용해야할까?

    https://tools.ietf.org/html/rfc2616#section-9.5 https://tools.ietf.org/html/rfc7231#section-4.3.3 https://stackoverflow.com/questions/5876809/do-http-post-methods-send-data-as-a-querystring Do HTTP POST methods send data as a QueryString? I'd like to know if the POST method on HTTP sends data as a QueryString, or if it use a special structure to pass the data to the server. In fact, when I analy..

    ResponseEntity란?

    ResponseEntity란 HttpEntity를 상속받아 구현한 클래스이다. 여기서 HttpEntity란 HTTP 요청 또는 응답에 해당하는 HttpHeader와 HttpBody를 포함하는 클래스이다. 따라서 ResponseEntity는 사용자의 HttpRequest에 대한 응답 데이터를 포함하는 클래스라고 볼 수 있다. ResponseEntity를 이용하여 ok(), status(), badRequest()등 적절한 응답을 보낼 수 있다. :) 참고 - devlog-wjdrbs96.tistory.com/182

    @ControllerAdvice, @ExceptionHandler를 이용한 예외처리

    @ExceptionHandler @ExceptionHandler는 @Controller, @RestController가 적용된 빈 내에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해준다. 예를 들자면 다음과 같다. @Controller public class MyController { @ExceptionHandler(IllegalArgumentException.class) public Object catch(Exception e){ System.err.println(e.getMessage()); return "myService"; } }@ExceptionHandler라는 어노테이션을 쓰고 인자로 캐치하고 싶은 예외 클래스를 등록하면 된다. {}를 이용해서 두 개 이상의 예외 클래스도 한 번에 처리가 ..

    [JDBC] Insert 쿼리 실행 시 KeyHolder를 이용해서 자동 생성 키 값 구하기

    ID 값이 AUTO_INCREMENT 인 경우, Insert 쿼리 실행 시 ID 값을 value로 직접 지정해주지 않는다. (왜냐하면? 자동 생성되기 때문!) 그런데, 어떠한 엔티티를 테이블에 삽입하고 나서 그 엔티티에게 할당된 아이디 값을 전달받고 싶은 경우에는 어떻게 해야할까? JDBCTemplate은 자동으로 생성된 키 값을 구할 수 있는 방법을 제공하는데, 그것은 바로 KeyHolder이다. public void insert(final Member member) { KeyHolder keyHolder = new GeneratedKeyHolder(); jdbcTemplate.update((Connection con) -> { PreparedStatement pstmt = con.prepareStat..