pdf 파일 다운로드 및 현재 탭에서 열기 스프링에서 파일 다운로드 구현은 어렵지 않다. 다운로드 파일 유형이 pdf인 경우, 다운로드하지 않고 현재 탭에 미리보기로 띄워야 하는 경우도 있는데, 이도 어렵지 않다. 파일 다운로드 간단하게 ResourceLoader를 사용하여 파일 다운로드하는 방법을 알아본다. html 부분이다. 파일 다운로드 태그를 작성하고, 해당 태그 클릭 시 파일 다운로드를 진행하게 한다. myFile.pdf 부분은 파일명을 집어넣는다. 데이터 정보로 파일명을 불러올 수도 있지만 현재 예제에서는 정말 단순하게 파일 다운로드만 살펴볼 것이기 때문에 파일명을 myFile.pdf로 지정해주었다. 다음은 Controller 부분이다. 기존 Controller를 사용해도 되긴 하지만 파일 기..
[JPA] No property 'Method Name' found for type 'Class Name'! 아무것도 안 보고 무지성으로 하려 하니 다채로운 오류가 많이 발생한다. 그리고 이는 좀 많이 슬프다.. springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'manageController' defined in file [C:\Devroot\spring-workspace\board\board\out\production\classes\com\eleven\board\controller\ManageController.class]: Unsatisfied dependency expressed th..
location.href에 타임 리프 변수 넣기 타임리프에서 GET 방식으로 필요한 파라미터를 집어넣을 때, 태그의 th:href에서는 무리 없이 값이 들어갔지만 th:onclick에서 location.href 사용 시에는 th:href처럼 동작하지 않았다. 그래서 조금 다르게 작성하였다. 쉬운 이해를 위해 두 가지 코드를 비교해본다. th:href View page url임을 명시할 때는 @{}를 사용한다. GET 방식으로 데이터를 전달하려면 @{} 안에 (key=value)를 넣어준다. 위 코드를 예시로 하였을 때 view는 이동할 페이지이고, uid는 key이며 ${data.uid}가 value이다. 만약 ${data.uid}에 들어가는 값이 1이라고 가정하고 위 태그를 클릭했을 때 url은 아래와..
의존성 주입 (Dependency Injection, DI) MVC 모델을 사용하여 개발한다고 가정할 때 Controller에서는 Service에 있는 메서드를 호출해야 하고, Service에서는 Repository(or DAO,...)에 있는 메서드를 호출해야 한다. 이런 상황에서 Controller에서는 Service에 의존한다 말하고, Service는 Repository에 의존한다고 얘기한다. interface MemberRepository {...} public class JdbcMemberRepository implements MemberRepository {...} public class MyBatisMemberRepository implements MemberRepository {...} p..
Spring JDBC, JDBC Template 예제 요즘에는 보통 MyBatis나 JPA를 이용해서 개발하지만 옛날에는 JDBC로 개발했던 적이 있었다. JDBC는 JSP로 웹 개발할 때 사용해서 익숙하지만 JDBC Template는 처음 보는 것이어서 두 개의 예제를 비교해본다. JDBC import hello.hellospring.domain.Member; import org.springframework.jdbc.datasource.DataSourceUtils; import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql..
Test case 작성 스프링 부트에서는 테스트 메서드 작성 시 메서드 앞에 @Test 어노테이션을 명시한다. 각각의 테스트 메서드는 독립적으로 실행되어야 한다. 테스트는 각 테스트끼리의 순서가 관계없어야 하고, 의존 관계가 없어야 한다. 따라서 하나의 테스트가 끝날 때마다 공용 데이터들을 깔끔하게 지워야 한다. 이를 위해 @BeforeEach와 @AfterEach 어노테이션을 사용한다. 테스트 메서드 작성 시 메서드 명은 한글로 작성해도 상관없다. 빌드 시 실제 코드에 포함되지 않기 때문이다. @SpringBootTest 스프링 부트를 사용해 Test 한다는 것을 명시한다. 데이터베이스 정보를 스프링에서 가지고 있을 때 사용한다. 해당 어노테이션이 붙으면 스프링 컨테이너와 테스트를 함께 실행한다. @T..
@ResponseBody 작동 원리 @ResponseBody 어노테이션을 사용하지 않는 메서드와 @ResponseBody 어노테이션을 사용하는 두 개의 메서드를 비교하여 살펴본다. @ResponseBody 어노테이션을 사용하여 페이지에 데이터만을 전달할 수 있다. @RepsonseBody 사용 안 함 첫 번째로는 @RepsonseBody를 사용하지 않는 일반적인 메서드이다. 스프링 부트의 경우 웹 브라우저에서 (ex) localhost:8080/mvc를 통해 사이트에 접속하면 내장 톰캣 서버에서 mvc를 스프링에 넘겨주고, 스프링에서는 컨트롤러에 있는 Mapping을 따라 찾아간다. Mapping 된다면 ViewResolver로 토스되어(View를 통해서) 처리된다. @GetMapping("mvc") p..
java.lang.NumberFormatException: For input string: "Y" There was an unexpected error (type=Internal Server Error, status=500). nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.NumberFormatException: For input string: "Y" ### Cause: java.lang.NumberFormatException: For input string: "Y" MyBatis에서 if문 사용 중 위와 유사한 에러가 발생하는 경우가 있다. ..
이클립스에서 properties 파일 한글 깨질 때 workspace 인코딩을 UTF-8로 하여도 properties 파일은 한글이 깨지는 경우가 있습니다. 확장자명이 properties 인 파일도 따로 인코딩 설정을 해주어야 깨지지 않습니다. 상단 메뉴의 Window > Perferences를 클릭합니다. 검색 창에 enc를 검색하면 위와 같은 화면이 나옵니다. Content types: 에서 마지막에서 두 번째인 Text 왼쪽 > 표시를 눌러 모든 확장자명이 보이게 합니다. Java Properties File을 클릭하면 Default encoding 값이 ISO-8859-1로 되어있습니다. Default encoding 값을 UTF-8로 변경하면 오른쪽 Update 버튼이 활성화됩니다. Update..
Could not resolve type alias '' insert 문에서 parameterType을 Member로 설정해주었는데 엄청난 오류가 떴다. 오류 멈춰! 평소와 같이 DTO 역할을 하는 클래스명을 썼고, 파일도 잘 생성되어 있는데 왜 그런가 했더니 alias(별칭) 설정을 해주지 않아서였다. 사실 이것도 별칭을 왜 설정하지? 알아서 찾아가 주는 거 아닌가?라고 처음에 생각했었지만... ㅎㅅㅎ application.properties mybatis.type-aliases-package=com.example.domain 위와 같이 properties 파일에서 별칭 설정을 하여 패키지 명을 명시해주어야 한다. 별칭으로 명시해주면 자동으로 해당 패키지로 들어가 패키지 안에 있는 클래스를 찾아준다. ..
Consider defining a bean of type 'Service명' in your configuration. @Service 어노테이션을 명시해주지 않아서 발생한 오류 이리저리 유사 코드를 복사하고, 기능 분리를 위해 파일을 나누고 하다 보면 이런 일이 비일비재하게 발생한다. 위와 같은 bean 타입을 찾지 못했다는 오류가 발생하면 어노테이션 먼저 확인해볼 것
환경 설정 프로젝트 생성 Spring은 설치되어 있다고 가정합니다. (이클립스에서 Spring 설치하기) 스프링 프로젝트 생성을 먼저 하겠습니다. Spring Starter Project로 생성합니다. 프로젝트 이름을 작성하고, Package는 com.example.coupon으로 해주었습니다. Next를 클릭하여 필요한 Dependcy 설정을 해줍니다. Spring Boot DevTools : 코드 변경 시 서버 재시작을 자동으로 해줍니다. Lombok : Getter, Setter, 생성자 생성을 도와주는 라이브러리인데 필수적이진 않으나 편리합니다. Validation : 유효성 검증을 위한 것입니다. 이 외의 것들은 Web, 데이터베이스 관련입니다. 데이터베이스는 MySQL을 사용할 것이고, MyB..