8484 font-size : 0.9rem ;
8585 color : # fff ;
8686 flex-shrink : 0 ;
87+ overflow : hidden;
88+ }
89+ .reviewer-avatar img {
90+ width : 100% ;
91+ height : 100% ;
92+ object-fit : cover;
93+ display : block;
8794 }
8895 .av-blue { background : linear-gradient (135deg , # 3b82f6, # 1d4ed8 ); }
8996 .av-green { background : linear-gradient (135deg , # 10b981, # 059669 ); }
162169 color : # fff ;
163170 flex-shrink : 0 ;
164171 border : 1px solid rgba (255 , 255 , 255 , 0.06 );
172+ overflow : hidden;
173+ }
174+ .senior-avatar img {
175+ width : 100% ;
176+ height : 100% ;
177+ object-fit : cover;
178+ display : block;
165179 }
166180 .sa-0 { background : linear-gradient (135deg , # 1a3350, # 1a7a8a ); }
167181 .sa-1 { background : linear-gradient (135deg , # 2a1a50, # 4a3080 ); }
@@ -254,7 +268,12 @@ <h2 class="fw-bold text-white mb-2">성장의 기록이 모이는 곳</h2>
254268 < div class ="d-flex align-items-start justify-content-between mb-3 ">
255269 < div class ="d-flex align-items-center gap-3 ">
256270 < div class ="reviewer-avatar "
257- th:text ="${#strings.substring(review.juniorName, 0, 1)} "> J</ div >
271+ th:with ="avatarUrl=${review.juniorProfileImageUrl} ">
272+ < img th:if ="${avatarUrl != null and !#strings.isEmpty(avatarUrl)} "
273+ th:src ="${avatarUrl} " alt ="프로필 이미지 "/>
274+ < span th:if ="${avatarUrl == null or #strings.isEmpty(avatarUrl)} "
275+ th:text ="${#strings.substring(review.juniorName, 0, 1)} "> J</ span >
276+ </ div >
258277 < div >
259278 < div class ="reviewer-name " th:text ="${review.juniorName} "> 주OO 개발자</ div >
260279 < div class ="reviewer-meta ">
@@ -399,7 +418,12 @@ <h2 class="fw-bold text-white mb-2">성장의 기록이 모이는 곳</h2>
399418 < span class ="senior-rank " th:text ="${stat.index + 1} "> 1</ span >
400419 < div class ="senior-avatar "
401420 th:classappend ="'sa-' + ${stat.index % 3} "
402- th:text ="${#strings.substring(senior.name, 0, 1)} "> K</ div >
421+ th:with ="avatarUrl=${senior.profileImageUrl} ">
422+ < img th:if ="${avatarUrl != null and !#strings.isEmpty(avatarUrl)} "
423+ th:src ="${avatarUrl} " alt ="프로필 이미지 "/>
424+ < span th:if ="${avatarUrl == null or #strings.isEmpty(avatarUrl)} "
425+ th:text ="${#strings.substring(senior.name, 0, 1)} "> K</ span >
426+ </ div >
403427 < div class ="senior-info ">
404428 < span class ="senior-name " th:text ="${senior.name} "> 김훈식 시니어</ span >
405429 < div class ="senior-rating ">
@@ -501,6 +525,7 @@ <h2 class="fw-bold text-white mb-2">성장의 기록이 모이는 곳</h2>
501525
502526 reviewList . innerHTML = myReviews . map ( function ( review ) {
503527 const juniorName = escapeHtml ( review . juniorName || '' ) ;
528+ const juniorProfileImageUrl = escapeHtml ( review . juniorProfileImageUrl || '' ) ;
504529 const seniorName = escapeHtml ( review . seniorName || '' ) ;
505530 const mentoringType = escapeHtml ( review . mentoringType || '' ) ;
506531 const timeAgo = escapeHtml ( review . timeAgo || '' ) ;
@@ -512,7 +537,11 @@ <h2 class="fw-bold text-white mb-2">성장의 기록이 모이는 곳</h2>
512537 <div class="review-card">
513538 <div class="d-flex align-items-start justify-content-between mb-3">
514539 <div class="d-flex align-items-center gap-3">
515- <div class="reviewer-avatar">${ juniorName ? juniorName . substring ( 0 , 1 ) : '나' } </div>
540+ <div class="reviewer-avatar">
541+ ${ juniorProfileImageUrl
542+ ? `<img src="${ juniorProfileImageUrl } " alt="프로필 이미지"/>`
543+ : `<span>${ juniorName ? juniorName . substring ( 0 , 1 ) : '나' } </span>` }
544+ </div>
516545 <div>
517546 <div class="reviewer-name">${ juniorName || '나의 후기' } </div>
518547 <div class="reviewer-meta">
0 commit comments