개요 인터넷에서 웹 서버와 사용자 컴퓨터에 설치된 웹 브라우저 사이에 문서를 전송하기 위한 통신 규약인 HTTP 프로토콜은, 당연하게도 처음부터 완벽한 상태로 나오지는 않았다. 개발자들은 ‘어떻게 하면 더 빨리, 더 안전하게 응답을 보낼 수 있을까’에 대해 고민하며 데이터 송수신 방식을 발전시켜왔고, 그에 따라 여러가지 규약들이 생겨났다. 이번엔...
[백엔드|스프링부트] 서버가 사용자를 인증하는 법 (JWT를 이용한 방법)
개요 애플리케이션 개발에 사용자 인증과 인가 등의 보안 기능은 거의 필수적으로 구현해야할 사항이다. 보통은 아이디와 비밀번호를 서버에 전달해 사용자를 인증하는 방법을 사용하는데, 스프링부트는 이걸 어떻게 처리할까? 쿠키나 세션 방식같은 방법이 있겠지만, 이번에는 JWT라는 토큰값을 활용하는 보안 기법으로 알아보려고 한다. Spring Secur...
[CS] IP & MAC: 컴퓨터에서 보낸 메시지는 길을 어떻게 찾아가지?
개요 “컴퓨터에서 보낸 메시지는 길을 어떻게 찾아가지?”라는 질문에 대해 보통은 IP 주소를 가지고 찾아간다고 한다. 하지만 이는 엄밀히 말하면 정확한 표현 방법이 아니다. 이번 글에서는 컴퓨터끼리 통신할 때 사용되는 기술들이 어떤 것이 있으며, 그 기술이 어떻게 사용되어 통신이 이루어지는지 알아보도록 하자. IP 위 질문에 대답하기 위해서는...
[CS] TCP/IP: 인터넷에서 컴퓨터들이 정보를 주고 받을 때 쓰이는 프로토콜들에 대해 알아보자
개요 사람들과 마찬가지로, 컴퓨터들도 서로 의사소통 하기 위해 공통된 규칙이 있어야 한다. 컴퓨터가 사용하는 규칙을 프로토콜이라고 하며, 용도에 따라 나뉘면서 많은 프로토콜이 존재한다. 이런 많은 프로토콜에 대한 합의된 표준이 필요하게 되어 나오게 된게 TCP/IP 이다. TCP/IP는 보통 컴퓨터에 내장되어있고 대부분 알아서 동작하긴 하지만,...
[CS] 네트워크의 기초
네트워크 네트워크는 두 대 이상의 장치들을 연결해 서로 리소스를 공유할 수 있는 집합을 지칭하는 용어다. 네트워크 장치들을 노드라고 하며, 유선 또는 무선 연결을 링크라고 한다. 좋은 네트워크의 기준은 많은 처리량을 처리할 수 있고, 지연시간이 짧고, 장애 빈도가 적으며, 좋은 보안을 갖추어야 한다. 기본 용어 정리 처리량 처리량(thro...
[CS] 프로그래밍 패러다임: 객체 지향은 뭐고, 함수형은 뭔데?
개요 어떤 문제를 코딩으로 해결하는 접근 방법은 한 가지만 존재하지 않는다. 같은 문제라도 단순히 A의 실행이 끝나면 B를 실행하도록 하는 방법이 있는가 하면, 실생활의 사물에 빗대어 서로 상호작용하는 것처럼 만드는 방법도 있다. 이렇게 프로그램을 개발하는 방법들을 프로그래밍 패러다임 이라고 부른다. 이번에는 각각의 패러다임이 지니는 특징과 지켜...
[백엔드|스프링부트] 서버와 서버사이 요청은 어떻게 주고 받을까?
개요 지금까지 공부해왔던 웹 API는 클라이언트에서 데이터가 필요하면, 서버 하나에서 응답에 필요한 데이터를 지지고 볶아 내어주는 “모놀리식 아키텍처(Monolithic Architecture)” 로 구현해왔다. 하지만 최근에 개발되는 서비스들은 서로 다른 데이터를 처리하는 서버를 여러 개 두고 서버끼리 통신해 데이터를 만들어나가는 “마이크로서비...
[CS] 디자인패턴이란? Part 01
디자인 패턴이란? 디자인 패턴이란, 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용해 해결할 수 있도록 하나의 ‘규약’ 형태로 만들어 놓은 것을 의미한다. 종류 ‘GoF 디자인 패턴’ 에 따라 분류하면 디자인 패턴은 3가지 종류로 나뉜다: 생성(Creational), 구조(Structural), 행위(Behavioral)...
[백엔드|스프링부트] 운영중인 웹 서비스를 Actuator로 모니터링 해보자
개요 애플리케이션을 운영하는 단계에 접어들면, 애플리케이션이 정상적으로 동작하는지 모니터링하는 환경을 만들어야 한다. 이 때 사용할 수 있는 기능이 스프링부트 액추에이터로, 애플리케이션의 건강 상태 정보, 사용 중인 메모리, 특정 엔드포인트가 받은 요청 횟수 등의 정보를 HTTP 요청을 통해 받아 볼 수 있다. 이 기능을 어떻게 추가하며, 어떻게 사...
[백엔드|스프링부트] 프록시 객체때문에 발생할 수 있는 equals 예외
개요 JPA를 통해 객체를 불러오면서도 모든 연관된 엔티티를 전부 불러오고 싶지는 않다면, JPA가 지원하는 지연로딩 방식을 사용하면 된다. 그러면 JPA는 하이버네이트 구현체가 만든 프록시 객체로 불러와 데이터의 자리를 메워준다. 이 프록시 객체는 실제 데이터를 DB에서 불러오지 않고도 데이터가 존재하는 것처럼 해줘서, 해당 데이터를 실제로 접근하...