Study/Spring 12

[Test] JUnit을 활용한 단위 테스트

우선 프로젝트를 아래와 같은 요구사항으로 세팅하고 테스트를 진행해 보자.주문 목록에 음료 추가/삭제 기능주문 목록 전체 지우기주문 목록 총 금액 계산하기주문 생성하기 수동 테스트 vs 자동화 테스트class CafeKioskTest { @Test void add() { CafeKiosk cafeKiosk = new CafeKiosk(); cafeKiosk.add(new Americano()); System.out.println(">>> 담긴 음료 수 : " + cafeKiosk.getBeverages().size()); System.out.println(">>> 담긴 음료 : " + cafeKiosk.getBeverages().get(0).ge..

Study/Spring 2024.10.04

[Test] 테스트의 필요성

테스트프로젝트를 개발할 때 버그가 없는지, 예상한 대로 결과가 나오는지 테스트가 필요하다.그렇다면 사람이 직접 테스트를 수행한다면 어떨까?🤔 사람이 테스트할 경우 문제점커버할 수 없는 영역 발생테스터의 경험과 감에 의존늦은 피드백유지보수 어려움소프트웨어 신뢰 낮아짐이러한 문제들을 해결하기 위해 우리는 테스트 코드를 작성하여 빠른 피드백, 자동화, 안정감을 확보할 수 있다. ❓테스트 코드를 작성하지 않는다면변화가 생기는 매 순간마다 발생할 수 있는 모든 케이스를 고려해야 한다.변화가 생기는 매 순간마다 모든 팀원이 동일한 고민을 해야 한다.빠르게 변화하는 소프트웨어의 안정성을 보장할 수 없다. ❓테스트 코드가 병목이 된다면프로덕션 코드의 안정성을 제공하기 힘들어진다.테스트 코드 자체가 유지보수하기 어려운..

Study/Spring 2024.09.26

[Spring] API 예외 처리

API 예외 처리HTML 페이지의 경우 저번에 정리했던 것처럼 4xx, 5xx와 같은 오류페이지만 있으면 대부분의 문제를 해결할 수 있다. [Spring] 서블릿 예외 처리오늘은 스프링이 아닌 순수 서블릿 컨테이너가 예외를 어떻게 처리하는지 정리해보려고 한다.  서블릿 예외 처리서블릿은 2가지 방식으로 예외 처리를 지원한다.Exception(예외)response.sendError(HTTPauny.tistory.com API의 경우 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다. HandlerExceptionResolver스프링 MVC는 컨트롤러(핸들러) 밖으로 예외가 던져진 경우 예외를 해결하고, 동작을 새로 정의할 수 있는 방법을 제공한다.컨트롤러 밖으로 던져진 ..

Study/Spring 2024.09.11

[Spring] 서블릿 예외 처리

오늘은 스프링이 아닌 순수 서블릿 컨테이너가 예외를 어떻게 처리하는지 정리해보려고 한다.  서블릿 예외 처리서블릿은 2가지 방식으로 예외 처리를 지원한다.Exception(예외)response.sendError(HTTP 상태 코드, 오류 메시지)Exception(예외)자바 직접 실행자바의 메인 메서드를 직접 실행하는 경우 main이라는 이름의 쓰레드가 실행된다.실행 도중에 예외를 잡지 못하고 처음 실행한 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드는 종료된다. 웹 애플리케이션웹 애플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 애플리케이션에서 예외가 발생했는데, try ~ catch로 예외를 잡아서 처리하면 아무런 문제가 없을 것..

Study/Spring 2024.09.05

[JPA] N+1 문제 원인 및 해결

오늘은 N+1 문제가 왜 발생되는지 원인과 함께 해결방법에 대해 간략하게 정리해보려고 한다. N+1 문제는 데이터베이스와 관련된 성능 문제로, 일반적으로 JPA와 같은 ORM 프레임워크에서 자주 발생한다.  N+1 문제1번의 쿼리를 날렸을 때, N번의 추가 쿼리가 발생하는 것을 의미한다. N+1 문제 발생 상황언제 발생하는가?JPA Repository를 활용해 인터페이스 메서드를 호출할 때. 누가 발생시키는가?1:N 또는 N:1 관계를 가진 엔티티를 조회할 때. 어떤 상황에 발생되는가?즉시 로딩 : JPA Fetch 전략이 EAGER 전략으로 데이터를 조회하는 경우지연 로딩 : JPA Fetch 전략이 LAZY 전략으로 데이터를 가져온 이후 연관 관계인 하위 엔티티를 다시 조회하는 경우 왜 발생하는가?J..

Study/Spring 2024.09.03

[Spring] 로그인 처리하기 - 쿠키, 세션

오늘은 로그인 기능에 대해 간단하게 정리해보려고 한다. 로그인 기능🔸 우선 로그인 ID, 비밀번호를 입력하는 과정부터 생각해 보자. 로그인의 핵심 비즈니스 로직은 회원을 조회한 다음에 파라미터로 넘어온 password와 비교해서 같으면 회원을 반환하고, 만약 password가 다르면 null을 반환한다. 로그인 컨트롤러는 로그인 서비스를 호출해서 로그인에 성공하면 홈 화면으로 이동하고, 로그인에 실패하면 오류를 생성한다. 그리고 정보를 다시 입력하도록 로그인 폼을 뷰 템플릿으로 사용한다. 로그인의 상태를 유지하면서, 로그인에 성공한 사용자는 홈 화면에 접근 시 고객의 이름을 보여주려면 어떻게 해야 할까?🤔 로그인 처리 - 쿠키🔸 로그인의 상태를 유지하기 위해 쿠키를 사용해 보자. 서버에서 로그인에 ..

Study/Spring 2024.06.04

[Spring] MVC 패턴

MVC  패턴MVC 패턴은 Model, View, Controller로 이루어진 디자인 패턴이다.애플리케이션의 구성 요소를 세 가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발할 수 있다.웹 애플리케이션은 보통 이 MVC 패턴을 사용한다. 컨트롤러(Contorller)HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다. 그리고 뷰에 전달할 결과 데이터를 조회해서 모델에 담는다. 모델(Model)뷰에 출력할 데이터를 담아둔다. 뷰에 필요한 데이터를 모두 모델에 담아서 전달해 주는 덕분에 뷰는 비즈니스 로직이나 데이터 접근을 몰라도 되고, 화면을 렌더링 하는 일에 집중할 수 있다. 뷰(View)모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중한다. HTML..

Study/Spring 2024.05.03

[Spring] 서블릿(Servlet)

서블릿(Servlet)서블릿(Servlet)이란 클라이언트의 요청을 처리하고, 응답을 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술이다. 웹 프로그램들은 클라이언트가 어떠한 요청을 하면 그 결과를 전송해주어야 하는데, 이러한 역할을 하는 자바 프로그램이다. 특징urlPatterns에 지정된 URL이 호출되면 해당 서블릿 코드가 실행된다. HttpServletRequest를 통해 HTTP 요청 정보를 편리하게 사용할 수 있다. HttpServletResponse를 통해 HTTP 응답 정보를 편리하게 사용할 수 있다. HTTP 요청, 응답 흐름사용자가 URL을 입력하면 요청이 서블릿 컨테이너로 전송된다.요청을 전송받은 서블릿 컨테이너는 Request, ..

Study/Spring 2024.04.19

[Spring] 스프링 빈 생명주기

오늘은 스프링 빈 생명주기에 대해 간단하게 정리하려고 한다. 스프링 빈의 생명주기는 다음과 같다. 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료 1. 스프링 컨테이너 생성 스프링 애플리케이션을 실행하면 스프링 컨테이너가 생성되는데, 스프링 컨테이너를 생성할 때는 구성 정보를 지정해줘야 한다. 컨테이너는 빈의 생성과 관리를 담당한다. 2. 스프링 빈 생성 컨테이너는 설정 파일이나 어노테이션 기반 설정을 기반으로 빈을 생성한다. 빈 이름은 메서드 이름을 사용하고, 직접 부여할 수 도 있다. 3. 의존관계 주입 빈 생성 후, 컨테이너는 빈들 간의 의존관계를 주입한다. [Spring] 의존성 주입(Dependency Injectio..

Study/Spring 2024.04.13