본문 바로가기

전체 글

(33)
[JWT 로그인 구현기] (1) Session vs Token 팀 프로젝트를 진행하면서 사용자 인증, 인가 기능 개발을 맡았다. 맡은 부분을 개발하면서 많은 고민을 하고 코드를 점진적으로 개선했다. 이 과정에서 한 고민과 경험을 공유하기 위해 글을 작성하게 됐다. Session vs Token 첫 번째 만났던 문제는 사용자 인증 방식이었다. 사용자 인증 방식은 토큰 기반 방식과 세션 기반 방식이 있다. 이 중 어떤 방식으로 개발할지 고민했다. 현재 상황에 맞는 선택하기 위해 두 방식의 장단점을 이해하고 내 상황에 적절한 방식을 선택했다. Session 세션 기반 방식의 흐름은 다음 그림과 같다. 세션 기반 방식은 사용자가 인증되면 사용자와 관련된 세션을 만들고, 세션 아이디를 반환해 준다. 이때 세션은 서버 메모리 또는 DB에 저장할 수 있다. 그 후 사용자는 세션..
Marbox 개인 회고 MarBox(팀 프로젝트) 개인 회고 프로젝트 간략 소개 프로그래머스 백엔드 데브코스에 참여하면서 약 2주간 팀 프로젝트를 진행했다.팀 프로젝트의 주제는 클론 코딩이었다. 우리 팀은 CGV의 예매 API를 클론했다. 개인적인 목표 프로젝트를 진행하면서 개인적인 목표를 설정했다. 단순한 기능 구현이 아닌 고민을 통한 기능 구현. 최대한 현업과 비슷한 프로세스로 개발. 그러면서 필요한 기술을 익히고 도입. 좋았던 점 단순 기능 구현이 아니라 하나의 기능을 구현하더라도 고민하고 구현했다. 안정적인 개발 프로세스를 위한 기술을 공부하고 도입했다. 그리고 소프트 스킬과 관련한 새로운 인사이트를 얻었다. 기능 고도화 프로젝트에서 로그인 기능 구현을 맡았다. 단순히 Jwt 토큰을 발급하고, 발급한 토큰으로 사용자를 ..
REST API REST API 나는 다음 두 가지 조건을 만족하면 REST API라고 생각했다. URI는 리소스를 식별하도록 설계 행위는 Http Method를 이용해 표현 이렇게 고민하지 않고 API를 설계했다. 그러다 문득 '내가 하고 있는 게 왜 REST API를 만족하는 거지?', '그럼 REST API는 도대체 뭐지?'라는 의문이 생겼다. 그래서 공부하고 정리해 공유하게 됐다. REST API REST 아키텍처를 지키도록 설계한 API를 REST API라고 한다. 즉, REST 아키텍처에 대해 공부하면, 내가 외우고 있던 개념의 원리를 이해할 수 있을 것이다. REST 아키텍처 REST 아키텍처는 분산 하이퍼미디어 시스템을 위한 아키텍처 스타일이다. (웹이 분산 하이퍼미디어 시스템의 대표적인 예다.) 여기서 ..
@RequestBody Spring MVC를 이용해 API를 개발할 때, Http Message body에 있는 Json 데이터를 가져오기 위해 주로 @RequestBody를 사용해 Json을 자바 객체로 변환한다. 이와 관련해서 Json으로 변환되는 객체는 기본 생성자만 있고 Setter가 없어도 변환 가능하다고 외우고 사용했다. 그러다 내부적으로 어떻게 동작하는지 궁금증이 생겼다. 그래서 동작 원리를 여러 글과 코드를 통해 공부했다. 공부한 내용을 공유하면 다른 분들도 재밌게 볼 수 있을 것 같아 글을 쓰게 됐다. @RequestBody 동작 원리 Spring MVC에서 요청이 들어와 @RequestBody를 처리하는 converter를 찾을 때까지 많은 과정이 있다. 이 글은 @RequestBody가 어떤 원리로 Json..
함께 자라기 함께 자라기 학습 방향성에 대해 많은 고민을 하고 있을 때, 데브코스 멘토님께 '함께 자라기' 책을 추천받았다. 책은 애자일 방법론을 학습에 적용해, 효율적인 학습 방법에 대해 알려준다. 나는 이러한 내용을 통해 학습 방향성을 잡을 수 있었다. 또 기존에 내가 생각하던 방식과 다른 방식으로 생각할 수 있는 계기가 됐다. 자신의 학습 방향성에 대해 고민하는 분들께 이 책을 추천하고 싶다. 인상깊었던 글과 느낀점 자라기 실수는 어떻게든 할 수밖에 없다. 대신 그 실수가 나쁜 결과로 되기 전에 일찍 발견하고 빨리 고치면 된다. (실수는 예방하는 것이 아니라 관리하는 것이다) 실수를 완벽히 예방하는 것은 불가능에 가깝다. 전문가도 1시간에 평균 3 ~ 5개의 실수를 한다. 따라서 실수를 완벽하게 예방하기보다 실..
람다식 람다식? 람다식(Lambda expression)은 자바에서 제공하는 함수형 프로그래밍 방식이다. (함수형 프로그래밍은 함수의 구현과 호출만으로 프로그램을 만드는 프로그래밍 방식이다) 람다식을 간단하게 설명하자면 이름이 없는 익명 함수를 만드는 것이다. 예시를 통해 람다식에 대해 알아보자. //두 정수를 매개변수로 받아 두 수의 합을 반환하는 함수 ​ //일반적인 함수 선언 int add(int a, int b) { return a + b; } ​ //람다식을 이용한 함수 선언 (int a, int b) -> {return a + b;} 람다식을 보면 소괄호('()') 안에 함수에서 사용될 매개변수가 들어가고, 중괄호('{}') 안에 함수에서 수행할 로직이 들어간다. 그리고 일반적인 함수 선언 방식과 비..
@JdbcTest와 @DataJdbcTest @JdbcTest와 @DataJdbcTest 테스트를 작성함에 있어, 중요한 요소 중 하나는 빠르게 수행되어야 한다는 것이다. (테스트 수행 시간이 길어진다면, 코드를 수정하고 테스트하는 작업을 안 하게 될 수 있다.) 그래서 나는 Persistence Layer 계층의 클래스들을 테스트할 때 @DataJdbcTest, @JdbcTest를 사용하고 있었다. 하지만 해당 어노테이션들의 의미를 정확히 모르고 사용하고 있었다. 그래서 이번 기회에 공부하고 공부한 내용을 공유하고 싶어 글을 작성하게 됐다. @JdbcTest 공식 문서를 살펴보면 다음과 같이 정리할 수 있다. 모든 스프링 빈을 auto-configuration 하지 않고, JDBC 테스트와 관련된 빈들만 auto-configuration 한다. ..
익명 클래스 익명 클래스? 익명 클래스란 무엇일까? 이름 그대로 이름 없는(익명) 클래스다. 익명 클래스와 비교해보기 위해 일반(이름이 있는) 클래스는 어떻게 선언하는 다시 생각해보자. class Hello { ... } 위는 이름이 Hello인 클래스를 선언한 예시다. 하지만 익명 클래스는 이렇게 선언하지 않는다. 이름이 없으므로 다른 방식으로 선언한다. 선언 방법은 뒤에서 예시를 통해 알아보겠다. 익명 클래스 사용 이유? 익명 클래스의 의미는 파악했지만 왜? 익명 클래스를 알아야 할까? 프로그래밍을 하다 보면 프로젝트의 전반적으로 사용되는 객체가 존재하고, 어느 부분에서 일시적으로 사용하는 객체가 존재한다. 일시적으로 사용하는 객체의 경우 우리가 굳이 클래스를 정의한 다음 사용해야 할까? 이는 효율적이지 않은 것..