전체 글

전체 글

    [JDBC] 단일 Select을 위한 방법들

    [JDBC] 단일 Select을 위한 방법들 Line id bigint auto_increment not null, name varchar(255) not null unique, color varchar(20) not null, primary key(id) 다음과 같은 Line 테이블이 있다. select * from line where name = ? 다음과 같은 쿼리문의 결과값을 받아오려는 메소드를 만든다고 한다. public Line findLineByName(String name) { String sql = "select * from line where name = ?"; return jdbcTemplate.queryForObject(sql, lineRowMapper(), "1호선"); } pri..

    [Spring] Spring Validation 처리에 대해

    Spring Validation 처리에 대해 지금까지 Validation이거나 연관된 주제에 대한 내용을 여러번 정리했었다. @Valid를 이용한 Exception처리와 ThymeLeaf 처리 Validator 생성 시 주의해야 할 점, Invalid target 오류 ErrorSerializer에 대해 Custom Validator 적용하기 @NotNull, @NotEmpty, @NotBlank 그런데 읽다보니 ResponseEntityHandlerException를 통해서 처리하는 방법, BindingResult, Errors로 처리하는 방법 등 여러 선택사항이 있어 대체 이것들이 뭐길레 방법이 이렇게 있지 헷갈렸다. 그래서 정리해본다. 먼저 다음과 같이 진행해보았다. @NotBlank를 달아주었고 ..

    [Spring] @Transactional 에 대해

    @Transactional 에 대해 트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. 애플리케이션을 개발하다보면 여러 쿼리를 날려야 하는 로직을 맞닥뜨리게 된다. 만약, 쇼핑몰에서 상품을 구매할 때 잔여 금액이 충분한지 확인하고 잔여 금액이 상품 가격보다 높을 때 구매 로직으로 넘어가야 하고 상품의 재고가 있는지 확인 후에 잔여 금액을 상품 가격만큼 감소시키고 로직을 종료해야 한다고 하자. 그런데 선택상품구매 단계에서 예외가 발생하여 상품이 없음에도 불구하고 있다고 판단하였거나 잔여 금액이 감소하는 찰나에 서버의 전원이 나가서 상품을 구매했는데도 회원의 잔여 금액이 감소하지 않을 수가 있다. 이를 위해 ..

    기타 등등(계속 추가)

    기타 등등 (계속 추가) 당연히 알고있다 생각하지만 흐릿하거나 모르고 지나칠 수 있는 상식들을 적어 두었다. 000001. static 인스턴스를 생성하면 서로 다른 값을 유지하기 때문에 경우에 따라서 각 인스턴스들이 공통적으로 같은 값이 유지되어야 하는 경우 static을 붙인다. static이 붙은 멤버변수(클래스 변수)는 클래스가 메모리에 올라갈 때 이미 자동적으로 생성되기 때문에 인스턴스를 생성하지 않아도 사용할 수 있다. static이 붙은 메서드에서는 인스턴스 변수를 사용할 수 없다. 반대는 가능하다. 메서드의 작업 중에서 인스턴스 변수를 필요로 한다면, static을 붙일 수 없지만 만약 필요로 하지 않는다면 static을 붙여서 메서드 호출시간을 짧게해줄 수가 있다. static 영역은 G..

    [DB] drop, Delete, truncate 에 대해

    drop, delete, truncate 에 대해 drop 테이블 자체를 삭제하는 명령어다. 테이블 자체가 모두 지워지고 생성되어 있던 인덱스도 삭제된다. 테이블이 사용했던 Storage는 모두 Release 처리된다. 오라클 10g 부터는 테이블이 삭제되는 것이 아니라 휴지통 개념처럼 잠시 삭제되고, 테이블 이름이 BIN$...로 변경된다. drop table [table_name] delete 데이터만 삭제되고 테이블 용량은 줄어 들지 않는다. 커밋이전에는 롤백이 가능하다. 전체 또는 일부 데이터 삭제가 가능하다. 데이터를 모두 Delete해도 사용했던 Storage는 Release 처리되지 않는다. truncate 테이블을 최초 생성된 초기상태로 만든다. 용량이 줄어들고 인덱스 등도 모두 삭제된다...

    Spring Configuration 기초 정리

    Spring Configuration 기초 정리 @Configuration과 @Bean class JavaConfigTest { @Test void javaConfig() { ApplicationContext context = new AnnotationConfigApplicationContext(HelloApplication.class); String[] beanDefinitionNames = context.getBeanDefinitionNames(); System.out.println(Arrays.toString(beanDefinitionNames)); AuthService authService = context.getBean(AuthService.class); assertThat(authService..

    [Java] 템플릿 메서드 패턴, 팩토리 메서드 패턴, 추상 팩토리 패턴

    템플릿 메서드 패턴, 팩토리 메서드 패턴, 추상 팩토리 패턴 템플릿 메서드 패턴 public abstract class WoowaTechCourse { public void dailyRoutine() { goWork(); haveClass(); study(); leaveWork(); } public void goWork() { System.out.println("출근"); } public void haveClass() { WoowaClass woowaClass = new WoowaClassSelector().brownClass(); woowaClass.classOwner(); } public void leaveWork() { System.out.println("퇴근"); } public abstract ..

    Spring Auth 기초 정리

    Spring Auth 기초 정리 세션이란? 세션이란 클라이언트 별로 서버에 저장되는 정보다. 웹 클라이언트가 서버측에 요청을 보내게 되면 서버는 클라이언트를 식별하는 session id를 생성한다. 서버는 session id를 이용해서 key와 value를 이용한 저장소인 HttpSession을 생성한다. 서버는 session id를 저장하고 있는 쿠키를 생성하여 클라이언트에 전송한다. 클라이언트는 서버측에 요청을 보낼 때 session id를 가지고 있는 쿠키를 전송한다. 서버는 쿠키에 있는 session id를 이용해서 그 전 요청에서 생성한 HttpSession을 찾고 사용한다. 세션을 얻기 위해서는 request로 부터 getSession() 메서드를 호출해야 하지만, 스프링은 알아서 얻어와주기 ..