Spring - Spring Boot 3.x에서 View 렌더링되지 않는 원인과 해결 방법
·
Spring
배경Spring Boot 3로 프로젝트를 개발하던 중 에러가 발생했다. 간단한 웹 페이지를 JSP로 구현하고 있었는데, 페이지를 열어보니 JSP 화면 대신 Whitelabel Error Page가 나타났다. 컨트롤러에서 main이라는 뷰 이름을 반환했고, 해당 JSP파일도 정확한 위치에 있었다. 그런데 왜 Spring Boot는 JSP를 찾지 못하고 Whitelabel Error Page를 표시하는걸까? build.gradledependencies { ... // JSP implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl'..
Spring Boot - Repository 단위 테스트하기(JPA, Querydsl, Mybatis)
·
Spring
유닛 테스트(unit test)는 컴퓨터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차다.즉, 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하는 절차를 말한다.이를 통해서 언제라도 코드 변경으로 인해 문제가 발생할 경우, 단시간 내에 이를 파악하고 바로 잡을 수 있도록 해준다.이상적으로, 각 테스트 케이스는 서로 분리되어야 한다. 이를위해 가짜 객체(Mock object)를 생성하는 것도 좋은 방법이다. - 위키백과 배경현재 내가 일하고 있는 조직에서는 테스트 코드 작성을 하지 않는다. 이로 인해 코드 수정이나 기능을 추가해야 할 때 수동으로 테스트를 진행해야 했다. 작은 변경사항에도 전체 기능을 다시 테스트해야 하는 상황이 자주 발생했고, 이는..
Spring Boot - Service 단위 테스트하기(JUnit5, Mockito, AssertJ)
·
Spring
유닛 테스트(unit test)는 컴퓨터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차다.즉, 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하는 절차를 말한다.이를 통해서 언제라도 코드 변경으로 인해 문제가 발생할 경우, 단시간 내에 이를 파악하고 바로 잡을 수 있도록 해준다.이상적으로, 각 테스트 케이스는 서로 분리되어야 한다. 이를위해 가짜 객체(Mock object)를 생성하는 것도 좋은 방법이다. - 위키백과 배경현재 내가 일하고 있는 조직에서는 테스트 코드 작성을 하지 않는다. 이로 인해 코드 수정이나 기능을 추가해야 할 때 수동으로 테스트를 진행해야 했다. 작은 변경사항에도 전체 기능을 다시 테스트해야 하는 상황이 자주 발생했고, 이는..
Spring Boot - Controller 단위 테스트하기(JUnit, MockMvc, Mockito)
·
Spring
유닛 테스트(unit test)는 컴퓨터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차다.즉, 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하는 절차를 말한다.이를 통해서 언제라도 코드 변경으로 인해 문제가 발생할 경우, 단시간 내에 이를 파악하고 바로 잡을 수 있도록 해준다.이상적으로, 각 테스트 케이스는 서로 분리되어야 한다. 이를위해 가짜 객체(Mock object)를 생성하는 것도 좋은 방법이다. - 위키백과 배경현재 내가 일하고 있는 조직에서는 테스트 코드 작성을 하지 않는다. 이로 인해 코드 수정이나 기능을 추가해야 할 때 수동으로 테스트를 진행해야 했다. 작은 변경사항에도 전체 기능을 다시 테스트해야 하는 상황이 자주 발생했고, 이는..
Spring Boot - JPA 스키마, 데이터 초기화하기 (SQL script -> ddl-auto)
·
Spring
개요이전에 작업했던 프로젝트를 Mybatis에서 JPA, Querydsl로 마이그레이션하는 작업을 하고 있다.기존 초기화를 script(schema.sql(테이블 생성), data.sql(더미데이터 생성)) 파일을 사용하다가 JPA를 사용하게 되면서 ddl-auto를 사용해 Table 생성하기로 했다.DDL이란?DDL(Data Definition Language)은 SQL의 하위 집합으로 데이터베이스의 구조와 테이블, 뷰, 인덱스 프로시저와 같은 개체를 정의하는데 사용된다. DDL문은 데이터 베이스 개체를 생성, 변경 및 삭제 하는데 사용된다. (CREATE, ALTER, DROP, TRUNCATE, RENAME) 데이터 초기화 설정SQL script (기존) 기존에는 script 기반으로 데이터를 초기..
Spring Boot Test - Mockito로 Static Method Mock 만드는 방법
·
Spring
개요현재 프로젝트에서 SesseionUser라는 클래스가 있다.SessionUser는 세션에 User 정보를 관리하는 유틸리티 클래스로, static 메서드로 작성되어있다.public class SessionsUser {    public static void setSessionUser(HttpSession session, Users users) {        session.setAttribute("userSessionInfo", users);    }    public static Users getSessionUser(HttpSession session) {        return (Users) session.getAttribute("userSessionInfo");    }    public st..
Spring Interceptor - 인터셉터로 로그인 체크하기
·
Spring
개요 JSP로 간단한 게시판을 만들어보고 있었는데 로그인 후 접근 가능한 url로 접근할 때 로그인 여부를 체크하고 로그인하지 않았다면 로그인 화면으로 리다이렉트 시켜주는 기능이 필요했다. 그래서 이번에 알고는 있었지만 구현해본 적은 없었던 스프링 인터셉터를 사용해서 로그인 체크를 구현해보았다. 인터셉터 Spring Interceptor는 스프링 MVC에서 HTTP 요청 처리의 전, 후, 중간에 특정 작업을 수행할 수 있도록 도와주는 기능이다. 주로 요청 전에 인증, 로깅, 권한 체크 등과 같은 공통 작업을 수행하는데 많이 사용된다. 주로 Servlet Filter(필터)와 많이 비교된다. 둘 다 웹의 공토 작업을 수행하지만, 인터셉터는 Spring MVC가 제공하기 때문에, 컨트롤러 호출 전, 후, 중..
Spring - 회원 팔로우 기능 구현
·
Spring
배경 요즘 취업 준비때문에 정신이 없다. 틈내서 사이드 프로젝트를 진행중이다. 이번에 회원 팔로우 기능을 구현했다. 구현한 과정을 정리해본다. 개발 환경 Java 11 Spring 2.x JPA Gradle MySQL, Redis IntelliJ 요구사항 회원을 팔로우할 수 있습니다. 팔로우한 회원을 언팔로우 할 수 있습니다. 회원의 팔로워 수와 팔로잉 수를 확인할 수 있습니다. 관계 Member의 자기 참조 관계를 사용해서 Follow 엔티티를 구현했다. Follow는 Member를 참조하고 있고, 이를 통해서 팔로워(follower)와 팔로잉(following) 간의 관계를 나타내게 했다. 구현 Member @Entity @Getter @DynamicInsert @NoArgsConstructor(ac..
Spring - Spring Boot 초기 데이터 설정 (data.sql)
·
Spring
프로젝트를 진행하면서 회원 가입할 때 선택할 수 있는 관심사 태그가 필요했다.Enum으로 관리할지 테이블로 관리할지 고민했었는데, 동적으로 관리해야 할 필요가 있어서 테이블로 관리하기로 했다.관심사 태그는 미리 지정되어 있기 때문에 데이터를 미리 넣어 사용하도록 해야 했다.그럼 Spring Boot에서 어떻게 초기 데이터를 설정하는지 알아보자 yml 설정spring: ... jpa: hibernate: ddl-auto: create defer-datasource-initialization: true sql: init: mode: alwaysspring.jpa.hibernate.ddl-auto: create:  Hibernate가 데이터베..
Spring - 통합 테스트에서 S3 Mock 객체로 S3 자원 아끼기
·
Spring
배경 파일 업로드를 위해 S3를 연결하고 테스트하는 과정에서 문제가 발생했다. S3에 테스트를 위해 생성한 파일들이 계속 저장되어 있던 것! 단위테스트는 Mock을 사용하기 때문에 문제가 없었지만 통합테스트에서는 모든 로직이 그대로 실행되서 저장되는 로직이 포함된 만큼 파일이 S3에 저장됐다. 프리티어를 사용하고 있었기 때문에 GET, POST를 요청을 보낼 수 있는 횟수 제한이 있었고 정신없이 테스트를 돌리다보니 GET 500회, POST 900회나 실행되고 있었다. 이 문제를 해결하기 위해 통합 테스트에서도 S3를 Mock으로 만들어 사용해야 했다. 구현 AwsS3Config 기존에 AmazonS3 Bean을 생성하기 위한 코드이다. 해당 Bean을 사용하지 않도록 Test용 Bean을 만들어서 사용..
Cold Bean
'Spring' 카테고리의 글 목록