일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- JavaScript
- Spring
- 블록체인
- tiles.xml
- model1
- HTML
- autowired
- Ajax
- Servlet
- AWS
- SQL
- PL/SQL
- websocket
- EC2
- node.js
- 웹게임
- 비트코인
- 배포
- 암호화
- CSS
- docker
- express
- 웹소켓
- 알고리즘
- phaser
- 도커
- jQuery
- JSP
- RDS
- Cookie
- Today
- Total
목록Web (131)
記錄
회사에서 처음으로 mina를 활용하여 배포를 해보았다. 하면서 막힌 것이 조금 많았고 기계적으로는 가능한데 무슨 내용인지도 모르고 하는 것은 의미가 없어서 이것저것 뒤져서 총 정리를 해보았다. 코드를 풀기 전 간략하게 설명하자면 mina라는 gem은 코드의 배포를 수월하게 해주는 툴이다. mina를 이용해서 mina가 요구하는 설정대로 내용을 채워준다음 시동어로 명령하면 알아서 서버에 들어가서 쉘스크립트를 순차적으로 실행해서 모든 것을 해준다. 더 자세히 풀어서 설명하자면 서버 컴퓨터에 직접 ssh를 통해 접속하여 깃으로부터 클론하고, 이것저것 공유 폴더 설정하고 관련한 서버 설정하고 루비 설정하고 등등 할 일을 mina를 통해서 로컬에서 한 파일 내에 다 설정하여 순차적으로 실행시키는 것이다. 하나의 ..
[스프링 시큐리티] 스프링 시큐리티란 스프링에서 '보안 기능'을 위해 사용하는 프레임워크이다. 여기서 말하는 '보안 기능' 이란 '인증'과 '인가'로 나눌 수 있다. '인증'은 접속 자체에서부터 해당 접속을 허락해줘도 될지, 해당 접근을 인증하는 것이다. 쉽게 말해 비밀번호와 아이디를 제대로 쳤는지 확인하는 로그인 기능으로 볼 수 있다. '인가'는 애플리케이션 내 리소스에 대한 접근을 제어하는 것을 의미한다. 회원 내에도 등급이 나뉘어져 있어 이를 세세하게 분류하여 특정 페이지에 따라 특정한 사용자에게만 허락해 준다던가 하는 것을 예로 들 수 있다. [스프링 시큐리티 설정] 1. 라이브러리 설정(pom.xml) org.springframework.security spring-security-web 4.0..
엄청 간단하고 사소한 팁이지만 나름 잘 활용했었기에 포스팅으로 남긴다.소스트리를 쓰면 완전 텅 빈 새폴더에만 새로운 리파지토리를 만들 수 있다. 그래서 기존에 내가 사용중인 프로젝트를 소스트리를 통해 형상관리를 하고 싶을 때에 문제가 발생한다. 해결 방법으로는 소스트리 말고 git Bash를 이용하여 해당 프로젝트 폴더에서 git init 명령어를 통해 직접 .git을 만드는 것이 있다.
이전 포스팅(http://kimjungkwon.co.kr/534?category=794190)에 이은 포스팅으로 AWS 실습의 기록이다. 이전 두 개의 포스팅을 통해 AWS에서 EC2인스턴스, RDS인스턴스를 생성하고 이를 연결하는 것까지 모든 설정 과정을 기록했다. 이제부터는 실제로 코드로 구현한 나의 프로젝트를 어떻게 DB와 연동하고 또 배포 할 것인지 그 과정을 기록한다. 따라서 이번 포스팅부터는 코드가 조금씩 포함될 예정이다. 7) Spring - MySQL(RDS 인스턴스) 연동먼저 지금까지 애써 만든 RDS인스턴스에 실제로 java코드로 접근이 가능한지 테스트 해보겠다. 아주 잘 정리된 다른 포스팅들이 많았는데 그만큼 자세하고 길어서 나는 정말정말 단순하게 짧게 시도하려고 노력했다. 왜냐면 긴..
이 포스팅은 '실습_AWS) Spring AWS 배포 (A to Z) -1'(http://kimjungkwon.co.kr/530?category=794190)에 이은 두 번째 포스팅이다. 이전 포스팅에서 EC2와 RDS의 인스턴스를 생성하고 연결하는 작업까지 끝을 냈다. 따라서 이번 포스팅에서는 EC2 인스턴스에 내게 필요한 java, tomcat 등을 설치하는 과정을 기록한다.이전 포스팅에서 1) EC2에서 인스턴스 생성 / 2) 인스턴스 제어(연결) / 3) EC2 - RDS 연결 을 끝냈으므로 이번 포스팅은 4)부터 시작한다. 4) EC2에 Java 설치xShell에서 EC2인스턴스에 연결한 후 다음 명령어를 실행하여 JDK8 설치[1] 'sudo add-apt-repository ppa:webup..
이번 포스팅은 실제로 사이트를 구축한 뒤 AWS를 통해 어떻게 배포하는지 정리를 할 목적으로 작성한다. 기본적인 것들은 건너 뛸 것이지만 주의해야 할 것이라고 판단되는 부분은 세세하게 짚어가며 정리할 생각이다. 먼저 이 포스팅은 localhost 환경에서 원하는 웹 애플리케이션이 완성되었다는 전제 하에 이 웹 애플리케이션을 배포하려는 시점이라고 가정한다. 학습을 위한 실습이므로 모두 프리티어 기준으로 만들었다.절차는 다음과 같다. 1) EC2에서 인스턴스 생성인스턴스를 생성하는데 주의 할 점은 '보안 그룹 구성'이다. '보안 그룹 구성'에서는 해당 인스턴스에 대한 트래픽의 접근을 제어하는 규칙을 정하는 곳이다. 즉, 특정한 방식으로 접근하는 트래픽에 대해 어떤 규칙을 부여 할 지(=접근하게 할 지, 막을..
이번 수업(https://opentutorials.org/course/2717/11807) 관계형 데이터베이스 서비스(RDS)에 대해서 배웠다. 내가 로컬 호스트 환경에서 깔아서 하던 그 DB를 클라우드 상에서 제공하는 것이 핵심이다. 앞서 배운 S3는 파일 서비스를 클라우드화 한 것이고 지금 배운 RDS는 DB를 클라우드화 한 것이다. S3나 RDS나 모두 클라우드화 한다는 것에서 이점이 발생하기 때문에 상품성이 있는 것 같다. 클라우드화 하면서 여러가지 이점이 발생하고 관리상 용이함이 더 높아지기 때문이다. 아래는 aws에서 공식적으로 내놓은 RDS에 대한 설명 영상이다. 생성하는 방법은 너무 간단해서 따로 포스팅 하지 않는다. 절차대로 따라가기만 하면 된다. 이건 다중 AZ배포를 yes 옵션으로 하..
이번 수업(https://opentutorials.org/course/2717/11379)에서는 aws의 s3에 대해 배웠다. 진도가 s3에 다다랐다는 표현이 더 적절한 것 같다. 다음 영상은 aws에서 공식적으로 내놓은 s3 설명 영상이다. S3(Simple Storage Service)란 간단히 말해서 클라우드 환경으로 파일을 업로드하고 다운로드 할 수 있도록 해주는 서비스이다. 데이터 유실을 고려하여 중복 저장을 하기 때문에 내구성이 높고 ec2 특성인 종량제와 같은 특성이 s3에도 있어서 비용도 저렴하다. 그리고 IAM(Identity and Access Management)를 통해 보안성을 높혔다.S3를 이해하기 위해서는 몇 가지 알아야 할 개념들이 있다. 1) 버킷가장 큰 단위의 컨테이너. 모..
이번 수업(https://opentutorials.org/course/2717/11336) 에서는 AutoScaling을 배웠다. 컴퓨터를 자동으로 생성해서 해당 컴퓨터가 자동으로 서비스를 시작하게 했다가 트래픽이 줄어들면 과금이 발생하지 않도록 자동으로 컴퓨터를 없애주는 기능이다. 클라우드 컴퓨팅의 이점인 탄력성을 제대로 보여주는 서비스이다.EC2 탭에 보면 AUTO SCALING이 있는데 여기서 설정을 시작한다. Launch Configurations와 Auto Scaling Groups가 있는데 Configurations 탭에서는 말 그대로 설정을 하는 탭이고 그런 설정을 기반으로 Auto Scaling Groups에서 Auto Scaling을 시작한다.먼저 Launch Configurations를..
Scale-Up은 요구되는 컴퓨팅 파워에 따라서 컴퓨터 성능을 업그레이드 하는 것이었다. Scale-Out은 여러 대의 컴퓨터가 협력하여 공동의 목표를 이루는 것으로 Scale-Up과는 다른 내용이다. 강의에서는 복잡도가 증가하면 예상치 못한 문제가 생길 수 있기 때문에 가급적 Scale-Up을 권장하고 있다. 하지만 Scale-Up 만으로 처리할 수 없는 정도의 트래픽이 발생하면 Scale-Out으로 처리하라고 가르친다.Scale-Out의 핵심은 '분업'에 있다. 클라이언트의 요청에 응답하기 위한 여러가지 절차를 쪼개어서 하나의 컴퓨터가 할 일을 두 대 이상의 컴퓨터가 분할해서 맡아 처리 속도를 높이는 것이다. 아래 그림을 참고하자. 그림에서 보듯 하나의 과정을 컴퓨터 한 대가 처리했다면 이를 세 대의..
이번 강의에서는 서버 컴퓨터의 확장성에 대해서 배웠다. 확장성이 왜 필요하고 어떻게 하는지에 대해서 배웠다. 확장성이 필요한 이유는 서버 컴퓨터가 감당해야 할 트래픽의 크기가 일정하지 않고 변화한다는 것이 근본적인 이유다. 증가하는 트래픽을 감당하기 위해서는 서버 컴퓨터의 성능을 높혀주어야 하기 때문이다. 또, 여기서 한 걸음 더 나아가자면 줄어드는 트래픽에 대응하기 위해서도 탄력적인 서버 성능의 변화가 필요하다. 트래픽보다 고 성능의 서버를 유지하면 서버 유지 비용이 많이 들기 때문이다. 아래 표는 수업에서 나온 수업 자료인데 이런 부분을 선 그래프로 잘 나타내고 있다.Scale Up, Scale Out 을 통한 탄력적인 서버 성능 관리 트래픽과 성능간의 격차가 좁을 수록 비용관리 측면에서 가장 효율적..
이번 강의에서는 내가 쓰고 있는 윈도우에서 인스턴스를 원격으로 제어하기 위해서 접속하는 것을 배웠다. 접속하는 환경이 윈도우이기 때문에 SSH방식으로 OS에 접근할 프로그램이 필요하지만 내가 만약 맥이나 리눅스를 이용하고 있다면 SSH프로그램이 필요하지 않다고 한다. SSH [secure shell]secure shell의 약어. PGP와 마찬가지로 공개 키 방식의 암호 방식을 사용하여 원격지 시스템에 접근하여 암호화된 메시지를 전송할 수 있는 시스템. 따라서 LAN 상에서 다른 시스템에 로그인할 때 스니퍼에 의해서 도청당하는 것을 막을 수 있다.[네이버 지식백과] SSH [secure shell] (컴퓨터인터넷IT용어대사전, 2011. 1. 20., 일진사) 절차1) EC2 상에서 인스턴스를 우클릭하고..
인스턴스 생성시 Key, Value 형식으로 태그를 추가할 수 있는데 용도는 해당 인스턴스에 대한 설명 및 정보를 위해 사용된다. 보안은 일종의 방화벽과 같은 역할을 한다. 보안 규칙을 정해서 어떤 인스턴스가 어떤 보안 규칙을 따르도록 할 것인지를 설정할 수 있게 된다. 아래는 보안 그룹에 대한 내용 발췌.."보안 그룹은 하나 이상의 인스턴스에 대한 트래픽을 제어하는 가상 방화벽 역할을 합니다. 인스턴스를 시작할 때 하나 이상의 보안 그룹을 인스턴스와 연결합니다. 연결된 인스턴스와 트래픽을 주고받을 수 있게 하는 규칙을 각 보안 그룹에 추가합니다. 언제든지 보안 그룹에 대한 규칙을 수정할 수 있습니다. 새 규칙은 잠시 후 보안 그룹에 연결된 모든 인스턴스에 자동으로 적용됩니다. 트래픽이 인스턴스에 도달하..
이번 강의에서는 인스턴스의 개념과 인스턴스의 생성에 대해 배웠다. 인스턴스란 내가 기존에 알고 있던 객체의 개념과 유사하였다. AWS 상에서 인스턴스는 컴퓨터와 동일한 의미를 갖는다. 즉, 내가 서버로 사용할 인스턴스를 3개 임대한다면 나는 아마존으로부터 컴퓨터를 세 대 임대하는 것과 같다는 의미이다. 인스턴스의 생성과 삭제 방법은 무척 쉽다. 1. AWS 콘솔에 로그인 후2. EC2 서비스를 클릭 하고3. 왼쪽 메뉴에 있는 '인스턴스'를 클릭해서4. '인스턴스 시작' 을 누르고5. 원하는 조건으로 설정 후 인스턴스를 생성하면 된다 왼쪽 메뉴의 '인스턴스'를 누르면 현재 내가 해당 계정으로 임대중인 인스턴스들의 목록이 나온다. 이 중 삭제를 원하는 인스턴스가 있으면 탐색기에서 우측 클릭을 하듯이 해당 인..
Amazon Elastic Compute Cloud(EC2)는 서버 인스턴스를 클라우드 환경에서 제공하는 서비스이다. 뚜렷한 특징은 제공하는 서비스의 규모 및 성능 조절이 탄력적으로 조정 가능하다는 것이다. 빠른 서버 구축이 가능하고 필요에 따라 성능을 늘리거나 줄이는 일이 가능하다.(물론 계속 성능이 좋으면 좋겠지만 종량제 같은 개념으로 쓰는 만큼 돈을 내기 때문에 원하는대로 늘리고 줄이는 것이 필요) 즉, 서버 유지 비용에 대한 경제성의 이점을 얻을 수 있다는 것이다. 탄력성 외에도 안정성, 보안, 유연한 클라우드 호스팅 등이 장점이다.아래 유투브는 간략히 EC2의 컨셉에 대해 소개하고 있는데 괜찮아서 가져왔다.
d
Node.js 교과서국내도서저자 : 조현영출판 : 길벗 2018.08.01상세보기 좋은 Node.js 강의를 찾았는데 이 강의가 위 책을 기반으로 한 강의였다. 물론 강의는 저 책이 없어도 진행이 되지만 강의를 다 듣고 괜찮으면 책을 사서 복습을 할 계획이다. 경험상 인터넷 강의는 핵심만 짚고 넘어가는 편이고 책을 보면 더 자세하게 나와있었다(물론 정보의 과잉 제공인 경우도 있는 것 같다) 강의는 유투브에 개설되어 있는데 8월 중으로 인프런에 유료로 올라간다고 하니 따로 여기 링크를 달지는 않고 듣다가 유료로 전환 되거나 유료로 전환되기 전에 다 듣게 되면 인프런 url을 출처로 올려야겠다
이번 강의에서는 라우트 분리하기를 배웠다. 사실 요청이 많아지면 컨트롤러를 어떻게 관리하나 궁금했었는데 딱 마지막 수업에 이런 코너가 있었다. 패키지로 나누는 것이 아니고 파일로 나누는 것이었는데 현업에서도 이런 식으로 분리해서 사용하는지 궁금해졌다. 라우트의 기능은 특정한 요청 주소를 잡아서 한 곳으로 돌리는 기능을 한다. 그래서 코드를 깔끔하게 정리하는데 사용할 수 있다. moduleTest.jsvar express = require('express');var app = express(); var shopping_fruit = require('./route/fruit')();app.use('/fruit', shopping_fruit); var shopping_drink = require('./rout..
이번 강의에서는 모듈을 배웠다. 늘 require() 를 통해 모듈을 불러서 app.use() 앱에 모듈을 붙이고 사용해 왔었는데 이번에는 모듈을 내가 정의하고 필요할 때에 사용하는 방법에 대해서 배웠다. 특별한 것은 없었다. 1. 사용할 모듈을 정의한 .js파일을 만들고 아래와 같이 exports 할 자원들의 이름과 기능을 정의한다.2. 컨트롤러에서 require('경로')로 모듈.js를 call 한 뒤에 함수를 끌어다 쓴다. module.jsmodule.exports.plus_jk = function(a, b){ return a + b;} module.exports.minus_jk = function(a, b){ return a - b;} moduleTest.js var module = require..
위에서 배웠던 jade 모듈의 extends 기능에 대해 배웠다. 스프링에서의 tiles와 유사하다. app.jsvar express = require('express');var app = express(); app.set('view engine', 'jade');app.set('views', './views'); app.get('/first', function(req,res){ res.render('first');}); app.get('/second', function(req,res){ res.render('second');}); app.listen(3003, function(){ console.log('Connected 3003 port!!!');}); layout.jadehtml head body ..
암호화에 관련하여 좋은 포스트를 찾았다(아래 링크)(https://d2.naver.com/helloworld/318732) 이번 강의에서 배운 것은 pbkdf2 이다. pbkdf2는 salt를 자동 생성해주고 조금더 많은 경우의 수를 통해 보안 수준을 강화한 암호화 기법이다. 위키를 찾아보니 brute force attacks의 리스크를 낮추는 것을 목표로 만들어졌다고 한다.var express = require('express');var bkfd2Password = require("pbkdf2-password");var hasher = bkfd2Password();var app = express(); var pwd = { password : '12345asd'}; app.get('/pbkfd2_test..
이번 강의에서는 암호화에 대해서 배웠다. 설계상의 결함으로 인해 더 이상 암호화에 md5를 사용하진 않는다고 한다. 하지만 강의에서 md5를 이용해서 강의를 했기 때문에 일단 md5를 포스팅 한다. 다만 강의 후반부에서 md5대신 sha256을 사용하며 이젠 md5를 사용하지 않고 sha를 사용해야 한다고 하는데 이것 역시 변할 수 있다며 언급한다. sha256을 쓰려면 아래 코드에서 md5를 sha256으로만 바꿔주면 작동한다. 복호화 관련해서 아무래도 md5가 너무 쉽게 뚫리게 되어서 더 이상 md5를 사용하지 않는 것 같다.(그냥 근거없는 내 추측이다) salt는 md5만 단순히 거치게 되면 해킹의 우려가 있어 소금을 치듯이 md5를 거치기전에 암호화할 정보에 붙이는 임의의 문자열을 의미한다. 다중..
이번 강의에서는 express에서 session을 활용하는 법에 대해서 배웠다. 스프링과 달랐던 점은 굳이 플러그인을 설치해야 한다는 것 말고는 특별히 다른 것이 없었다. 생각해보면 스프링에서 import 하는 모든 것들이 npm에서 install 하는 것과 같은 것 같다. var express = require('express');var session = require('express-session');var app = express(); app.use(session({ // session 값 저장에 쓰이는 암호화 key secret: '1234DSFs@adf1234!@#$asd', // 접속 할 때마다 매번 새로운 session 발행 여부 resave: false, // 세션이 저장되기 전에 unin..
cookie에 저장하는 정보가 민감하고 private 한 정보라면 암호화할 필요성이 있다.개발자 도구에서 cookie를 눌러보면 정보가 다 보이기 때문이다. 물론, jsp를 배울때도 마찬가지고 node.js를 배울 때도 마찬가지고 사실 민감한 정보 자체를 cookie에 저장할 일은 없는데항상 괜히 session을 배우기 전에 cookie를 배우면서 이런 개념을 알려준다(어느 인강이나 비슷한 것 같다) 아무튼 암호화 자체도 스프링보다 훨씬 가볍고 쉬웠다 암호화 전 암호화 후 cookie의 값을 보안상의 이유로 암호화 할 수 있는데 방법은 다음과 같다. const express = require('express');const cookieParser = require('cookie-parser');const ..
이번 강의에서는 Express에서의 cookie 활용에 대해 배웠다. 스프링과 좀 달랐던 점은 더 간편하다는 것이다.확실히 node.js 환경 자체가 스프링에서 하던 것 보다 모든 것이 가볍고 간편한 느낌이다. const express = require('express');const cookieParser = require('cookie-parser');const app = express(); app.use(cookieParser()); app.get('/count',function(req, res){ let count; if(req.cookies.count){ // cookie 에서 가져오는 값은 모두 String type이 디폴트 count = parseInt(req.cookies.count); } ..
이번 강의에서는 간단하게 파일 업로드를 하는 방법에 대해서 배웠다.const express = require('express');const bodyParser = require('body-parser'); // multer 모듈 추가const multer = require('multer'); // multer 모듈을 통해 미들웨어를 리턴해주고 upload에 할당// dest는 destination의 줄임말로 경로 설정을 한다const upload = multer({ dest: 'uploads/' })const app = express(); app.locals.pretty = true;app.set('view engine', 'jade');app.set('views', './views');app.use(e..
세이브를 기준으로 코드의 변화를 감지해서 자동으로 서버를 껐다가 켜주는 기능을 Watch라고 한다고 한다. 그리고 Watch 기능을 가진 여러가지 소프트웨어가 있지만 그 중 이번 강의에서 소개된 프로그램은 supervisor 이다. 1. 설치npm install supervisor -g(전역으로 사용할 수 있도록 설치) 2. 사용supervisor app.js (node app.js (X)) 서버가 올라가게 되고 이제 코드에 변화가 있으면(변화만 해서는 안되고 save를 해야 감지) supervisor가 변화를 감지하고 서버를 알아서 내렸다가 다시 올리게 된다
이번 강의에서는 Express 에서 post 방식으로 데이터를 보내고 이를 컨트롤러에서 받는 것을 해보았다.스프링과 약간 다른 점이 있었다. 가장 큰 차이점이라고 한다면 굳이 post로 넘어온 데이터를 인식하기 위해서 따로 플러그인을 설치해줘야 한다는 점이었다.순서대로 정리한다. const express = require('express'); // bodyParser라는 모듈을 가져오게 된다const bodyParser = require('body-parser'); const app = express(); app.locals.pretty = true;app.set('view engine', 'jade');app.set('views', './views');app.use(express.static('publ..
Node.js 에서 쿼리스트링으로 보낸 값을 어떻게 받는지에 대한 간단한 수업이었다. 스프링과 크게 다를 것은 없었으나 어떤 객체에서 뽑아내는지 알아두는 것이 좋았다 query string (쿼리 문자열, 쿼리 스트링)- 데이터를 전달하기 위한 URL의 일부분 - GET 방식 파라미터 전달 문자열 1. 요청http://localhost:3000/querystring?id=12. 응답app.get('/querystring', function(req, res){ res.send(req.query.id);});이해를 돕기 위해 전체 플로우를 다시 짚고 넘어가자면 app.get()에서 첫번째 파라미터로 설정한 요청을 express가 받게 되면 해당 요청에 대해 매핑된 function()(둘째 파라미터)이 cal..
이번 강의에서는 템플릿 엔진을 사용하는 방법을 배웠다. 템플릿 엔진은 말 그대로 템플릿을 제공하는 데에 본질적인 목적이 있다. 템플릿을 왜 제공하냐고 물어본다면 결국 반복을 최소화 하여 더욱 편하게 프로그래밍 하도록 해준다고 대답할 수 있다. 강의에서는 Jade로 쓰고 있는데 express 공식 사이트에서는 pug로 설명하고 있었다. 그래도 강의를 따라 Jade로 install 시켰는데 deprecated가 떴다. 그래서 찾아보니 Pug가 구Jade 인데 저작권 문제로 강제 개명(?) 당했다고 한다. 아무튼 일단 강의를 따라 했으니 Jade로 포스팅 한다. 1. npm을 통해 jade install 한다(이젠 jade 대신 pug를 써야 할 것)npm install jade --save 2. 내부적으로 ..