오늘은 4문제의 CodeKata를 풀었다. 최근에는 2문제 정도를 풀다가 이 정도를 푸니까 나름 뿌듯하긴하다. 다만 오늘은 CodeKata를 통해 배운 것이 없다. 그래도 그 동안 CodeKata를 풀면서 배운 coerceAtMost나 indexWith를 아주 유용하게 사용하고 있다는 것은 긍정적이다. 덕분에 문제 해결에 시간이 단축되었다.
일단 아침엔 나머지 강의를 들었다. 여기서 가장 기억에 남는 정보는 보안에 대한 것이다.
HTTP는 기본적으로 Stateless한 프로토콜이여서, 클라이언트의 요청이 다음 요청이나 이전 요청에 영향을 주지 않는다. 그래서 서버가 클라이언트를 식별하기 위해서 "쿠키"와 "세션"을 아용한다.
"쿠키"는 클라이언트 측, 즉, 브라우저에 저장되는 데이터 조각이다. 클라이언트의 상태정보를 저장하며, 자동적으로 서버에 전송이 된다. "세션"은 서버에서 클라이언트에 고유한 ID를 할당하고 관리하는 기술이다. 세션 ID를 부여하기 위해서 쿠키를 사용한다.
이 "쿠키"와 "세션"을 사용하는 인증 방식을 "쿠키 / 세션 기반 인증"이라 불린다.
이 방식은 서버에서 클라이언트 정보를 관리한다는 점에서 보안에 좋다란 장점이 있다. 하지만 서버가 증설될 때 비효율적이다. 다시 말해서 확장성이 좋지 않다란 단점이 있다.
그래서 최근에는 토큰을 사용하는 "토큰 기반 인증"이 각광받고 있다. 인증정보를 토큰이란 데이터에 저장해서 클라이언트가 이 토큰을 갖고 요청하는 방식으로, 서버가 클라이언트에게 토큰을 발급하고 전달하면 클라이언트가 이를 저장해서 요청마다 토큰을 전송해 검증을 받는 방식이다.
특히 자주 쓰는 형태는 JWT 형태를 많이 사용한다. 이 형태는 앞부분에 헤더, 중간의 내용 그리고 마지막에 서명이란 형태를 띈다. 헤더는 서명 알고리즘과 토큰의 타입, 내용은 Registered Claims와 Custom Claims로 나뉘는데, Registered Claims는 발급 주체와 대상 주체, 만료일, 발급된 시간, 식별자로 구성이 된다. Custom Claims는 필요에 따라 추가적으로 담는 Claim이다. 서명은 JWT가 맞는지 검증하는 값으로 헤더와 내용을 합쳐 암호화 하고 Base64로 다시 인코딩한 것이다.
서명 알고리즘은 대칭키 활용과 비대칭키 활용 알고리즘으로 나뉘어지는데, 대칭키는 암호화와 복호화에 한 개의 키로 가능한 것을 의미하고. 비대칭키는 공개키와 개인키를 활용하는 것을 의미한다.
이 보안에 관한 부분은 최근에 관심이 가는 분야로써 앞으로도 더 공부해 두는 편이 좋다고 생각을 한다.
그리고 오후가 되고 숙련 과제 Step1의 코드를 구현하였다. 코드 구현 자체는 강의의 코드를 보며 짜면 여렵지 않은 수준이라서 구현에 시간을 많이 두지 않았다. 의외로 가장 시간을 소모한 곳은 Use Case Diagram이다. 구글링을 해서 이론도 보고 예제도 몇 개를 봤는데 계속 헷갈려서 이렇게 하는 게 맞는지 감이 안 잡혀서 간단한 프로그램임에도 여기서 시간을 보내고야 말았다.
우선 Actor는 사용자이다. 일단 내가 구현하려는 프로그램의 사용자는 구분이 없으니 User라 두었다.
useCase는 조회, 생성, 삭제, 수정 정도로 정리된다. Scope도 그냥 시스템 전체니까 딱히 건드릴 것도 없었다.
문제는 RelationShip이다. association은 actor가 useCase를 사용하는 것을 의미한다. include는 기능을 위해서 사용해야하는 기능을 의미한다. generalization은 추상화된 기능을 구체화하는 관계이다. extended는 특정 조건에서만 동작하는 기능이다. 이론도 이해하였고 예제를 보면서 "아, 이게 이렇구나"라고 납득도 되는데, 막상 내가 사용하려 하면 "이거... 여기에 연결해야하는 건가..?", "이 화살표는 extented를 써야하나..? 아니면 generalization을 사용해야하나?" 등으로 고민을 하다보니 은근히 오래 걸리고 말았다. 그래도 다음엔 이렇게 시간을 잡아먹지 않으려나..? 모르겠다.
어쨌든 내일은 Step2를 완성할 계획이다. Step1은 https://github.com/tlsgkdns/todoApp 이렇게 저장을 했지만 혹여나 수정사항이 있을지도 모르니 제출은 조금 미루고, Branch를 생성해서 Step2를 마저할 예정이다. 그리고 시간이 있다면 JPA를 좀 더 공부를 해야겠다.
'부트캠프 일지' 카테고리의 다른 글
부트캠프 20일차 후기 (2) | 2023.12.22 |
---|---|
부트캠프 19일차 후기 (1) | 2023.12.21 |
부트캠프 17일자 후기 (0) | 2023.12.19 |
부트캠프 16일차 후기 (2) | 2023.12.18 |
부트캠프 15일차 후기 (1) | 2023.12.15 |