240118 TIL |

2024. 1. 18. 21:01· 왕초보일지

완료여부 api 분리

 

@Controller

@Service

 

 


 

security 적용

implementation("org.springframework.boot:spring-boot-starter-security")
implementation("io.jsonwebtoken:jjwt-api:0.12.3")

runtimeOnly("io.jsonwebtoken:jjwt-impl:0.12.3")
runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.12.3")

 

 

시큐리티 로깅 (yml)

logging:
  level:
    org:
      hibernate:
        SQL: debug
        orm:
          jdbc:
            bind: trace
      springframework: 
        security: debug

 

 

 

토큰에 id, email, role 말고도 nickname 을 저장해넣었는데

카드를 작성할 때 holder 에서 꺼내지지가 않았다.

val authentication = SecurityContextHolder.getContext().authentication as JwtAuthenticationToken
val nickname = authentication.principal.nickname

 

강제로 변환하고 나서야 nickname 에 접근이 가능했다.

우리가 지금 사용하고 있는 JwtAuthenticationToken 은 authentication 의 구현체이고 

authentication 을 가져올 때 그 jwtAuthenticationToken 의 형태로 가져와라 그래야 직접 구현한 그 안의 데이터를 꺼낼 수 있다?

 

 

 


Kotlin DSL

kotest  mockk

문서 숙지하는게 이해하는데 제일 편하다고 함.. . 

 

강의 따라서 투두의 테스트코드를 작성해봤다.

@SpringBootTest // 나 테스트할거야
@AutoConfigureMockMvc // mockmvc 주입
@ExtendWith(MockKExtension::class) // mock 쓸 때 표기해줄 것
class CardControllerTest @Autowired constructor(
    private val mockMvc: MockMvc, private val jwtPlugin: JwtPlugin // @Autowired 로 직접 빈 주입
): DescribeSpec({
    extension(SpringExtension)

    afterContainer {
        clearAllMocks()
    }

    val cardService = mockk<CardService>()

    describe("GET /cards/{cardId}") {
        context("존재하는 id를 요청할 때") {
            it("200 status code 를 응답한다.") {
                val cardId = 2L

                every { cardService.getCard(any()) } returns CardWithCommentResponse(
                    card = CardResponse(
                        id = cardId,
                        title = "test_title",
                        content = "test_content",
                        name = "test_name",
                        createdAt = "test_time",
                        status = CardStatus.FALSE
                    ),
                    comments = mutableListOf()
                )
                val jwtToken = jwtPlugin.generateAccessToken(
                    subject = "2",
                    email = "test@email",
                    nickname = "test_nickname",
                    role = "USER"
                )
                val result = mockMvc.perform(
                    get("/cards/$cardId")
                        .header("Authorization", "Bearer $jwtToken")
                        .contentType(MediaType.APPLICATION_JSON)
                        .accept(MediaType.APPLICATION_JSON)
                ).andReturn()

                result.response.status shouldBe 200 // 결과

                val cardId2 = 1L
                val result2 = mockMvc.perform(
                get("/cards/$cardId2")
                    .header("Authorization", "Bearer $jwtToken")
                    .contentType(MediaType.APPLICATION_JSON)
                    .accept(MediaType.APPLICATION_JSON)
            ).andReturn()
                result2.response.status shouldBe 404
            }
        }
    }
})

처음에 card id 를 1로했다가 오류가 떴었는데 id가1인 카드가 존재하지 않아서였다.

성공했을 때, 실패했을 때 둘 다 해야한다길래 아래에다가 두번째 카드 아이디 할당해서 만들었다. 이게 맞는지는 모르겠다.

테스트코드에서 쓰이는 함수가 상당히 많던데 그때그때 찾아서 써야되는 것 같다.

 

 

 


오늘 투두에 시큐리티 적용하고 하루종일 강의듣다 다 갔다.

심화에 어려운 개념들이 다 몰려있어서 목요일이 되도록 강의를 붙잡고 있었다.

테스트 코드 두 번 들으면서 겨우 한 번 작성해봤는데

AOP도 한 번더 들어봐야한다. 공통된 부분을 분리해서 모듈화한다! 이 정도까지만 이해했고 혼자서 만들지는 못하겠다.

원래 오늘 투두 다 하고 배포해봐야지! 이랬었는데 강의를 다 못들었다는 불안함에 결국 못했다.

내일 과제 제출 마감 전에 투두 스웨서 테스트 한 번 더 하고

엔티티랑 서비스 테스트코드 작성

QueryDSL 강의 빠르게 한 번 더 듣고 적용할 수 있는거 적용해봐야겠다. 그리고나서 배포 따라해보기!

너무 피곤한데 잠 좀 푹 자보고 싶다...

'왕초보일지' 카테고리의 다른 글

240122 TIL |  (0) 2024.01.22
240119 TIL |  (1) 2024.01.19
240117 TIL | 시큐리티 예외처리, queryDSL  (0) 2024.01.17
240116 TIL |  (0) 2024.01.16
240113 TIL |  (1) 2024.01.13
'왕초보일지' 카테고리의 다른 글
  • 240122 TIL |
  • 240119 TIL |
  • 240117 TIL | 시큐리티 예외처리, queryDSL
  • 240116 TIL |
다시은
다시은
🔥
다시은
재은로그
다시은
전체
오늘
어제
  • 분류 전체보기 (127)
    • 코딩테스트 (40)
    • Language (2)
      • JAVA (2)
      • Kotlin (0)
      • TypeScript (0)
    • SQL (1)
    • 인프라 (1)
    • 왕초보일지 (77)
    • 회고 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • SQL문법
  • 문자열변환
  • sql
  • googleapis
  • mysql
  • 스프레드시트
  • Kotlin

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
다시은
240118 TIL |
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.