청담동 골목길에 조용히 위치한 레스토랑 온을 찾아갔다. 초등학교 시절 친구의 연말 생일을 뒤늦게 기념하기 위해 특별히 원테이블 파인다이닝 식당을 예약했다.
2020년에도 당당하게 미슐랭 가이드에 선정된 레스토랑 온은 '따뜻할 温' 처럼 따뜻하고 편안한 음식을 대접하려는 셰프의 작은 공간이다.
The name may have changed from the previous Siot to the current On, but the food at this refined French restaurant retains its integrity. - Michelin Guide Review
사실 뉴욕 유학 시절, 바로 옆동네였던 요리 학교를 다니던 친구가 하는 식당이다. 친구가 하는 식당이니까 가야지 하면서도, 나조차 미루고 미루다 친구의 생일을 기념하여 예약했다.
파인 다이닝을 안 다녀본 사람이라면, 어느 파인 다이닝 식당을 가도 가격에 놀랄 것이다. 보편적이고 누구나 먹을 수 있는 음식의 평등함도 정말 중요하지만, 파인 다이닝은 맛을 넘어서 경험을 선사한다는 시선으로 바라봐야 한다. (파인 다이닝 자체가 생소하고 궁금한 사람들에게는 넷플릭스의 Chef's Table, 셰프의 테이블 다큐 시리즈를 강력 추천하고 싶다.) 종종 티비나 영화의 비싼 레스토랑 장면에서 웨이터들이 주변에 항시 대기하고, 가끔은 요리사나 지배인이 손님에게 꼼꼼히 물어보는 장면들이 보인다. 파인 다이닝은 맛과 개성과 창의력은 기본이고, 손님들이 요리사의 작품을 음미하고 이해하게끔 공간과 분위기를 최대한 배려하는 게 중요하기 때문에 그렇다.
그리고 그러다보니 그에 맞는 비용이 측정된다. 나도 개인적으로 돈을 아끼는 사람인지라 처음에는 파인 다이닝이 부담스러웠었다. 하지만 요리사 친구들과 자주 이야기하고, 넷플릭스의 파인 다이닝 다큐들을 보다보니 (물론 연출을 기가 막히게 해서 그런 것도 있겠지만), 그 비싼 값을 지불하고 갈만한 곳들도 있구나 싶었다.
청담동 레스토랑 온은 셰프의 정성이 담긴 요리뿐만 아니라, 프라이빗한 공간에서 오붓한 시간을 만끽할 수 있으니, 종합적으로 보았을 때 결코 비싼 비용이 아니라는 생각도 들었다. (여기는 친구라고 해서 디스카운트는 없는 정직한 식당이다ㅜㅜ)
1월 초에 식당을 갔었는데, 추운 겨울날을 포근하게 만들어 준 메뉴 구성이었다.
크리에이티브 코딩 작업을 하는 만큼, 이 음식과 경험을 나만의 방법으로 표현하고 싶었다. 그리고 좋은 서비스를 제공해준 친구 셰프에게도 고마운 마음으로 독특한 만들어보고 싶어서 구상을 했다.
#DEAD0B
#DD9C04
#F3E093
#425516
#BA7A20
#904c43
#cfc192
#869c51
#523c24
#e23d21
#cc563c
#e7642c
#f28435
#d3b33c
#dac670
#c0970b
#a5b062
#bfd36c
#ddf280
#7e8b46
let ovendryColors = [ '#ff6b52', '#ee8d2c', '#f25b5b', '#f1f25a', '#d0ff00', '#ee2c2c'] ;
//'#cc563c', '#f28435', '#dac670','#e7642c', '#ee2300', '#ff8f43',
let emmentalColors = ['#DEAD0B', '#DD9C04', '#F3E093', '#85ab2c', '#BA7A20'];
let chateauColors = ['#904c43', '#cfc192','#f6e7b9', '#b87167', '#857665', '#e16d6d', '#b5d270'];
// '#f5f2e9','#f2e7c6',
let font;
function preload() {
font = loadFont("LobsterTwo-Bold.otf");
}
let ovendry = "ovendry tomato";
let emmental = "emmental gratin";
let chateau = "chateaubriand";
let ovendryP, emmentalP, chateauP;
function setup() {
createCanvas(800, 800);
noFill();
strokeWeight(1);
ovendryP = createPoints(ovendry);
chateauP = createPoints(chateau);
emmentalP = createPoints(emmental);
}
function createPoints(txt){
points = font.textToPoints(txt, 0, 0, 100, {
sampleFactor: 2,
simplifyThreshold: 0
});
return points;
}
let count1 = 0, count2 = 0, count3 = 0;
function draw(){
background(0, 5);
// 1st line
beginShape();
translate(70, 150);
stroke(random(emmentalColors));
strokeWeight(3);
for (let i = 0; i < 15; i++) {
let p = emmentalP[count1];
point(p.x, p.y);
count1 += 5;
if (count1 > emmentalP.length-1) {
count1 = 0;
}
}
endShape(CLOSE);
// 2nd line
beginShape();
translate(20, 250);
stroke(random(chateauColors));
strokeWeight(2);
for (let i = 0; i < 50; i++) {
let p = chateauP[count2];
vertex(p.x, p.y);
count2 ++;
if (count2 > chateauP.length-1) {
count2 = 0;
}
}
endShape(CLOSE);