분류 전체보기 146

[Spring Framework] 예외 처리 - 뷰를 반환할 때

순수 서블릿 컨테이너의 예외처리 순수 서블릿 컨테이너는 두 가지 방법으로 예외를 처리한다. Exception response.sendError(HTTP 상태코드, 오류 메시지) Exception 자바코드를 실행하다가 에러가 발생하는 경우 자바의 메인메서드를 실행했을 때 main이라는 이름의 메서드가 실행되고, 실행 도중에 발생한 예외를 잡지 못해서 처음 실행한 main메서드까지 예외가 던져지면 예외 정보를 남기고 스레드가 종료된다. 웹 애플리케이션에서는 사용자 요청별로 스레드가 할당되고 서블릿 컨테이너 안에서 예외가 처리된다. 애플리케이션에서 예외가 발생하여 try-catch문으로 처리했다면 괜찮지만 애플리케이션에서 예외를 처리하지 못하고 서블릿 밖으로 예외가 전달되면 WAS까지 예외가 전달된다. WAS..

[Spring Framework] 로그인, 쿠키와 세션

로그인 기능을 구현하기 위해서는 서버가 로그인 한 사용자의 상태를 기억하고 있어야 한다. 어떤 사용자인지 식별하기 위해서는 쿠키와 세션이라는 두 가지를 이용할 수 있다. 쿠키는 서버가 클라이언트에게 쿠키 값을 넘기고, 브라우저가 이를 기억하고 있다가 다음에 서버에 요청할 때 HTTP 요청메세지에 쿠키를 함께 담아서 요청하는 방법이고, 세션은 세션 아이디를 서버가 기억하고 있다가 클라이언트의 요청으로 세션 아이디가 넘어오면 정보를 조회해서 응답하는 방법이다. 세션도 정보식별을 위해 쿠키를 사용한다. 쿠키 사용하기 쿠키는 위에서 설명했듯이 서버가 HTTP 응답에 쿠키를 담아서 브라우저에 전달하면 브라우저가 앞으로 요청을 보낼 때마다 요청 메시지에 쿠키를 담아 요청하는 방법이다. 쿠키에는 두 종류가 있다. 영..

[Spring Framework] Bean Validation

코드를 이용해서 모든 Validation 에러를 처리하는 것은 상당히 번거롭다. 필드에러 같은 경우에는 빈 값을 입력하거나 올바른 범위를 입력하지 않은 간단한 에러들이 대부분입니다. 이럴 때는 매번 받아온 데이터를 직접 자바 코드로 작성해서 검증하기보다는 Bean Validation이라는 기술을 사용하면 좀 더 간편하게 데이터를 검증할 수 있습니다. Bean Validation을 소개하고 사용하는 방법, 그리고 단점과 해결법까지 알아보도록 하겠습니다. Bean Validation 이란? Bean Validation 이란 특정한 구현체를 말하는 것이 아니라 Bean Validation 2.0(JSR-380)이라는 기술 표준을 의미합니다. 검증기능을 위한 검증 애노테이션과 여러 인터페이스들이 모여있습니다. ..

자바의 실행원리 파헤쳐보기

Java 자바는 다양한 운영체제에서 동일한 소스코드를 실행할 수 있는 프로그래밍 언어입니다. 프로그래밍 언어가 특정 운영체제 위에서 실행되기 위해서는 해당 운영체제가 이해할 수 있도록 코드가 작성되어야 하지만 자바 언어는 javac(자바 컴파일러)에 의해 컴파일 된 .class 코드가 동일하더라도 서로 다른 운영체제 위에서 실행될 수 있도록 설계되었습니다. JVM 내부의 인터프리터가 운영체제가 이해할 수 있는 형태로 변환해 주기 때문입니다. 즉 자바가 운영체제가 이해하는 코드를 작성하는 책임을 프로그래머로부터 JVM으로 전이한 것입니다. 하지만 각 운영체제마다 호환되는 JVM을 따로 설치해주어야 한다는 점 때문에 JVM에는 의존적이라고 말합니다. JDK, JRE, JVM 자바 프로그램을 실행하기 위해서는..

Java 2023.05.12

[Spring Framework] 빈 생명주기 콜백

본 포스트는 김영한 강사님의 스프링 핵심 원리 - 기본 편을 보고 정리한 내용입니다. 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com 데이터베이스 연결이나 네트워크 연결의 소켓을 미리 열어놓아야 빨리 응답을 줄 수 있다. 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면 객체의 초기화와 종료작업이 필요하다. 이러한 역할을 스프링이 제공해 준다. 스프링을 통해 이런 초기화와 종료작업이 어떻게 진행되는지 알아보자. 일단 용어부터 정리해봅시다, 객체를 생성하는..

[Spring Framework] 의존관계 자동주입

본 포스트는 김영한 님의 스프링 핵심 원리 - 기본 편을 보고 정리한 내용입니다. 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com 다양한 의존관계 주입 방법 의존관계를 주입하는 방법은 다음 네가지로 나눌 수 있습니다. 생성자 주입 수정자 Setter 주입 필드 주입 일반 메서드 주입 생성자 주입 말 그대로 생성자를 통해서 의존관계를 주입받는 방법입니다. 생성자 호출 시점에 딱 한 번만 호출되는 것이 보장되고, 값이 변하지 않고, 필수적으로 필요한 의존관계인 경우에 사용합니다. 위의 코드에서도 생성자로 주입받는 경우 필드 속성에 final을..

[Spring Framework] 컴포넌트 스캔(Component Scan)

지금까지는 스프링 컨테이너에 빈을 수동으로 등록하려 할 때는 자바코드의 @Bean을 작성하거나 XML의 을 통해서 등록합니다. 하지만 등록할 빈이 많아지면 이런 코드를 일일이 작성해야하기 때문에 등록하기도 힘들고, 설정정보도 커지고, 개발자가 실수해서 누락하는 문제가 발생할 수 있습니다. 그래서 스프링이 설정정보 없이도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 그리고 의존관계도 자동으로 주입해주는 @Autowired라는 기능도 제공한다. 이런 컴포넌트 스캔을 사용하기 위해서는 @ComponentScan 애노테이션을 사용하면 됩니다. 단, 컴포넌트 스캔을 사용하면 @Configuration의 내부에도 @Component 애노테이션이 있기 때문에 @Configuration이 붙은 ..

Vision Framework로 얼굴인식하기

Notion 블로그에 작성되어 있던 포스트 입니다. Notion의 접속 속도가 느려 medium 블로그에 다시 정리하게 되었습니다. 기존의 노션링크로도 읽어보실 수 있습니다. 되새김 프로젝트 중 사용자가 다이어리에 등록한 이미지로 얼굴인식을 하고 모자이크 처리하는 부분을 담당하게 되었습니다. 얼굴을 인식하기 위해서 애플에서 기존에 제공하는 기능이 있습니다. 그중에서 이번에는 Vision Framework를 사용하게 되었습니다. Vision Framework 에서는 얼굴인식 뿐만이 아니라 사각형, 바코드, 텍스트 등등 여러가지 기능을 기본적으로 제공하고 있었습니다. 개인적으로 경험해본 이후로의 생각은 프레임워크를 이용해서 인식시키는 작업은 그다지 어렵지 않았지만 결과로 나온 데이터를 사용자에게 어떻게 표현..

iOS 2023.05.05

이미지 다운샘플링 해보기

이전 포스팅인 WWDC18 — Image and Graphics Best Practice 에서 이미지 메모리의 사용량을 줄이기 위해서는 UIGraphicsImageRenderer나 Image I/O를 사용하는 방법을 소개 받았습니다. 이번에는 저의 실제 사례에 적용시켜보는 시간을 가져보도록 하겠습니다. 먼저 아래와 같은 3.6MB의 파일 사이즈를 가지는 이미지를 사용하였습니다. 위와 같은 이미지를 UIImage로 불러오고 UIImageView로 바로 렌더링 하니 메모리 사용량은 다음과 같았습니다. 위와 같은 3MB 크기의 이미지를 화면에 띄웠더니 다음과 같이 메모리의 사용량이 24.9MB 에서 108MB가 된것을 볼 수 있습니다. 고작 3MB 짜리 이미지를 화면에 띄웠을 뿐인데 왜 이렇게 메모리를 많이 ..

iOS 2023.05.05