Web

Web

[Web] 내가 보려고 정리한 HTTP 상태 코드

상태 코드 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능 1xx (Informational): 요청이 수신되어 처리 중 2xx (Successful): 클라이언트의 요청을 성공적으로 정상 처리 3xx (Redirection): 요청을 완료하기 위해 유저 에이전트의 추가 행동(조치)이 필요 4xx (Client Error): 클라이언트 오류. 잘못된 문법 등으로 서버가 요청을 수행할 수 없음 5xx (Server Error): 서버 오류. 서버가 정상 요청을 처리하지 못함 1xx (Informational) 거의 사용하지 않는 상태 코드이다. 2xx (Successful) 200 OK 요청 성공 201 Created 요청이 성공해서 새로운 리소스가 생성됨 202 Accepted 요청이 접수되..

Web

[FreeMarker] 프리마커란?

프리마커란? 정확히 말하자면 Apache FreeMarker로 자바에서 사용되는 템플릿 엔진, 자바 라이브러리이다. 템플릿과 데이터를 기반으로 텍스트 출력을 생성한다. 프리마커의 확장자는 ftl이다. FreeMarker Template File의 줄임말이다. 프리마커 문법은 아래 사이트에서 확인해볼 수 있다. Apache FreeMarker Manual freemarker.apache.org 스프링, 스프링 부트로 프로젝트 진행 시 템플릿 엔진 대신 JSP를 사용할 수 있지만, 더 이상 스프링 부트에서 JSP는 추천되지 않는다. Java EE에 종속적이라는 점이 큰 단점으로 다가오기 때문이다. 예로 인텔리제이 IDE에서는 스프링 부트 프로젝트에서 JSP를 사용하는 경우 패키징을 war로 선택해야 한다. ..

Web

[FreeMarker] null 체크, 빈 리스트 체크 (feat. 프리마커 ??)

empty, null 체크, 빈 리스트 체크 has_content와 ?? 를 사용해 빈 리스트인, null인지 아닌지 체크할 수 있다. 이전에는 if_exists로 검사했었지만 더는 권장되지 않는다. ... has_content는 리스트(오브젝트)가 존재하는지(size가 1 이상인지) 검사함과 함께 동시에 null 검사도 수행한다. 검사하는 리스트가 빈 값이거나 존재하지 않으면 false를 반환하고, 값이 존재하는 경우 true를 반환한다. 리스트에 빈 객체가 들어와 있는 경우가 생길 수 있는데, 이러한 경우 has_content가 제대로 동작하지 않는다. 예시로, 컨트롤러에서 list 타입이 아닌 객체 값을 넣어주었다고 가정한다. @Controller public class ProductControll..

Web/Spring

[Spring] @Resource 와 @Autowired 차이

@Resource 어노테이션과 @Autowired 어노테이션의 차이 두 어노테이션 모두 의존성을 주입하는 어노테이션이다. 해당 어노테이션을 사용하여 IoC 컨테이너에 등록된 빈 객체를 자동으로 주입한다. @Autowired 어노테이션에 대한 자세한 설명은 검색하면 많은 정보가 나오므로 생략하도록 한다. @Resource 어노테이션과 어떤 차이가 존재하는지를 중점적으로 살펴본다. 편의상 해당 글에서 모든 의존성 주입 방법 예시는 필드 주입으로 한다. @Autowired - 필드, 메서드, 생성자에 사용할 수 있다. - Bean의 타입을 사용해서 주입할 빈 객체를 찾는다. - 하나의 인터페이스는 한 개의 클래스로만 구현할 수 있다. (두 개 이상의 클래스가 구현하면 안 된다.) 마지막 특징 때문에 @Reso..

Web/Spring

[Spring Boot] pdf 파일 다운로드 및 현재 탭에서 열기

pdf 파일 다운로드 및 현재 탭에서 열기 스프링에서 파일 다운로드 구현은 어렵지 않다. 다운로드 파일 유형이 pdf인 경우, 다운로드하지 않고 현재 탭에 미리보기로 띄워야 하는 경우도 있는데, 이도 어렵지 않다. 파일 다운로드 간단하게 ResourceLoader를 사용하여 파일 다운로드하는 방법을 알아본다. html 부분이다. 파일 다운로드 태그를 작성하고, 해당 태그 클릭 시 파일 다운로드를 진행하게 한다. myFile.pdf 부분은 파일명을 집어넣는다. 데이터 정보로 파일명을 불러올 수도 있지만 현재 예제에서는 정말 단순하게 파일 다운로드만 살펴볼 것이기 때문에 파일명을 myFile.pdf로 지정해주었다. 다음은 Controller 부분이다. 기존 Controller를 사용해도 되긴 하지만 파일 기..

Web/Thymeleaf

[Thymeleaf] JavaScript에서 타임 리프 변수 사용하기

JavaScript에서 타임 리프 변수 사용하기 타임 리프를 사용하여 html 파일 작성 시 일반적인 이와 같이 th:inline을 명시해준다. 이후 자바 스크립트 코드는 모두 /**/로 묶어주어야 한다. 따라서 첫 줄에 /**/를 작성해주었다. 또한 타임 리프 변수인 ${paging.page}도 /*[[]]*/로 묶어주어야 하기 때문에 /*[[ ${paging.page} ]]*/라고 작성하였다.

Web/Thymeleaf

[Thymeleaf] location.href에 변수 넣기 (th:onclick, GET)

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은 아래와..

Web/Spring

[Spring] 의존성 주입 (Dependency Injection, DI) 예제

의존성 주입 (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..

Web/Spring

[Spring] JDBC, JDBC Template 예제

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..

Web/Spring

[Spring] 스프링 빈을 등록하는 두 가지 방법

Spring Bean(스프링 빈) 스프링 IoC 컨테이너(객체를 생성하고 관리하며 객체끼리의 의존관계를 연결함)가 관리하는 객체들을 Bean이라고 부른다. 스프링 컨테이너에 등록된 객체를 스프링 빈이라 하는 것이다. 본 글에서는 스프링 IoC 컨테이너를 편의상 스프링 컨테이너라고 작성한다. 이때 스프링 컨테이너가 관리하는 객체는 우리가 평상시 new 연산자로 생성하는 객체가 아닌, ApplicationContext.getBean()으로 얻어질 수 있는 객체이다. new 연산자로 생성한 객체는 사용자가 직접 생성한 객체이므로 스프링 컨테이너에서 관리되지 않는다. 스프링 컨테이너에서 관리하는 객체는 ApplicationContext가 생성한 객체이다. 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때 (따로..

Web/Spring

[Spring Boot] @AfterEach, @BeforeEach 예제

Test case 작성 스프링 부트에서는 테스트 메서드 작성 시 메서드 앞에 @Test 어노테이션을 명시한다. 각각의 테스트 메서드는 독립적으로 실행되어야 한다. 테스트는 각 테스트끼리의 순서가 관계없어야 하고, 의존 관계가 없어야 한다. 따라서 하나의 테스트가 끝날 때마다 공용 데이터들을 깔끔하게 지워야 한다. 이를 위해 @BeforeEach와 @AfterEach 어노테이션을 사용한다. 테스트 메서드 작성 시 메서드 명은 한글로 작성해도 상관없다. 빌드 시 실제 코드에 포함되지 않기 때문이다. @SpringBootTest 스프링 부트를 사용해 Test 한다는 것을 명시한다. 데이터베이스 정보를 스프링에서 가지고 있을 때 사용한다. 해당 어노테이션이 붙으면 스프링 컨테이너와 테스트를 함께 실행한다. @T..

Web/Spring

@ResponseBody 작동 원리

@ResponseBody 작동 원리 @ResponseBody 어노테이션을 사용하지 않는 메서드와 @ResponseBody 어노테이션을 사용하는 두 개의 메서드를 비교하여 살펴본다. @ResponseBody 어노테이션을 사용하여 페이지에 데이터만을 전달할 수 있다. @RepsonseBody 사용 안 함 첫 번째로는 @RepsonseBody를 사용하지 않는 일반적인 메서드이다. 스프링 부트의 경우 웹 브라우저에서 (ex) localhost:8080/mvc를 통해 사이트에 접속하면 내장 톰캣 서버에서 mvc를 스프링에 넘겨주고, 스프링에서는 컨트롤러에 있는 Mapping을 따라 찾아간다. Mapping 된다면 ViewResolver로 토스되어(View를 통해서) 처리된다. @GetMapping("mvc") p..

밈아
'Web' 카테고리의 글 목록