- Today
- Total
목록Framework (56)
개발하는 고라니
Java로 웹 개발을 접해보았다면 Servlet/JSP로 입문을 했을 가능성이 높고, Spring과 MyBatis, JSP로 그 다음을 접해보았을 것이라 기대된다. JSP는 Java Server Page의 약자로 그간 많이 사용되어왔고, 현재도 많이 쓰이는 뷰 엔진(View Engine)이다. 하지만 최근 스프링 부트로 넘어오면서 JSP 대신 Thymeleaf라는 비교적 새로운 뷰 템플릿 엔진이 등장하였고 많은 사람들이 이것을 사용한다. 물론 Thymeleaf말고도 Mustache, Groovy, FreeMarker ... 등 많은 뷰 엔진이 있다. 이번 포스팅에서 알아볼 Thymeleaf은 Spring Framework(특히 Spring MVC)에 통합시킬 수 있는 뷰 엔진이다. Thymeleaf or..
웹 서비스를 개발하다보면 하나의 업무 로직에서 반드시 함께 처리 되어야하는 업무 단위가 있다. 예를 들어 송금의 상황에서 A가 B에게 송금을 했다면, A의 통장은 잔고가 업데이트 되어야 하고, B의 통장 잔고 또한 업데이트 되어야 하는데, 예기치 못한 상황이 발생해 A에서 돈이 빠져나갔지만, B에게 돈이 들어오지 않았다면... A에서 빠져나간 돈은 다시 원래대로 복구되어야 할 것이다. 이를 트랜잭션 처리라고 한다. @Transactional 스프링의 트랜잭션은 AOP를 기반으로 동작한다. 즉 메인 로직의 시작과 끝에 붙어 트랜잭션을 처리해주는 것이다. 사실 개발자 입장에서는 @Transactional 어노테이션만 붙여주면 끝이난다. 하지만 이 어노테이션의 옵션을 한번 들여다보자. 전파 옵션 - Propa..
Java를 이용해 웹 개발을 한다면 Spring Boot를 높은 확률로 사용할 것이고, 데이터베이스와 연결하기 위해 MyBatis나 JPA를 많이 사용하는 추세이다. 만약 Spring Boot와 MyBatis를 사용할 경우 간단한 설정과 사용법을 보도록 하자 MyBatis 먼저 이를 사용하려면 라이브러리가 필요한데, Maven Repository에서 가져와 인젝션 해주자. 나는 MySQL을 사용할 것 이기에 mysql 라이브러리도 가져왔다. 그리고 jdbc는 필수로 있어야 한다. org.springframework.boot spring-boot-starter-jdbc mysql mysql-connector-java 8.0.24 org.mybatis.spring.boot mybatis-spring-boot..
DispatcherServlet 서블릿/JSP을 다룰 때 Controller 단에서 @WebServlet("/test")와 같은 URL Mapping을 설정했고, 클라이언트의 요청을 직접 받아 로직을 수행했다. 스프링에서는 어떻게 처리를 하는지 보자. 개념 Servlet Container에서 HTTP 프로토콜을 통해 들어오는 모든 요청을 프레젠테이션 계층(Controller)의 제일 앞에두어 중앙집중식으로 처리해주는 프론트 컨트롤러 [프론트 컨트롤러란 주로 서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 모든 요청을 받아 처리해주는 컨트롤러인데, MVC 구조에서 함께 사용되는 패턴] 스프링을 사용하면 DispatcherServlet이라는 핸들러 서블릿이 모든 URL로 들어오는 요청을 받아 스프..
스프링 부트 프로젝트를 생성하고 작업한 결과를 Eclipse나 IntelliJ같은 IDE에서 뿐만 아니라 CMD같은 커맨드 창에서도 띄울 수가 있는데, 그 방법은 간단하다. 나는 Window를 사용하므로 CMD로 사용하겠다. 먼저 CMD를 켜서 프로젝트 폴더가 위치한 곳으로 간다. 그곳에 가면 'gradlew'라는 파일이 있는데 이를 build한다. /* windows */ $ gradlew build /* linux */ $ ./gradlew build 그럼 알수없는 무언가가 실행되는데, 이를 마치고 dir 하면 'build'라는 디렉토리가 생성되어있다. /build/libs 디렉토리 밑에보면 .jar 파일이 하나 있다. 이것을 자바로 실행하면 되는데 이때 명령어는 다음과 같다. java -jar he..
콘솔에 문자열을 입력하고 그 내용을 파일에 저장하는 예제를 해보고자 한다. 자바스크립트는 콘솔 입력이 없기에 Node.js를 사용해야한다. const fs = require('fs'); const readline = require('readline'); var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); var data = ''; rl.on('line', (input) => { data += input + '\n'; }); rl.on('close', () => { fs.appendFile('./test.txt', data, 'utf8', (err) => { if(err) throw err; console...
ejs ejs란 템플릿 엔진 중 하나이며, Embedded Javascript의 약자이다. 뭐.. 자바스크립트가 내장된 HTML 파일이라고 할 수 있겠다. 템플릿 엔진이란 만들어놓은 템플릿이 있고, 템플릿에 꽂아넣을 데이터를 템플릿 엔진이 이 둘을 합쳐 결과 페이지를 생성한다. ejs는 HTML 태그처럼 자바스크립트 내용을 삽입할 수 있다. 이를 이용하면 페이지를 동적으로 생성되도록 더 효율적으로 코드를 작성할 수 있다. 일반적인 HTML 파일에서 스크립트 코드는 내부에 작성해야 하는 번거로움이 있었지만, ejs는 지정된 태그를 사용해 스크립트 내용을 하나의 요소처럼 사용할 수 있게 한다. 가장 큰 장점은 서버에서 보낸 변수를 가져와서 사용할 수 있다. ※ 뷰 템플릿 (View Template), 템플릿..
일전에 Node를 통해 MongoDB에 데이터를 저장하고, 가져오고, 수정하고 삭제하는 것을 구현해보았다. 우리에게 익숙한 RDBMS와 다르게 NoSQL인 MongoDB는 스키마(Schema)가 없다는 특징이 있었다. 이는 때로는 편리할지도 모르지만, 어쩌면 더 복잡할 지도 모르겠다. 그래서 사용하는 것이 mongoose이다. mongoose는 MongoDB를 사용할 때 스키마를 지정해서 사용할 수 있게 해준다. 스키마 타입 (Schema Type) String 문자열 타입 Number 숫자 타입 Boolean 이진 타입 Array 배열 타입 Buffer 버퍼 타입, 바이너리 데이터를 저장할 수 있다. Date 날짜 타입 ObjectId 각 문서(Document)마다 만들어지는 ObjectId를 저장할 ..