
이번에는 새로운 할인정책을 적용해봅니다. 새로운 클래스를 만들어서 기존의 DiscountPolicy interface를 implement 합시다 이 때 변경된 할인정책을 적용하려면 OrderServiceImpl 의 discountPolicy를 변경해야한다. 그런데 구체적 구현 클래스를 변경해주고 있다. 추상클래스 혹은 인터페이스에 의존하게 작성해서 OrderServiceImpl에 변경되는 사항이 없도록 하자. memberRepository 와 discountPolicy 를 생성자를 통해 의존성 주입을 하자. 그리고 실제 실행해줄 app에서 어떤 구현체를 쓸지 넣어주는 AppConfig 파일을 생성한다. memberService나 orderService를 구현할 때 어떤 구현체를 쓸지 조금더 명확하게 보이..

지난번엔 Maven으로 프로젝트를 만들었습니다. Gradle 로도 만들 수 있고 Gradle을 이용해서 시작하겠습니다. start.spring.io/ 로 접속해서 아래와 같이 설정해줍시다. Group, Artifact, Name, Description을 채워줍니다. dependencies 에는 spring web 과 템플릿 엔진인 thymleaf 를 추가해줍시다 이후 메인함수를 돌리게 되면 의 화면을 볼 수 있습니다. 그럼 html을 추가해서 이 페이지가 나오지 않게 해봅시다. 폴더구조에는 src/main 아래 java 와 resources 가 있습니다. resources/static 의 폴더아래 index.html 을 추가해줍시다. 프로그램을 다시 실행하고 localhost:8080에 접속하면 아래와 ..

라우터란 클라이언트 쪽에서 get 혹은 post로 보낸 요청 url을 특정 함수로 연결해주는 것이다. 이전에 http로 서버를 구현한 경우 req에 url의 정보가 담겨있고 if문으로 각각의 url을 처리하는 로직을 짜면 서버코드가 지나치게 커질 수 있다. express에서는 아래의 코드가 라우터의 기능을 한다. 아직은 router가 1개이기 때문에 >curl -X GET "localhost:3000/user" 의 요청을 보내게 되면 404에러를 반환한다. index.js를 수정하고 다시 요청을 보내보자. 이제는 USER!!이라는 응답을 받게 된다. 그리고 http://127.0.0.1:3000/user 로 이동을 하면 이런 페이지가 뜰 것이다. 이제 req, res를 살펴보면 클라이언트 요청정보를 re..

이번엔 미들웨어에 대해 알아보자 서버에 필요한 기능들을 익스프레스 인스턴스(어플리케이션)에 추가하는 것이다. helmet, cooieParser, bodyPerser, morgan 등이 있고 그 외에도 Custom Middleware를 작성할 수도 있다. middleware를 추가할 때는 app.use()를 사용한다. index.js를 위와 같이 바꿔주고 실행시킨 후 cmd창에서 curl -X GET "localhost:3000" 를 실행시켜주면 index.js를 실행시킨 쪽에서 아래와 같이 나오게 된다. Custom logging Middleware가 찍혀나오게 된다. middleware에는 req, res, next를 인자로 가지며 next를 실행시켜야 다음 함수로 넘어가게 되는 것이다. 다른 함수를..
전 포스팅에서 서버에서 일일히 url을 설정하지 않기 위해 express.js에 대해 알아보겠다. http://expressjs.com/ Express - Node.js web application framework Fast, unopinionated, minimalist web framework for Node.js $ npm install express --save expressjs.com express는 Node.js를 위한 웹 프레임 워크이다. express에는 어플리케이션 미들웨어 라우터 request response 등의 개념이 있다. 어플리케이션은 익스프레스 인스턴스를 의미한다. 우선은 express를 설치하자 npm install express --save index.js 파일을 (http..

우선은 terminal을 하나 더 열고 curl -X GET "localhost:3000" 를 실행해보면 Hello World가 찍힐 것이다. 서버가 listen의 대기상태이고 요청이 들어올 때 마다 해당 서버 코드의 콜백함수가 동작하는 것이다. const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader("Content-Type", "text/plain"); res.end("Hello World"); }); 이때 아래를 실행해도 Hello World가 찍힐 것이다. 그렇다면 /intro는 어디에 있는 것일까? curl -X GET "localhost:3000/intro" 정답은 저 곳의 req에 있다. req.u..

https://nodejs.org/en/docs/guides/getting-started-guide/ Getting Started Guide | Node.js Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. nodejs.org 를 살펴보자. index.js파일을 만들고 코드를 작성해보자. 다음 node index.js를 terminal에서 실행해주면 127.0.0.1, port는 3000에서 Hello World를 찍어준다. 코드를 간단히 살펴보면 http 모듈을 불러오고. hostname 과 port를 지정해주었다. 다음은 http모듈의 createServer method를 활용하여 Server를 만들었다. 마지막으로 s..
브라우저 밖에서 자바스크립트 코드를 실행한다. V8 엔진을 사용한다 이벤트 기반의 비동기 I/O 프레임워크이다. Client , Event Loop , Non-blocking Worker 로 크게 이루어져 있고 Event Loop은 single thread로 이루어져 있다. Client가 HTTP requests를 Node.JS 서버로 보내게 되면 Event Loop에서 일을 처리하고 Client로 결과를 return 하게 된다. Event Loop에서는 Event Queue에 있는 일을 하나씩 실행하게 된다. 이 때 Event Loop에서 일을 처리할 때 Event Loop에서 바로 처리할 수 없을 때는 다른 스레드, Non-blocking Worker로 일을 넘겨주어 실행시킨다. 결과가 완료된 후에는..
https://nodejs.org/ko/ Node.js Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. nodejs.org 에서 Node.js를 설치해주면 node.js와 npm이 같이 설치됩니다. 저는 VS Code를 쓸거니까 https://code.visualstudio.com/download Download Visual Studio Code - Mac, Linux, Windows Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows. Download Visual Studio Code to experien..