Spring

·Spring/Spring Boot
0. 참고자료https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술| 김영한 - 인프런 강의현재 평점 5.0점 수강생 29,838명인 강의를 만나보세요. 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고,www.inflearn.com 1. Front Controller 도입 배경여러 서블릿이 있고, 각 서블릿마다 공통 로직(인증 체크, 권한 확인, 로깅, 인코딩 설정 등)이 필요한 상황이었습니다. 문제점:서로 다른 서블릿이 호출될 때마다 공통 로직도 중복 실행같은 코드가 모든 서블릿에 반복적으로 작성됨공통..
·Spring/Spring Boot
2025.11.24 - [Spring/Spring Boot] - [Spring Boot] Front Controller 패턴이란? [Spring Boot] Front Controller 패턴이란?0. 참고자료https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술| 김영한 - 인프런 강의현재 평점 5.0점 수강생 29,838명인 강의를 만나보세요. 웹 애플리케이aibigdata-study.tistory.com 위 내용이 다음 내용 중에 나오니 참고하길 바란다.참고로 다음 자료는 김영한 - spring MVC1 강의에서 가져온 것이다. 1. Spring Boot 란?Spring Boot = 내장..
·Spring/Spring Boot
0. 참고자료https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술| 김영한 - 인프런 강의현재 평점 5.0점 수강생 29,838명인 강의를 만나보세요. 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고,www.inflearn.com 1. 서블릿 탄생배경 서버에도 http 요청을 받아 반환하는 과정이 매우 복잡실제 서비스 로직을 실행하기 위한 부분은 초록색 상자에 한함 이 복잡한 과정을 제거하고 개발자가 핵심 비즈니스 로직을 실행시켜 주도록 해주는 게 서블릿 2. 서블릿 동작방식 (1). 요청 수신웹..
·Spring/Spring Boot
1. 서론코딩을 조금이라도 해본 사람은 '객체지향' 이라는 단어를 들어보았을 것이다. 특히 Java는 객체지향 언어의 대표주자로 불리고 있는, 객체지향이 무엇이고 객체지향과 Spring의 관계, 그중에서도 객체지향의 핵심인 다형성에 대해 깊이 있게 알아보려고 한다. 대부분 Spring을 사용하는 개발자들은 이에 왜 Spring을 왜 사용해야 하는지 고민해본 적이 많이 없을 것 같은데 이 글을 읽고 한 번쯤 그 이유를 알아가보면 좋을 것 같다.  2. 객체지향이란?객체지향은 말 그대로 '객체'를 중심으로 프로그램을 설계하고 구현하는 방식이다. 여기서 객체란 실제 세계의 물체나 개념을 프로그래밍적으로 표현한 것을 말하는데, 객체지향엔 다양한 특징들이 있다. 객체지향의 특징을 자세히 살펴보면:캡슐화: 데이터와..
출처 : https://www.youtube.com/watch?v=QWjl49py7PM&t=2s 이 글은 위 유튜브 강의를 시청하고 내가 이해한대로 작성한 글임을 알려드립니다. 소셜 로그인은 크게 3개의 단계로 구분할 수 있다. code 받기 access_token 받기3access_token 받고 사용자 정보 받기이 단계를 중심으로 소셜로그인의 구현 원리에 대해서 최대한 이해하기 쉽게 설명해 보겠다.   1. Code 받기  홈쇼핑을 운영한다고 가정하자네이버 로그인을 위해 네이버 마크를 누르게 되면(이 때 마크의 url 주소는 쇼핑몰의 로그인 페이지, 예: http://127.0.0.1:3000/oauth2/authorizaton/naver) 네이버 로그인 페이지로 리다이렉트됩니다. 이 때 쇼핑몰의 c..
#registrationspring.security.oauth2.client.registration.서비스명.client-name=서비스명spring.security.oauth2.client.registration.서비스명.client-id=서비스에서 발급 받은 아이디spring.security.oauth2.client.registration.서비스명.client-secret=서비스에서 발급 받은 비밀번호spring.security.oauth2.client.registration.서비스명.redirect-uri=서비스에 등록한 우리쪽 로그인 성공 URIspring.security.oauth2.client.registration.서비스명.authorization-grant-type=authorization..
내용 출처 : 개발자 유미(유튜브)자료 출처 : https://www.devyummi.com/page?id=66934f448a005e7d8f32213a OAuth2 Code Grant 방식의 동작 순서로그인 페이지성공 후 코드 발급 (redirect_url)코드를 통해 Access 토큰 요청Access 토큰 발급 완료Access 토큰을 통해 유저 정보 요청유저 정보 획득 완료 1. 로그인 페이지사용자가 서비스에 접근하면 로그인 페이지로 리다이렉트됩니다. 이 페이지는 보통 OAuth 제공자(예: Google, Facebook 등)가 호스팅합니다. 2. 성공 후 코드 발급 (redirect_url)사용자가 성공적으로 로그인하면, OAuth 제공자는 미리 지정된 redirect_url로 사용자를 리다이렉트시킵..
1. Spring Data JPA Auditing Spring Data JPA Auditing은 엔티티의 생성, 수정 시간, 생성자, 수정자 등의 정보를 자동으로 관리해주는 기능입니다.이를 통해 데이터의 생성 및 변경 이력을 쉽게 추적할 수 있습니다.  2. Auditing의 주요 정보:생성 시간 (createdDate)수정 시간 (lastModifiedDate)생성자 (createdBy)수정자 (lastModifiedBy)3. Auditing 설정 방법step1매인 어플리케이션에 @EnableJpaAuditing 설정@EnableJpaAuditing@SpringBootApplicationpublic class DataJpaApplication { public static void main(Stri..
출처 : 개발자 유미(유튜브) github : https://github.com/mmingoo/Spring-Security-JWT- https://ko.wikipedia.org/wiki/%EA%B5%90%EC%B0%A8_%EC%B6%9C%EC%B2%98_%EB%A6%AC%EC%86%8C%EC%8A%A4_%EA%B3%B5%EC%9C%A0 교차 출처 리소스 공유 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전. 교차 출처 리소스 공유(Cross-origin resource sharing, CORS), 교차 출처 자원 공유는 웹 페이지 상의 제한된 리소스를 최초 자원이 서비스된 도메인 밖의 다른 도메인으ko.wikipedia.org CORS란 프론트엔드와 백엔드가 다른 포트에서 실행되는 상황..
main 홈페이지가 있고 admin 홈페이지가 있다고 가정하자.admin 홈페이지에 접근하기 위해선 관리자 역할이 필요한데,현재 내가 가지고 있는 역할이 admin인지 아닌지 검증하는 필터가 필요하다.  1. 커스텀 JWT 필터 등록:Spring Security의 필터 체인에 사용자 정의 필터를 추가합니다. 이 필터는 일반적으로 OncePerRequestFilter를 상속받아 구현합니다. SecurityConfig 클래스에서 이 필터를 등록합니다.2. JWT 검증 과정:필터는 모든 요청에 대해 실행됩니다. HTTP 요청 헤더에서 "Authorization" 키를 확인합니다. "Authorization" 헤더가 "Bearer "로 시작하는 JWT 토큰을 포함하고 있는지 확인합니다. 3. SecurityCo..
출처 : 개발자 유미(유튜) 이번 글에선 여태까지 작성해준 코드에 jwt를 주입하고 로그인 검증 성공 시 메서드만 작성하면 되는 것이기 때문에 제 깃허브 코드를 확인하시면 됩니다. 코드 : https://github.com/mmingoo/Spring-Security-JWT-  1. JWTUtil 주입 LoginFilter : JWTUtil 주입 package com.example.jpamysql.jwt;import com.example.jpamysql.dto.CustomUserDetails;import jakarta.servlet.FilterChain;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServle..
출처: 개발자 유미(유튜브) 1. JWT 발급과 검증발급검증로그인에 성공한다면 jwt가 발급된다반면에 특정한 기능이나 접근엔 jwt가 유효한 지 검증하는 단계가 필요하다. 2. JWT 생성 원리다음 사진은 JWT를 나타내는 문장이다. JWT는 Header, Payload, Signature로 구성돼있다. jwt임을 알려주는 역할을 한다또한 인코딩 될 때 사용한 암호화 알고리즘을 알려준 사용자가 입력한 정보(username, password)를 담고 있다. Haeder와 Payload를 Base64방식으로 인코딩 시키고 암호화키를 합쳐서  암호화시킨 알고리즘을 뜻한다암호화된 알고리즘 : BASE64(Header) + BASE64(Payload) + 암호화3. 특징jwt는 내부 정보를 단순 BASE64 방식..
출처 : 개발자 유미(유튜브)       CustomUserService에서 loadUserByUsername정의 (username으로 repsitory를 통해 DB에서 User의 정보를 가져옴 )만약에 User의 정보가 존한다면 UserDetails에 User의 정보를 담아서 Authentication Manager에 전달 후 검증 즉 한 마디로,Spring Security를 사용하여 회원가입 시 JoinService의 joinProcess 메서드를 통해 사용자 정보를 BCrypt로 암호화하여UserRepository에 저장하고로그인 시 LoginFilter의 attemptAuthentication 메서드에서 Authentication Manager 에 user의 정보를 전달 후loadUserByUse..
출처 : 개발자 유미(유튜브) UsernamePasswordAuthentication 가 longin dto에서 username과 pawsswor를 가져온 후에 Authentication Manager에 넘겨줌Authentication Manager가 DB에서 username과 pawssword를 가져와 검증을 진행하고검증이 성공적으로 끝나면 successfulAuth 가 동작이 되면 jwt를 생성해서 사용자에게 응답해줌 클라이언트의 요청(로그인 요청)이 오면DispatcherServlet(Spring Boot Controller)으로 향하는 중간 필터에서 요청을 가로챈 후Spring Security는  검증(인증/인가)을 진행한다. (헷갈리다면 다음 사진을 참고하자) DelegatingFilter Pr..
출처 : 개발자 유미(유튜브) 전체코드package com.example.springjwt.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;import org.springframework.security.config.http.SessionCrea..
Spring Data JPA 에선 Repository 인터페이스만 구현한다면 메서드는 스프링이 구현체를 만들어 주기 때문에 구체화할 필요가 없다. 하지만 다음의 경우 Spring Data JPA가 제공하지 않는 메서드를 구현해야 할 경우가 존재한데, 이 경우엔 어떻게 해야할까??JPA 직접 사용( EntityManager )스프링 JDBC Template 사용MyBatis 사용데이터베이스 커넥션 직접 사용Querydsl 사용 해답은별도의 인터페이스와 Repository를 만들어 인터페이스에 필요한 메서드를 선언하고, Repository에 메서드를 구현하면 된다.  인터페이스에 구현하고자 하는 메서드를 선언한다.public interface MemberRepositoryCustom { List findM..
연관관계 있는 엔터티를 조회하게 될 경우 fetch = FetchType.LAZY 처럼 LAZY로 지연로딩 설정이 되어있을 때 , 해당 엔터티(Member)만 조회하고 연관관계 있는 엔터티(Team)를 조하지 않게 된다.  이 때 Team에 대한 정보가 필요하게 될 때 Team에 대한 정보를 조회해야 하는데, 이런 상황에서 실행시킨 쿼리 외(실행시킨 쿼리는 Member에 대한 쿼리)에도 쿼리가 추가로 나가기 때문에 n+1 문제가 발생한다.   좀 더 쉽게 말해서, Member 쿼리 실행 시 연관관계 있는 Team의 경우  select 되지 않고 proxy 객체를 만들어 가상의 엔티티를 반환한다. 그 후 해당 프시 객체를 호출할 때마다 그때그때 select 쿼리가 실행된다. @EntityGraph는  Da..
Spring data jpa 리포지토리에 구현 클래스 없이 인터페이스 만으로 개 발을 완료할 수 있습니다. 그리고 반복 개발해온 기본 CRUD 기능도 스프링 데이터 JPA가 모두 제공합니다. 순서 인터페이스를 만든다 인터페이스가 인터페이스를 상속한다 SpringDataJpaMemberRepository 가 (JpaRepository, MemberRepository)를 상속 SpringDataJpaMemberRepository가 JpaRepository 를 상속하게 되면 스프링 데이터 jpa 가 (JpaRepository를 import 하는 것을 볼 수 있음 > 이는 스프링에서 제공해 주는 기술로 인터페이스를 구현하여 스프링 빈에 등록하는 기술을 제공 ) 4. SpringDataJpaMemberReposi..
핵심 Jpa Sql은 결국 개발자가 작성해야 하는데 Jpa 를 사용하면 sql 쿼리도 jpa가 자동으로 처리해줌 > 개발 생산성 향상 객체를 메모리에 넣듯이 jpa 넣으면 Jpa가 중간에서 유에 sql을 날리고 db를 통해 가져오고 하는 건 jpa 가 더 처리를 해줌 sql과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임 전환이 가능
·Spring/Spring Boot
통합테스트 최종적인 테스트 DB와 연동하여 테스트 진행 @SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행한다. @Transactional : 테스트 케이스에 이 애노테이션이 있으면, 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백한다. 이렇게 하면 DB에 데이터가 남지 않으므로 다음 테스트에 영향을 주지 않는다. package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemberRepository; import hello.hellospring.repository.MemoryMemberRepository; import org...
·Spring/Spring Boot
원리 1. 회원가입에 들어가면 >/members/new로 전달이 되고 2. 그럼 creatForm은 아무런 역할도 하지 않고 템플릿에 있는 members/createMemberForm 을 불러옴 (주소는 members/new 이지만 내용은 members/createMemberForm ) 3. Imput 칸 안에 값이 입력되면 name = “name”이 키 값이 됨 4.등록버튼을 누르면 /members/new 에 post 방식으로 넘어감 5.그럼 MemberController 에 @PostMapping(“/members/new”) 로 input 내용이 넘어감 6.그럼 post 밑에 있는 메서드 create 실행 / 이 때 create 메서드에 인자로 받는 MemberForm에 input 값이 name으로 ..
·Spring/Spring Boot
SpringConfiguration @Configuration 애노테이션 추가 MemberService를 스프링 빈으로 등록하기 위해 @Bean 등록 이 때 MemberService 는 memberRepository 를 인자로 받기 때문에 memberRepository도 스프링 빈으로 연결해줘야 함 위와 같이 스프링 빈으로 등록하게 되면 다음과 같은 의존관계 성립 Controller 를 따로 Cofiguration 파일에 스프링 빈으로 등록하지 않는 이유는 스프링 컨테이너에서 직접관리하기 때문에 별도로 작성하지 않아도 된다. 참고사항 Dependency Injection에 3가지 방법이 있는데 1. 생성자를 통해서 들어오는 방법 > 이 방법으로 권장됨 (위와 같은 방법임. 생성자를 통해 MemberSer..
·Spring/Spring Boot
회원가입 등의 기능을 수행하고 그 결과를 html로 뿌려주는 것들을 하려고 함 그러기 위해선 MemberService 를 통해서 회원가입하고, 데이터를 조회할 수 있는 Controller를 만들어야 함 > 이것을 의존관계가 있다고 함 . MemberController가 MemberService를 의존한다고 표현 컨트롤러가 멤버 서비스를 가져다 써야함 이전엔 new 를 사용하여 사용할 수 있지만, 별 기능이 없기 때문에 여러 개 생성할 필요 없이 하나만 만들어서 공용으로 사용함 스프링이 관리하게 되면 스프링 컨테이너에 등록하고 컨테이너에 받아서 사용해야 함 >따라서 스프링 컨테이너에 등록해서 사용하면 되는 것임 1. 스프링 빈 등록하는 2가지 방식 1. 컴포턴트 스캔 2. 자동 의존 관계 설정 우리가 지금..
·Spring/Spring Boot
api 방식은 직접 입력한 데이터를 직접적으로 표현하는 방식 객체가 전달 받았을 때 json 형태로 데이터를 만들어서 http 응답에 반환하는 것이 기본 정책 기존에선 viewResponse 였지만 ResponseBody 의 경우 HttpMessageConverter 가 작동함 문자를 전달 받으면 StringConver 가 동작하여 문자를 전달해줌 객체면 JsonConverter 가 json 방식으로 바꿔줌 문자열을 입력 받는 경우 객체를 입력 받는 경우 정적 컨텐츠 : 파일을 그대로 내려준다 탬플릿 엔진 방식 : 템플릿 엔진을 모델 뷰 방식으로 쪼개서 뷰를 템플릿방식으로 프로그래밍 된 html을 고객에게 전달 api : json 방식으로 객체를 반환하는 것
·Spring/Spring Boot
컨트롤러 템플릿 구조 localhost:8080/hello-mvc 의 입력을 받으면 톰캣 서버를 통해 스프링 컨테이너에 전달 컨트롤러에서 hello-mvc의 해당하는 메서드를 실행함 HelloController를 보면 hello-mvc 는 name 을 파라미터로 받는다 (model 에 키 값과 전달받은 파라미터 값들을 매칭하는 모델 생성) 그리고 return hello-template > /templates/hello-template.html 실행한다. 파라미터 값이 전달되면 th:text 출력 실행 파라미터 값 전달하는 경우 파라미터 값을 전달하지 않는 경우
·Spring/Spring Boot
정적페이지의 경우 톰캣 서버에 localhost:8080/hello-static.htrml 을 넘겨줌 우선적으로 스프링 컨테이너에 전달해줌 > 근데 hello-statifc.html이 없음 스프링 컨테이너에 없으면 resorce에 가서 static/hello-static.html을 실행시킴
·Spring/Spring Boot
static/index.html Controller controller 패키지를 만들고 그 폴더 안에 HelloController 클래스를 만든다 위 메서드를 실행하게 되면 키워드가 :"data" 고 value 가 "hello!!" 인 model 이 생성이 되는 것 여기서 return hello 는 템플릿의 hello.html 의 hello를 가리키는 것임. 즉 매핑이 되는 것임 templates/hello.html 논리적인 작동원리 hello 버튼을 클릭하면 hello 의 액션값이 전달 되고 톰캣 서버를 통해 스프링 컨테이너의 helloController 실행 helloController에서의 @GetMapping("hello") 를 실행시킴 @GetMapping("hello") 를 실행시키면 mode..
나이많은밍구
'Spring' 카테고리의 글 목록