어떤 동작을 하는 로직을 정의하고, 이것들을 하나로 묶어(캡슐화) 관리하는 패턴
-
정책 패턴(policy pattern)이라고도 함
-
객체의 행위를 바꾸고 싶은 경우 '직접' 수정하지 않고 전략이라고 부르는 '캡슐화한 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴
-
EX) 결제 방식의 '전략'만 바꿔서 두 가지 방식으로 결제하는 것을 구현한 코드
- 어떤 아이템을 살 때 LUNACard로 사는 것과 KAKAOCard로 사는 것을 구현한 예제
- 로직을 독립적으로 관리하기 쉬움
- 로직을 사용하는 객체들은 자기의 입맛에 맞게 로직을 효율적으로 수정할 수 있다.
- 전략 패턴을 활용한 라이브러리로는
passport
가 있음 - passport는 Node.js에서 인증 모듈을 구현할 때 쓰는 미들웨어 라이브러리로, 여러 가지 '전략'을 기반으로 인증할 수 있게 함
- 서비스 내의 회원가입된 아이디와 비밀번호를 기반으로 인증하는
LocalStrategy
전략과 페이스북, 네이버 등 다른 서비스를 기반으로 인증하는OAuth
전략 등을 지원함
var passport = require("passport"),
LocalStrategy = require("passport-local").Strategy;
passport.use(
new LocalStrategy(function (username, password, done) {
User.findOne({ username: username }, function (err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, { message: "Incorrect username." });
}
if (!user.validPassword(password)) {
return done(null, false, { message: "Incorrect password." });
}
return done(null, user);
});
})
);
passport.use()
라는 메서드에 '전략'을 매개변수로 넣어서 로직을 수행하는 것을 볼 수 있음