백엔드

·백엔드/Spring
안녕하세요. 이름을 바꿨습니다. 이제 미더덕이예요. 토이프로젝트에 적용해두었던 Lucy-XSS-Servlet-Filter가 Jakarta패키지를 지원하지 않음에 따라 XSS 방지 기능을 리팩토링하는 시간을 갖게 되었습니다. 이번 기간에 제가 부족한 부분을 많이 느껴 경험했던 이슈를 기초부터 자세히 정리하고 넘어가고자 합니다. 사실 이번 게시글은 XSS 방지에 대한 글이라기 보단 XSS 방지를 해결하기 위해 알아야할 선수 지식들에 대한 정리입니다. [이번 주제에서 다룰 내용들]1.  HTTP - Method & Content-Type2. Spring Web Annotations3. HttpServletRequestWrapper 4. HttpMessageConverter  이번 게시글에선 가장 기초가 되는 ..
·백엔드/Spring
https://www.yes24.com/Product/Goods/126845564이번 시간에는 자바/스프링 개발자를 위한 실용주의 프로그래밍 4장 - SOLID를 읽고 정리해보겠습니다.   SOLID 원칙의 목적 - 응집도를 높이고 의존성을 낮춘다. 본론에 들어가기에 앞서, 가장 먼저 책에서 말하고자하는 SOLID의 원칙의 목적은 무엇일까? SOLID 원칙이 추구하는 것은 바로 "객체지향의 설계".그리고 설계 원칙을 통하여 소프트웨어의 응집도를 높이고 의존성을 낮추는 것을 목표로 함. SOILD 원칙을 무작정 암기하는 것보다 "응집도를 높이고 의존성을 낮추는 것에 집중"하는 것이 좋다.   유지보수성을 판단하는 세 가지 맥락 - 영향 범위, 의존성, 확장성설계 관점에서 코드의 유지보수성을 판단하는 세 ..
·백엔드/Spring
안녕하세요. 이번 게시물에선 자바/스프링 개발자를 위한 실용주의 프로그래밍 3장 - 행동을 읽고 정리해보겠습니다.또한 객체지향사상에 부합하지 않는 java interface의 default 메서드에 대한 고찰도 짤막하게 해보았습니다.  데이터 위주 사고 방식 VS 행동 위주 사고 방식public class Car { //데이터 위주의 사고 방식 private Frame frame; private Engine engine; List wheels; private float speed; private float direction;}public class Car { //행동 위주의 사고 방식 public void drive(){} public void changeDirect..
·백엔드/Spring
안녕하세요. 이번 게시글에선 자바/스프링 실용주의 프로그래밍 2부 - 객체의 종류를 읽고 정리해보았습니다. 또한 현재 개인 프로젝트로 DTO로 Record로 사용하는 것이 어떤 의의가 있는지도 알아보겠습니다. 2부 객체의 종류 VO - 값 객체값 객체 예시 코드 (엄밀히 말해서 Color 클래스는 객체가 아님. 해당 클래스로 만들어진 객체가 VO)public class Color { public final int r; public final int g; public final int b; public Class(int r, int g, int b) { //.. 검증 로직 this.r = r; this.g = g; this.b = b; } @Override public boolean equals(Objec..
·백엔드/Spring
안녕하세요. 이번 시간에는 자바/스프링 실용주의 프로그래밍 책을 읽고 정리해보고제 생각을 공유하는 게시글을 작성해보겠습니다.  1부 객체지향  객체지향에서는 복잡한 문제를 역할과 책임에 따라 '개별 객체'로 분해합니다.분해된 각기 다른 특성과 기능의 객체들이 상호작용하고 협력해 문제를 해결합니다.  01 절차지향과 비교하기 컴퓨터 공학에서 말하는 Procedure는 '함수'를 가리킵니다. (순차지향 = 어셈블리어, 절차지향 = C언어)따라서 절차지향 프로그래밍은 함수 지향 프로그래밍. 아래는 자바를 사용하지만 함수 위주의 프로그래밍으로 코딩한 절차지향 코드의 예시. @Service@RequiredArgsConstructorpublic class RestaurantChainService { priva..
·백엔드/Spring
안녕하세요! 이번 게시글에선 일반적인 애플리케이션에서 Http 응답에 대한 방식을 어떻게 설정할지에 대해 알아보겠습니다. 스프링 프로젝트인 경우 보통 @ResponseBody 어노테이션, ResponseEntity 클래스, 커스텀 응답 클래스를 사용하는데요. 각각에 대해 설명해보겠습니다. @ResponseBody - HTTP 규격에 body만 지정할 수 있다. 스프링에서 제공해주는 @ResponseBody 어노테이션입니다. HTTP 규격에 맞춰 컨트롤러의 리턴 값을 Boby에 담아주는 역할을 합니다. 특히 API 서버로 구성된 프로젝트인 경우 컨트롤러에 @RestController 어노테이션을 설정하는 경우가 대부분인데 @RestController 에 @ResponseBody가 부착되어 있으므로 해당 경..
안녕하세요. 이번 게시글에선 기존 세션 기반 인증에서 jwt 토큰 인증으로 변환하는 방법을 작성해보겠습니다. 초기 목표는 기존 스프링 시큐리티 디폴트 구조를 크게 벗어나지 않고 약간의 설정 변경정도로 jwt를 구현하는 것이었습니다. jwt를 프로젝트를 적용하기 위해선 다음과 같은 목표가 필요합니다.  1. 로그인 (로그인 인증)- username, password를 DB검증 후 토큰을 생성하여 반환해야합니다.- 리프레시 토큰 정보는 DB에 저장합니다. 2. 토큰 검증 (토큰 인증 및 인가)- 전달받은 토큰을 인증 및 파싱하여 principal을 가져온 후 (username) 해당 정보로 DB에서 권한을 조회하여 인가합니다.- 리프레시 토큰이 만료되지 않았다면 리프레시 토큰을 갱신하여 DB에 저장합니다. ..
이번 게시글에선 저번에 분석한 스프링 시큐리티를 바탕으로 커스텀 구현을 해보겠습니다. 목표는 기존 폼 형식 로그인 방식을 Jwt 로그인 방식으로 변경하는 것입니다.  저번에 분석했던 스프링 시큐리티의 폼 로그인 흐름을 간략히  정리해볼까요?  UsernamePasswordAuthenticationFilter폼 요청으로 미인증된 Authentication 생성, AuthenticationManager에 미인증 Authentication 전달 AuthenticationManager - ProviderManager AuthenticationProvider에 미인증 Authentication 전달 AuthenticationProvider - DaoAuthenticationProviderUserDetailsSer..
스프링 시큐리티에서 json 형식으로 로그인 하는 것을 구현해보려고 합니다. 그러기 위해서 먼저 스프링 시큐리티에서 제공하는 기본 형식인 폼 로그인(formLogin) 방식에 대해 먼저 분석해보고, 해당 구조를 커스텀해보겠습니다. 스프링 시큐리티가 구성된 프로젝트는 기본적으로 폼 로그인이 적용됩니다. 또한 개발자가 서블릿 기반 시큐리티 설정을 추가하게 되면 아래와 같이 폼 로그인을 별로도 설정할 수 있습니다. @Configuration@EnableWebSecuritypublic class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { ..
·백엔드/Java
이번 게시글에선 동시성 요청에 대한 이슈처리를 하기 위한 방법으로 '락'(lock) 에 대해서 알아보겠습니다.일반적으로 '락'을 분류할 때 큰 범주로 비관적 락과 낙관적 락으로 분류합니다.각각의 락에 대해 정리해보겠습니다.  비관적 락비관적 락은 충돌이 잦은 환경에서 주로 사용하는 락이라는 관점에서 '비관적'이라는 명칭이 붙었습니다.공유 자원에 락을 걸고 진행비관적 락은 데이터베이스 환경에서의 락입니다.비관적 락은 충돌이 발생할 것을 예상하고 작업을 진행하기 때문에시작부터 데이터베이스의 '공유락', '배타락'을 사용하여 작업을 순차진행 시킵니다. 공유락과 배타락에 대해선 저번 게시글에서 정리해보았었습니다.비관적 락은 공유락과 배타락은 락을 걸고 진행하기 때문에성능 오버헤드 이슈가 있고  또한 데드락의 위..
꾸준함의 미더덕
'백엔드' 카테고리의 글 목록