|
|
th:href="@{|/answer/modify/${answer.id}|}"
역할: 버튼을 클릭했을 때 이동할 URL 링크를 생성합니다.
원리: Thymeleaf의 경로 표현식(@{...})과 리터럴 치환(|...|) 기법입니다. ${answer.id} 값이 들어와 실제 출력되는 링크는 /answer/modify/1, /answer/modify/2와 같이 답변의 ID에 맞춰 가변적으로 변경됩니다.
class="btn btn-sm btn-primary"
역할: 부트스트랩(Bootstrap) CSS 프레임워크를 사용해 작고 파란색 형태의 버튼 스타일을 적용합니다.
sec:authorize="isAuthenticated()"
역할: 현재 사용자가 로그인(인증)된 상태인지 확인합니다.
원리: Spring Security dialect 확장 기능입니다. 로그인하지 않은 비회원 방문자에게는 이 수정 버튼 자체가 화면에 노출되지 않습니다.
th:if="${answer.author != null and #authentication.getPrincipal().getUsername() == answer.author.username}"
역할: 로그인한 유저가 '이 답변을 작성한 작성자 본인'인지 비교 검증합니다.
조건 상세 breakdown:
answer.author != null: 해당 답변에 작성자 정보가 실제로 존재하는지 확인 (NPE 방지).
#authentication.getPrincipal().getUsername(): 현재 로그인한 유저의 계정 아이디(username)를 가져옵니다.
== answer.author.username: 로그인한 유저의 아이디와 답변 작성자의 아이디를 비교하여, 두 값이 일치할 때만 조건문 전체를 true로 판단합니다.
th:text="수정"
역할: 태그 내부에 들어갈 텍스트 노드를 "수정"으로 설정합니다.
|
|