본문 바로가기
반응형

분류 전체보기203

[node.js] 페이지 이동 필자는 프론트 프레임워크를 학습하는 시간에 조금이라도 더 백엔드를 공부하고 싶었기때문에 프론트 프레임워크대신 고전적인 html파일로 작성하는 스타일을 선택했다. 여기서 문제가 발생했다. Spring framework는 단순히 js에 href 이벤트를 적어주고 controller에서 경로만 맞춰주면 됐었다. node도 그럴줄 알았으나 node는 추가적인 작업이 필요했다. 긴말 필요없이 하는방법만 적도록하겠다. npm install ejs을 통해서 모듈을 install한다. 일단 폴더구조는 위와같다. src 파일에 있는 app.js에 아래와 같이 설정해준다. router/index.js 파일에서 페이지이동시 사용할 router를 use해주었다. router/page/index.js 에서 page.router.. 2020. 5. 23.
[Spring] css파일을 못찾을때 필자는 화면을 만들기 위해 css파일과 html을 만들었다. 그런데 때로는 Failed to load resource: the server responded with a status of 404 () 오류와 because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled. 위와 같은 오류로 css파일을 못찾았다. 원인은 간단하다. 경로를 잘못 적어주었기 때문이다. 아래와 같이 경로를 /css/..... 로 적어주면 정상적으로 불러와준다 2020. 5. 16.
[Spring Security] 초기 설정시 403 error가 날때 회원가입을 위한 비밀번호 암호화 기능을 찾다가 간편하게 사용할 수 있는 BCryptPasswordEncoder가 있어서 Security를 알아보게 되었다. SecurityConfig에 모든 요청을 허용하게 설정했다. 나의 예상대로라면 모든 요청을 허용했으니 어떤 요청이던 패스가 되어야한다. /api/users 에 접근하는 테스트코드를 작성하였다. SecurityConfig에는 /api 의 하위에 있는 모든 요청은 허가 되었기때문에 status코드가 200이 떨어져야한다. 하지만 결과는 예상과 다르게 403(권한없음)이 떨어졌다. 이유는 Security를 기본으로 설정하게되면 csrf 설정을 해줘야하기 때문이다. (csrf가 뭔지는 google을 검색해보자) 필자는 가벼운 예제사이트를 만드는것이므로 csr.. 2020. 5. 16.
[Spring] 값 검증을 위한 어노테이션 @Valid 필자는 웹사이트를 구축하다가 회원가입을 할때 클라이언트에서 검증해서 넘긴다지만 신뢰성의 문제로 다시 한번 서버에서 검증을 진행하려고 하였다. 이때 파라미터가 1~2개면 상관이없는데 8~9개되면 if문이 8~9개나 들어가게된다. 그래서 무엇이 있을까 알아보다가 @Valid라는 어노테이션이 있다는걸 알게되었다. @Valid를 사용하면 파라미터 바인딩이될때 설정한대로 값검증을 실행하고 문제가 없는경우에만 로직을 수행한다. 사용방법을 알아보기전에 필자의 로직에 대해 설명하겠다. 1. UserDTO를 통해 회원가입에 필요한 정보를 받아올 것이다. 2. 이때 UserDTO를 @Valid로 검증할것이다 3. 올바르게 가져왔다면 User 객체로 ModelMapper를 사용하여 변환해줄것이다. 4. 문제가 없다면 상태코.. 2020. 5. 15.
[Spring data JPA] Auditing으로 생성일/수정일 간편하게 생성하기! 개인프로젝트에서는 생성일/수정일을 몰라도 크게 상관없겠지만 실무에서는 생성일/수정일을 필수로 가지고 있어야 하는경우가 많다. 언제 생성됐는지, 언제 변경되었는지는 거의 모든 테이블에 있어야한다. 추가로 생성을 누가했고 수정은 누가했는지도 필요한 테이블도 있다. 이 경우에 모든 Entity에 생성일필드와 수정일 필드가 공통적으로 들어간다. 이러한 공통적인것을 추상클래스를 이용하여 설정하는 방법이 있다. 바로 Auditing이다. 사용법은 아래와 같다. BaseEntity를 다음과 같이 설정한다. @EntityListeners 어노테이션을 사용하여 Auditing기능을 추가한다. 그리고 생성일/수정일을 사용할 Entity에서 BaseEntity를 상속받는다. 이렇게 하면 끝!!이면 좋겠지만 실행하는곳에서 @.. 2020. 5. 10.
[인프런] 테스트주도개발(TDD)로 만드는 NodeJS API 서버 강의를 듣는목적 TDD기반으로 간단한 REST API 제작 강의후기 필자는 node로 restful api를 한번 제작해보았다. 하지만 진짜 제작만 해본상태였기때문에 node의 특성은 무엇인지, 어떤언어인지 어떻게 사용해야하는지 제대로 알지 못하였다. 또한 node를 활용한 TDD는 1도 할줄몰랐다. 이 강의는 필자같은 초보자에게 어울리는 강의같다. 이 강의를 듣고난후 최소한의 TDD와 최소한의 로직을 구성하는데 도움이 되었다. 다만 초급자에서 중급자로 업그레이드를 하려는 목적으로 들을만한 강의는 아닌것같다. 입문자단계에서 듣기는 매우 괜찮은강의이다. 다만 강의에서 배운걸 토대로 디렉토리를 특성별로 구성하는것을 추가로 배워야할것같다. 강의평 한줄요약 입문자단계 : 추천 초급자단계 - TDD와 rest a.. 2020. 5. 4.
should.have.property가 제대로 동작 안할 때 should.have.property가 제대로 동작을 하지않았습니다. 문제의 코드는 아래와같습니다. 생각대로라면 정상적으로 등록을 한후에 result를 가지고있으므로 통과해야합니다. 그러나 테스트는 계속실패했습니다. 머리로 도저히 이해할수가 없었습니다. 로직상 틀린게 하나도 없었기때문입니다. 하지만 문제는있었습니다. 찾았나요 ? 문제는 바로 아래와 같습니다. 정확하지는 않지만 필자의 생각으로는 204코드는 return값이 비어있다는것을 의미하므로 가지지 않는것같습니다. status를 200으로 바꾸면 정상적으로 작동합니다. 2020. 5. 3.
[데이터베이스] Single Block I/O vs Multiblock I/O 데이터를 메모리에 적재하는 방식으로 Single Block I/O 와 Multiblock I/O 두가지가 있다. Single Block I/O 한번에 한블록씩 요청해서 메모리에 적재하는 방식 인덱스를 이용할때는 인덱스와 테이블 모두 이 방식을 사용한다. 소량데이터를 읽을때 주로 사용하는 방식이다. Multiblock I/O 한번에 여러블록씩 요청해서 메모리에 적재하는 방식 많은 데이터 블록을 읽을때 주로 사용 테이블 전체를 스캔할때 이 방식을 사용하며 테이블이 클수록 Multiblock I/O 단위도 크면 좋다. 2020. 5. 3.
[데이터베이스] 시퀄셜 액세스 vs 랜덤 액세스 테이블 또는 인덱스 블록을 액세스하는 방식으로 시퀀셜 액세스와 랜덤 액세스 두가지가 있다. 시퀀셜 액세스 논리적 or 물리적으로 연결된 순서에 따라 차례대로 블록을 읽는 방식이다. 인덱스 리프 블록은 앞뒤를 가리키는 주소값을 통해 논리적으로 서로 연결되어있다. 이 주소 값에 따라 순차적으로 스캔하는 방식이 시퀀셜 액세스이다. 테이블 블록간에는 서로 논리적인 연결고리를 가지고 있지않다. 그래서 오라클같은 경우는 세그먼트에 할당된 익스텐트 목록을 세그먼트 헤더에 Map으로 관리한다. 익스텐트 맵은 각 인스텐트의 첫 번째 블록 주소 값을 가진다. 읽어야 할 익스텐트 목록을 맵에서 얻고 각 익스텐트의 첫번째 블록 뒤에 연속해서 지정된 블록을 순서대로 읽으면 그것이 Full Table Scan이다. 랜덤 액세스 .. 2020. 5. 3.
[데이터베이스] 데이터 저장구조 데이터베이스 저장구조 데이터를 저장하려면 테이블 스페이스를 생성해야한다. 테이블 스페이스를 생성했으면 세그먼트를 생성한다. 그림과 같이 테이블 스페이스에는 여러개의 세그먼트가 존재하고 세그먼트 안에 여러개의 익스텐트로 구성된다. 파티션 구조가 아니라면 테이블, 인덱스가 각각 하나의 세그먼트가 된다. 파티션 구조라면 각 파티션이 하나의 세그먼트가 된다. 데이터를 입력하다가 공간이 부족해지면 테이블스페이스로부터 익스텐트를 추가로 할당받는다. 익스텐트 단위로 공간을 확장하지만, 실제로 저장하는 공간은 데이터 블록이다. 한 블록은 하나의 테이블이 독점한다 = 한 블록에 저장된 레코드는 모두 같은 테이블 레코드이다. 한 익스텐트도 하나의 테이블이 독점한다. = 한 익스텐트에 담긴 블록은 모두 같은 테이블 블록이다.. 2020. 5. 3.
node.js TDD에 필요한 모듈 TDD에 도움을 줄 수 있는 모듈이 있다. mocka should supertest 위 세가지 모듈을 이용하여 테스트코드를 보다 쉽게 작성할 수 있다. 2020. 5. 1.
node.js 란 ? 이벤트 기반의 I/O 비동기 프레임워크 어떠한 요청이 오면 node는 이벤트라는것으로 만들어서 큐에 쌓는다. 이벤트 루프를 이용하여 큐에있는 이벤트를 실행하고 요청한 클라이언트에 답해준다. 이벤트 루프는 싱글 스레드로 이루어져있다. (node가 싱글 스레드가 여기서 나온말) 무거운 동작(disk에 있는 파일읽을때, 외부 네트워크 통신을 해야할때 등)은 이벤트루프가 실행하지 않고 다른 스레드에게 위임한다. 모듈 시스템 모듈이란 독립적인 하나의 소프트웨어이다. node.js는 파일은 모듈이된다. 2020. 4. 30.