Alt+Insert: getter, setter 단축키 ctrl +alert + v : 알아서 return 타입 및 변수 지정해줌memberRepository.findByName(member.getName());Optional result = memberRepository.findByName(member.getName()); shift + alert +ctrl + t : 자동으로 리팩토링 Extract Method 클릭 후 함수명 지정하면 따로 method로 해당 부분을 뺄 수 있다.memberRepository.findByName(member.getName()) .ifPresent(m -> { throw new IllegalStateException("이미 존재하는..
🍞 Back-End
✅ Schema 생성 Subscriber 스키마를 생성해 준다. 구독을 하기 위해선 구독을 받는 사람(userTo)과 구독을 하는 사람(userFrom)이 있기 때문에 만들어주었고, 구독을 언제 했는지 자동으로 생성 시간과 업데이트 시간을 생성해 준다. const mongoose = require("mongoose"); const Schema = mongoose.Schema; const subscriberSchema = mongoose.Schema( { userTo: { type: Schema.Types.ObjectId, ref: "User", }, userFrom: { type: Schema.Types.ObjectId, ref: "User", }, }, { timestamps: true } ); con..
✅ multer 사용계기 React, Node.js로 진행 중인 프로젝트에서, 파일 업로드 기능을 구현하게 되었다. 사용자가 업로드하고자 하는 파일을 선택하여 드롭다운하면 해당 파일이 서버에 저장되도록 구현할 것이다. ✅ 사용이유 일반적으로 클라이언트에서 서버로 폼 데이터(form data)가 전송될 때 해당 데이터는 인코딩되어 전송된다. 이러한 방식은 JSON 형식의 데이터를 전송하는 것에는 어려움이 없으나, 파일 자체를 전송하려 할 때는 생각한 것처럼 전송되지 않는다. 파일을 무작정 body에 넣어서 POST 요청을 보냈으나 서버에서는 body 안에 있어야 할 파일을 가져오지 못했다.. 이러한 상황에서 파일을 온전하게 전송하기 위해서는 파일을 입력하는 form 태그의 encType 속성을 multip..
프로젝트 구조를 살펴보자면 아래와 같다. ✅ 초기 설정 express를 가져오고 express를 활용해 app을 만들어 준 뒤, 포트 번호를 5000번으로 설정해 준다. const express = require("express"); // express를 가져온다. const app = express(); // express를 이용해서 app을 만들어준다. const port = 5000; // port 번호를 5000번으로 설정 다음으로, bodyParser와 토큰을 저장할 cookieParse도 다운로드하고 불러온다. 앱에서 사용한다고 설정도 같이 해준다. const bodyParser = require("body-parser"); const cookieParser = require("cookie-p..
schema.methods와 schema.statics의 차이가 궁금해졌다. methods는 객체의 인스턴스를 만들어야만 사용이 가능하지만 statics은 객체의 인스턴스를 만들지 않아도 사용이 가능하다. const temp = new User() 이런 식으로 선언하고 난 뒤 temp.(메서드) 이런 식으로 호출해야만 쓸 수 있는 것이 메서드고 User.(스태틱) 이런 식으로 호출할 수 있는 것이 스태틱이다. 스태틱은 temp.(스태틱)을 형태로도 호출이 가능합니다. 그러면 무조건 static으로 선언해야 하는 것 아니냐는 질문을 할 수 있겠는데, 둘을 구분 짓는 건 오용을 막기 위한 것일 수 있다. 인스턴스가 존재해야만 기능이 원활하게 지원되는 함수인데 static으로 만들어서 프로그래머의 실수로 호출..
몽고DB를 연동하던 중 비밀번호가 담겨있는 키를 코드에 옮겨적어야 했다. 깃허브에 올려야하는데 내 비밀번호가 보이면 안되기 때문에 코드를 바꿔보고자 한다! // index.js const mongoose = require('mongoose') mongoose.connect('비밀번호키가 포함된 URI') .then(() => console.log('MongoDB Connected...')) .catch((e) => console.log('MongoDB error:', e)) 위의 코드를 바꾸자면 .. // key.js // 개발환경이 로컬인 경우와 배포모드일 경우 다르게 설정 if(process.env.NODE_ENV === 'production') { module.exports = require('./..
프론트엔드와 백엔드 별도로 개발을 진행한다면 백엔드의 api 개발이 모두 완료될 때까지 기다릴 수 없다. 그렇기 때문에 가짜 데이터 서버를 두고 먼저 개발을 진행할 필요가 있다. 특정 Request를 날리면 가짜 데이터를 보내줄 가상 서버를 MockServer라고 하는데 오늘은 api 개발을 위한 툴인 postman을 이용해서 mock server를 구축해보려고 한다! Postman API Platform | Sign Up for Free Postman is an API platform for building and using APIs. Postman simplifies each step of the API lifecycle and streamlines collaboration so you can cre..
Node.js 패키지를 설치하는 법을 배웠으니 실행하는 법을 정리하고자 한다. 아까 parcel-bundler 패키지를 설치하였지만, 프로젝트 내부에서만 설정된 것이기 때문에 터미널에선 직접적으로 parcel 명령어가 뭔지 알 수 없었다. 📌 해결 방법 package.json 파일을 열어 "scripts" "dev"에 터미널 명령어를 적어준다. 이후 아래의 명령어를 터미널에 치면 오류가 나지 않고 로컬 환경에서 개발용으로 서버가 열리게 된다. npm run dev Server running at 뒤에 로컬 호스트 주소가 명시되고 1234라는 포트 번호가 나오는데 포트 번호는 컴퓨터 내에서 특정한 페이지로 접근할 수 있는 주소이다. 주소를 클릭해보면 서버 실행됨! "scripts" "build"에 buil..
📌 NPM(Node Package Manager) 전 세계의 개발자들이 만든 다양한 기능(패키지, 모듈)들을 관리하는 것이다. 1. 프로젝트 시작 npm init -y package.json 파일이 생성된다. 2. 패키지 parcel-bundler 설치 npm install parcel-bundler -D node_modules 폴더와 package-lock.json 파일이 생성된다. 폴더 안을 확인해보면 parcel-bundler 패키지 확인이 가능! package.json 파일을 확인해보면 "devDependencies" 옵션이 새로 생겨난 것을 볼 수 있다. 패키지의 내역과 버전을 확인할 수 있다. 이의 장점은 설치된 패키지를 지우더라도 npm i 명령어로 다시 설치 가능하다. package.jso..
📌 하위 클래스에서 메서드 재정의 오버라이딩(overriding) 상위 클래스에 정의된 메서드의 구현 내용이 하위 클래스에서 구현할 내용과 맞지 않을 경우 하위 클래스에서 동일한 이름의 메서드를 재정의할 수 있다. - VIPCustomer 클래스와 calcPrice()는 할인율이 적용되지 않는다. - 재정의하여 구현해야 한다. VIPCustomer.java @Override public int calcPrice(int price) { bonusPoint += price * bonusRatio; return price - (int)(price * salesRatio); } 📌 @overriding 애노테이션 (annotation) 애노테이션은 원래 주석이라는 의미다. 컴파일러에게 특별한 정보를 제공해주는 ..