전체 글

Spring

[Spring] Redis Template과 Redis Repository

Spring Boot Starter Redis를 사용하는 경우, Redis를 핸들링 하기 위해 Redis Template과 JPA와 유사한 방식으로 객체를 통해 Redis를 제어할 수 있는 Redis Repository 두가지 방법을 제공한다. 두가지 방법 차이를 알아보고 적절한 선택을 하여 사용하려 한다. Spring Boot Starter Redis를 사용할 때, RedisTemplate과 Redis Repository는 둘 다 Redis와 상호작용하는 데 사용되는 다른 방법이다. 어떤 방법이 더 나은지는 사용 사례와 요구 사항에 따라 달라진다. 개발자 스스로 각각의 장단점을 살펴보고 어떤 방법이 더 적합한지 판단해야 한다. ### RedisTemplate RedisTemplate은 Spring Da..

개발 Tip

[IntelliJ] IntelliJ Build, Gradle Build 차이점

인텔리제이를 사용하며 빌드 혹은 테스트 코드를 실행할 때 속도가 많이 느린 경우가 있다. 이럴 때마다 인터넷에서는 인텔리제이의 빌드 혹은 테스트 옵션을 default로 되어 있는 Gradle 대신 IntelliJ로 바꿔서 사용하라는 조언을 많이 볼 수 있다. 이 두개의 차이는 무엇일까? 하는 고민이 생기는 찰나 해당 옵션중 Run tests using을 Gradle로 두고 테스트 실행시 테스트가 간헐적으로 실패하는 경우가 확인 되었다. Gradle 옵션과 IntelliJ 옵션의 차이 결과적으로 Run tests using 옵션을 IntelliJ로 두고 테스트 실행시 순서가 보장된 테스트 환경에서 작성된 테스트 코드들은 모두 통과했지만 Gradle 환경에서 실행시 테스트 순서가 빌드시점마다 변경 되기때문에..

프로젝트 회고

[한샘] Integrated Member Project 오픈 회고

프로젝트의 시작 이전 스타트업에서 근무할 당시 경영난을 못이기고 결국 권고사직을 받은 후 2023년 올해 2월 한샘으로 이직하게 되었다. 회원 도메인을 담당하는 팀으로 배치받게 되었고, 6개월동안 진행중이던 프로젝트에 바로 합류하게 되었다. 토스가 사일로(Silo)단위로 팀을 꾸려 프로젝트가 진행되듯, 한샘또한 도메인별로 하나의 팀을 이뤄 프로젝트를 진행하게 된다. 한샘에는 PI(아직도 무슨 약자인지 모르겠다.)라는 역할이 존재하여, 일반적으로 기획자가 프론트 전반에 대해 설계를 담당 한다면 PI는 백엔드 전반에 걸쳐 설계를 진행해주고 있었다. 기획자 1명, PI 1명, 백엔드 4명으로 이뤄진 팀으로 첫 프로젝트를 시작 하게 되었다. 생각보다 복잡한 회원 구조 한샘은 온라인을 중요시 여기지 않는 제조업 ..

개발 Tip

[IntelliJ] Invalidate Caches And Restart

문제 재택근무를 시작하면서 집에서 회사 Github Repo를 가져오니, 특정 엔티티들을 찾을 수 없다는 오류가 빗발치는 상황을 확인함. 처음에는 패키지가 잘못 되었는지, 이전 PR 머지에서 잘못된 부분이 있는지 한참을 헤맸으나 선임분의 지혜(?)로 인텔리제이의 캐시를 삭제하고 재부팅 했을때 해결 된다는 내용을 듣고 해결함. 해결 IntelliJ - File - Invalidate Caches 를 통해 캐시 삭제를 진행할 수 있다. 인텔리제이 2022.03 버전 기준 위의 Invalidate Cache를 선택하게 되면 아래와같이 옵션을 선택할 수 있으며 Invalidate and Restart를 클릭함으로 최종적으로 캐시가 정리된다. 뭐든 안될때는 가장 기본적인 껏다 켜보는, 재부팅이 최고라는걸 다시 한..

Spring

[Spring] Http Status Code 제어

조금 더 짜임새 있는 Restful API를 구현하려 하다 보니 신경쓸 부분이 생각보다 많다는 것을 알았다. 그 중 요청에 따른 반환되는 상태코드가 적절해야한다는 부분이 있어 정리해본다. 하나를 알면 열개를 배워야 되는... HTTP Status Code 제어 일반적으로 클라이언트의 요청에 따른 결과값은 200 OK Status Code을 반환 받게 된다. 이는 정상적인 처리가 되었다는 의미이다. 그렇지만 Restful 하게 코드를 작성한다면 GET, POST의 용도가 다르기 때문에 반환되는 상태코드도 나누어주면 조금더 짜임새있는 코드를 작성할 수 있다. 기존코드 @PostMapping("/user") public void setUser(@RequestBody User user){ User resultU..

Spring

[JPA]Spring Data JPA 시작

개요 MyBatis로 개발을 하던 중 요즘 많은 곳에서 JPA를 사용한다는 이야기를 접하게 되었다. 결과적으로 MyBatis와 달리 생산성이 어마무시하게 늘어나는 걸 보고 본격적으로 공부하고 정리해보게 되었다. 목차 1. JPA란? 2. JPA 사용 목적 3. SpringData JPA를 이용한 간단한 CRUD JPA란? JPA는 자바 진영의 ORM 기술 표준이다. 아주 오래전 EJB를 사용하던 때 한 회사원이 EJB의 복잡성과 어려움에 견디지 못하고 퇴근하고 Hibernate를 만들었고 이걸 접한 JAVA에서 Hibernate 담당자들을 데려와 여러 개발자와 함께 JPA 표준을 만들었다는 이야기가 있다. 중요한건 JPA는 하나의 명세일뿐 JPA를 기반으로 Hibernate, OpenJPA, Eclips..

Java

[인증] JWT(Java Web Token) 사용

1. JWT 란? 사용자의 요청에 따라 서버에서 만들어진 암호화된 토큰을 반환하여 사용자 측에 저장 이후 토큰을 사용하여 인증과정을 진행 2. JWT 구조 - Header -> 어떤 타입의 데이터 어떤 알고리즘을 사용 - Payload(Claims) - Signature -> 데이터와 토큰이 위변조 되지 않았음을 증명 3. Spring Security + JWT 구현 Spring Security에서 알아두어야 할 두가지 개념 - Authentication (인증) Authentication은 주체(principal)의 신원을 증명하는 과정입니다. - Authorization (인가) Authorization은 인증을 마친 사용자에게 권한을 부여하여 특정 리소스에 접근할 수 있도록 허가하는 과정입니다. 스..

turtleDev
거북한 개발자의 기록