본문 바로가기

백엔드 개발

DI 흉내내기(2) 저번 시간에 최종적으로 한 것은 DI를 흉내내어 변경에 유리한 코드를 만드는 것이었다. DI는 의존성 주입으로, 어떤 객체를 소스코드 내부에서 선언하는 것이 아니라, 외부에서 객체를 생성한 후 소스코드 내부로 주입하는 것을 의미한다. 저번 포스팅에서는 DI를 흉내내기 위하여 객체 생성 기능을 하는 매소드를 이용했다. 해당 매소드에 인수로 보낸 값이 properties의 Key 값으로 있다면, 매소드는 해당 Key에 대응되는 Value (전체이름 = 경로주소.클래스이름)를 이용하여 Class class 객체를 만들고, 그 Class class 객체를 이용하여 실제 객체를 만들어 반환 했다. Properties는 map처럼 형식을 띄고 있으나, K,V에 오직 String 값만 가능했다. 이번에는 객체 컨테이.. 더보기
DI 흉내내기 DI란 Dependency Injection으로서 의존성 주입을 뜻한다. 이는 어떤 클래스의 객체를 new 연산자를 통해 소스코드 내부에서 만드는 것이 아니라, 해당 클래스의 객체를 외부에서 만들어서 소스코드 내부로 주입 시키는 것을 말한다. 이렇게 하는 이유는 변경에 유리한 코드를 만들어, 개발자가 할 수 있는 실수를 줄이고, test 횟수도 줄이기 위해서 이다. 그럼 변경에 유리한 코드라는 것이 무엇인지 알아보고, 이를 어떻게 표현해야하는지 알아보자. 0. 가정 class Car{} class SportsCar extends Car {} class Truck extends Car {} SportsCar car = new SportsCar (); // (바꾸려는 것) Truck car = new Tru.. 더보기
Intellij 단축기 모음집 (계속 추가) alt + home 네비게이터로 가는 키 shift * 2 모두 찾는 돋보기 어디에 포커스가 있든 ESC 누르면 Editor로 돌아옴. ctrl shift A 바로 액션 뭐 있는지 찾기 ctrl tab 위에서 밑으로 // ctrl shift tab 밑에서 위로 최근에 읽거나 편집한 파일들의 목록 보기 > Ctrl + E ctrl shift E > 파일 보거나 편집한 이력이 쭉 나옴. ctr alt left right 누르면 left 전에 편집한 곳으로 감. right 뒤에서 다시 앞으로 옴 열려있는 탭들 간의 이동 alt 누르고 오른쪽 왼쪽 ctrl + / 쭉 누르면 밑으로 쭉 내려감. ctrl shift / 여러줄 주석 ctrl f 원하는 말 찾기 엔터 내려가기 shift 엔터 올라가기 ctrl + R.. 더보기
데이터 검증 - 매소드 만들기, 등록, view에 보여주는 법 요청의 파라미터가 컨트롤러 매소드의 인수로 바인딩 될 때, 파라미터는 형 변환과 데이터 검증 절차를 거친다. 형 변환은 파라미터를 바인딩될 매소드의 인수와 같은 형으로 변환하는 절차이고, 데이터 검증은 파라미터가 인수의 값으로서 말이 되는지 확인하는 절차이다. 이 둘을 모두 에러 없이 거치면 바인딩 되고, 과정에서 에러가 나면 바인딩은 실패하고 에러 내용은 BindingResult의 객체에 저장된다. 저번 시간에는 형 변환 매소드를 만들어 Binder에 등록해서 WebDataBinder가 원래 할 수 없었던 형 변환을 할 수 있도록 만드는 것을 했다. 이번엔 같은 과정을 데이터 검증 쪽에서 할 것이다. 데이터 검증의 경우에도, WDB에 기본 내장된 기능 말고 사용자가 만들어 하고 싶은 검증 절차가 따로 .. 더보기
데이터 변환과 검증(타입 변환 추가 하는 법, BindingResult 이용) 1.WebDataBinder의 원리 (복습) (0)Binding이란? 요청의 파라미터를 컨트롤러 매소드의 인수와 연결 시키는 것을 말한다. WebDataBinder는 요청의 파라미터를 Controller Method의 인수에 맞게 형변환을 시켜주고, 또 인수로 들어갈 수 있는 값인지 확인하는 장치이다. 해당 과정을 거쳐서 파라미터가 인수와 연결된다. (1) 형 변환 요청의 파라미터는 무조건 String이기 때문에 형 변환이 필요하다. 여기서는 MyDate라는 객체가 컨트롤러의 인수로 쓰였고, 객체의 인스턴스 변수로 binding 되어야 한다. (binding 될 대상은 Spring이 알아서 잡아준다.) 따라서 "2021"을 int 2021로 바꿔주는 역할을 한다. 만약 이 과정에서 에러가 발생하면, (y.. 더보기
DispatcherServlet Source 까보기 (어떻게 돌아가는지) 1. DispatcherServlet이란 뭐였나? (복습) 본래 하나의 서블릿에 입력 처리 출력 과정이 다 담겨 있었다. 여기서 모든 서블릿에 공통적이고 돌아가는 원리의 차이가 없는 입력 부분을 앞으로 빼서, 하나의 서블릿으로 만들었다. (처리나 출력은 서블릿마다 기능이 다를 수 있지만, 사용자의 요청을 받는 입력부분은 거의 모든 서블릿이 공통적으로 같다.) 이것이 디스패쳐 서블릿이다. 스프링은 서블릿을 전처리 전담하는 DispatcherServlet과 처리담당 Controller, 출력담당 View로 나누어서 관심사를 분리했다. (관심사란 사용자가 관심을 가지고 해결해야할 작업을 말한다. MVC 패턴은 해결해야할 분야를 각각 DisPatcherServlet, Controller, view로 나누어서 관.. 더보기
Spring에서 예외 처리하는 방법(2) 저번 시간까지 정리한 내용으로 서버 처리하다가 예외가 발생했을 시 이를 대처하는 방법이 3가지가 있었다. (1) 예외가 발생할 수 있는 구문을 try - catch로 묶는다. 이는 예외가 발생할 수 있는 구문마다 try-catch 구문으로 묶어야 해서 아주 비효율적이었다. (2) 컨트롤러 내부에 예외처리만 담당하는 매소드 만들기. 예외처리 매소드의 어노테이션은 @ExceptionHandler 이다. 작동원리는 다음과 같다. a. 해당 컨트롤러 내부의 어떤 매소드에서 예외가 발생하고, 그 매소드는 예외를 밖으로 던진다. (throws) b. @ExceptionHandler 어노테이션이 붙은 매소드 중 해당 예외를 처리할 수 있는 매소드가 있다면 catch 구문처럼 해당 예외를 객체로 받아서 처리한다. **.. 더보기
Spring에서 예외 처리하는 방법(1) 컨트롤러의 매소드에서 예외가 발생 했을 시 어떻게 처리하는지에 관한 내용이다. 예외처리 안 한 경우, 서버가 어떻게 응답하는지에 대해서 알아보고 예외 처리 방법에 대해서 알아본다. 예외 처리 방법에는 try-catch 문으로 처리, @ExceptionHandler 사용, @ControllerAdvice 사용이 있다. 1. 예외처리 안 한 경우, 서버가 어떻게 응답하나? @Controller public class ExceptionController2 { // 각 매소드에서 예외 발생 시킴. @RequestMapping("/ex3") public void main() throws Exception { throw new Exception("예외가 발생했습니다."); } } 일부러 예외를 만들어 던져보았다. .. 더보기