diff --git a/service/planner/db/client.go b/service/planner/db/client.go
index 2a8e4b4f021317eba4020e48803205b808f0b2c8..7a55e506635a7511e41697c416dbaedb43df6439 100644
--- a/service/planner/db/client.go
+++ b/service/planner/db/client.go
@@ -148,6 +148,20 @@ func GetUser(id int) (*model.User, error) {
 		user.ShoppingDates = append(user.ShoppingDates, date)
 	}
 
+	queryFavoriteMeals, err := udb.Query("SELECT mealId FROM favoriteMeal WHERE userId = ?;", id)
+	if err != nil {
+		return nil, err
+	}
+	defer queryFavoriteMeals.Close()
+	for queryFavoriteMeals.Next() {
+		var mealId int
+		err = queryFavoriteMeals.Scan(&mealId)
+		if err != nil {
+			continue
+		}
+		user.FavoriteMeal = append(user.FavoriteMeal, mealId)
+	}
+
 	return user, nil
 }
 
@@ -422,6 +436,47 @@ func DeleteUserMeal(id int) error {
 	return nil
 }
 
+func CreateFavoriteMeal(userId int, mealId int) error {
+	udb, err := sql.Open(driverName, cfg.FormatDSN())
+	if err != nil {
+		return err
+	}
+	defer udb.Close()
+
+	queryCheck, err := udb.Query("SELECT * FROM favoriteMeal WHERE userId = ? AND mealId = ?;", userId, mealId)
+	if err != nil {
+		return err
+	}
+	defer queryCheck.Close()
+	if queryCheck.Next() {
+		return errors.New("favorite meal already added")
+	}
+
+	query, err := udb.Query("INSERT INTO favoriteMeal (userId, mealId) VALUES (?, ?);", userId, mealId)
+	if err != nil {
+		return err
+	}
+	query.Close()
+
+	return nil
+}
+
+func DeleteFavoriteMeal(userId int, mealId int) error {
+	udb, err := sql.Open(driverName, cfg.FormatDSN())
+	if err != nil {
+		return err
+	}
+	defer udb.Close()
+
+	query, err := udb.Query("DELETE FROM favoriteMeal WHERE userId = ? AND mealId = ?;", userId, mealId)
+	if err != nil {
+		return err
+	}
+	query.Close()
+
+	return nil
+}
+
 func CreateGroupMeal(groupId int, mealId int, date string) error {
 	udb, err := sql.Open(driverName, cfg.FormatDSN())
 	if err != nil {
diff --git a/service/planner/db/init.sql b/service/planner/db/init.sql
index 710a1ce000039464de44662e00d72468bff80102..b1e6939ca8a5b88d00931b213c557d64afdf32ba 100644
--- a/service/planner/db/init.sql
+++ b/service/planner/db/init.sql
@@ -28,6 +28,15 @@ CREATE TABLE
         FOREIGN KEY (`userId`) REFERENCES userAccount(`id`)
     );
 
+CREATE TABLE
+    IF NOT EXISTS `favoriteMeal` (
+        `id` int NOT NULL AUTO_INCREMENT,
+        `userId` int NOT NULL,
+        `mealId` int NOT NULL,
+        PRIMARY KEY (`id`),
+        FOREIGN KEY (`userId`) REFERENCES userAccount(`id`)
+    );
+
 CREATE TABLE
     IF NOT EXISTS `groupMeal` (
         `id` int NOT NULL AUTO_INCREMENT,
diff --git a/service/planner/handler/meal.go b/service/planner/handler/meal.go
index 793190ec2d4bac04e09197c73107e41062f2ece0..46784f33d0d804797e4dc712b41fa8ca24ccf0d3 100644
--- a/service/planner/handler/meal.go
+++ b/service/planner/handler/meal.go
@@ -81,3 +81,40 @@ func DeleteGroupMeal(w http.ResponseWriter, r *http.Request) {
 	}
 	sendJson(w, nil)
 }
+
+func CreateFavoriteMeal(w http.ResponseWriter, r *http.Request) {
+	userId, err := getUserId(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	mealId, err := getMealId(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	if err := service.CreateFavoriteMeal(userId, mealId); err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, nil)
+}
+
+func DeleteFavoriteMeal(w http.ResponseWriter, r *http.Request) {
+	userId, err := getUserId(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	mealId, err := getMealId(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	err = service.DeleteFavoriteMeal(userId, mealId)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, nil)
+}
diff --git a/service/planner/handler/utils.go b/service/planner/handler/utils.go
index 60cefdcc04bf1f1284439cfb9da02953e25eeadc..02ca54aabb5b090c350435a1dee1a5597b1eb722 100644
--- a/service/planner/handler/utils.go
+++ b/service/planner/handler/utils.go
@@ -42,6 +42,15 @@ func getGroupId(r *http.Request) (int, error) {
 	return id, nil
 }
 
+func getMealId(r *http.Request) (int, error) {
+	vars := mux.Vars(r)
+	id, err := strconv.Atoi(vars["mealId"])
+	if err != nil {
+		return 0, err
+	}
+	return id, nil
+}
+
 func getValue(r *http.Request) string {
 	vars := mux.Vars(r)
 	return vars["value"]
diff --git a/service/planner/main.go b/service/planner/main.go
index f17e725146f8dce38f60529f8a22cbf47a6772d0..ad739aee5e07574ad63f228ef8ae403fede72491 100644
--- a/service/planner/main.go
+++ b/service/planner/main.go
@@ -38,6 +38,8 @@ func main() {
 	router.HandleFunc("/user/date", handler.CreateShoppingDate).Methods(http.MethodPost)
 	router.HandleFunc("/user/meal/{id}", handler.DeleteUserMeal).Methods(http.MethodDelete)
 	router.HandleFunc("/user/meal", handler.CreateUserMeal).Methods(http.MethodPost)
+	router.HandleFunc("/user/{userId}/{mealId}", handler.CreateFavoriteMeal).Methods(http.MethodPost)
+	router.HandleFunc("/user/{userId}/{mealId}", handler.DeleteFavoriteMeal).Methods(http.MethodDelete)
 	router.HandleFunc("/user/{id}", handler.GetUser).Methods(http.MethodGet)
 	router.HandleFunc("/user/{id}", handler.UpdateUser).Methods(http.MethodPut)
 	router.HandleFunc("/user/{id}", handler.DeleteUser).Methods(http.MethodDelete)
diff --git a/service/planner/model/user.go b/service/planner/model/user.go
index 58d6325e1d46a8dc38241955211e90efb4c027cc..571e71781c737e1e4f956479ad469c51403f1180 100644
--- a/service/planner/model/user.go
+++ b/service/planner/model/user.go
@@ -6,6 +6,7 @@ type User struct {
 	FirstName     string               `json:"firstName"`
 	LastName      string               `json:"lastName"`
 	GroupIds      []int                `json:"groupIds"`
+	FavoriteMeal  []int                `json:"favoriteMeals"`
 	Meals         []UserMealWithId     `json:"meals"`
 	ShoppingDates []ShoppingDateWithId `json:"shoppingDates"`
 }
diff --git a/service/planner/service/meal.go b/service/planner/service/meal.go
index 5bc1d17690c70e4a77e4617903024e08b5ed2a39..f3352e58bb54fb77e9173d4a085dfacf4029cad3 100644
--- a/service/planner/service/meal.go
+++ b/service/planner/service/meal.go
@@ -40,3 +40,21 @@ func DeleteGroupMeal(id int) error {
 
 	return nil
 }
+
+func CreateFavoriteMeal(userId int, mealId int) error {
+	err := db.CreateFavoriteMeal(userId, mealId)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DeleteFavoriteMeal(userId int, mealId int) error {
+	err := db.DeleteFavoriteMeal(userId, mealId)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}