본문 바로가기

전체 글142

[Java] Stream 이란, Stream의 필요성 - 1 1. 개요 이번 게시물에서는 Java 8에서 부터 제공하는 Stream에 대해서 알아볼 것이다. Stream이 언제, 왜 나왔는지부터 시작해서 Stream의 구성요소까지 순서대로 알아보자. 실제 Stream을 사용하는 방법에 대해서는 다음 게시물을 살펴보자. [Java] Stream 사용법 - 2(작성중)  2. Stream Stream은 마찬가지로 자바 8에서 추가된 람다식을 활용할 수 있는 기술이다. 자바 8 이전에는 배열 혹은 Collection 인스턴스의 데이터를 다뤄야 할 경우에 for, for-each문을 주로 사용하였다.int[] testList = { 5, 4, 3, 2, 1 };for (int i=0; i  이렇게 간단한 경우는 상관없다. 하지만 로직이 복잡해지면 코드의 양도 덩달아 길어.. 2024. 5. 2.
[Spring] API 예외처리 (서블릿부터 @ExceptionHandler까지) 1. 개요 지난 게시물에서는 MVC 패턴에서 오류가 발생할경우, 오류 페이지로 안내하는 방법에 대해서 알아보았다. 사실 4xx, 5xx와 같은 오류 페이지만 있으면, 거의 모든 문제를 해결할 수 있었다. 하지만 API의 경우, 고려해야 할 내용이 더 많다. API는 오류 상황에 따라 그에 맞는 오류 응답 스펙을 정하고, 데이터를 JSON 형식으로 내려주어야 한다. 지금까지 그래왔듯이, 서블릿 오류 페이지 방식부터 스프링이 제공하는 편리한 방법까지 순서대로 살펴보자. 2. API 서블릿 기본 예외 처리 우선 기본적인 서블릿을 사용해서 예외처리를 해보자. 마찬가지로 지난 게시물 "3. 서블릿 오류 페이지"에서 만든 WebServerCustomizer를 다시 동작시키자. WebServerCustomizer @.. 2024. 4. 17.
[Spring] 예외 처리, 오류 페이지 1. 개요 이번 게시물에서는 예외 발생시 우선 순수 서블릿으로 예외를 처리해보고, 오류 화면을 제공해 볼 것이다. 그 후, 스프링부트는 어떻게 예외를 처리하고 오류 페이지를 작동시키는지에 대해 알아보자. 2. 서블릿 예외 처리 서블릿에서 예외처리를 하는 경우는 크게 2가지이다. Exception(예외)가 발생하거나, response.sendError(HTTP 상태 코드, 오류 메시지)를 담을 경우이다. 1) Exception(예외) 자바가 메인 메서드를 실행하는 경우를 생각해보자. 이 경우 main이라는 쓰레드가 실행되며, 메서드 실행 도중 main()메서드 내부에서 예외처리를 하지 못한다면 예외 정보를 남기고, main() 메서드가 종료된다. 이에 반해, 웹 애플리케이션은 사용자의 요청별로 쓰레드가 생.. 2024. 3. 25.
[Spring] 서블릿 필터, 스프링 인터셉터 0. 개요 이전 게시물에서 로그인 기능을 만들고, 사용자가 로그인 시 식별할 수 있도록 하였다. 로그인을 한 사용자와 로그인을 하지 않은 사용자에게 서로 다른 홈 화면을 보여줌으로서, 로그인한 사용자만 상품 관리 화면으로 접근 가능할 수 있도록 해두었다. 하지만, 로그인하지 않은 사용자도 해당 주소를 직접 호출한다면? 아무 문제없이 상품 관리 화면에 들어갈 수 있게 된다... 따라서 우리는 모든 상품 관리 컨트롤러에서 로그인 여부를 체크하는 로직을 작성하면 되지만, 수 많은 공통 로직이 발생할 것이다. 만일에 로그인 관련 로직이 변경되기라도 한다면? 모든 로직을 다 수정해야 한다. 이렇게 여러 로직에서 공통적으로 필요한 것을 공통 관심사라고 하며, 웹과 관련된 공통 관심사는 서블릿 필터 혹은 스프링 인터.. 2024. 3. 20.
[Spring] 쿠키, 세션으로 로그인 기능 만들기 0. 개요 대부분의 사이트들은 회원가입과 로그인 기능이 있다. 이때 로그인을 할 경우, 메인 페이지에 환영합니다 ooo님이라는 메시지가 뜨는 것을 확인 가능하다. 그런데, 웹사이트 입장에서는 어떤 사용자가 로그인을 하였는지 어떻게 알 수 있을까? HTTP Stateless 프로토콜에 의해 서버는 이전 요청을 기억하지 못하는데 말이다. 이번 게시물에서는 쿠키와 세션을 활용하여 이 로그인 기능을 구현해 볼 것이다. 1. 로그인 성공 시 쿠키 생성 우선, 우리는 로그인에 성공할 경우 로그인이 된 상태를 유지해야 한다. 따라서, 쿠키를 사용해보자. 순서는 다음과 같다. - 로그인 성공 시, HTTP 응답에 쿠키를 담아서 브라우저에 전달 - 브라우저는 앞으로 모든 요청에 해당 쿠키를 지속해서 보냄 - 서버에서는 .. 2024. 3. 7.
[Spring] Bean Validation 1. 개요 지난 게시물에서 스프링의 도움을 받아 검증 기능을 구현해보았다. 하지만 이렇게 매번 코드로 작성하는 것은 너무 번거로운 일이다. 특히 왠만한 검증 로직은 빈 값인지, 특정 크기를 넘는지 아닌지 등등 일반적인 로직으로 이루어져있다. 따라서 간단한 어노테이션을 통해 검증 로직을 적용할 수 있도록 해주는 것이 Bean Validation이다. 2. Bean Validation? 우선 Bean Validation은 특정한 구현체는 아니며, 검증 어노테이션과 여러 인터페이스의 모음이라고 할 수 있다. 일반적으로 사용하는 구현체는 하이버네이트 Validator이며, 이름에 하이버네이트가 붙지만 ORM과는 관련이 없다. https://docs.jboss.org/hibernate/validator/6.2/r.. 2024. 1. 30.
[Spring] 검증 Validation 1. 개요 웹사이트를 만들 경우, 가장 경계해야 하는 것 중 하나가 올바른 데이터를 받도록 하는 것이다. 테스트 상황과 다르게 실제 유저들은 정해진 기준에 맞지 않는 데이터를 입력하며, 이를 그대로 받을 경우 큰 오류 상황으로 이어진다. 따라서 이를 방지하기 위해 데이터를 검증해야 한다. 이번 게시물에서는 직접 검증을 처리하는 것부터 스프링의 도움을 받아 Validator를 분리하는 것까지 쭉 정리해 볼 것이다. 2. 검증 요구사항 모든 설명에 나오는 예시 프로젝트의 설계 방식은 아래 링크를 참고 https://imgzon.tistory.com/114 해당 예시 프로젝트의 상품 관리 시스템에 새로운 요구사항이 추가되었다고 가정해보자. 1) 타입 검증 - 가격, 수량에 문자가 들어가면 검증 오류 처리 2).. 2024. 1. 30.
[Spring] 메시지, 국제화 1. 개요 개발을 하다 보면, 전반적으로 단어를 수정해야 할 경우가 있다. (ex) 엄마 -> 어머님) 여러 화면에 단어를 변경하려면, 직접 화면들을 찾아가면서 모두 변경해야 한다. 예제 수준이라면 문제가 되지 않지만, 화면이 수십개 이상이라면 파일을 모두 고쳐야 한다. 이런 상황을 대비하여 다양한 메시지들을 한 곳에서 관리하는 기능을 메시지 기능이라고 하며, 해당 브라우저의 언어 설정에 따라 사이트의 언어가 바뀌게 하는 기능을 국제화라고 한다. 이 두 가지 기능에 대해 알아보자. 2. 스프링 메시지 소스 설정 물론 메시지, 국제화 기능을 직접 구현하는 것도 가능하다. 하지만, 스프링은 기본적인 메시지와 국제화 기능을 모두 제공한다. 또한, 타임리프도 이를 편리하게 통합해서 제공한다. 메시지 관리 기능을.. 2024. 1. 18.