[Spring] 스프링 DB 1편 - 데이터 접근 핵심 원리 섹션1 JDBC 이해◼️ JDBC 이해각 데이터베이스마다 사용법이 달라 JDBC 자바 표준이 등장했다. 자바는 표준 인터페이스를 정의하고, 개발자는 표준 인터페이스만 학습 후 개발하면된다.🪄 참고 - 표준화의 한계JDBC의 등장으로 많은 것이 편리해졌지만, 각각의 데이터베이스마다 SQL, 데이터타입 등의 일부 사용법이 다르다. 결국 데이터베이스를 변경하면 JDBC 코드는 변경하지 않아도 되지만 SQL은 해당 데이터베이스에 맞도록 변경 해야한다. 참고로 JPA(Java Persistence API)를 사용하면 이렇게 각각의 데이터베이스마다 다른 SQL을 정의해야 하는 문제도 많은 부분 해결할 수 있다.◼️ JDBC와 최신 데이터 접근 기술 J..
[Spring] 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 섹션11 파일 업로드◼️ 파일 업로드 소개🟢 HTTP 폼 전송 방식application/x-www-form-urlencodedmultipart/form-data 멀티파트 관련 처리는 default가 true지만, 관련 처리를 하지 않게 설정할 수 있다.spring.servlet.multipart.enabled=true 🪄 참고위 옵션을 켜면 MultipartResolver가 실행된다. 이것은 멀티파트 요청의 경우 서블릿 컨테이너가 전달하는 일반적인 HttpServletRequest 를 자식인터페이스인 MultipartHttpServletRequest 로 변환해서 반환한다.이는 멀티파트와 관련 된 추가 기능을 제공한다. 파일 업로드 사이..
문서를 이해하기 쉽게 내 입장에서 정리해보려한다. 문서 링크는 여기에서 확인 :)Spring Type Conversion◼️Converter SPI타입 변환 로직을 구현한다. 하나의 타입을 다른 타입으로 변환한다.아래 Converter 인터페이스를 구현하여 특정 타입에서 다른 타입으로 변환할 수 있다.package org.springframework.core.convert.converter;public interface Converter { T convert(S source);} 아래 예시(String→Integer)처럼 사용 가능하다.package org.springframework.core.convert.support;final class StringToInteger implements Convert..
[Spring] 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 섹션10 스프링 타입 컨버터◼️ 스프링 타입 컨버터 소개HTTP 요청 파라미터는 모두 문자로 처리된다. 따라서 다른 타입으로 사용하고 싶다면 아래와 같이 변환을 거쳐야한다.@RestControllerpublic class HelloController { @GetMapping("/hello-v1") public String helloV1(HttpServletRequest request){ String data = request.getParameter("data"); // 문자 타입 조회 Integer intValue = Integer.valueOf(data); // 숫자 타입으로 변경 Syst..
[Spring] 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 섹션9 API 예외 처리◼️ API 예외 처리 WebServerCustomizer @Component를 재등록하고 아래 Api 예외 컨트롤러 api를 실행해본다.@Slf4j@RestControllerpublic class ApiExceptionController { @GetMapping("/api/members/{id}") public MemberDto getMember(@PathVariable("id") String id){ if (id.equals("ex")){ throw new RuntimeException("잘못된 사용자"); } return new MemberDt..
[Spring] 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 섹션8 예외 처리와 오류 페이지◼️ 서블릿 예외 처리🟢 서블릿 예외처리 두가지 방식Exception (예외)response.sendError(HTTP 상태 코드, 오류 메시지)애플리케이션에서 예외를 잡지 못하고 서블릿 밖까지 예외가 전달되면 아래와 같이 WAS와 까지 예외가 전달된다. WAS(여기까지 전파) ← 필터 ← 서블릿 ← 인터셉터 ← 컨트롤러(예외발생)WAS(sendError 호출 기록 확인) ← 필터 ← 서블릿 ← 인터셉터 ← 컨트롤러(response.sendError())▪️예외(Exception)를 호출해보자. server.error.whitelabel.enabled=false //application.properties@..
[Spring] 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 섹션7 로그인 처리2 - 필터, 인터셉터◼️ 서블릿 필터 - 소개문제점로그인하지 않은 사용자가 관리화면에 들어가지 못하게 하려면 로그인 여부를 체크하는 로직을 모든 컨트롤러에서 체크해야 한다.하지만 이후 로그인 관련 로직이 변경되면 작성한 모든 로직을 다 수정해야 할 수 있다. 해결 방안이렇게 애플리케이션 여러 로직에서 공통으로 관심이 있는 있는 것을 공통 관심사(cross-cutting concern)라고 한다. 여기서는 등록, 수정, 삭제, 조회 등등 여러 로직에서 공통으로 인증에 대해서 관심을 가지고 있다.웹과 관련된 공통 관심사는 서블릿 필터 또는 스프링 인터셉터를 사용한다.웹과 관련된 공통 관심사를 처리할 때는 HTTP의 헤더..
[Spring] 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 섹션6 로그인 처리1 - 쿠키, 세션◼️ 로그인 요구사항로그인 요구사항 홈 화면 - 로그인 전회원 가입로그인홈 화면 - 로그인 후 본인 이름(누구님 환영합니다.)상품 관리로그 아웃보안 요구사항로그인 사용자만 상품에 접근하고, 관리할 수 있음로그인 하지 않은 사용자가 상품 관리에 접근하면 로그인 화면으로 이동회원 가입, 상품 관리 🟢 패키지 구조 도메인이 가장 중요하다. domain은 web을 참조하면 안된다. domain이 타 영역에 의존하지 않도록 의존관계를 설정하는것이 중요하다.도메인: 화면, UI, 기술 인프라 등등의 영역은 제외한 시스템이 구현해야 하는 핵심 비즈니스 업무 영역◼️ 로그인 기능 구현@Service@RequiredA..
[Spring] 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 섹션4 검증1 - Validation◼️ 검증 요구사항요구사항: 검증 로직 추가 타입 검증가격, 수량에 문자가 들어가면 검증 오류 처리필드 검증상품명: 필수, 공백X가격: 1000원 이상, 1백만원 이하수량: 최대 9999특정 필드의 범위를 넘어서는 검증가격 * 수량의 합은 10,000원 이상 컨트롤러의 중요한 역할중 하나는 HTTP 요청이 정상인지 검증하는 것이다.참고: 클라이언트 검증, 서버 검증클라이언트 검증은 조작할 수 있으므로 보안에 취약하다.서버만으로 검증하면, 즉각적인 고객 사용성이 부족해진다.둘을 적절히 섞어서 사용하되, 최종적으로 서버 검증은 필수 API 방식을 사용하면 API 스펙을 잘 정의해서 검증 오류를 API 응답..
[Spring] 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 섹션3 메시지, 국제화◼️ 메시지, 국제화메시지 기능: 다양한 메시지를 한곳에서 관리하도록 하는 기능 messages.properties ( /resources/messages.properties )item=상품item.id=상품 IDitem.itemName=상품명item.price=가격item.quantity=수량 HTML들은 아래와 같이 데이터를 key 값으로 불러서 사용 국제화: 메시지 파일을 각 나라별로 별도로 관리하면 서비스를 국제화 할 수 있다. 어느 나라에서 접근한 것인지 인식은 HTTP accept-language 해더 값, 사용자가 직접 언어를 선택, 쿠키 등을 사용해 처리한다. messages_en.properties..