본문 바로가기

전체 글196

HTTPS는 왜 쓸까? : HTTPS 동작 과정 알아보기 아직 면접에서 질문 받은적은 없는데, 혹시 질문이 나올 수도 있을까봐 간만에 다시 공부하는 분야다. HTTPS는 왜 쓸까? HTTP랑은 뭐가 다를까? 사실 다른 점은 딱 하나다. 주고받는 데이터에 암호화를 하느냐 마느냐. 차이점이 딱 하나니까, 사용하는 이유도 당연히 저 하나의 차이에서 나온다. HTTPS는 HTTP보다 데이터를 안전하게 주고 받을 수 있다. 그렇다고 면접에서 이렇게만 대답할 순 없잖아. 오늘은 HTTPS가 안전하게 데이터를 주고받을 수 있게 해주는 암호화 / 복호화 방식을 알아보고자 한다. HTTP HTTP와 HTTPS의 차이는 주고받는 데이터에 암호화를 하냐 마냐의 하나밖에 없다고 했다. 이 말은 다시 말하면, HTTP던 HTTPS던 데이터를 주고받는데 사용된다는 것이다. 여기서 굳이.. 2024. 3. 4.
바버 - 바버샵 최종장 : 중간 테이블... 써야겠지? 회원과 바버샵 간의 연관관계를 다루는 (아마) 최종 게시글이다. 결국 중간에 테이블을 하나 사용하기로 했다. 그렇다고 조인해서 정보를 사용하는 경우는 아마 없을 것 같긴하다. 일대다의 방향성을 지닌 연관관계를 사용하지 않고자 최대한 노력하고있고, 그럼 굳이 테이블을 조인해서 어떤 정보를 찾아올 이유도 없다. 게시글을 조회하면 댓글 리스트에 대한 조회 요청이 같이 오는 것과 마찬가지로, 바버샵을 조회하면 해당 조인 테이블에 대한 조회 요청도 같이 보낸다. 이렇게 엔티티 간 연관을 끊고 id에 의한 약한 연관관계를 유지하면서, 좀 더 상위 도메인을 방어적으로 다룰 수 있다. 아무튼 처음의 생각으로 돌아가보자. 처음 생각했던 테이블 설계는 아래 그림과 같았다. Member도메인 자체를 두 개의 도메인으로 분리.. 2024. 3. 3.
롤백 - 회원을 왜 나눠 아주 바보같은 생각이었다. 회원이 바버샵과 연관이 있다고 회원을 나눈다니. 이번 프로젝트 설계의 가장 근간은 회원은 절대 지킨다였다. 그런데, 회원이 바버샵과 연관이 있다고 회원 도메인에 바버샵 도메인을 침투시킨다? 무슨 이런 바보같은... 회원과 바버샵이 연관되어 있으면, 회원이 바버샵에 의존하는게 아니라 바버샵이 회원에 의존하는게 맞다. 이런 기본 원칙을 까먹고 멍청하게 프로젝트를 진행하고 있었다.... 이전에 생각했던 바버와 바버샵 클래스를 코드로 표현하면 아래와 같다. class Barber { ... private final BarberShop workPlace; ... } ////////////////////////////// class BarberShop { ... private final .. 2024. 2. 28.
구체 클래스 vs 추상 클래스 vs 인터페이스 - 고객 / 바버 추상화하기 이전 글에서 현재 사용 중인 회원 도메인을 고객과 바버의 두 개의 도메인으로 분리하기로 했다. 고객은 바버샵과 연관관계를 맺지 않아도 되지만, 리뷰에 답글을 달거나 바버샵과 관련한 기능들을 수행하기 위해서 바버는 바버샵과 연관을 맺어야하기 때문이다. 한 가지 고민해 볼 점은 고객과 바버를 완전히 다른 도메인으로 분리하느냐, 엔티티 레벨에서만 분리하고 하나의 도메인(회원)에서 사용하느냐이다. 물론 둘을 완벽하게 분리해서 사용하는 것은 충분히 가능하다. 애초에 회원가입을 시도할 때, 해당 사용자의 직군을 기준으로 서버 쪽에 요청을 다르게 날리면 된다. 이후에는 클라이언트에 회원의 정보를 쏴줄 때마다 해당 사용자의 역할을 담아 보내고, 그에 맞게 클라이언트에서 다시 요청을 보내면 된다. 이전 글에서는 클라이언.. 2024. 2. 27.
일대다 단방향 연관관계를 피하고 싶어서 바버샵 프로젝트의 핵심은 뭘까? 뭐긴 뭐야 당연히 바버샵이지. 바버샵 테이블을 설계하면서 가장 고민한 부분이 '근무 중인 바버에 대한 정보는 어떻게 담을까'였다. 원장에 대한 정보는 바버샵 -> 사용자의 일대일 연관관계를 맺어주면 간단하게 해결할 수 있다. 문제는 근무 중인 바버에 대한 정보다. 개념적으로는 바버샵 -> 사용자의 일대다 연관관계가 된다. 반대로 보면 사용자 -> 바버샵의 다대일 관계로 풀어낼 수도 있다. 최근 프로젝트를 진행하고 JPA와 관련한 공부를 하면서 일대다 단방향 관계를 만드는 것은 썩 바람직하지 못하다고 생각하게 되었다. 데이터베이스 관점에서는 키 관리의 어려움이 있으며, 코드 레벨에서는 더 중요한 도메인이 덜 중요한 도메인에 의존하게 된다. 예를 들어, 게시글과 댓글이라는 예.. 2024. 2. 21.
JWT 돌아보기 세션, 쿠키, 토큰의 인가 방식 중에 우리는 왜 굳이 토큰을 사용할까? 라고 물어보면 누구나 쿠키보다 보안이 뛰어나고 세션보다 서버 부하가 적다는 대답을 할 수 있다. 그럼, 왜 쿠키보다는 보안이 뛰어나고 세션보다는 서버 부하가 적을까? 이유를 알아야 '보안이 좀 더 낫고, 서버 과부하가 안와요'라고만 대답해도 찰떡같이 알아들을 수 있다. 이번 면접에서 JWT와 관련한 질문을 받았고, 해당 내용을 까먹어서 제대로 답변하지 못했다. 아쉬운 부분이다. JWT의 구조 JWT는 위와 같은 세 부분의 구조로 이루어져있다. 중요한 것은 서명, 시그니처 부분이다. JWT가 쿠키에 비해 보안적인 측면에서 좀 더 나은 이유가 된다. - Header 헤더에는 토큰의 타입과 서명에 적용된 알고리즘이 담겨있다. 형태 예시는 .. 2024. 2. 20.
반응형