목록모든 글 (287)
개발자로 후회없는 삶 살기
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 엔터티 매핑 소개객체와 테이블을 매핑하고 필드와 컬럼, 기본키, 연관관계를 매핑한다. - 객체와 테이블 매핑 @EntityEntity가 붙은 클래스는 JPA가 관리하는 엔터티로, 붙지 않으면 jpa와 전혀 관계 없는 클래스이다. → 주의점1) 기본 생성자2) final, enum, 인터페이스, 이너 클래스 불가3) 필드에 final 불가jpa는 리플랙션을 하기 때문에, 기본 생성자가 필수이다. name은 실제 테이블에서 매칭되는 테이블을 골라서 매핑할 수 있다. - 스키마 자동 생성jpa는 엔터티 분석 기능으로 어플 로딩 시점에 테이블 자동 생성 기능을 제공한다. 장점 ✅보통 개발을 할 때 설계를 다 마치고..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 영속성 컨텍스트JPA에서 가장 중요한 2가지는 엔터티와 테이블 매핑과 영속성 컨텍스트이다. 웹에서 고객 요청이 오면, 매니저 1, 2를 생성하고 매니저가 내부적으로 커낵션을 써서 db를 쓴다. → 영속성 컨텍스트란?엔터티를 영구 저장하는 환경이다. JPA는 저장한다고 DB에 바로 넣는게 아니라, 컨텍스트에 저장한다. 매니저가 내부에 컨텍스트 공간을 가지고 있다. - 엔터티 생명주기1) 비영속컨텍스트와 관련이 없는 상태이다. 2) 영속컨텍스트에 객체를 관리하는 상태이다. set까지는 비영속이고 persist를 하면 영속화된다. persist는 뭐 하는 거야? ✅JPA는 DB에 저장하는 게 아니라 우선 컨텍스트..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 트랜잭션 등록 과정@트랜잭션이 일어날때 어떤 일이 일어나나 깊이있게 알아보자 @트랜잭션이 클래스나 메서드에 하나라도 있으면, 트랜잭션 AOP가 프록시를 만들어서 컨테이너에 등록한다. 실제 객체 대신에 프록시 컨테이너에 들어가고 AutoWired하면 프록시가 주입된다. @트랜잭션을 메서드에 붙여도 프록시가 생성되니 nonTx 메서드도 트랜잭션이 적용되어야 하지 않나 싶다. nonTx도 호출은 프록시의 메서드가 호출되지만, @트랜잭션이 없어서 트랜잭션이 안 된다. - 트랜잭션 적용 위치트랜잭션을 클래스, 메서드 단위에 붙였을 때 적용 범위를 보자. 스프링은 구체적인 것이 우선순위를 가진다. write와 read..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 자바 예외 원칙1) 거의 대부분 런타임 예외를 사용2) 체크 예외는 잘 안 쓰고, 비즈니스 로직상 너무 중요해서 의도적으로 던질 때만 사용 -> 예시해당 예외를 잡아서 반드시 처리해야 하는 문제일 때만 체크를 사용하고 나머지는 다 언체크 사용 🚨 체크 예외의 문제점무조건 잡거나, 잡지 못하면 throw를 선언해 던져야만 한다. DB나 네트워크 오류는 어플리케이션 로직에서 처리할 방법이 없다. 그래서 이들이 체크 예외라면 모두 밖으로 throws를 선언하고 던져야한다. 컨트롤러도 던지면 was에서 controlladvice에서 공통으로 처리하는데 이러한 오류는 500 에러로 해결이 불가능한 공통 예외는 고객..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- DB 연결 구조와 세션10개의 커낵션 = 10개의 세션DB에 접근하면 커낵션이 생기고 세션이 열리며, 하나의 세션에서 트랜잭션을 시작해서 SQL을 수행한다. -> 정리커낵션을 연결하면 db 내부에 세션이 생기고 세션을 통해 트랜잭션을 시작하고 sql을 실행한다. 트랜잭션을 시작할 때 락을 획득하고 끝나면 락을 반납한다. - 실제 로직에 트랜잭션 적용계좌 이체가 안 되는 비즈니스 상황에 트랜잭션을 적용해보자 입금을 성공하는데 출금에서 실패하는 경우이다. when에서 예외가 발생해서 출금은 성공하는데 입금에서 실패한다. 테스트에서 DB를 사용하면 pk 자동 증가 때문에 막힌다. 테스트에서 트랜잭션을 사용하면 테..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론→ html 폼 전송 방식1) x-wwwx-www 방식은 name=value 형식으로 문자를 전달한다. 하지만, x-www는 문자와 파일을 함께 전달할 수 없다. 파일은 InputStream에 저장되는 바이어리 데이터라서 문자에 담을 수 없다. 실무에서는 한 번에 문자와 파일을 입력 받는 경우가 많다. 2) multipart/form-datamultipart 방식은 boundary를 경계로 여러 파트로 나눠서 문자와 파일을 함께 전달할 수 있다. content-type은 image/png로 엔터하고 파일 바이너리 데이터가 들어간다. → 실행개발자 도구로 보면 content type과 경계가 보인다. 바운더리를..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 예외 처리와 오류 페이지스프링에서 예외가 발생했을 때 어떻게 처리하는지 알아보자 - 서블릿 예외처리1) 예외가 발생하여 was에게 예외가 날라감 2) resp.sendError 호출로 예외가 발생한 것처럼 가장서블릿은 2가지 방법으로 예외를 지원한다. 1. exception자바에서 메인 메서드를 호출하면 main이라는 스레드가 생성된다. 프로그램이 진행되며 예외가 발생하면 이를 잡으면 문제가 없지만, 못 잡으면 호출한 상위 스택까지 예외가 전달되고 메인 메서드 밖까지 예외가 전달되면 스레드가 종료된다. 웹 어플은 하나의 스레드가 있는게 아니라, 사용자 요청별로 별도의 스레드가 할당되고 그 스레드가 서블릿, ..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 서블릿 필터로그인한 사용자만 상품 목록을 볼 수 있도록 해야하는데, 현재는 URL을 직접 입력하면 로그인 안 한 사용자도 접근 가능하다. 이를 해결하는 방법으로, 모든 컨트롤러에 세션 검증 코드를 넣을 수 있다. 근데 이는 같은 기능을 반복하여 중복이 발생하고, 번거롭다. 지금, 사용자가 인증이 된 사용자인지 인증에 대해 공통으로 관심을 가지고 있다. 공통 관심사는 AOP로도 해결할 수 있지만 웹과 관련된 것은 서블릿 필터와 스프링 인터셉터를 사용하여 Http 관련 공통 관심사를 처리해준다. 이들은 특정 URL이 오는 건 다 막는다는 등 웹 관련 부가 사항을 제공하여 로그인 여부 체크하는 로직을 한 방에 해..