전체 글 250

[인프런/스프링 DB 1편] 3. 트랜잭션

트랜잭션 1. 개념 하나의 거래를 안전하게 처리하도록 보장해주는 것 커밋 : 모든 작업이 성공해서 데이터베이스에 정상 반영 롤백 : 하나라도 실패해서 거래 이전으로 되돌리는 것 트랜잭션 ACID 원자성(Atomicity) : 트랜잭션 내에서 실행하는 작업들은 하나의 작업인 것처럼 모두 성공하거나 모두 실패해야 함 일관성(Consistency) : 일관성 있는 데이터베이스를 유지해야 함. (무결성 제약 조건 항상 만족) 격리성(Isolation) : 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리해야 함. (동시에 같은 데이터 수정하지 못하도록) 격리성은 동시성과 관련된 성능 이슈로 인해 트랜잭션 격리 수준을 선택할 수 있음 지속성(Durability) : 트랜잭션을 성공적으로 끝내면 그 결과..

Spring 2023.06.20

[인프런/스프링 DB 1편] 2. 커넥션풀과 데이터소스

TCP/IP 데이터를 전송하기 위한 통신규약 TCP - 전송 제어 프로토콜 IP - 인터넷 프로토콜 1. 커넥션 풀 1) 원래 커넥션 획득 방법 - 매번 획득 1. 애플리케이션 로직이 DB 드라이버를 통해 커넥션 조회 2. DB 드라이버는 DB와 TCP/IP 커넥션을 연결 ( 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작 발생 ) 3. DB 드라이버는 TCP/IP 커넥션이 연결되면, ID, PW와 기타 부가정보를 DB에 전달 4. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션 생성 5. DB는 커넥션 생성이 완료되었다는 응답을 보냄 6. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환 -> DB, 애플리케이션 로직에서 TCP/IP 커넥션을 새로 생..

Spring 2023.06.19

[인프런/스프링 DB 1편] 1. JDBC

1. JDBC 이해 (1) 클라이언트, 애플리케이션 서버, DB 클라이언트 -> 애플리케이션 서버 -> DB (2) 애플리케이션 서버 DB (3) JDBC 원래 DB 마다 DB 사용 코드, 설정 방법 등이 다 달랐음 -> JDBC 표준 인터페이스 제공 : 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 표준 인터페이스 JDBC 는 아래 기능을 표준 인터페이스로 정의해서 제공 -> 이 표준 인터페이스를 구현해서 개발 Connection - 연결 Statement - SQL을 담은 내용 ResultSet - SQL 요청 응답 (4) JDBC 드라이버 JDBC 드라이버 : JDBC 인터페이스를 각 DB에 맞도록 구현해서 라이브러리로 제공 JDBC 등장 -> 다른 DB로 변경하고 싶을 때 -> 드라이버(JD..

Spring 2023.06.17

[Spring] 파일저장 transferTo, InputStream OutputStream

경로에 파일 저장하는 코드 2가지 1. MultipartFile의 transferTo() - 내부적으로 FileCopyUtils의 copy()를 사용함 ! 2. FileCopyUtils의 copy(getInputStream(), Files.newOutputStream()) 예) private final String directory = "C:\\app\\eGovFrameDev-4.0.0-64bit\\workspace\\fitness-management\\src\\main\\webapp\\resources\\images\\profile"; @PostMapping("/register") public String register(@Valid @ModelAttribute("userRegisterForm") Us..

Spring 2023.06.06

[인프런/스프링 MVC 2편] 11. 파일 업로드, 다운로드

서블릿 파일 업로드 -> 스프링 파일 업로드 1. 파일 업로드 HTML 폼 전송 방식 2가지 application/x-www-form-urlencoded (문자만 전송) multipart/form-data (문자 + 바이너리 데이터 함께 전송) 1) application/x-www-form-urlencoded 방식 폼 데이터를 서버로 전송하는 가장 기본적인 방법 (문자만 전송할 때) Form 태그에 별도의 enctype 옵션 X -> 웹 브라우저는 요청 HTTP 메시지의 헤더에 기본적으로 Content-Type : application/x-www-form-urlencoded 추가 -> 폼에 입력한 전송할 데이터를 HTTP Body에 문자로 username=kim&age=20 같이 &로 구분해서 전송 2)..

Spring 2023.06.02

[인프런/스프링 MVC 2편] 10. 스프링 타입 컨버터

1. 스프링 타입 컨버터 1-1. 스프링의 자동 타입 변환 1) 스프링의 타입 변환 적용 예시 스프링 MVC 요청 파라미터 (@RequestParam, @ModelAttribute, @PathVariable) @Value 등으로 YML 정보 읽기 XML에 넣은 스프링 빈 정보 변환 뷰 렌더링 할 때 2) 스프링 MVC 요청 파라미터 타입 변환 예시 HTTP 요청 파라미터는 모두 문자로 들어옴 (1) @RequestParam 원래 -> 문자로 받아서 -> Integer로 타입 변환 (수동) @GetMapping("/hello-v1") public String helloV1(HttpServletRequest request) { String data = request.getParameter("data"); /..

Spring 2023.05.31

[인프런/스프링 MVC 2편] 9. API 예외 처리

HTML 페이지 - 4xx, 5xx같은 오류 페이지만 보여주면 예외 처리 O API - 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려줘야 함 1. 서블릿 API 예외 처리 1) WebServerCustomizer 동작시키기 WAS에 예외 전달 / response.sendError() 호출 -> 여기서 등록한 예외 페이지 경로 호출 @Component public class WebServerCustomizer implements WebServerFactoryCustomizer { @Override public void customize(ConfigurableWebServerFactory factory) { // 상태 코드 지정 ErrorPage errorPage404 = new..

Spring 2023.05.31

[인프런/스프링 MVC 2편] 8. 예외 처리와 오류 페이지

학습 순서 서블릿 예외 처리 -> 스프링 예외 처리 1. 서블릿 예외 처리 스프링이 아닌 순수 서블릿 컨테이너의 예외 처리 📌서블릿의 예외 처리 방식 2가지 Exception (예외) -> 무조건 500 에러 (WAS까지 예외가 왔을 때) response.sendError (HTTP 상태 코드, 오류 메시지) -> 상태 코드 지정 가능 ✔ 스프링 부트가 제공하는 기본 예외 페이지 끄기 * application.properties server.error.whitelabel.enabled=false 1-1. Exception (예외) 자바의 기본 예외 동작 방식 자바의 메인 메소드 직접 실행 -> main 쓰레드 실행 -> exception 발생 -> 예외를 못잡으면, 나를 호출한 메소드한테로 예외를 계속 ..

Spring 2023.05.27

[Spring] 스프링 빈 등록 어노테이션 @Bean, @Configuration, @Component

https://mangkyu.tistory.com/75 [Spring] 빈 등록을 위한 어노테이션 @Bean, @Configuration, @Component 차이 및 비교 - (1/2) 기존의 Spring MVC에서는 xml을 활용하여 Bean을 등록하고 있었다. 하지만 프로젝트의 규모가 커짐에 따라 사용하는 요소들을 xml에 등록하는 것이 상당히 번거로워 져서 어노테이션(Annotation, @)를 활 mangkyu.tistory.com

Spring 2023.05.27

[인프런/스프링 MVC 2편] 7. 로그인 처리2 - 필터, 인터셉터

1. 서블릿 필터 1-1. 소개 서블릿 필터 공통 관심사 처리 - 서블릿 필터, 스프링 인터셉터 HttpServletRequest를 통해 HTTP의 헤더, URL 정보 사용 로그인 된 사용자만 특정 페이지에 접근할 수 있도록 로그인 확인 (공통 관심사) 필터 개발! 필터의 흐름 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 필터 호출 -> 서블릿 호출 필터 제한 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 // 로그인 사용자 HTTP 요청 -> WAS -> 필터(적절하지 않은 요청 -> 서블릿 호출 X // 비 로그인 사용자 필터 인터페이스 필터 인터페이스 구현하고 등록 -> 서블릿 컨테이너가 필터를 싱글톤 객체로 생성, 관리 init() : 필터 초기화 메소드, 서..

Spring 2023.05.26