Spring

개인 공부/에러 해결

[해결완료] Security 403 에러

프로젝트에 적용한 security 에서 올바른 결과값을 반환해야 하는 API 가 403 에러를 리턴하는 것으로 확인되었다. 로그인 후 올바른 토큰을 헤더에 실어 시험 조회 요청을 보냈지만, 403 에러를 뱉은 것이다. 게다가 쿼리는 실행되는데, 로직의 break point 는 걸리지도 않았다. ☠️ csrf ? 구글링을 해본 결과 인가처리를 따로 하지 않은 시큐리티의 403 에러의 대부분은 csrf 때문으로 확인되었다. CSRF(Cross-Site Request Forgery)는 웹 보안 취약점으로, 공격자가 사용자를 속여 의도하지 않은 작업을 수행하게 만드는 공격이다. 해당 공격은 다른 웹사이트 간의 상호 간섭을 방지하기 위해 설계된 동일 출처 정책을 부분적으로 우회할 수 있다. 웹 애플리케이션을 개발..

개인 공부/Spring

[Spring] Redis Cache 사용하기

이전에 LocalCache 를 사용해서 Cache 서비스를 구현한 적이 있었습니다. 이번에는 이후에 MSA 서비스 확장성을 고려해서 Global Cache 를 사용하자는 요구사항이 나와서 Redis 를 사용해 Global Cache 를 구현해보겠습니다. Local 환경에 Redis 설치와 실행이 끝났다는 가정하에 쓴 글입니다. 아직 설치가 되지 않았다면 해당 블로그를 참고해주세요. (mac) https://wlswoo.tistory.com/44 🧤 Config build.gradle implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.springframework.boot:spring-boot..

개인 공부/Devit

[Devit] #3 Spring Stomp 를 사용해 채팅 구현하기

Devit 플랫폼을 개발한지는 시간이 조금 지났지만, 마감 기한에 맞추기 바빠 채팅구현에 대한 포스팅을 진행하지 못한 점이 아쉬워 복습할 겸 다시 공부해 기록을 작성하려한다. 👍🏻 STOMP 란 Simple Text Oriented Messaging Protocol 의 약자로, 텍스트 기반 메시징 전송을 효율적으로 하기 위한 프로토콜이다. 특징으로는 Rabbit MQ 와 같이 구독 발행 시스템인 pub/sub 기반으로 작동한다. 메시지에 대한 송신 수신에 대해서 명확하게 구분하며, 별도의 핸들러를 구현할 필요 없이 @MessageMapping 어노테이션을 통해 메시징에 대한 엔드포인트 처리를 진행 할 수 있다. 위 그림은 기본적인 Message Queqe 를 이용한 STOMP 로직이다. Message B..

개인 공부/Spring

[Spring] Bean Scope

스프링은 스프링 컨테이너 ( Ioc 컨테이너 , DI 컨테이너라고도 불린다. ) 를 통해 객체를 빈에 등록하고 생명주기를 관리한다. 때문에 비즈니스 로직에 맞게 알맞은 생명주기를 선택해 적용하는 것은 매우 중요하다. 어떻게 빈을 생성하고 관리하고 소멸할지에 대해서는 백엔드 개발자에게 매우 민감하고 중요한 문제이기 때문에 스프링의 빈 관리 특징들을 이해해보자. 싱글톤 스프링의 기본 디자인패턴은 싱글톤이다. 싱글톤 디자인 패턴은 스프링 애플리케이션의 시작부터 종료까지로 빈의 생명주기를 관리한다. 즉 애플리케이션이 실행될 때 스프링 컨테이너에서 해당 빈 객체들을 생성하고 의존관계를 맺어준다. 또한 애플리케이션이 종료될 때 빈 객체의 소멸 메소드를 실행해 빈 객체의 소멸까지 보장해준다. 또한 싱글톤 디자인 패턴..

개인 공부/Devit

[Devit] #2 유저 설계 ( Token, RabbitMQ )

구현 해야 하는 기능. 유저 헤더에서 토큰 값 가져와 유저 구분하기 (uuid) 유저 생성 ( RabbitMq 이벤트 처리 ) 유저 수정 (API) 유저 프로필 조회(API) 헤더에서 토큰 값 가져와 유저 구분하기 MSA 패턴에서 모든 요청은 GateWay 서버로 들어온다. 때문에 GateWay 에서 유저 인증, 인가처리에 대해서 모두 마친 후, 인증된 데이터를 토큰으로 만들어 헤더에 담는다. 그 헤더를 다시 해당하는 url에 맞추어 각 서버로 API 요청을 보낸다. 때문에 우리는 헤더의 유효성을 체크하지 않고, 그저 데이터를 가져다 사용하기만 하면 된다. public ResponseEntity getProfile(@RequestHeader("Authorization") String data) throw..

개인 공부/Devit

[Devit] #1 아키텍처 설계

프로젝트 개발에 앞서, 본 서비스의 소개와 아키텍처에 대해 간략히 소개해보자. 더불어 내가 맡은 도메인들을 소개할 것이다. What ? 우리 팀은 개발자들을 위한 구인구직 웹 서비스를 계획했다. 구인구직 서비스는 많은데 ? 맞는 말이다. 때문에 차별성을 위해 우리는 개발자들에 초점을 맞추었다. 세상에는 정말 다양한 개발자가 존재한다. 학생, 인턴, 주니어, 시니어, 등등 ,, 개발자의 역량마다 할 수 있고, 해야하는 일은 전부 다 다르다. 예를 들어 간단한 초중학교 코딩 교육을 10년차 시니어 개발자가 할 수 없지 않는가 ? 용돈이 필요한 대학생 개발자가 적합할 것이다. 이처럼 우리는 일을 난이도, 역량에 맞추어 구분할 것이며 이를 적합한 개발자들에게 맞춤형으로 제공할 계획이다. ( feat .. 내가 ..

개인 공부/Spring

[Spring] #9 JPA 엔티티 매핑

엔티티 매핑 미리 설계한 요구사항에 맞게 객체를 설계하고, 관계형 데이터베이스를 설계했다면 우리는 이 둘을 매핑시켜줘야 한다. 하지만 JPA의 특성 덕분에 우리는 객체 위주로 설계하고 이를 매핑시켜주면 된다. 조건에 맞게 엔티티를 매핑시켜주기 위해서는 어떤 개념들이 필요할까 엔티티와 테이블 매핑 @Entity ? @Entity 어노테이션이 붙은 클래스는 애플리케이션 실행 시 자동으로 JPA 가 관리하고 이를 엔티티라 부른다. 즉 JPA 를 사용해서 테이블과 매핑될 클래스는 반드시 선언 전 @Entity 어노테이션이 필수이다. 이 때 엔티티 이름을 지정할 수 있는데, @Entity(name = " ") 옵션을 주면 된다. 없다면 클래스 이름을 기본값으로 사용한다. @Table ? @Table 어노테이션은 ..

개인 공부/Spring

[Spring] #6 스프링 빈 등록

6장에서는 스프링 빈이 무엇인지, 어떻게 등록하는지 알아보겠습니다. 공부 자료는 인프런 김영한 강사님의 스프링 입문편을 들었습니다. https://inf.run/Jk5T 스프링 빈이란 ? 스프링 빈이란, 스프링 컨테이너가 관리하는 자바 객체입니다. 코드에서 new() 키워드를 통해 다양한 객체를 만들어 낼 수 있지만, 이 모든 객체가 스프링 컨테이너가 관리하지 않기 때문에 모든 객체가 스프링 빈은 아닙니다. 사용할 객체를 스프링 빈으로 등록해야지 관리하기 용이하고 편리하기 때문에 빈에 대해 이해하고, 활용하는 것이 매우 중요합니다. 스프링 빈을 등록하는 방법은 2가지가 있습니다. 스프링 빈을 등록하는 2가지 방법과 각각의 장단점에 대해서 알아보겠습니다. 컴포넌트 스캔 활용 첫 번째로 컴포넌트 스캔을 활용..

Da2isy
'Spring' 태그의 글 목록