반응형

Server 22

[Spring] Spring Security 1.5 -> 2.x 버전 업데이트에 따른 변화

Spring Security version up에 따른 이슈 Spring Boot가 1.5 버전에서 2.x 버전으로 업그레이드되면서 많은 변화가 있었다. 그중 security와 OAuth2 인증 부분에서 여러 변화가 생겼다. 그로 인해 하위 버전과 호환되지 않는 기능들이 생겨났다. (출처) https://hue9010.github.io/spring/OAuth2/ 하지만 안타깝게도, 대부분의 구글링에 나오는 레퍼런스들은 아직 1.5 버전을 기준으로 포스팅이 되어있거나, 이미 1.5버전으로 구현이 되어있는 상태에서 2.x버전의 기능들을 사용해야할 경우에 문제가 발생한다. 그럴 때 임시방편으로 아래와 같이 dependencies를 변경해줌으로써 1.5버전과 2.x버전을 둘다 호환 가능하도록 할 수 있다. 2...

[Node.js] Sequelize : ORM(Object-relational Mapping) 사용해보기

Sequelize란? 이번 포스팅에서는 Node.js의 ORM 기술인 sequelize를 사용해보도록 하겠다. 시퀄라이즈는 자바스크립트 객체와 데이터베이스의 릴레이션을 매핑해주는 도구이다. 시퀄라이즈는 자바스크립트 구문을 알아서 SQL로 변환해주어서 좀 더 의존성이 낮은 프로그래밍을 할 수 있도록 도와준다. 또한 어느 정도 문법이 호환되므로 MySQL 뿐만 아니라, MariaDB, PostgreSQL, SQLite 등 다른 데이터베이스로 전환이 비교적 자유롭다. ※ 좀 더 자세한 내용은 아래 URI에서 확인하도록 하자. [Database] ORM(Object-relational Mapping)이란? ORM이란? ORM(Object-relational Mapping)이란 OOP 간의 호환되지 않는 데이터를..

[Spring] 프로젝트 생성하기

Spring Boot project를 생성하는 방법은 크게 두 가지로 나누어진다. 첫 번째로 start.spring.io 사이트를 이용해 프로젝트를 생성한 후, IDE에서 불러오는 방법과, IDE 자체에서 프로젝트를 생성하는 방법이 있다. IntelliJ에서 project 생성하기 1. IntelliJ를 실행하면 이와같은 작은 윈도 창을 만날 수 있다. 해당 메뉴에서 Create New Project를 선택한다. 2. Ultimate versionn 기준, 좌측 메뉴에서 Spring Initializar을 선택하고 NEXT버튼을 눌러준다. 3. Project 세부사항에서 먼저 Type을 선택해준다. Maven으로 하나 Gradle로 하나 크게 상관은 없으나, maven의 porm.xml은 XML 기반으로..

[Spring] Spring Framework vs Spring Boot

spring이란? Spring이란 과거 EJB를 대체하는 framework로써 세상에 등장했다. Pivotal Software(스프링팀)은 Enterprise Framework 시대를 겨울(winter)로 정의하고 이제 봄(spring)이 왔다는 의미로 이름을 지었다. EJB에 비해서 많은 부분 발전했지만, spring 역시 "스프링은 설정이 반이다."라는 말이 있을 정도로 설정하는 것에 어려움이 많았다. 그럼에도 spring이 대표적인 java framework로 자리 잡게 된 것은 아래와 같은 강력한 장점을 지니고 있기 때문이었다. 경량 컨테이너 IoC(Invertion of Control: 제어 역행) Di(Dependency Injection: 의존성 주입) AOP(Aspect-Oriented P..

[Node.js] await vs return vs return await: 비동기 이해하기

비동기 함수를 작성할 때 await과 return을 하는 것 그리고 return await을 사용하는 것에는 실행에 차이가 있다. 이것을 올바르게 사용하지 않으면 우리는 예상치 못한 값을 반환받을 수 있다. 이 포스팅은 그러한 버그를 미리 방지하고 비동기에 대한 이해를 확장하고자 작성한다. 아래는 async함수이다. async function waitAndMaybeReject() { // Wait one second await new Promise(r => setTimeout(r, 1000)); // Toss a coin const isHeads = Boolean(Math.round(Math.random())); if (isHeads) return 'yay'; throw Error('Boo!'); } 이..

[Node.js] CRUD: foreign key를 이용해 blog 구조 만들기 (2)

이번에는 조금 심화로 들어가 보도록 하겠다. 이전 게시물에서는 하나의 CRUD만을 만들었다면 이번에는 실제 blog가 가지고 있는 구조로 CRUD를 확장해 보도록 하겠다. 한번 블로그를 상상해보자. 먼저 게시글들을 포함하는 category가 있을 것이다. 그리고 각각의 게시물들은 제목과 내용이 존재할 것이고, 마지막으로 댓글을 달 수 있는 기능이 있을 것이다. 여기서 중요한 포인트는 댓글은 게시글에, 게시글은 카테고리 안에 포함되어야 한다는 것이다. 눈치 챘을지 모르겠지만 우리는 이미 카테고리는 만들었다. 이전 포스팅에서 만들었던 blogs.js가 바로 그것이다. 이 시점에서 프로젝트를 좀 더 구조적으로 만들기 위해서 디렉토리를 재구성할 필요가 있다. blogs: 카테고리 articles: 게시글 com..

[Node.js] CRUD: RDS를 이용하여 동적으로 구성하기 (1)

CRUD란? CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말이다. 게시물을 올리고, 읽고, 수정하고, 삭제하는 것을 예로 생각하면 이해하기 편리하다. 이러한 CRUD는 http method get(read), post(create), put(update), delete(delete)로 구현할 수 있다. 각각의 http 메서드들은 해당하는 각각의 기능만 수행하는 것은 아니지만 통상적으로 rest api(참고: https://ooeunz.tistory.com/11?category=814267)를 따라 위와 같은 역할로 메서드들을 기능적으로 분리하여 사용한다. 이번 포스팅은 3번에 걸..

[Node.js] Express와 CSV를 이용해 조 편성 애플리케이션 만들기

이번 포스팅에서는 express를 이용해서 조원들을 검색해보고, 조를 섞어보는 간단한 애플리케이션을 만들어보도록 하겠다. 완성된 프로젝트의 구조는 아래와 같다. public 디렉토리에 csv라는 디렉토리를 만들어주고 해당 파일에 member와 group이라는 이름의 csv파일을 만들어주도록 한다. ※ CSV란? Excel과 DB와 호환되는 텍스트 형식이다. 첫 번째 줄에는 필드 이름이 들어가고, 2번째 줄부터 각 row에 해당하는 값이 들어 있다. 우리는 이제부터 여기있는 csv파일을 데이터로 사용하여 데이터를 불러와 조회 및 조작해보도록 하겠다. 먼저 프로젝트 설계를 해보도록하겠다. 서버를 작동시켰을 때, localhost:3000/api/group group전체의 정보를 조회한다. localhost:..

[Node.js] npm이란?

Node Pacackage Manager. 이하 npm은 이름 그대로 노드 패키지 매니저이다. 세상에는 많은 자바스크립트 프로그래머들이 있고, 그들이 유용한 자바스크립트 패키지들을 이미 만들어 두었고, 그런 코드들이 공개되어 있는 것이 바로 npm이다. npm은 세계 최대 규모의 패키지들을 보유하고 있다. 이러한 패키지들은 노드의 생태계를 더욱 견고하게 만들었다. npm에 업로드된 노드 모듈을 패키지라고 부른다. 모듈이 다른 모듈을 사용할 수 있는 것처럼, 패키지도 다른 패키지를 사용할 수 있다. 이러한 관계를 의존 관계라고 한다. https://www.npmjs.com/ npm | build amazing things Bring the best of open source to your company n..

[Node.js] 노드 내장 객체

global 노드의global 객체는 브라우저의 window와 같은 전역 객체이다. 따라서 모든 파일에 접근 할 수 있고, 생략할 수 있다. 아래는 global객체안에 포함된 다양한 객체들의 나열이다. console console은 보통 디버깅을 위해 사용된다. 개발 중 변수에 값이 제대로 들어가 있나 확인하거나, 에러 발생 시 에러 내용을 콘솔에 표시하기 위해 사용하거나, 코드 실행 시간을 알아보려고 할 때도 사용한다. 아마 이 객체는 console.log() 메서드로 익숙하게 사용 해보았을 것이다. console.time(레이블) : console.timeEnd(레이블)과 대응되어 같은 레이블을 가진 time과 timeEnd 사이의 시간 측정한다. console.log(내용) : 평범한 로그를 콘솔에..

반응형